From 38773e89ff6e0d85a800f844f4bcc8e1e7404ad0 Mon Sep 17 00:00:00 2001 From: Krishan <33421343+kfiven@users.noreply.github.com> Date: Tue, 15 Mar 2022 17:04:14 +0530 Subject: [PATCH] Simplify GitHub actions (#387) * Simplify production build actions This merges both the netlify-prod and docker action and also automatically add tarball to releases. * Delete docker.yaml * Delete netlify-prod.yaml * Cosmetic changes and add dockerhub check * Cosmetic changes * Fix check runs on Tuesdays only --- .github/dependabot.yml | 26 ++-- .github/workflows/build-pull-request.yml | 59 +++++---- .github/workflows/deploy-pull-request.yml | 150 +++++++++++----------- .github/workflows/docker.yaml | 34 ----- .github/workflows/netlify-prod.yaml | 21 --- .github/workflows/prod-deploy.yaml | 56 ++++++++ 6 files changed, 180 insertions(+), 166 deletions(-) delete mode 100644 .github/workflows/docker.yaml delete mode 100644 .github/workflows/netlify-prod.yaml create mode 100644 .github/workflows/prod-deploy.yaml diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 7744f44..63e94ac 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -1,22 +1,28 @@ -# Docs: +# Docs: version: 2 updates: - package-ecosystem: github-actions directory: / - schedule: {interval: weekly} - reviewers: [ajbura] - assignees: [ajbura] + schedule: + interval: weekly + day: "tuesday" + time: "01:00" + timezone: "Asia/Kolkata" - package-ecosystem: docker directory: / - schedule: {interval: weekly} - reviewers: [ajbura] - assignees: [ajbura] + schedule: + interval: weekly + day: "tuesday" + time: "01:00" + timezone: "Asia/Kolkata" - package-ecosystem: npm directory: / - schedule: {interval: weekly} - reviewers: [ajbura] - assignees: [ajbura] + schedule: + interval: weekly + day: "tuesday" + time: "01:00" + timezone: "Asia/Kolkata" diff --git a/.github/workflows/build-pull-request.yml b/.github/workflows/build-pull-request.yml index 2e199e3..43c829a 100644 --- a/.github/workflows/build-pull-request.yml +++ b/.github/workflows/build-pull-request.yml @@ -1,32 +1,39 @@ -name: 'Build PR' +name: 'Build pull request' on: pull_request: types: ['opened', 'synchronize'] jobs: - build: - runs-on: ubuntu-latest - env: - PR_NUMBER: ${{github.event.number}} - steps: - - uses: actions/checkout@v3.0.0 - - name: Build - run: npm ci && npm run build - - name: Upload Artifact - uses: actions/upload-artifact@v3.0.0 - with: - name: previewbuild - path: dist - retention-days: 1 - - uses: actions/github-script@v6.0.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@v3.0.0 - with: - name: pr.json - path: pr.json - retention-days: 1 + build-pull-request: + runs-on: ubuntu-latest + env: + PR_NUMBER: ${{github.event.number}} + steps: + - name: Check out the repo + uses: actions/checkout@v3.0.0 + - name: Build app + run: npm ci && npm run build + - name: Upload artifact + uses: actions/upload-artifact@v3.0.0 + with: + name: previewbuild + path: dist + retention-days: 1 + - name: Get PR info + uses: actions/github-script@v6.0.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@v3.0.0 + with: + name: pr.json + path: pr.json + retention-days: 1 + - name: Build Docker image + uses: docker/build-push-action@v2.9.0 + with: + context: . + push: false diff --git a/.github/workflows/deploy-pull-request.yml b/.github/workflows/deploy-pull-request.yml index 8824f08..28cc8fc 100644 --- a/.github/workflows/deploy-pull-request.yml +++ b/.github/workflows/deploy-pull-request.yml @@ -1,78 +1,78 @@ name: Upload Preview Build to Netlify on: - workflow_run: - workflows: ["Build PR"] - types: - - completed + 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@v6.0.0 - with: - script: | - var artifacts = await github.rest.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.rest.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.rest.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@v6.0.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.3 - 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 }} - ⚠️ Exercise caution. Use test accounts. ⚠️ + get-build-and-deploy: + 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@v6.0.0 + with: + script: | + var artifacts = await github.rest.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.rest.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.rest.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@v6.0.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.3 + 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 }} + ⚠️ Exercise caution. Use test accounts. ⚠️ diff --git a/.github/workflows/docker.yaml b/.github/workflows/docker.yaml deleted file mode 100644 index 5e22ec1..0000000 --- a/.github/workflows/docker.yaml +++ /dev/null @@ -1,34 +0,0 @@ -name: Publish Docker image - -on: - release: - types: [published] - -jobs: - push_to_registry: - name: Push Docker image to Docker Hub - runs-on: ubuntu-latest - - steps: - - name: Check out the repo - uses: actions/checkout@v3.0.0 - - - name: Log in to Docker Hub - uses: docker/login-action@v1.14.1 - with: - username: ${{ secrets.DOCKER_USERNAME }} - password: ${{ secrets.DOCKER_PASSWORD }} - - - name: Extract metadata (tags, labels) for Docker - id: meta - uses: docker/metadata-action@v3.6.2 - with: - images: ajbura/cinny - - - name: Build and push Docker image - uses: docker/build-push-action@v2.9.0 - with: - context: . - push: true - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} diff --git a/.github/workflows/netlify-prod.yaml b/.github/workflows/netlify-prod.yaml deleted file mode 100644 index 2af6187..0000000 --- a/.github/workflows/netlify-prod.yaml +++ /dev/null @@ -1,21 +0,0 @@ -name: 'Deploy to Netlify (prod)' - -on: - release: - types: [published] - -jobs: - deploy: - name: 'Deploy' - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v3.0.0 - - uses: jsmrcaga/action-netlify-deploy@v1.7.2 - with: - install_command: "npm ci" - NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN }} - NETLIFY_SITE_ID: ${{ secrets.NETLIFY_SITE_ID }} - BUILD_DIRECTORY: "dist" - NETLIFY_DEPLOY_MESSAGE: "Prod deploy v${{ github.ref }}" - NETLIFY_DEPLOY_TO_PROD: true diff --git a/.github/workflows/prod-deploy.yaml b/.github/workflows/prod-deploy.yaml new file mode 100644 index 0000000..6bea4fc --- /dev/null +++ b/.github/workflows/prod-deploy.yaml @@ -0,0 +1,56 @@ +name: 'Production deploy' + +on: + release: + types: [published] + +jobs: + deploy-to-netlify: + name: 'Deploy to Netlify' + runs-on: ubuntu-latest + steps: + - name: Check out the repo + uses: actions/checkout@v3.0.0 + - name: Build and deploy to Netlify + uses: jsmrcaga/action-netlify-deploy@v1.7.2 + with: + install_command: "npm ci" + NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN }} + NETLIFY_SITE_ID: ${{ secrets.NETLIFY_SITE_ID }} + BUILD_DIRECTORY: "dist" + NETLIFY_DEPLOY_MESSAGE: "Prod deploy v${{ github.ref }}" + NETLIFY_DEPLOY_TO_PROD: true + - name: Get version from tag + id: vars + run: echo ::set-output name=tag::${GITHUB_REF#refs/*/} + - name: Create tar.gz + run: tar -czvf cinny-${{ steps.vars.outputs.tag }}.tar.gz dist + - name: Upload tagged release + uses: softprops/action-gh-release@v1 + with: + files: | + cinny-${{ steps.vars.outputs.tag }}.tar.gz + + push_to_dockerhub: + name: Push Docker image to Docker Hub + runs-on: ubuntu-latest + steps: + - name: Check out the repo + uses: actions/checkout@v3.0.0 + - name: Login to Docker Hub + uses: docker/login-action@v1.14.1 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@v3.6.2 + with: + images: ajbura/cinny + - name: Build and push Docker image + uses: docker/build-push-action@v2.9.0 + with: + context: . + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }}