Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
9779a82
Implement auth and run sync as part of the app
MelbourneDeveloper Dec 22, 2025
0182635
Split the dashboard tests up and fix others
MelbourneDeveloper Dec 22, 2025
b839543
Changes from the gigs project
MelbourneDeveloper Dec 28, 2025
9ed756b
Fixes
MelbourneDeveloper Dec 29, 2025
67ffe33
Fixes
MelbourneDeveloper Dec 29, 2025
8a13350
Fixes
MelbourneDeveloper Dec 29, 2025
67f0fe9
Cleanup
MelbourneDeveloper Dec 29, 2025
742414b
Merge the two branches
MelbourneDeveloper Dec 29, 2025
525161c
Fixes
MelbourneDeveloper Dec 29, 2025
53895a0
fix tests
MelbourneDeveloper Dec 29, 2025
7dfda15
Formatting and test fixes
MelbourneDeveloper Dec 29, 2025
2e40792
Fixes
MelbourneDeveloper Dec 29, 2025
a4ccf0b
PR prep
MelbourneDeveloper Dec 29, 2025
34f2bd4
Fixes
MelbourneDeveloper Dec 29, 2025
bcef625
Stuff
MelbourneDeveloper Dec 29, 2025
4892c1e
Fixes
MelbourneDeveloper Dec 29, 2025
17dc7f0
Spec work
MelbourneDeveloper Dec 29, 2025
55d9919
Reorient the migrations system
MelbourneDeveloper Dec 29, 2025
e0e82bb
Fixing up migrations
MelbourneDeveloper Dec 29, 2025
d8f5c61
Fixes
MelbourneDeveloper Dec 30, 2025
e60a0d2
Fixes
MelbourneDeveloper Dec 30, 2025
38e793f
Remove antlr n stuff
MelbourneDeveloper Dec 30, 2025
4391e3f
Fix build
MelbourneDeveloper Dec 31, 2025
b45c8ab
add h5
MelbourneDeveloper Dec 31, 2025
995cc65
fix h5 compiler
MelbourneDeveloper Dec 31, 2025
fe9bdd9
Try fix
MelbourneDeveloper Dec 31, 2025
755bea1
try fix playwright
MelbourneDeveloper Dec 31, 2025
e512392
Initial sketch
MelbourneDeveloper Dec 31, 2025
cb92566
Add eleventy
MelbourneDeveloper Dec 31, 2025
e8588b3
Add API docs
MelbourneDeveloper Dec 31, 2025
c2c73de
Generate docs with correct CSS
MelbourneDeveloper Dec 31, 2025
e2e18a6
Fixes
MelbourneDeveloper Dec 31, 2025
2a85a3c
Merge branch 'main' into website
MelbourneDeveloper Jan 1, 2026
bcff9bf
Fixes
MelbourneDeveloper Jan 1, 2026
2bcf575
Detect changes instead of running all tests
MelbourneDeveloper Jan 1, 2026
d591aba
Deploy website script
MelbourneDeveloper Jan 1, 2026
d2f12ae
Add deployment
MelbourneDeveloper Jan 1, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
287 changes: 257 additions & 30 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,24 @@ name: CI
on:
push:
branches: [main]
paths:
- '**/*.cs'
- '**/*.csproj'
- '**/*.sln'
- '**/Directory.Build.props'
- '**/Directory.Packages.props'
- '.github/workflows/ci.yml'
- '.config/dotnet-tools.json'
pull_request:
branches: [main]
paths:
- '**/*.cs'
- '**/*.csproj'
- '**/*.sln'
- '**/Directory.Build.props'
- '**/Directory.Packages.props'
- '.github/workflows/ci.yml'
- '.config/dotnet-tools.json'
workflow_dispatch:

env:
Expand All @@ -13,6 +29,68 @@ env:
DOTNET_CLI_TELEMETRY_OPTOUT: true

jobs:
# Detect which areas changed to conditionally run tests
changes:
name: Detect Changes
runs-on: ubuntu-latest
outputs:
dataprovider: ${{ steps.filter.outputs.dataprovider }}
lql: ${{ steps.filter.outputs.lql }}
migration: ${{ steps.filter.outputs.migration }}
sync: ${{ steps.filter.outputs.sync }}
gatekeeper: ${{ steps.filter.outputs.gatekeeper }}
samples: ${{ steps.filter.outputs.samples }}
dashboard: ${{ steps.filter.outputs.dashboard }}
steps:
- uses: actions/checkout@v4

- uses: dorny/paths-filter@v3
id: filter
with:
filters: |
dataprovider:
- 'DataProvider/**'
- 'Directory.Build.props'
- 'Directory.Packages.props'
lql:
- 'Lql/**'
- 'DataProvider/**'
- 'Directory.Build.props'
- 'Directory.Packages.props'
migration:
- 'Migration/**'
- 'Directory.Build.props'
- 'Directory.Packages.props'
sync:
- 'Sync/**'
- 'Migration/**'
- 'Directory.Build.props'
- 'Directory.Packages.props'
gatekeeper:
- 'Gatekeeper/**'
- 'DataProvider/**'
- 'Migration/**'
- 'Directory.Build.props'
- 'Directory.Packages.props'
samples:
- 'Samples/**'
- 'DataProvider/**'
- 'Sync/**'
- 'Migration/**'
- 'Gatekeeper/**'
- 'Directory.Build.props'
- 'Directory.Packages.props'
dashboard:
- 'Samples/Dashboard/**'
- 'Samples/Clinical/**'
- 'Samples/Scheduling/**'
- 'DataProvider/**'
- 'Sync/**'
- 'Migration/**'
- 'Gatekeeper/**'
- 'Directory.Build.props'
- 'Directory.Packages.props'

build:
name: Build
runs-on: ubuntu-latest
Expand Down Expand Up @@ -46,22 +124,59 @@ jobs:
- name: Build
run: dotnet build --no-restore -c Release

# Tests that only need SQLite (no Docker)
unit-tests:
name: Unit Tests
# DataProvider tests
dataprovider-tests:
name: DataProvider Tests
runs-on: ubuntu-latest
needs: build
needs: [build, changes]
if: needs.changes.outputs.dataprovider == 'true'
strategy:
fail-fast: false
matrix:
project:
- DataProvider/DataProvider.Tests
- DataProvider/DataProvider.Example.Tests
steps:
- uses: actions/checkout@v4

- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: ${{ env.DOTNET_VERSION }}

- name: Cache NuGet packages
uses: actions/cache@v4
with:
path: ~/.nuget/packages
key: ${{ runner.os }}-nuget-${{ hashFiles('**/*.csproj') }}
restore-keys: |
${{ runner.os }}-nuget-

- name: Restore
run: dotnet restore ${{ matrix.project }}

- name: Test
run: dotnet test ${{ matrix.project }} --no-restore --verbosity normal --logger "trx;LogFileName=test-results.trx"

- name: Upload test results
uses: actions/upload-artifact@v4
if: always()
with:
name: test-results-dataprovider-${{ strategy.job-index }}
path: '**/TestResults/*.trx'

# LQL tests
lql-tests:
name: LQL Tests
runs-on: ubuntu-latest
needs: [build, changes]
if: needs.changes.outputs.lql == 'true'
strategy:
fail-fast: false
matrix:
project:
- Lql/Lql.Tests
- Lql/LqlCli.SQLite.Tests
- Migration/Migration.Tests
- Sync/Sync.Tests
- Sync/Sync.SQLite.Tests
steps:
- uses: actions/checkout@v4

Expand All @@ -88,34 +203,63 @@ jobs:
uses: actions/upload-artifact@v4
if: always()
with:
name: test-results-unit-${{ strategy.job-index }}
name: test-results-lql-${{ strategy.job-index }}
path: '**/TestResults/*.trx'

# API integration tests (SQLite, no Docker)
api-tests:
name: API Tests
# Migration tests
migration-tests:
name: Migration Tests
runs-on: ubuntu-latest
needs: build
needs: [build, changes]
if: needs.changes.outputs.migration == 'true'
steps:
- uses: actions/checkout@v4

- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: ${{ env.DOTNET_VERSION }}

- name: Cache NuGet packages
uses: actions/cache@v4
with:
path: ~/.nuget/packages
key: ${{ runner.os }}-nuget-${{ hashFiles('**/*.csproj') }}
restore-keys: |
${{ runner.os }}-nuget-

- name: Restore
run: dotnet restore Migration/Migration.Tests

- name: Test
run: dotnet test Migration/Migration.Tests --no-restore --verbosity normal --logger "trx;LogFileName=test-results.trx"

- name: Upload test results
uses: actions/upload-artifact@v4
if: always()
with:
name: test-results-migration
path: '**/TestResults/*.trx'

