--- /dev/null
+name: 'Build PR'
+
+on:
+ pull_request:
+ types: ['opened', 'synchronize']
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ env:
+ PR_NUMBER: ${{github.event.number}}
+ steps:
+ - uses: actions/checkout@v2
+ - name: Build
+ run: npm install && npm run build
+ - name: Upload Artifact
+ uses: actions/upload-artifact@v2
+ with:
+ name: previewbuild
+ path: dist
+ retention-days: 1
+ - uses: actions/github-script@v3.1.0
+ with:
+ script: |
+ var fs = require('fs');
+ fs.writeFileSync('${{github.workspace}}/pr.json', JSON.stringify(context.payload.pull_request));
+ - name: Upload PR Info
+ uses: actions/upload-artifact@v2
+ with:
+ name: pr.json
+ path: pr.json
+ retention-days: 1
--- /dev/null
+name: Upload Preview Build to Netlify
+on:
+ workflow_run:
+ workflows: ["Build PR"]
+ types:
+ - completed
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ if: >
+ ${{ github.event.workflow_run.conclusion == 'success' }}
+ steps:
+ # There's a 'download artifact' action but it hasn't been updated for the
+ # workflow_run action (https://github.com/actions/download-artifact/issues/60)
+ # so instead we get this mess:
+ - name: 'Download artifact'
+ uses: actions/github-script@v3.1.0
+ with:
+ script: |
+ var artifacts = await github.actions.listWorkflowRunArtifacts({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ run_id: ${{github.event.workflow_run.id }},
+ });
+ var matchArtifact = artifacts.data.artifacts.filter((artifact) => {
+ return artifact.name == "previewbuild"
+ })[0];
+ var download = await github.actions.downloadArtifact({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ artifact_id: matchArtifact.id,
+ archive_format: 'zip',
+ });
+ var fs = require('fs');
+ fs.writeFileSync('${{github.workspace}}/previewbuild.zip', Buffer.from(download.data));
+ var prInfoArtifact = artifacts.data.artifacts.filter((artifact) => {
+ return artifact.name == "pr.json"
+ })[0];
+ var download = await github.actions.downloadArtifact({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ artifact_id: prInfoArtifact.id,
+ archive_format: 'zip',
+ });
+ var fs = require('fs');
+ fs.writeFileSync('${{github.workspace}}/pr.json.zip', Buffer.from(download.data));
+ - name: Extract Artifacts
+ run: unzip -d dist previewbuild.zip && rm previewbuild.zip && unzip pr.json.zip && rm pr.json.zip
+ - name: 'Read PR Info'
+ id: readctx
+ uses: actions/github-script@v3.1.0
+ with:
+ script: |
+ var fs = require('fs');
+ var pr = JSON.parse(fs.readFileSync('${{github.workspace}}/pr.json'));
+ console.log(`::set-output name=prnumber::${pr.number}`);
+ - name: Deploy to Netlify
+ id: netlify
+ uses: nwtgck/actions-netlify@v1.2
+ with:
+ publish-dir: dist
+ deploy-message: "Deploy from GitHub Actions"
+ # These don't work because we're in workflow_run
+ enable-pull-request-comment: false
+ enable-commit-comment: false
+ env:
+ NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN }}
+ NETLIFY_SITE_ID: ${{ secrets.NETLIFY_SITE3_ID }}
+ timeout-minutes: 1
+ - name: Edit PR Description
+ uses: velas/pr-description@v1.0.1
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ with:
+ pull-request-number: ${{ steps.readctx.outputs.prnumber }}
+ description-message: |
+ Preview: ${{ steps.netlify.outputs.deploy-url }}
+ ⚠️ Do you trust the author of this PR? Maybe this build will steal your keys or give you malware. Exercise caution. Use test accounts.
+++ /dev/null
-name: 'Netlify Preview Deploy'
-
-on:
- pull_request_target:
- types: ['opened', 'synchronize']
-
-jobs:
- deploy:
- name: "Deploy to Netlify"
- runs-on: ubuntu-latest
-
- steps:
- - uses: actions/checkout@v1
- - uses: jsmrcaga/action-netlify-deploy@master
- with:
- NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN }}
- NETLIFY_SITE_ID: ${{ secrets.NETLIFY_SITE3_ID }}
- BUILD_DIRECTORY: "dist"
- - name: Post on PR
- uses: nwtgck/actions-netlify@v1.1
- with:
- publish-dir: "dist"
- github-token: ${{ secrets.GITHUB_TOKEN }}
- deploy-message: "Deploy from GitHub Actions"
- enable-pull-request-comment: true
- enable-commit-comment: false
- overwrites-pull-request-comment: true
- env:
- NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN }}
- NETLIFY_SITE_ID: ${{ secrets.NETLIFY_SITE3_ID }}