Skip to content

⬆️ chore(deps-dev): bump concurrently from 9.0.1 to 9.1.0 #2328

⬆️ chore(deps-dev): bump concurrently from 9.0.1 to 9.1.0

⬆️ chore(deps-dev): bump concurrently from 9.0.1 to 9.1.0 #2328

name: Continuous Integration
on:
pull_request:
push:
branches:
- main
permissions:
contents: read
packages: write
deployments: write
id-token: write
env:
FORCE_COLOR: 1
jobs:
unit-test-matrix:
name: Unit Test
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
shard: [1, 2]
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup pnpm
uses: pnpm/action-setup@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: lts/*
cache: pnpm
cache-dependency-path: pnpm-lock.yaml
- name: Install Dependencies
run: pnpm install --frozen-lockfile
- name: Run Unit Tests
run: JEST_JUNIT_OUTPUT_NAME=unit-${{ matrix.shard }}.xml pnpm run test:ci --shard ${{ matrix.shard }}/2
- name: Upload Test Results to Codecov
if: ${{ !cancelled() }}
uses: codecov/test-results-action@v1
with:
file: unit-${{ matrix.shard }}.xml
token: ${{ secrets.CODECOV_TOKEN }}
- name: Upload Coverage
uses: codecov/codecov-action@v5
if: ${{ !cancelled()}}
with:
token: ${{ secrets.CODECOV_TOKEN }}
directory: coverage/unit
flags: unittests,node
- name: Upload Test Results
uses: actions/upload-artifact@v4
if: ${{ !cancelled() }}
with:
name: unit-${{ matrix.shard }}
path: unit-${{ matrix.shard }}.xml
unit-test:
# Summary of all test shards
# Inspired by https://github.com/orgs/community/discussions/26822#discussioncomment-5122101
needs: [unit-test-matrix]
name: Unit Test
runs-on: ubuntu-latest
if: always()
steps:
- name: Download Test Results
uses: actions/download-artifact@v4
with:
pattern: unit-*
path: test/
merge-multiple: true
- name: Action Summary
uses: test-summary/action@v2
with:
paths: |
test/unit-*.xml
- name: Check unit test results
# see https://docs.github.com/en/actions/reference/context-and-expression-syntax-for-github-actions#needs-context
# see https://stackoverflow.com/a/67532120/4907315
if: >-
${{
contains(needs.*.result, 'failure')
|| contains(needs.*.result, 'cancelled')
|| contains(needs.*.result, 'skipped')
}}
run: exit 1
lint:
name: Lint
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup pnpm
uses: pnpm/action-setup@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: lts/*
cache: pnpm
cache-dependency-path: pnpm-lock.yaml
- name: Install Dependencies
run: pnpm install --frozen-lockfile
- name: Run Lint
run: pnpm lint:ci
- name: Action Summary
if: failure()
run: |
SUMMARY=$'❌ Lint failed\nPlease run the following command locally and commit the changes\n```zsh\npnpm run lint:apply\n```'
echo "$SUMMARY" >> $GITHUB_STEP_SUMMARY
typescript:
name: Typescript
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup pnpm
uses: pnpm/action-setup@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: lts/*
cache: pnpm
cache-dependency-path: pnpm-lock.yaml
- name: Install Dependencies
run: pnpm install --frozen-lockfile
- name: Run tsc
run: pnpm tsc:ci
build:
name: Build
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup pnpm
uses: pnpm/action-setup@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: lts/*
cache: pnpm
cache-dependency-path: pnpm-lock.yaml
- name: Install Dependencies
run: pnpm install --frozen-lockfile
- name: Build
run: pnpm build:production
- name: Sentry Release
if: github.ref == 'refs/heads/main'
uses: getsentry/action-release@v1
env:
SENTRY_ORG: rbberdk
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
SENTRY_PROJECT: node
with:
version: ${{ github.sha }}
sourcemaps: "./dist"
finalize: false
environment: production
url_prefix: "/usr/src/app/dist/"
ignore_empty: true
ignore_missing: true
integration-test-matrix:
name: Integration Test
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
shard: [1, 2, 3, 4]
services:
redis:
image: redis
# Set health checks to wait until redis has started
options: >-
--health-cmd "redis-cli ping"
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
- 6380:6379
postgres:
image: postgres
env:
POSTGRES_USERNAME: postgres
POSTGRES_PASSWORD: postgres
# Set health checks to wait until postgres has started
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
- 5433:5432
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup pnpm
uses: pnpm/action-setup@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: lts/*
cache: pnpm
cache-dependency-path: pnpm-lock.yaml
- name: Install Dependencies
run: pnpm install --frozen-lockfile
- name: Run Integration Tests
run: JEST_JUNIT_OUTPUT_NAME=integration-${{ matrix.shard }}.xml pnpm test:integration:ci --shard ${{ matrix.shard }}/4
- name: Upload Test Results to Codecov
if: ${{ !cancelled() }}
uses: codecov/test-results-action@v1
with:
file: integration-${{ matrix.shard }}.xml
token: ${{ secrets.CODECOV_TOKEN }}
- name: Upload Coverage
uses: codecov/codecov-action@v5
if: ${{ !cancelled() }}
with:
token: ${{ secrets.CODECOV_TOKEN }}
directory: coverage/integration
flags: integrationtests,node
- name: Upload Test Results
uses: actions/upload-artifact@v4
if: ${{ !cancelled() }}
with:
name: integration-${{ matrix.shard }}
path: integration-${{ matrix.shard }}.xml
integration-test:
# Summary of all test shards
# Inspired by https://github.com/orgs/community/discussions/26822#discussioncomment-5122101
needs: [integration-test-matrix]
name: Integration Test
runs-on: ubuntu-latest
if: always()
steps:
- name: Download Test Results
uses: actions/download-artifact@v4
with:
merge-multiple: true
pattern: integration-*
path: test/
- name: Action Summary
uses: test-summary/action@v2
with:
paths: |
test/integration-*.xml
- name: Check integration test results
# see https://docs.github.com/en/actions/reference/context-and-expression-syntax-for-github-actions#needs-context
# see https://stackoverflow.com/a/67532120/4907315
if: >-
${{
contains(needs.*.result, 'failure')
|| contains(needs.*.result, 'cancelled')
|| contains(needs.*.result, 'skipped')
}}
run: exit 1
build-image:
name: Build Image
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: USERNAME
password: ${{ github.token }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Build Image
uses: docker/build-push-action@v6
with:
file: Dockerfile.prod
tags: |
ghcr.io/rubberdok/server:${{ github.sha }}
ghcr.io/rubberdok/server:latest
cache-from: type=gha
cache-to: type=gha,mode=max
push: false
dev-command-test:
name: Development Script Test
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup pnpm
uses: pnpm/action-setup@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: lts/*
cache: pnpm
cache-dependency-path: pnpm-lock.yaml
- name: Install Dependencies
run: pnpm install --frozen-lockfile
- name: Run Dev Script Tests
run: JEST_JUNIT_OUTPUT_NAME=dev.xml pnpm run test:dev
- name: Upload Test Results to Codecov
if: ${{ !cancelled() }}
uses: codecov/test-results-action@v1
with:
file: dev.xml
token: ${{ secrets.CODECOV_TOKEN }}