# Sync SQLite tests (no Docker)
sync-sqlite-tests:
name: Sync SQLite Tests
runs-on: ubuntu-latest
needs: [build, changes]
if: needs.changes.outputs.sync == 'true'
strategy:
fail-fast: false
matrix:
project:
- Gatekeeper/Gatekeeper.Api.Tests
- Samples/Clinical/Clinical.Api.Tests
- Samples/Scheduling/Scheduling.Api.Tests
- Samples/Dashboard/Dashboard.Web.Tests
- Sync/Sync.Tests
- Sync/Sync.SQLite.Tests
steps:
- uses: actions/checkout@v4

- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: |
8.0.x
${{ env.DOTNET_VERSION }}

- name: Restore .NET tools
run: dotnet tool restore
dotnet-version: ${{ env.DOTNET_VERSION }}

- name: Cache NuGet packages
uses: actions/cache@v4
Expand All @@ -135,14 +279,15 @@ jobs:
uses: actions/upload-artifact@v4
if: always()
with:
name: test-results-api-${{ strategy.job-index }}
name: test-results-sync-sqlite-${{ strategy.job-index }}
path: '**/TestResults/*.trx'

# Tests that need Docker for Postgres (via Testcontainers)
postgres-tests:
name: Postgres Tests
# Sync Postgres tests (need Docker)
sync-postgres-tests:
name: Sync Postgres Tests
runs-on: ubuntu-latest
needs: build
needs: [build, changes]
if: needs.changes.outputs.sync == 'true'
strategy:
fail-fast: false
matrix:
Expand Down Expand Up @@ -172,21 +317,103 @@ jobs:
- name: Test
run: dotnet test ${{ matrix.project }} --no-restore --verbosity normal --logger "trx;LogFileName=test-results.trx"
env:
# Testcontainers will automatically use the Docker daemon
TESTCONTAINERS_RYUK_DISABLED: false

- name: Upload test results
uses: actions/upload-artifact@v4
if: always()
with:
name: test-results-postgres-${{ strategy.job-index }}
name: test-results-sync-postgres-${{ strategy.job-index }}
path: '**/TestResults/*.trx'

# Gatekeeper API tests
gatekeeper-tests:
name: Gatekeeper Tests
runs-on: ubuntu-latest
needs: [build, changes]
if: needs.changes.outputs.gatekeeper == 'true'
steps:
- uses: actions/checkout@v4

- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: ${{ env.DOTNET_VERSION }}

- name: Cache NuGet packages
uses: actions/cache@v4
with:
path: ~/.nuget/packages
key: ${{ runner.os }}-nuget-${{ hashFiles('**/*.csproj') }}
restore-keys: |
${{ runner.os }}-nuget-

- name: Restore
run: dotnet restore Gatekeeper/Gatekeeper.Api.Tests

- name: Test
run: dotnet test Gatekeeper/Gatekeeper.Api.Tests --no-restore --verbosity normal --logger "trx;LogFileName=test-results.trx"

- name: Upload test results
uses: actions/upload-artifact@v4
if: always()
with:
name: test-results-gatekeeper
path: '**/TestResults/*.trx'

# Sample API tests
sample-api-tests:
name: Sample API Tests
runs-on: ubuntu-latest
needs: [build, changes]
if: needs.changes.outputs.samples == 'true'
strategy:
fail-fast: false
matrix:
project:
- Samples/Clinical/Clinical.Api.Tests
- Samples/Scheduling/Scheduling.Api.Tests
- Samples/Dashboard/Dashboard.Web.Tests
steps:
- uses: actions/checkout@v4

- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: |
8.0.x
${{ env.DOTNET_VERSION }}

- name: Restore .NET tools
run: dotnet tool restore

- name: Cache NuGet packages
uses: actions/cache@v4
with:
path: ~/.nuget/packages
key: ${{ runner.os }}-nuget-${{ hashFiles('**/*.csproj') }}
restore-keys: |
${{ runner.os }}-nuget-

- name: Restore
run: dotnet restore ${{ matrix.project }}

- name: Test
run: dotnet test ${{ matrix.project }} --no-restore --verbosity normal --logger "trx;LogFileName=test-results.trx"

- name: Upload test results
uses: actions/upload-artifact@v4
if: always()
with:
name: test-results-sample-api-${{ strategy.job-index }}
path: '**/TestResults/*.trx'

# Dashboard E2E tests (need Playwright browser)
e2e-tests:
name: Dashboard E2E Tests
runs-on: ubuntu-latest
needs: build
needs: [build, changes]
if: needs.changes.outputs.dashboard == 'true'
steps:
- uses: actions/checkout@v4

Expand Down
Loading
Loading