Skip to content

refactor: build workflow #582

refactor: build workflow

refactor: build workflow #582

Workflow file for this run

name: build
on:
push:
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: pnpm/action-setup@v4
- run: pnpm install
- run: pnpm run lint
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: pnpm/action-setup@v4
- run: pnpm install
- run: pnpm run test
pulumi:
runs-on: ubuntu-latest
defaults:
run:
working-directory: pulumi
steps:
- uses: actions/checkout@v3
- uses: pnpm/action-setup@v4
- run: pnpm install --ignore-workspace
- run: pnpm run lint
- run: pnpm run test
test-int:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: pnpm/action-setup@v4
- uses: rrainn/[email protected]
with:
port: 8001
- run: pnpm install
- run: pnpm run test:int
test-e2e:
needs: [lint, test, test-int, pulumi]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: pnpm/action-setup@v4
- uses: actions/setup-node@v3
with:
node-version: 18
- name: Install dependencies
run: pnpm install
- name: Install Playwright Browsers
run: pnpm exec playwright install --with-deps
working-directory: e2e
- uses: rrainn/[email protected]
with:
port: 8000
- name: Start services
run: |
pnpm run --filter api db:init
pnpm run dev &
working-directory: .
env:
VITE_API_URL: http://localhost:3000
- name: Configure environment
run: |
touch .env
echo "USER1_EMAIL=$USER1_EMAIL" >> .env
echo "USER1_PASSWORD=$USER1_PASSWORD" >> .env
echo "USER2_EMAIL=$USER2_EMAIL" >> .env
echo "USER2_PASSWORD=$USER2_PASSWORD" >> .env
env:
USER1_EMAIL: ${{ secrets.TEST_USER1_EMAIL }}
USER1_PASSWORD: ${{ secrets.TEST_USER1_PASSWORD }}
USER2_EMAIL: ${{ secrets.TEST_USER2_EMAIL }}
USER2_PASSWORD: ${{ secrets.TEST_USER2_PASSWORD }}
working-directory: e2e
- name: Wait for services
run: |
npx --yes wait-on http://localhost:3000
# Note: wait-on doesn't work with Vite when sending a head request
# https://github.com/jeffbski/wait-on/issues/78
npx --yes wait-on tcp:5173
- name: Run Playwright tests
run: pnpm run test:e2e
- uses: actions/upload-artifact@v3
if: always()
with:
name: playwright-report
path: e2e/playwright-report/
retention-days: 1
test-mutate:
runs-on: ubuntu-latest
needs: [test-e2e]
if: github.ref == 'refs/heads/main'
env:
STRYKER_DASHBOARD_API_KEY: ${{ secrets.STRYKER_DASHBOARD_API_KEY }}
steps:
- uses: actions/checkout@v3
- uses: pnpm/action-setup@v4
- run: pnpm --filter api install
- run: pnpm --filter api run test:mutate
test-mutate-data:
runs-on: ubuntu-latest
needs: [test-e2e]
if: github.ref == 'refs/heads/main'
env:
STRYKER_DASHBOARD_API_KEY: ${{ secrets.STRYKER_DASHBOARD_API_KEY }}
steps:
- uses: actions/checkout@v3
- uses: pnpm/action-setup@v4
- uses: rrainn/[email protected]
with:
port: 8001
- run: pnpm --filter api install
- run: pnpm run --filter api db:test:init
- run: pnpm --filter api run test:mutate:data
build-api:
needs: [test-e2e]
if: github.ref == 'refs/heads/main'
uses: jbrunton/workflows/.github/workflows/build-image.yml@develop
with:
repo-name: jbrunton/chat-demo-api
working-directory: services/api
buildpack: paketo-buildpacks/nodejs
publish: true
docker-username: jbrunton
cache-image: jbrunton/chat-demo-api-cache-image:latest
secrets:
docker-access-token: ${{ secrets.DOCKER_ACCESS_TOKEN }}
deploy-staging:
environment:
name: Staging
url: https://chat-demo.staging.jbrunton-aws.com
concurrency: staging
needs: [build-api]
if: github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: pnpm/action-setup@v4
- name: Build Client
env:
VITE_API_URL: https://chat-demo-api.staging.jbrunton-aws.com
run: |
pnpm --filter client install
pnpm --filter client run build
- run: pnpm install --ignore-workspace
working-directory: pulumi
- uses: pulumi/actions@v3
with:
command: up
stack-name: staging
upsert: true
work-dir: pulumi
comment-on-pr: true
github-token: ${{ secrets.CI_MINION_PAT }}
env:
PULUMI_ACCESS_TOKEN: ${{ secrets.PULUMI_ACCESS_TOKEN }}
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_REGION: us-east-1
API_TAG: ${{ needs.build-api.outputs.tag }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
deploy-production:
environment:
name: Production
url: https://chat-demo.jbrunton-aws.com
concurrency: production
needs: [build-api, deploy-staging]
if: github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: pnpm/action-setup@v4
- name: build
env:
VITE_API_URL: https://chat-demo-api.jbrunton-aws.com
run: |
pnpm --filter client install
pnpm --filter client run build
- run: pnpm install --ignore-workspace
working-directory: pulumi
- uses: pulumi/actions@v3
with:
command: up
stack-name: production
upsert: true
work-dir: pulumi
comment-on-pr: true
github-token: ${{ secrets.CI_MINION_PAT }}
env:
PULUMI_ACCESS_TOKEN: ${{ secrets.PULUMI_ACCESS_TOKEN }}
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_REGION: us-east-1
API_TAG: ${{ needs.build-api.outputs.tag }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}