Skip to content

Merge branch 'main' into ui-for-sending-announcements #8147

Merge branch 'main' into ui-for-sending-announcements

Merge branch 'main' into ui-for-sending-announcements #8147

Workflow file for this run

name: Test
on:
push:
branches-ignore:
- "main"
tags-ignore:
- "**"
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.ref_name }}
cancel-in-progress: true
jobs:
adminui-checks:
runs-on: ubuntu-latest
name: Run Admin UI Checks
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Flutter
uses: subosito/[email protected]
- name: Run checks
run: ./.ci/aui/runChecks.sh
check-formatting:
runs-on: ubuntu-latest
name: Check Formatting
steps:
- name: Checkout
uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 22.4.1
cache: "npm"
cache-dependency-path: "**/package.json"
- name: Cache npm dependencies
uses: actions/cache@v4
with:
path: ./runtime/node_modules
key: ${{ runner.os }}-npm-${{ hashFiles('**/package-lock.json') }}
restore-keys: ${{ runner.os }}-npm-
- name: Setup dotnet
uses: actions/setup-dotnet@v4
with:
dotnet-version: "9.x"
- name: Cache NuGet packages
uses: actions/cache@v4
with:
path: ~/.nuget/packages
key: ${{ runner.os }}-nuget-${{ hashFiles('**/*.csproj') }}
restore-keys: ${{ runner.os }}-nuget-
- name: Check formatting
run: ./.ci/checkFormatting.sh
unit-test:
runs-on: ubuntu-latest
name: Run Unit Tests
steps:
- name: Checkout
uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 22.4.1
cache: "npm"
cache-dependency-path: "**/package.json"
- name: Cache npm dependencies
uses: actions/cache@v4
with:
path: ./runtime/node_modules
key: ${{ runner.os }}-npm-${{ hashFiles('**/package-lock.json') }}
restore-keys: ${{ runner.os }}-npm-
- name: Setup dotnet
uses: actions/setup-dotnet@v4
with:
dotnet-version: "9.x"
- name: Cache NuGet packages
uses: actions/cache@v4
with:
path: ~/.nuget/packages
key: ${{ runner.os }}-nuget-${{ hashFiles('**/*.csproj') }}
restore-keys: ${{ runner.os }}-nuget-
- name: Run tests
run: ./.ci/test.sh
env:
DOTNET_CONSOLE_ANSI_COLOR: true
image-test-builds:
name: Build ${{matrix.image}} Image
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
- dockerfile: Applications/ConsumerApi/src/Dockerfile
image: consumer-api
- dockerfile: Applications/AdminApi/src/AdminApi/Dockerfile
image: admin-ui
- dockerfile: Applications/AdminCli/src/AdminCli/Dockerfile
image: admin-cli
- dockerfile: Applications/DatabaseMigrator/src/DatabaseMigrator/Dockerfile
image: database-migrator
- dockerfile: Applications/EventHandlerService/src/EventHandlerService/Dockerfile
image: event-handler
- dockerfile: Applications/IdentityDeletionJobs/src/Job.IdentityDeletion/Dockerfile
image: identity-deletion-jobs
- dockerfile: Applications/SseServer/src/SseServer/Dockerfile
image: sse-server
steps:
- name: Checkout
uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 22.4.1
cache: "npm"
cache-dependency-path: "**/package-lock.json"
- name: Setup Docker
uses: docker/setup-buildx-action@v3
with:
driver: docker-container
- name: Setup NuGet
uses: actions/setup-dotnet@v4
with:
dotnet-version: 9.x
- name: Cache Image
uses: actions/cache@v4
with:
path: /tmp/.buildx-${{ matrix.image }}-cache
key: buildx-${{ matrix.image }}-cache-${{ hashFiles(matrix.dockerfile) }}
restore-keys: buildx-${{ matrix.image }}-cache-
- name: Build Image
uses: docker/build-push-action@v6
env:
DOCKER_BUILD_SUMMARY: false
with:
context: .
file: ${{ matrix.dockerfile }}
cache-from: type=local,src=/tmp/.buildx-${{ matrix.image }}-cache
cache-to: type=local,mode=max,dest=/tmp/.buildx-${{ matrix.image }}-cache-new
outputs: type=docker,dest=/tmp/${{ matrix.image }}.tar
tags: ghcr.io/nmshd/backbone-${{ matrix.image }}:0.0.1
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: docker-${{ matrix.image }}
path: /tmp/${{ matrix.image }}.tar
retention-days: 1
# Temp fix
# https://github.com/docker/build-push-action/issues/252
# https://github.com/moby/buildkit/issues/1896
- name: Move cache
run: |
rm -rf /tmp/.buildx-${{ matrix.image }}-cache
mv /tmp/.buildx-${{ matrix.image }}-cache-new /tmp/.buildx-${{ matrix.image }}-cache
integration-test:
name: Run ${{matrix.test-project.display-name}} Integration Tests (on ${{matrix.database}})
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
database: [sqlserver, postgres]
test-project:
- display-name: admin-api
path: Applications/AdminApi/test/AdminApi.Tests.Integration
- display-name: consumer-api
path: Applications/ConsumerApi/test/ConsumerApi.Tests.Integration
- display-name: identity-deletion-job
path: Applications/IdentityDeletionJobs/test/Job.IdentityDeletion.Tests.Integration
needs: image-test-builds
steps:
- name: Checkout
uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 22.4.1
cache: "npm"
cache-dependency-path: "**/package-lock.json"
- name: Setup NuGet
uses: actions/setup-dotnet@v4
with:
dotnet-version: 9.x
- name: Cache NuGet packages
uses: actions/cache@v4
with:
path: ~/.nuget/packages
key: ${{ runner.os }}-nuget-${{ hashFiles('**/*.csproj') }}
restore-keys: ${{ runner.os }}-nuget-
- name: Download cached Docker images
uses: actions/download-artifact@v4
with:
path: /tmp
pattern: docker-*
merge-multiple: true
- name: Load Docker images and build test code
run: |
{
./.ci/loadDockerImages.sh
} &
{
# The following two lines are for the identity deletion job only
mv appsettings.override.json appsettings.override.json.bak
cp .ci/appsettings.override.${{matrix.database}}.local.json appsettings.override.json
dotnet restore ${{matrix.test-project.path}}
dotnet build --no-restore ${{matrix.test-project.path}}
}
wait
- name: Start compose stack
run: |
docker compose -f ./.ci/compose.test.yml -f ./.ci/compose.test.${{matrix.database}}.yml down -v
docker compose -f ./.ci/compose.test.yml -f ./.ci/compose.test.${{matrix.database}}.yml up --no-build --wait -d
- name: Run integration tests
run: dotnet test --no-restore --no-build --logger "GitHubActions;summary.includeNotFoundTests=false;summary.includeSkippedTests=false;summary.includePassedTests=false" ${{matrix.test-project.path}}
env:
ADMIN_API_BASE_ADDRESS: "http://localhost:5173"
CONSUMER_API_BASE_ADDRESS: "http://localhost:5000"
- name: Save Docker Logs
if: failure()
run: docker compose -f ./.ci/compose.test.yml -f ./.ci/compose.test.${{matrix.database}}.yml logs > logs.txt
- name: Archive logs
if: failure()
uses: actions/upload-artifact@v4
with:
name: ${{matrix.test-project.display-name}}-${{matrix.database}}
path: logs.txt
transport-test:
name: Run transport Tests (on ${{matrix.database}})
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
database: [sqlserver, postgres]
needs: image-test-builds
steps:
- name: Checkout backbone repository
uses: actions/checkout@v4
with:
path: backbone
- name: Checkout runtime repository
uses: actions/checkout@v4
with:
repository: nmshd/runtime
path: runtime
- uses: actions/setup-node@v4
with:
node-version: 22.4.1
cache: "npm"
cache-dependency-path: "**/package-lock.json"
- name: Download cached Docker images
uses: actions/download-artifact@v4
with:
path: /tmp
pattern: docker-*
merge-multiple: true
- name: Load Docker images
run: ./backbone/.ci/loadDockerImages.sh
- name: Start compose stack
run: docker compose -f ./backbone/.ci/compose.test.yml -f ./backbone/.ci/compose.test.${{matrix.database}}.yml up --no-build --wait -d
- name: Install runtime dependencies
working-directory: ./runtime
run: npm ci
- name: Build
run: npm run build:node
working-directory: ./runtime
- name: Run transport Tests
working-directory: ./runtime/packages/transport
env:
NMSHD_TEST_BASEURL: http://localhost:5000
NMSHD_TEST_CLIENTID: test
NMSHD_TEST_CLIENTSECRET: test
NMSHD_TEST_BASEURL_ADMIN_API: http://localhost:5173
NMSHD_TEST_ADMIN_API_KEY: test
APPSETTINGS_OVERRIDE_LOCATION: ${{ github.workspace }}/backbone/.ci/appsettings.override.${{matrix.database}}.docker.json
BACKBONE_VERSION: 0.0.1
run: npm run test:local:lokijs
- name: Save Docker Logs
if: failure()
run: docker compose -f ./backbone/.ci/compose.test.yml -f ./backbone/.ci/compose.test.${{matrix.database}}.yml logs > logs.txt
- name: Archive logs
if: failure()
uses: actions/upload-artifact@v4
with:
name: transport-test-${{matrix.database}}-docker-logs
path: logs.txt
- name: Stop compose stack
run: docker compose -f ./backbone/.ci/compose.test.${{matrix.database}}.yml -f ./backbone/.ci/compose.test.yml down
build-helm-chart:
name: Build Helm Chart
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install script dependencies
run: npm install --prefix ./.ci
- name: Build Helm Chart
run: ./.ci/helm/buildChart.js
env:
VERSION: 0.0.0
validate-licenses:
name: Validate Open Source Licenses
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Dotnet
uses: actions/setup-dotnet@v4
with:
dotnet-version: 9.x
- name: Install nuget-licenses tool
run: dotnet tool install --global nuget-license
- name: Show Allowed Licenses
run: cat ./.ci/allowedLicenses.json
- name: Show Ignored Packages
run: cat ./.ci/ignoredPackages.json
- name: Restore Solution
run: dotnet restore /p:ContinuousIntegrationBuild=true ./Backbone.sln
- name: Validate Licenses
run: nuget-license --input ./Backbone.sln --allowed-license-types ./.ci/allowedLicenses.json --ignored-packages ./.ci/ignoredPackages.json --output table --error-only