diff --git a/.github/workflows/backend_build.yml b/.github/workflows/backend_build.yml new file mode 100644 index 000000000..49afce767 --- /dev/null +++ b/.github/workflows/backend_build.yml @@ -0,0 +1,33 @@ +name: Backend build + +on: + push: + branches: ['main'] + pull_request: + branches: ['main'] + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: Use NodeJS 24.x + uses: actions/setup-node@v4 + with: + node-version: 24.x + cache: 'yarn' + + - name: Create .env file + run: | + + echo "AWS_SECRET_ACCESS_KEY=dummy" >> .env + echo "AWS_ACCESS_KEY_ID=dummy" >> .env + echo "AWS_REGION=us-east-2" >> .env + + - name: Install Dependencies + run: yarn install + + - name: Build backend + run: npx nx build backend \ No newline at end of file diff --git a/.github/workflows/ci-cd.yml b/.github/workflows/ci-cd.yml index bf0fcbef9..6562108f1 100644 --- a/.github/workflows/ci-cd.yml +++ b/.github/workflows/ci-cd.yml @@ -1,113 +1,118 @@ -name: CI/CD - -# First runs linter and tests all affected projects -# Then, for each project that requires deployment, deploy-- is added -# Environment variables are labelled _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, 'c4c-ops-frontend') || contains(needs.pre-deploy.outputs.affected, 'scaffolding-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, 'c4c-ops-backend') || contains(needs.pre-deploy.outputs.affected, 'scaffolding-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 c4c-ops-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: c4c-ops-monolith-lambda - source: dist/apps/c4c-ops/c4c-ops-backend/main.js +# Note: +# This CICD requires AWS Amplify to be setup which tends to not be the case until the app is close to being deployed +# Therefore this is not useful for a the beginning chunk of development where everything is tested locally +# Therefore other pipelines have been made to test things locally, but once AWS Amplify is setup this can be used. + +# name: Legacy CI/CD + +# # First runs linter and tests all affected projects +# # Then, for each project that requires deployment, deploy-- is added +# # Environment variables are labelled _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, 'c4c-ops-frontend') || contains(needs.pre-deploy.outputs.affected, 'scaffolding-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, 'c4c-ops-backend') || contains(needs.pre-deploy.outputs.affected, 'scaffolding-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 c4c-ops-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: c4c-ops-monolith-lambda +# source: dist/apps/c4c-ops/c4c-ops-backend/main.js diff --git a/.github/workflows/frontend_build.yml b/.github/workflows/frontend_build.yml new file mode 100644 index 000000000..fc7026362 --- /dev/null +++ b/.github/workflows/frontend_build.yml @@ -0,0 +1,33 @@ +name: Frontend build + +on: + push: + branches: ['main'] + pull_request: + branches: ['main'] + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: Use NodeJS 24.x + uses: actions/setup-node@v4 + with: + node-version: 24.x + cache: 'yarn' + + - name: Create .env file + run: | + + echo "AWS_SECRET_ACCESS_KEY=dummy" >> .env + echo "AWS_ACCESS_KEY_ID=dummy" >> .env + echo "AWS_REGION=us-east-2" >> .env + + - name: Install Dependencies + run: yarn install + + - name: Build frontend + run: npx nx build frontend diff --git a/.github/workflows/jest.yml b/.github/workflows/jest.yml new file mode 100644 index 000000000..286e165f2 --- /dev/null +++ b/.github/workflows/jest.yml @@ -0,0 +1,36 @@ +name: Jest run + +on: + push: + branches: ['main'] + pull_request: + branches: ['main'] + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: Use NodeJS 24.x + uses: actions/setup-node@v4 + with: + node-version: 24.x + cache: 'yarn' + + - name: Create .env file + run: | + + echo "AWS_BUCKET_NAME=dummy" >> .env + echo "AWS_SECRET_ACCESS_KEY=dummy" >> .env + echo "AWS_ACCESS_KEY_ID=dummy" >> .env + echo "AWS_REGION=us-east-2" >> .env + + - name: Install Dependencies + run: yarn install + + - name: Run Jest tests + run: yarn test + diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 000000000..ab6f2fc14 --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,26 @@ +name: Linter run + +on: + push: + branches: ['main'] + pull_request: + branches: ['main'] + +jobs: + lint: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: Use Node.js 24.x + uses: actions/setup-node@v4 + with: + node-version: 24.x + cache: 'yarn' + + - name: Install Dependencies + run: yarn install + + - name: Run linter + run: npx nx affected -t lint diff --git a/nx.json b/nx.json index 4dc261d4b..9a774f42a 100644 --- a/nx.json +++ b/nx.json @@ -2,10 +2,9 @@ "$schema": "./node_modules/nx/schemas/nx-schema.json", "tasksRunnerOptions": { "default": { - "runner": "nx-cloud", + "runner": "nx/tasks-runners/default", "options": { - "cacheableOperations": ["build", "lint", "test", "e2e"], - "accessToken": "OTc0MjgyZDgtMTYzYy00OTYwLTg5NWEtNDQ5YTg2ZjJkMDU2fHJlYWQtd3JpdGU=" + "cacheableOperations": ["build", "lint", "test", "e2e"] } } },