Ojn03/feat applications table (#66) #91
This file contains 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: CI/CD | |
# First runs linter and tests all affected projects | |
# Then, for each project that requires deployment, deploy-<project>-<service-type> is added | |
# Environment variables are labelled <project-name>_SHORT_DESCRIPTION | |
on: | |
push: | |
branches: ['main'] | |
pull_request: | |
branches: ['main'] | |
workflow_dispatch: | |
inputs: | |
manual-deploy: | |
description: 'App to Deploy' | |
required: false | |
default: '' | |
concurrency: | |
# Never have two deployments happening at the same time (potential race condition) | |
group: '{{ github.head_ref || github.ref }}' | |
jobs: | |
pre-deploy: | |
runs-on: ubuntu-latest | |
outputs: | |
affected: ${{ steps.should-deploy.outputs.affected }} | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
# We need to fetch all branches and commits so that Nx affected has a base to compare against. | |
fetch-depth: 0 | |
- name: Use Node.js 20 | |
uses: actions/setup-node@v3 | |
with: | |
node-version: 20.x | |
cache: 'yarn' | |
- name: Install Dependencies | |
run: yarn install | |
# In any subsequent steps within this job (myjob) we can reference the resolved SHAs | |
# using either the step outputs or environment variables: | |
- name: Derive appropriate SHAs for base and head for `nx affected` commands | |
uses: nrwl/nx-set-shas@v3 | |
- run: | | |
echo "BASE: ${{ env.NX_BASE }}" | |
echo "HEAD: ${{ env.NX_HEAD }}" | |
- name: Nx Affected Lint | |
run: npx nx affected -t lint | |
# - name: Nx Affected Test | |
# run: npx nx affected -t test | |
- name: Nx Affected Build | |
run: npx nx affected -t build | |
- name: Determine who needs to be deployed | |
id: should-deploy | |
run: | | |
echo "The following projects have been affected: [$(npx nx print-affected -t build --select=tasks.target.project)]"; | |
echo "affected=$(npx nx print-affected -t build --select=tasks.target.project)" >> "$GITHUB_OUTPUT" | |
deploy-debug: | |
needs: pre-deploy | |
runs-on: ubuntu-latest | |
steps: | |
- name: Debug logs | |
run: | | |
echo "Manual Deploy: ${{github.event.inputs.manual-deploy}}"; | |
echo "Affected Names: ${{needs.pre-deploy.outputs.affected}}"; | |
echo "Event: ${{github.event_name}}"; | |
echo "Ref: ${{github.ref}}"; | |
echo "Will deploy?: ${{(github.event_name == 'push' || github.event_name == 'workflow_dispatch') && github.ref == 'refs/heads/main'}}"; | |
deploy-frontend: | |
needs: pre-deploy | |
if: (contains(github.event.inputs.manual-deploy, 'frontend') || contains(needs.pre-deploy.outputs.affected, 'frontend')) && (github.event_name == 'push' || github.event_name == 'workflow_dispatch') && github.ref == 'refs/heads/main' | |
runs-on: ubuntu-latest | |
# For "simplicity", deployment settings are configured in the AWS Amplify Console | |
# This just posts to a webhook telling Amplify to redeploy the main branch | |
steps: | |
- name: Tell Amplify to rebuild | |
run: curl -X POST -d {} ${C4C_OPS_WEBHOOK_DEPLOY} -H "Content-Type:application/json" | |
env: | |
C4C_OPS_WEBHOOK_DEPLOY: ${{ secrets.C4C_OPS_WEBHOOK_DEPLOY }} | |
# deploy-backend: | |
# needs: pre-deploy | |
# if: (contains(github.event.inputs.manual-deploy, 'backend') || contains(needs.pre-deploy.outputs.affected, 'backend')) && (github.event_name == 'push' || github.event_name == 'workflow_dispatch') && github.ref == 'refs/heads/main' | |
# runs-on: ubuntu-latest | |
# steps: | |
# - uses: actions/checkout@v3 | |
# - name: Use Node.js 16 | |
# uses: actions/setup-node@v3 | |
# with: | |
# node-version: 16.x | |
# cache: 'yarn' | |
# - name: Install Dependencies | |
# run: yarn install | |
# - run: npx nx build backend --configuration production | |
# - name: default deploy | |
# uses: appleboy/lambda-action@master | |
# with: | |
# aws_access_key_id: ${{ secrets.AWS_ACCESS_KEY_ID }} | |
# aws_secret_access_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | |
# aws_region: ${{ secrets.AWS_REGION }} | |
# function_name: monarch-monolith-lambda | |
# source: dist/apps/c4c-ops/backend/main.js |