Skip to content

⬆️ chore(deps-dev): bump @types/node from 20.11.27 to 20.11.28 #1390

⬆️ chore(deps-dev): bump @types/node from 20.11.27 to 20.11.28

⬆️ chore(deps-dev): bump @types/node from 20.11.27 to 20.11.28 #1390

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@v3
with:
version: 8
- 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: pnpm run test:ci --collect-coverage --shard ${{ matrix.shard }}/2
- name: Upload Coverage
uses: codecov/codecov-action@v4
if: always()
with:
token: ${{ secrets.CODECOV_TOKEN }}
directory: coverage/unit
flags: unittests,node
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: 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@v3
with:
version: 8
- 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
typescript:
name: Typescript
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup pnpm
uses: pnpm/action-setup@v3
with:
version: 8
- 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@v3
with:
version: 8
- 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@v3
with:
version: 8
- 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: pnpm test:integration:ci --collect-coverage --shard ${{ matrix.shard }}/4
- name: Upload Coverage
uses: codecov/codecov-action@v4
if: always()
with:
token: ${{ secrets.CODECOV_TOKEN }}
directory: coverage/integration
flags: integrationtests,node
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: 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@v5
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