Deploy Preview #1884
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Deploy Preview | |
| on: | |
| workflow_run: | |
| workflows: ["Build Preview"] | |
| types: | |
| - completed | |
| jobs: | |
| deploy-preview: | |
| environment: pr-previews | |
| runs-on: ubuntu-latest | |
| if: ${{github.event.workflow_run.event == 'pull_request' && github.event.workflow_run.conclusion == 'success'}} | |
| steps: | |
| - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 | |
| - uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 | |
| with: | |
| node-version-file: '.nvmrc' | |
| - run: npm clean-install | |
| - name: Get pull request number | |
| uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 | |
| id: pull-request-number | |
| with: | |
| result-encoding: string | |
| script: | | |
| const unzipper = require('unzipper'); | |
| const artifacts = await github.rest.actions.listWorkflowRunArtifacts({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| run_id: ${{github.event.workflow_run.id}} | |
| }); | |
| const artifact = artifacts.data.artifacts.filter( | |
| artifact => artifact.name === 'pr' | |
| )[0]; | |
| if (!artifact) { | |
| throw new Error('No "pr" artifact found'); | |
| } | |
| const download = await github.rest.actions.downloadArtifact({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| artifact_id: artifact.id, | |
| archive_format: 'zip' | |
| }); | |
| const directory = await unzipper.Open.buffer(Buffer.from(download.data)); | |
| const file = directory.files.find(d => d.path === 'pr_number'); | |
| const content = await file.buffer(); | |
| return content.toString(); | |
| - uses: dawidd6/action-download-artifact@09b07ec687d10771279a426c79925ee415c12906 # v17 | |
| with: | |
| github_token: ${{secrets.GITHUB_TOKEN}} | |
| workflow: build-preview.yml | |
| pr: ${{steps.pull-request-number.outputs.result}} | |
| name: preview | |
| allow_forks: true | |
| - name: Deploy to Netlify | |
| env: | |
| NETLIFY_AUTH_TOKEN: ${{secrets.NETLIFY_AUTH_TOKEN}} | |
| NETLIFY_SITE_ID: ${{secrets.NETLIFY_SITE_ID}} | |
| run: ./node_modules/.bin/netlify deploy --no-build --dir=. --alias=pr-${{steps.pull-request-number.outputs.result}} | |
| - name: Add comment to pull request | |
| uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 | |
| with: | |
| script: | | |
| const pullRequestNumber = parseInt(${{steps.pull-request-number.outputs.result}}, 10); | |
| const start = ':bento:'; | |
| const author = 'github-actions[bot]'; | |
| const comments = await github.rest.issues.listComments({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| issue_number: pullRequestNumber | |
| }); | |
| const commentExists = comments.data.some( | |
| comment => comment.user.login === author && comment.body.startsWith(start) | |
| ); | |
| if (!commentExists) { | |
| await github.rest.issues.createComment({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| issue_number: pullRequestNumber, | |
| body: `${start} **[Your pull request preview is ready](https://pr-${pullRequestNumber}--ideditor-presets-preview.netlify.app/id/dist/#locale=en&map=18.00/48.841708/2.587656)**\n\nPlease use this preview to check your changes. Ideally use [the **test documentation** template](https://github.com/openstreetmap/id-tagging-schema/blob/main/.github/PULL_REQUEST_TEMPLATE.md?plain=1#L38-L69) and document your test results by commenting on the PR. This will speed up the review process for everyone.\n\nFYI, once this PR is merged, you can use [the iD Editor Preview](http://preview.ideditor.com/) to test your changes in interaction with all other changes.` | |
| }); | |
| } else { | |
| console.log(`Preview URL comment already added to PR #${pullRequestNumber}`); | |
| } | |
| - name: Clean up artifact | |
| uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 | |
| with: | |
| result-encoding: string | |
| script: | | |
| const artifacts = await github.rest.actions.listWorkflowRunArtifacts({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| run_id: ${{github.event.workflow_run.id}} | |
| }); | |
| const artifact = artifacts.data.artifacts.filter( | |
| artifact => artifact.name === 'preview' | |
| )[0]; | |
| if (!artifact) { | |
| throw new Error('No "preview" artifact found'); | |
| } | |
| await github.rest.actions.deleteArtifact({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| artifact_id: artifact.id | |
| }); |