From 74b36c6c5c48c52a45f85e4dc045059eb503d10b Mon Sep 17 00:00:00 2001
From: weru <fromweru@gmail.com>
Date: Tue, 21 Feb 2023 21:53:10 +0000
Subject: [PATCH] ship default github actions

---
 exampleSite/.github/workflows/agolia-update.yaml   |   99 +++++++++++++++++++
 exampleSite/.github/workflows/aws-deploy.yaml      |  117 +++++++++++++++++++++++
 exampleSite/content/docs/compose/github-actions.md |   25 +++++
 3 files changed, 241 insertions(+), 0 deletions(-)

diff --git a/exampleSite/.github/workflows/agolia-update.yaml b/exampleSite/.github/workflows/agolia-update.yaml
new file mode 100644
index 0000000..1e09f57
--- /dev/null
+++ b/exampleSite/.github/workflows/agolia-update.yaml
@@ -0,0 +1,99 @@
+name: Update Algolia Search Index
+
+off: # change to `on:` to turn on
+  workflow_dispatch:
+    branches:
+    - production
+  push:
+    paths:
+      - content/**/*
+      - config.toml
+
+env:
+  # Name of the branch in your repository which will store your generated site.
+  SITE-BRANCH: master
+
+jobs:
+  build:
+  # In this phase, the code is pulled from main and the site rendered in Hugo. The built site is stored as an artifact for other stages. # deploy:
+    runs-on: ubuntu-20.04
+    concurrency:
+      group: ${{ github.workflow }}-${{ github.ref }}
+    steps:
+    - uses: actions/checkout@v3
+      with:
+        submodules: true  # Fetch Hugo themes (true OR recursive)
+        fetch-depth: 0    # Fetch all history for .GitInfo and .Lastmod
+
+    - name: Setup Hugo
+      uses: peaceiris/actions-hugo@v2
+      with:
+        hugo-version: 'latest'
+        extended: true
+
+    - name: Build
+      run: hugo -e "production" -d "dist" --minify
+    # If build succeeds, store the dist/ dir as an artifact to be used in subsequent phases.
+    - name: Upload output dist dir as artifact
+      uses: actions/upload-artifact@v1
+      with:
+        name: dist
+        path: dist/
+  publish:
+  # In the publish phase, the site is pushed up to a different branch which only stores the dist/ folder ("site" branch) and is also delta synchronized to the S3 bucket. CloudFront invalidation happens last.
+    runs-on: ubuntu-20.04
+    needs: build
+    steps:
+    # Check out the site branch this time since we have to ultimately commit those changes there.
+    - name: Checkout site branch
+      uses: actions/checkout@v3
+      with:
+        submodules: true
+        fetch-depth: 0
+        ref: ${{ env.SITE-BRANCH }}
+    # Download the artifact containing the newly built site. This overwrites the dist/ dir from the check out above.
+    - name: Download artifact from build stage
+      uses: actions/download-artifact@v1
+      with:
+        name: dist
+    # Add all the files/changes in dist/ that were pulled down from the build stage and then commit them.
+    # The final line sets a GitHub Action output value that can be read by other steps.
+    # This function cannot store mult-line values so newline chars must be stripped.
+    - name: Commit files
+      id: can_commit
+      run: |
+        git config --local user.email "action@github.com"
+        git config --local user.name "GitHub Action"
+        git add -A dist/
+        commit_message=$(git commit -m "Publish generated Hugo site." -a | tr -d '\n' || true)
+        echo "commit_message=$commxit_message >> $GITHUB_OUTPUT"
+    # Checks if previous stage had any valid commit.
+    - name: Nothing to commit
+      id: nothing_committed
+      if: contains(steps.can_commit.outputs.commit_message, 'nothing to commit')
+      run: echo "Saw that no changes were made to Hugo site."
+    # Push those changes back to the site branch.
+    - name: Push to site branch
+      if: steps.nothing_committed.conclusion == 'skipped'
+      uses: ad-m/github-push-action@master
+      with:
+        github_token: ${{ secrets.GITHUB_TOKEN }}
+        branch: ${{ env.SITE-BRANCH }}
+  index:
+    runs-on: ubuntu-latest
+    needs: publish
+    name: Upload Algolia Index
+    steps:
+    - uses: actions/checkout@v2
+      with:
+        fetch-depth: 0
+    - uses: wangchucheng/algolia-uploader@master
+      with:
+        # Such as `Z0U0ACGBN8`
+        app_id: ${{ secrets.AGOLIA_INDEX_ID }}
+        # Go to https://github.com/dimi365/website/settings/secrets/actions and set an AGOLIA_ADMIN_KEY secret key
+        admin_key: ${{ secrets.AGOLIA_ADMIN_KEY }}
+        # The index name.
+        index_name: dimi_site
+        # The index file path relative to repo root. no leading forward slash
+        index_file_path: dist/index.json
\ No newline at end of file
diff --git a/exampleSite/.github/workflows/aws-deploy.yaml b/exampleSite/.github/workflows/aws-deploy.yaml
new file mode 100644
index 0000000..a82c110
--- /dev/null
+++ b/exampleSite/.github/workflows/aws-deploy.yaml
@@ -0,0 +1,117 @@
+# PREREQUISITES:
+# The following secrets must be stored in your repository where this Action runs:
+# AWS_ACCESS_KEY_ID
+# AWS_CLOUDFRONT_DISTRO_ID
+# AWS_S3_BUCKET_NAME
+# AWS_SECRET_ACCESS_KEY
+
+name: CI
+off: # change to `on:` to turn on
+  workflow_dispatch:
+    branches:
+    - production
+  push:
+    paths:
+      - config.toml
+  # pull_request:
+  #   branches:
+  #   - production
+env:
+  # Default AWS region where S3 pushes and CloudFront invalidations will occur.
+  AWS-DEFAULT-REGION: us-east-2
+  # Name of the branch in your repository which will store your generated site.
+  SITE-BRANCH: site
+
+jobs:
+  build:
+  # In this phase, the code is pulled from main and the site rendered in Hugo. The built site is stored as an artifact for other stages. # deploy:
+    runs-on: ubuntu-20.04
+    concurrency:
+      group: ${{ github.workflow }}-${{ github.ref }}
+    steps:
+    - uses: actions/checkout@v3
+      with:
+        submodules: true  # Fetch Hugo themes (true OR recursive)
+        fetch-depth: 0    # Fetch all history for .GitInfo and .Lastmod
+
+    - name: Setup Hugo
+      uses: peaceiris/actions-hugo@v2
+      with:
+        hugo-version: 'latest'
+        extended: true
+
+    - name: Build
+      run: hugo -e "production" --minify
+    # If build succeeds, store the public/ dir as an artifact to be used in subsequent phases.
+    - name: Upload output public dir as artifact
+      uses: actions/upload-artifact@v1
+      with:
+        name: public
+        path: public/
+  publish:
+  # In the publish phase, the site is pushed up to a different branch which only stores the public/ folder ("site" branch) and is also delta synchronized to the S3 bucket. CloudFront invalidation happens last.
+    runs-on: ubuntu-20.04
+    needs: build
+    steps:
+    # Check out the site branch this time since we have to ultimately commit those changes there.
+    - name: Checkout site branch
+      uses: actions/checkout@v3
+      with:
+        submodules: true
+        fetch-depth: 0
+        ref: ${{ env.SITE-BRANCH }}
+    # Download the artifact containing the newly built site. This overwrites the public/ dir from the check out above.
+    - name: Download artifact from build stage
+      uses: actions/download-artifact@v1
+      with:
+        name: public
+    # Add all the files/changes in public/ that were pulled down from the build stage and then commit them.
+    # The final line sets a GitHub Action output value that can be read by other steps.
+    # This function cannot store mult-line values so newline chars must be stripped.
+    - name: Commit files
+      id: can_commit
+      run: |
+        git config --local user.email "action@github.com"
+        git config --local user.name "GitHub Action"
+        git add -A public/
+        commit_message=$(git commit -m "Publish generated Hugo site." -a | tr -d '\n' || true)
+        echo "commit_message=$commit_message >> $GITHUB_OUTPUT"
+    # Checks if previous stage had any valid commit.
+    - name: Nothing to commit
+      id: nothing_committed
+      if: contains(steps.can_commit.outputs.commit_message, 'nothing to commit')
+      run: echo "Saw that no changes were made to Hugo site."
+    # Push those changes back to the site branch.
+    - name: Push to site branch
+      if: steps.nothing_committed.conclusion == 'skipped'
+      uses: ad-m/github-push-action@master
+      with:
+        github_token: ${{ secrets.GITHUB_TOKEN }}
+        branch: ${{ env.SITE-BRANCH }}
+    # Store the AWS credentials on the runner.
+    - name: Configure AWS credentials
+      if: steps.nothing_committed.conclusion == 'skipped'
+      uses: aws-actions/configure-aws-credentials@v1-node16
+      with:
+        aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
+        aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
+        aws-region: ${{ env.AWS-DEFAULT-REGION }}
+    - name: Delta sync site to S3 with aws cli
+      if: steps.nothing_committed.conclusion == 'skipped'
+      run: aws s3 sync --size-only --delete --exclude "/authors/*/page/*" --cache-control max-age=2592000 public/ s3://${{ secrets.AWS_S3_BUCKET_NAME }}
+    # Use s5cmd to perform only a delta sync to the destination S3 bucket. This minimizes transfer traffic since it only uploads changed files.
+    # - name: Delta sync site to S3 bucket
+    #   if: steps.nothing_committed.conclusion == 'skipped'
+    #   run: |
+    #     curl -sLO https://github.com/peak/s5cmd/releases/download/v1.0.0/s5cmd_1.0.0_Linux-64bit.tar.gz
+    #     tar -xzf s5cmd_1.0.0_Linux-64bit.tar.gz
+    #     chmod +x s5cmd
+    #     sudo mv s5cmd /usr/local/bin/
+    #     echo "****Showing working dir and listing files.****"
+    #     pwd && ls -lah
+    #     echo "****Running delta sync against S3.****"
+    #     s5cmd cp -s -n -u public/ s3://${{ secrets.AWS_S3_BUCKET_NAME }}
+    # Use the aws cli tool to perform a glob invalidation of the entire site against CloudFront.
+    - name: Invalidate cache on CloudFront
+      if: steps.nothing_committed.conclusion == 'skipped'
+      run: aws cloudfront create-invalidation --distribution-id ${{ secrets.AWS_CLOUDFRONT_DISTRO_ID }} --paths "/*"
\ No newline at end of file
diff --git a/exampleSite/content/docs/compose/github-actions.md b/exampleSite/content/docs/compose/github-actions.md
new file mode 100644
index 0000000..f3cb074
--- /dev/null
+++ b/exampleSite/content/docs/compose/github-actions.md
@@ -0,0 +1,25 @@
++++
+description = "Use github actions with compose theme"
+title = "Leverage Github actions to publish with compose theme"
+weight = 11
++++
+
+This theme ships with 2 github actions inside the exampleSite folder:
+
+1. AWS CI
+
+    This helps you to autodeploy your hugo website from github to an AWS s3 bucket. Set the secrets in the action accordingly and voila.
+
+2. Algolia CI
+
+    When [algolia search integration](https://github.com/onweru/compose/issues/98) is rolls out (soon), this action will automatically update your algolia search index. No extra npm manual setup will be needed.
+
+These actions are customizable to fire off under your specified set of circumstances.
+
+By default, the actions will be off, so be sure to turn them on
+
+```shell
+name: Update Algolia Search Index
+
+off: # change to `on:` to turn on
+```
\ No newline at end of file

--
Gitblit v1.10.0