From cf65eabd90a2417bc6cd354e3badf4620a007681 Mon Sep 17 00:00:00 2001 From: Scott Henderson Date: Fri, 21 Jun 2024 11:25:09 -0700 Subject: [PATCH] use workflow_run for surge preview --- .github/workflows/main.yaml | 36 ++++++++++------ .../{preview.yaml => pull_request.yaml} | 40 ++++++++---------- .github/workflows/surge_preview.yml | 42 +++++++++++++++++++ 3 files changed, 83 insertions(+), 35 deletions(-) rename .github/workflows/{preview.yaml => pull_request.yaml} (55%) create mode 100644 .github/workflows/surge_preview.yml diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml index 40d0c1e7..b2b827b6 100644 --- a/.github/workflows/main.yaml +++ b/.github/workflows/main.yaml @@ -1,10 +1,8 @@ -name: CI +name: Deploy Website to GitHub Pages on: push: branches: main - pull_request: - branches: main # Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages permissions: @@ -18,7 +16,7 @@ concurrency: cancel-in-progress: true jobs: - build-and-deploy: + build: runs-on: ubuntu-latest steps: @@ -50,19 +48,31 @@ jobs: run: | if (test -a _build/html/reports/*log); then cat _build/html/reports/*log ; fi - - name: Save Build + - name: Save Build Folder if: always() uses: actions/upload-artifact@v4 with: name: build path: _build/ - - name: Publish to GitHub Pages - if: github.ref == 'refs/heads/main' - uses: peaceiris/actions-gh-pages@v4 + - name: Upload Pages Artifact + uses: actions/upload-pages-artifact@v3 with: - github_token: ${{ secrets.GITHUB_TOKEN }} - publish_dir: _build/html - publish_branch: gh-pages - cname: tutorial.xarray.dev - enable_jekyll: false + path: _build/html + + # Publish Website to GitHub Pages if built successfully + deploy: + needs: build + if: github.ref == 'refs/heads/main' + runs-on: ubuntu-latest + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + + steps: + - name: Setup Pages + uses: actions/configure-pages@v5 + + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 diff --git a/.github/workflows/preview.yaml b/.github/workflows/pull_request.yaml similarity index 55% rename from .github/workflows/preview.yaml rename to .github/workflows/pull_request.yaml index d87172b4..bb8218b0 100644 --- a/.github/workflows/preview.yaml +++ b/.github/workflows/pull_request.yaml @@ -1,9 +1,8 @@ -name: PR Preview +name: Pull Request Build -on: [pull_request_target] - -permissions: - pull-requests: write # allow surge-preview to create/update PR comments +on: + pull_request: + types: [opened, synchronize, reopened, closed] concurrency: group: ${{ github.workflow }}-${{ github.ref }} @@ -11,14 +10,17 @@ concurrency: jobs: preview: - env: - PREVIEW_URL: https://{{repository.owner}}-{{repository.name}}-{{job.name}}-pr-{{pr.number}}.surge.sh runs-on: ubuntu-latest + defaults: + run: + shell: bash -el {0} steps: - name: Checkout repository + if: github.event.action != 'closed' uses: actions/checkout@v4 - name: Setup JupyterBook Cache + if: github.event.action != 'closed' uses: actions/cache@v4 with: path: _build @@ -26,6 +28,7 @@ jobs: key: jupyterbook-20240517 - name: Install Conda environment with Micromamba + if: github.event.action != 'closed' uses: mamba-org/setup-micromamba@v1 with: environment-file: conda/conda-lock.yml @@ -33,25 +36,18 @@ jobs: cache-environment: true - name: Build JupyterBook - # NOTE: login shell activates conda environment - shell: bash -l {0} + if: github.event.action != 'closed' run: | jupyter-book build ./ --warningiserror --keep-going - name: Dump Build Logs - if: always() + if: github.event.action != 'closed' run: | if (test -a _build/html/reports/*log); then cat _build/html/reports/*log ; fi - - name: Install Surge.sh - uses: actions/setup-node@v4 - - - run: npm install -g surge - - - run: surge ./_build/html {{env.PREVIEW_URL}} --token $SURGE_TOKEN - env: - SURGE_TOKEN: ${{ secrets.SURGE_TOKEN }} - - - name: Add URL to Summary - run: | - echo "#### :rocket: Preview deployed at {{env.PREVIEW_URL}}" >> $GITHUB_STEP_SUMMARY + - name: Upload artifact + if: github.event.action != 'closed' + uses: actions/upload-artifact@v4 + with: + name: html + path: book/_build/html diff --git a/.github/workflows/surge_preview.yml b/.github/workflows/surge_preview.yml new file mode 100644 index 00000000..69937ab7 --- /dev/null +++ b/.github/workflows/surge_preview.yml @@ -0,0 +1,42 @@ +name: Pull Request Preview + +on: + workflow_run: + workflows: ["Pull Request Build"] + types: + - completed + +permissions: + pull-requests: write # allow surge-preview to create/update PR comments + +concurrency: + group: ${{ github.workflow }}-${{ github.event.workflow_run.id }} + cancel-in-progress: true + +jobs: + # NOTE: match job name in pull_request.yaml + preview: + runs-on: ubuntu-latest + if: ${{ github.event.workflow_run.event == 'pull_request' && github.event.workflow_run.conclusion == 'success' }} + + steps: + # Ensure folder exists for PR 'closed' case + - run: mkdir html + + # Download built HTML from PR Build workflow + - uses: actions/download-artifact@v4 + continue-on-error: true + with: + github-token: ${{ github.token }} + run-id: ${{ github.event.workflow_run.id }} + + - name: Manage Surge.sh Deployment + id: preview_step + uses: afc163/surge-preview@v1 + with: + surge_token: ${{ secrets.SURGE_TOKEN }} + github_token: ${{ secrets.GITHUB_TOKEN }} + build: echo 'Uploading html/ folder contents to Surge.sh...' + dist: html # NOTE: match upload_artifact name in pull_request.yaml + failOnError: true + teardown: true