From d1e10354b3c66e6bf9862d47b6ee92a60a4cc6fd Mon Sep 17 00:00:00 2001 From: Jonah Aragon Date: Thu, 28 Mar 2024 21:30:13 -0500 Subject: [PATCH] Add Pull Request deployment workflow --- .github/workflows/build.yml | 84 +++++++++++++++++++++++++++++ .github/workflows/cleanup.yml | 29 ++++++++++ .github/workflows/download-repo.yml | 28 ++++++++++ .github/workflows/preview-pr.yml | 81 ++++++++++++++++++++++++++++ 4 files changed, 222 insertions(+) create mode 100644 .github/workflows/build.yml create mode 100644 .github/workflows/cleanup.yml create mode 100644 .github/workflows/download-repo.yml create mode 100644 .github/workflows/preview-pr.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000000..36bfc3c3ae --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,84 @@ +name: Build Website + +on: + workflow_call: + inputs: + ref: + required: true + type: string + repo: + required: true + type: string + lang: + required: true + type: string + i18n: + required: true + type: boolean + +jobs: + build: + runs-on: ubuntu-latest + continue-on-error: ${{ inputs.i18n }} + permissions: + contents: read + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + repository: ${{ inputs.repo }} + ref: ${{ inputs.ref }} + persist-credentials: 'false' + + - uses: actions/download-artifact@v4 + with: + path: modules + + - run: | + rmdir modules/mkdocs-material + mv modules/mkdocs-material-insiders modules/mkdocs-material + rmdir theme/assets/brand + mv modules/brand theme/assets/brand + + - if: inputs.i18n + run: | + cp -rl modules/i18n/i18n . + cp -rl modules/i18n/includes . + cp -rl modules/i18n/theme . + + - name: Python setup + uses: actions/setup-python@v5 + with: + python-version: '3.8' + cache: 'pipenv' + + - name: Cache files + uses: actions/cache@v4.0.2 + with: + key: ${{ inputs.ref }} + path: .cache + + - name: Install Python dependencies + run: | + pip install pipenv + pipenv install + sudo apt install pngquant + + - name: Build website + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + CARDS: false + CONTEXT: deploy-preview + NETLIFY: true + run: | + pipenv run mkdocs build --config-file config/mkdocs.${{ inputs.lang }}.yml + cp -r static/* site/ + pipenv run mkdocs --version + tar -czvf site-build-${{ inputs.lang }}.tar.gz site + + - name: Upload tar.gz file + uses: actions/upload-artifact@v4 + with: + name: site-build-${{ inputs.lang }}.tar.gz + path: site-build-${{ inputs.lang }}.tar.gz diff --git a/.github/workflows/cleanup.yml b/.github/workflows/cleanup.yml new file mode 100644 index 0000000000..c5ba3553e5 --- /dev/null +++ b/.github/workflows/cleanup.yml @@ -0,0 +1,29 @@ +name: Cleanup Artifacts + +on: + workflow_call: + +jobs: + brand: + runs-on: ubuntu-latest + steps: + - uses: geekyeggo/delete-artifact@v5 + with: + name: brand + failOnError: false + + i18n: + runs-on: ubuntu-latest + steps: + - uses: geekyeggo/delete-artifact@v5 + with: + name: i18n + failOnError: false + + mkdocs-material-insiders: + runs-on: ubuntu-latest + steps: + - uses: geekyeggo/delete-artifact@v5 + with: + name: mkdocs-material-insiders + failOnError: false diff --git a/.github/workflows/download-repo.yml b/.github/workflows/download-repo.yml new file mode 100644 index 0000000000..c67e0eae5d --- /dev/null +++ b/.github/workflows/download-repo.yml @@ -0,0 +1,28 @@ +name: Download repository + +on: + workflow_call: + inputs: + repo: + required: true + type: string + secrets: + ACTIONS_SSH_KEY: + required: true + +jobs: + download: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + repository: 'privacyguides/${{ inputs.repo }}' + path: ${{ inputs.repo }} + ssh-key: ${{ secrets.ACTIONS_SSH_KEY }} + + - uses: actions/upload-artifact@v4 + with: + name: ${{ inputs.repo }} + path: ${{ inputs.repo }} + retention-days: 1 diff --git a/.github/workflows/preview-pr.yml b/.github/workflows/preview-pr.yml new file mode 100644 index 0000000000..5557b0ac16 --- /dev/null +++ b/.github/workflows/preview-pr.yml @@ -0,0 +1,81 @@ +name: Build Pull Request Preview + +on: + pull_request_target: + +jobs: + downloadSubmodules: + strategy: + matrix: + repo: [mkdocs-material-insiders, brand, i18n] + uses: ./.github/workflows/download-repo.yml + with: + repo: ${{ matrix.repo }} + secrets: + ACTIONS_SSH_KEY: ${{ secrets.ACTIONS_SSH_KEY }} + + build: + needs: downloadSubmodules + strategy: + matrix: + lang: [es, fr, he, it, nl, ru, zh-Hant] + i18n: [true] + include: + - lang: en + i18n: false + fail-fast: false + permissions: + contents: read + uses: ./.github/workflows/build.yml + with: + ref: ${{github.event.pull_request.head.ref}} + repo: ${{github.event.pull_request.head.repo.full_name}} + lang: ${{ matrix.lang }} + i18n: ${{ matrix.i18n }} + + deploy: + needs: build + runs-on: ubuntu-latest + steps: + - uses: actions/download-artifact@v4 + with: + pattern: site-build-* + merge-multiple: true + + - run: | + for file in *.tar.gz; do tar -zxf "$file"; done + wget https://raw.githubusercontent.com/privacyguides/privacyguides.org/main/netlify.toml + ls -la site/ + + - uses: actions/setup-node@v4 + + - run: | + npm install netlify-cli -g + + - name: Add SHORT_SHA env property with commit short sha + run: echo "SHORT_SHA=`echo ${{github.event.pull_request.head.sha}} | cut -c1-12`" >> $GITHUB_ENV + + - env: + NETLIFY_SITE_ID: ${{ secrets.NETLIFY_SITE_PR }} + NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_TOKEN }} + run: | + netlify deploy --dir=site --alias=${SHORT_SHA} + + comment: + permissions: + pull-requests: write + needs: deploy + runs-on: ubuntu-latest + steps: + - name: Add SHORT_SHA env property with commit short sha + run: echo "SHORT_SHA=`echo ${{github.event.pull_request.head.sha}} | cut -c1-12`" >> $GITHUB_ENV + + - uses: thollander/actions-comment-pull-request@v2 + with: + message: | + This is a test :eyes: https://${{ env.SHORT_SHA }}--glowing-salamander-8d7127.netlify.app/ + comment_tag: deployment + + cleanup: + needs: deploy + uses: ./.github/workflows/cleanup.yml