-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
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. ⚠️
--- /dev/null
+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 }}