diff --git a/.github/workflows/deploy-hugo-site.yml b/.github/workflows/deploy-production.yml similarity index 92% rename from .github/workflows/deploy-hugo-site.yml rename to .github/workflows/deploy-production.yml index 4269d9e9..ad160aa8 100644 --- a/.github/workflows/deploy-hugo-site.yml +++ b/.github/workflows/deploy-production.yml @@ -1,4 +1,4 @@ -name: Deploy Hugo site +name: Deploy production on: # Run on pushes to the default branch @@ -8,10 +8,9 @@ on: # Allow manual runs from the Actions tab workflow_dispatch: -# Set permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages +# Set permissions of the GITHUB_TOKEN permissions: contents: read - pages: write id-token: write # Allow only one concurrent deployment @@ -68,7 +67,7 @@ jobs: runs-on: ubuntu-latest steps: - - name: Invalidate cloudfront cache + - name: Invalidate CloudFront cache uses: chetan/invalidate-cloudfront-action@v2 env: PATHS: "/*" diff --git a/.github/workflows/pr-build-preview.yml b/.github/workflows/pr-build-preview.yml new file mode 100644 index 00000000..9c634227 --- /dev/null +++ b/.github/workflows/pr-build-preview.yml @@ -0,0 +1,54 @@ +name: Build preview for PR + +on: + pull_request: + types: [opened, synchronize, reopened] + +permissions: + contents: read + +env: + HUGO_BASEURL: "https://preview-developer.espressif.com/pr${{ github.event.pull_request.number }}/" + +jobs: + build-preview: + runs-on: ubuntu-latest + + steps: + - name: Install Hugo CLI + env: + HUGO_VERSION: 0.135.0 + run: | + wget -O ${{ runner.temp }}/hugo.deb https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_linux-amd64.deb \ + && sudo dpkg -i ${{ runner.temp }}/hugo.deb + + - name: Check out repo + uses: actions/checkout@v4 + with: + submodules: recursive + + - name: Build website with Hugo + env: + # For maximum backward compatibility with Hugo modules + HUGO_ENVIRONMENT: preview + HUGO_ENV: preview + run: | + hugo \ + --baseURL ${{ env.HUGO_BASEURL }} \ + --gc \ + --minify + + - name: Upload artifacts + uses: actions/upload-artifact@v4 + with: + name: public-folder + path: ./public + + - name: Create PR number file + run: echo "${{ github.event.pull_request.number }}" > pr-num.txt + + - name: Upload PR number artifact + uses: actions/upload-artifact@v4 + with: + name: pr-num + path: pr-num.txt diff --git a/.github/workflows/pr-deploy-preview.yml b/.github/workflows/pr-deploy-preview.yml new file mode 100644 index 00000000..34bd9a98 --- /dev/null +++ b/.github/workflows/pr-deploy-preview.yml @@ -0,0 +1,83 @@ +name: Deploy preview for PR + +on: + workflow_run: + workflows: + - "Build preview for PR" + types: + - completed + +permissions: + contents: read + id-token: write + pull-requests: write + +concurrency: + group: ${{ github.workflow }}-${{ github.event.workflow_run.head_branch }} + cancel-in-progress: false + +env: + HUGO_BASEURL: "https://preview-developer.espressif.com/" + +jobs: + deploy-preview: + runs-on: ubuntu-latest + if: > + github.event.workflow_run.event == 'pull_request' && + github.event.workflow_run.conclusion == 'success' + + steps: + - name: Download artifacts (PR number file) + uses: actions/download-artifact@v4 + with: + name: pr-num + path: ./ + run-id: ${{ github.event.workflow_run.id }} + github-token: ${{ secrets.GITHUB_TOKEN }} + + - name: Read PR number from file + id: read-pr-num + run: | + echo "PR_NUMBER=$(cat pr-num.txt)" >> $GITHUB_ENV + echo ${{ env.PR_NUMBER }} + + - name: Download artifacts (Public folder) + uses: actions/download-artifact@v4 + with: + name: public-folder + path: ./public + run-id: ${{ github.event.workflow_run.id }} + github-token: ${{ secrets.GITHUB_TOKEN }} + + - name: Deploy to AWS S3 PR-specific subdirectory + uses: jakejarvis/s3-sync-action@master + with: + args: --follow-symlinks --delete --cache-control no-cache + env: + AWS_S3_BUCKET: ${{ secrets.PREVIEW_AWS_BUCKET_NAME }} + SOURCE_DIR: './public' + DEST_DIR: "pr${{ env.PR_NUMBER }}" + AWS_REGION: ${{ secrets.AWS_REGION }} + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + + - name: Post Preview Link to PR + uses: actions/github-script@v7 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + github.rest.issues.createComment({ + issue_number: ${{ env.PR_NUMBER }}, + owner: context.repo.owner, + repo: context.repo.repo, + body: `🎉 A preview for this PR is available at: ${{ env.HUGO_BASEURL }}pr${{ env.PR_NUMBER }}/` + }); + + - name: Invalidate CloudFront cache for PR + uses: chetan/invalidate-cloudfront-action@v2 + env: + PATHS: "/pr${{ env.PR_NUMBER }}/*" + DISTRIBUTION: ${{ secrets.PREVIEW_CLOUDFRONT_DISTRIBUTION }} + AWS_REGION: ${{ secrets.AWS_REGION }} + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} diff --git a/.github/workflows/pr-remove-preview.yml b/.github/workflows/pr-remove-preview.yml new file mode 100644 index 00000000..2b4e2f21 --- /dev/null +++ b/.github/workflows/pr-remove-preview.yml @@ -0,0 +1,31 @@ +name: Remove preview for PR + +on: + pull_request: + types: + - closed + +jobs: + remove-preview: + name: Remove preview for PR + runs-on: ubuntu-latest + + steps: + # Remove the PR-specific folder from S3 + - name: Remove PR-specific subdirectory from S3 + run: | + echo "Cleaning up preview folder for PR #${{ github.event.pull_request.number }}" + aws s3 rm "s3://${{ secrets.PREVIEW_AWS_BUCKET_NAME }}/pr${{ github.event.pull_request.number }}" --recursive + env: + AWS_REGION: ${{ secrets.AWS_REGION }} + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + + - name: Invalidate CloudFront cache for PR + uses: chetan/invalidate-cloudfront-action@v2 + env: + PATHS: "/pr-${{ github.event.pull_request.number }}/*" + DISTRIBUTION: ${{ secrets.PREVIEW_CLOUDFRONT_DISTRIBUTION }} + AWS_REGION: ${{ secrets.AWS_REGION }} + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} diff --git a/config/_default/hugo.toml b/config/_default/hugo.toml index 862a7596..9698da82 100644 --- a/config/_default/hugo.toml +++ b/config/_default/hugo.toml @@ -2,9 +2,11 @@ # Refer to the theme docs for more details about each of these parameters. # https://blowfish.page/docs/getting-started/ -theme = "blowfish" -baseURL = "https://developer.espressif.com" +baseURL = "https://preview-developer.espressif.com/" +languageCode = "en" defaultContentLanguage = "en" +title = "Espressif Developer Portal Preview" +theme = "blowfish" # Keep English on top level defaultContentLanguageInSubdir = false @@ -14,10 +16,8 @@ defaultContentLanguageInSubdir = false enableRobotsTXT = true summaryLength = 0 -buildDrafts = false -buildFuture = false - -googleAnalytics = "G-K9NTMXPGN3" +buildDrafts = true +buildFuture = true [pagination] pagerSize = 30 diff --git a/config/production/hugo.toml b/config/production/hugo.toml new file mode 100644 index 00000000..66193aed --- /dev/null +++ b/config/production/hugo.toml @@ -0,0 +1,13 @@ +# -- Site Configuration -- +# Refer to the theme docs for more details about each of these parameters. +# https://blowfish.page/docs/getting-started/ + +baseURL = "https://developer.espressif.com/" +title = "Espressif Developer Portal" + +buildDrafts = false +buildFuture = false + +[services] + [services.googleAnalytics] + id = "G-K9NTMXPGN3" diff --git a/hugo.toml b/hugo.toml deleted file mode 100644 index 69a075c5..00000000 --- a/hugo.toml +++ /dev/null @@ -1,9 +0,0 @@ -baseURL = "https://developer.espressif.com/" -# [en, zh-cn, fr, ...] determines default content language -defaultContentLanguage = "en" -# language code -languageCode = "en" -title = "Espressif Developer Portal" - -# Change the default theme to be use when building the site with Hugo -theme = "blowfish"