diff --git a/.github/workflows/build-preview.yml b/.github/workflows/build-preview.yml index ae3e5767eb..e77ed87fb2 100644 --- a/.github/workflows/build-preview.yml +++ b/.github/workflows/build-preview.yml @@ -9,14 +9,21 @@ jobs: build-preview: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 - - uses: actions/setup-node@v1 + - uses: actions/checkout@v2 + - uses: actions/setup-node@v2 with: - node-version: 16 - registry-url: https://registry.npmjs.org/ + node-version: '16' - run: npm ci - run: npm run build-site - uses: actions/upload-artifact@v2 with: name: site path: build/site + - name: Store pull request number for later use + run: | + mkdir -p build/pr + echo ${{github.event.number}} > build/pr/number + - uses: actions/upload-artifact@v2 + with: + name: pr + path: build/pr diff --git a/.github/workflows/deploy-preview.yml b/.github/workflows/deploy-preview.yml index ad37356369..7be0121ed9 100644 --- a/.github/workflows/deploy-preview.yml +++ b/.github/workflows/deploy-preview.yml @@ -1,45 +1,102 @@ name: Deploy Preview on: - pull_request_target: - branches: - - main + workflow_run: + workflows: ["Build Preview"] + types: + - completed jobs: deploy-preview: runs-on: ubuntu-latest + if: ${{github.event.workflow_run.event == 'pull_request' && github.event.workflow_run.conclusion == 'success'}} steps: - - uses: actions/setup-node@v1 + - uses: actions/setup-node@v2 with: - node-version: 16 - registry-url: https://registry.npmjs.org/ - - run: npm install --global netlify-cli - - uses: lewagon/wait-on-check-action@v1.1.1 + node-version: '16' + - run: npm install --global netlify-cli@6 + - run: npm install unzipper@0.10 + + - name: Get pull request number + uses: actions/github-script@v5 + id: pull-request-number with: - ref: ${{github.event.pull_request.head.sha}} - check-name: 'build-preview' - repo-token: ${{secrets.GITHUB_TOKEN}} - wait-interval: 10 + 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 === 'number'); + const content = await file.buffer(); + return content.toString(); + - uses: dawidd6/action-download-artifact@v2 with: github_token: ${{secrets.GITHUB_TOKEN}} workflow: build-preview.yml - pr: ${{github.event.number}} + pr: ${{steps.pull-request-number.outputs.result}} name: site path: build/site - - env: + + - name: Deploy to Netlify + env: NETLIFY_AUTH_TOKEN: ${{secrets.NETLIFY_AUTH_TOKEN}} NETLIFY_SITE_ID: ${{secrets.NETLIFY_SITE_ID}} - run: netlify deploy --dir=build/site --alias=deploy-preview-${{github.event.number}} - - uses: octokit/request-action@v2.x + run: netlify deploy --dir=build/site --alias=deploy-preview-${{steps.pull-request-number.outputs.result}} + + - name: Add comment to pull request + uses: actions/github-script@v5 with: - route: POST /repos/{owner}/{repo}/statuses/{sha} - owner: openlayers - repo: openlayers - sha: ${{github.event.pull_request.head.sha}} - state: "success" - target_url: https://deploy-preview-${{github.event.number}}--ol-site.netlify.app - context: "Deploy Preview" - description: "Preview URL" - env: - GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} + script: | + const pullRequestNumber = parseInt(${{steps.pull-request-number.outputs.result}}, 10); + + const start = ':package:'; + 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) { + const body = [ + `${start} Preview the [examples](https://deploy-preview-${pullRequestNumber}--ol-site.netlify.app/examples/) and`, + `[docs](https://deploy-preview-${pullRequestNumber}--ol-site.netlify.app/apidoc/) from this branch`, + `here: https://deploy-preview-${pullRequestNumber}--ol-site.netlify.app/.` + ].join(' '); + + await github.rest.issues.createComment({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: pullRequestNumber, + body: body + }); + } else { + console.log(`Preview URL comment already added to PR #${pullRequestNumber}`); + } diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index a1d2d62f7e..468a5a8ec7 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -9,11 +9,10 @@ jobs: publish-npm: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 - - uses: actions/setup-node@v1 + - uses: actions/checkout@v2 + - uses: actions/setup-node@v2 with: - node-version: 16 - registry-url: https://registry.npmjs.org/ + node-version: '16' - name: Install dependencies run: npm ci - name: Publish diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 01f24b4ac8..0774258ac8 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -24,9 +24,9 @@ jobs: uses: actions/checkout@v2 - name: Set Node.js Version - uses: actions/setup-node@v1 + uses: actions/setup-node@v2 with: - node-version: 16 + node-version: '16' - name: Determine Cache Directory id: npm-cache @@ -59,9 +59,9 @@ jobs: uses: actions/checkout@v2 - name: Set Node.js Version - uses: actions/setup-node@v1 + uses: actions/setup-node@v2 with: - node-version: 16 + node-version: '16' - name: Determine Cache Directory id: npm-cache @@ -94,9 +94,9 @@ jobs: uses: actions/checkout@v2 - name: Set Node.js Version - uses: actions/setup-node@v1 + uses: actions/setup-node@v2 with: - node-version: 16 + node-version: '16' - name: Determine Cache Directory id: npm-cache @@ -129,9 +129,9 @@ jobs: uses: actions/checkout@v2 - name: Set Node.js Version - uses: actions/setup-node@v1 + uses: actions/setup-node@v2 with: - node-version: 16 + node-version: '16' - name: Determine Cache Directory id: npm-cache @@ -167,9 +167,9 @@ jobs: uses: actions/checkout@v2 - name: Set Node.js Version - uses: actions/setup-node@v1 + uses: actions/setup-node@v2 with: - node-version: 16 + node-version: '16' - name: Determine Cache Directory id: npm-cache