Skip to content

Build

Build #11162

Workflow file for this run

name: Build
on:
schedule:
- cron: '0 10 * * *' # every day at 10am
push:
branches:
- main
tags:
- 'v*.*.*'
pull_request:
branches:
- main
merge_group:
permissions: read-all
concurrency:
group: ${{ github.workflow }}-${{ github.event_name == 'pull_request' && github.ref || github.run_id }}
cancel-in-progress: true
env:
# renovate: datasource=github-release-attachments depName=samply/blazectl
BLAZECTL_VERSION: v1.3.0
BLAZECTL_CHECKSUM: 2e75ddfb9b35d0e78b5dda4d7ae4d08c45037729f5a45affd59ddb7252b75aba
# renovate: datasource=github-release-attachments depName=hapifhir/org.hl7.fhir.core
VALIDATOR_VERSION: 6.5.21
VALIDATOR_CHECKSUM: e6a0ff10247a77e48faa5b34eeec1b136d6a5580a0616d70274ccd4cf24b6040
jobs:
fmt:
runs-on: ubuntu-24.04
steps:
- name: Setup Clojure
uses: DeLaGuardo/setup-clojure@3fe9b3ae632c6758d0b7757b0838606ef4287b08 # 13.4
with:
cljfmt: 0.13.1
- name: Check out Git repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
- name: Check Formatting
run: make fmt
lint:
runs-on: ubuntu-24.04
steps:
- name: Setup Clojure
uses: DeLaGuardo/setup-clojure@3fe9b3ae632c6758d0b7757b0838606ef4287b08 # 13.4
with:
clj-kondo: '2025.09.22'
- name: Check out Git repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
- name: Install Actionlint
run: .github/scripts/install-actionlint.sh
- name: Lint
run: make lint
job-ig:
runs-on: ubuntu-24.04
steps:
- name: Check out Git repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
- name: Setup Node
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6
with:
node-version-file: .nvmrc
- name: Build
working-directory: job-ig
run: make build
- name: Validate
working-directory: job-ig
run: make validate
- name: Upload Profiles
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with:
name: job-ig-profiles
path: job-ig/fsh-generated/resources/*.json
test:
strategy:
matrix:
module:
- admin-api
- anomaly
- async
- byte-buffer
- byte-string
- cache-collector
- cassandra
- coll
- cql
- db
- db-resource-store
- db-resource-store-cassandra
- db-tx-log
- db-tx-log-kafka
- executor
- extern-terminology-service
- fhir-client
- fhir-path
- fhir-structure
- http-client
- interaction
- jepsen
- job-async-interaction
- job-compact
- job-re-index
- job-scheduler
- job-util
- kv
- luid
- metrics
- module-base
- openid-auth
- operation-code-system-validate-code
- operation-compact
- operation-graph
- operation-graphql
- operation-measure-evaluate-measure
- operation-patient-everything
- operation-patient-purge
- operation-totals
- operation-value-set-expand
- operation-value-set-validate-code
- page-id-cipher
- page-store
- page-store-cassandra
- rest-api
- rest-util
- rocksdb
- scheduler
- server
- terminology-service
- thread-pool-executor-collector
java-version:
- '21'
- '25'
exclude:
- module: jepsen
java-version: '21'
needs: job-ig
runs-on: ubuntu-24.04
steps:
- name: Setup Java
uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5
with:
distribution: 'temurin'
java-version: ${{ matrix.java-version }}
- name: Setup Clojure
uses: DeLaGuardo/setup-clojure@3fe9b3ae632c6758d0b7757b0838606ef4287b08 # 13.4
with:
cli: '1.12.3.1577'
- name: Check out Git repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
- name: Cache Local Maven Repo
uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4
with:
path: ~/.m2/repository
key: ${{ runner.os }}-temurin-${{ matrix.java-version }}-maven-${{ matrix.module }}-${{ hashFiles(format('modules/{0}/deps.edn', matrix.module)) }}
- name: Cache Clojure GitLibs
uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4
with:
path: ~/.gitlibs
key: ${{ runner.os }}-gitlibs-${{ matrix.module }}-${{ hashFiles(format('modules/{0}/deps.edn', matrix.module)) }}
- name: Download Job IG Profiles
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
with:
name: job-ig-profiles
path: job-ig/fsh-generated/resources
- name: Test
run: make -C modules/${{ matrix.module }} test
- name: Test Coverage
if: ${{ matrix.java-version == '21' && matrix.module != 'db' && matrix.module != 'jepsen' }}
run: make -C modules/${{ matrix.module }} test-coverage
- name: Fix Codecov Path
if: ${{ matrix.java-version == '21' && matrix.module != 'db' && matrix.module != 'jepsen' }}
run: .github/scripts/fix-codecov-path.sh ${{ matrix.module }}
- name: Upload Coverage Report
if: ${{ matrix.java-version == '21' && matrix.module != 'db' && matrix.module != 'jepsen' }}
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with:
name: coverage-report-${{ matrix.module }}
path: modules/${{ matrix.module }}/target/coverage/codecov.json
test-slow:
strategy:
matrix:
module:
- db
java-version:
- '21'
- '25'
needs: job-ig
runs-on: ubuntu-24.04
steps:
- name: Setup Java
uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5
with:
distribution: 'temurin'
java-version: ${{ matrix.java-version }}
- name: Setup Clojure
uses: DeLaGuardo/setup-clojure@3fe9b3ae632c6758d0b7757b0838606ef4287b08 # 13.4
with:
cli: '1.12.3.1577'
- name: Check out Git repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
- name: Cache Local Maven Repo
uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4
with:
path: ~/.m2/repository
key: ${{ runner.os }}-temurin-${{ matrix.java-version }}-maven-${{ matrix.module }}-${{ hashFiles(format('modules/{0}/deps.edn', matrix.module)) }}
- name: Cache Clojure GitLibs
uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4
with:
path: ~/.gitlibs
key: ${{ runner.os }}-gitlibs-${{ matrix.module }}-${{ hashFiles(format('modules/{0}/deps.edn', matrix.module)) }}
- name: Download Job IG Profiles
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
with:
name: job-ig-profiles
path: job-ig/fsh-generated/resources
- name: Test
run: make -C modules/${{ matrix.module }} test-slow
# Special treatment, because it runs much longer as the other modules.
test-coverage-db:
strategy:
matrix:
kind:
- 'normal'
- 'slow'
needs: job-ig
runs-on: ubuntu-24.04
steps:
- name: Setup Java
uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5
with:
distribution: 'temurin'
java-version: '21'
- name: Setup Clojure
uses: DeLaGuardo/setup-clojure@3fe9b3ae632c6758d0b7757b0838606ef4287b08 # 13.4
with:
cli: '1.12.3.1577'
- name: Check out Git repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
- name: Cache Local Maven Repo
uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4
with:
path: ~/.m2/repository
key: ${{ runner.os }}-temurin-21-maven-db-coverage-${{ hashFiles('modules/db/deps.edn') }}
- name: Cache Clojure GitLibs
uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4
with:
path: ~/.gitlibs
key: ${{ runner.os }}-gitlibs-db-coverage-${{ hashFiles('modules/db/deps.edn') }}
- name: Download Job IG Profiles
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
with:
name: job-ig-profiles
path: job-ig/fsh-generated/resources
- name: Test Coverage
if: ${{ matrix.kind == 'normal' }}
run: make -C modules/db test-coverage
- name: Test Coverage Slow
if: ${{ matrix.kind == 'slow' }}
run: make -C modules/db test-coverage-slow
- name: Fix Codecov Path
run: .github/scripts/fix-codecov-path.sh db
- name: Upload Coverage Report
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with:
name: coverage-report-db-${{ matrix.kind }}
path: modules/db/target/coverage/codecov.json
test-root:
strategy:
matrix:
java-version:
- '21'
- '25'
needs: job-ig
runs-on: ubuntu-24.04
steps:
- name: Setup Java
uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5
with:
distribution: 'temurin'
java-version: ${{ matrix.java-version }}
- name: Setup Clojure
uses: DeLaGuardo/setup-clojure@3fe9b3ae632c6758d0b7757b0838606ef4287b08 # 13.4
with:
cli: '1.12.3.1577'
- name: Check out Git repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
- name: Cache Local Maven Repo
uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4
with:
path: ~/.m2/repository
key: ${{ runner.os }}-temurin-${{ matrix.java-version }}-maven-${{ hashFiles('deps.edn') }}
- name: Cache Clojure GitLibs
uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4
with:
path: ~/.gitlibs
key: ${{ runner.os }}-gitlibs-${{ hashFiles('deps.edn') }}
- name: Download Job IG Profiles
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
with:
name: job-ig-profiles
path: job-ig/fsh-generated/resources
- name: Test
run: make test-root
upload-coverage:
needs: [ test, test-coverage-db ]
runs-on: ubuntu-24.04
steps:
- name: Download Coverage Reports
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
with:
pattern: coverage-report-*
- name: Codecov Upload
uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # v5
with:
name: codecov-umbrella
version: 'v10.1.1'
token: ${{ secrets.CODECOV_TOKEN }}
fail_ci_if_error: true
build:
needs: job-ig
runs-on: ubuntu-24.04
steps:
- name: Setup Java
uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5
with:
distribution: 'temurin'
java-version: '21'
- name: Setup Clojure
uses: DeLaGuardo/setup-clojure@3fe9b3ae632c6758d0b7757b0838606ef4287b08 # 13.4
with:
cli: '1.12.3.1577'
- name: Check out Git repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
- name: Cache Local Maven Repo
uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4
with:
path: ~/.m2/repository
key: ${{ runner.os }}-temurin-21-maven-build-${{ hashFiles('**/deps.edn') }}
- name: Cache Clojure GitLibs
uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4
with:
path: ~/.gitlibs
key: ${{ runner.os }}-gitlibs-build-${{ hashFiles('**/deps.edn') }}
- name: Download Job IG Profiles
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
with:
name: job-ig-profiles
path: job-ig/fsh-generated/resources
- name: Build Uberjar
run: make uberjar
- name: Upload Blaze Uberjar
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with:
name: blaze-uberjar
path: target/blaze-*-standalone.jar
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v3
- name: Build and Export to Docker
uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v6
with:
context: .
tags: blaze:latest
outputs: type=docker,dest=/tmp/blaze.tar
- name: Upload Blaze Image
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with:
name: blaze-image
path: /tmp/blaze.tar
build-frontend:
runs-on: ubuntu-24.04
steps:
- name: Check out Git repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
- name: Setup Node
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6
with:
node-version-file: .nvmrc
- name: Build Frontend
run: make build-frontend
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v3
- name: Build and Export to Docker
uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v6
with:
context: modules/frontend
tags: blaze-frontend:latest
outputs: type=docker,dest=/tmp/blaze-frontend.tar
- name: Upload Blaze Image
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with:
name: blaze-frontend-image
path: /tmp/blaze-frontend.tar
image-scan:
needs: [ build, build-frontend ]
runs-on: ubuntu-24.04
permissions:
security-events: write
strategy:
matrix:
image:
- blaze
- blaze-frontend
steps:
- name: Download Image
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
with:
name: ${{ matrix.image }}-image
path: /tmp
- name: Load Image
run: docker load --input /tmp/${{ matrix.image }}.tar
- name: Check out Git repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
- name: Run Trivy Vulnerability Scanner
uses: aquasecurity/trivy-action@b6643a29fecd7f34b3597bc6acb0a98b03d33ff8 # 0.33.1
with:
image-ref: ${{ matrix.image }}:latest
format: sarif
output: trivy-results.sarif
severity: 'CRITICAL,HIGH'
timeout: '15m0s'
- name: Upload Trivy Scan Results to GitHub Security Tab
if: ${{ (github.repository_owner == 'samply') || (vars.IMAGE_SCAN_UPLOAD == 'true') }}
uses: github/codeql-action/upload-sarif@cf1bb45a277cb3c205638b2cd5c984db1c46a412 # v4
with:
sarif_file: trivy-results.sarif
cql-expr-cache-test:
needs: build
runs-on: ubuntu-24.04
steps:
- name: Check out Git repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
- name: Install Blazectl
env:
GH_TOKEN: ${{ github.token }}
run: .github/scripts/install-blazectl.sh
- name: Download Blaze Image
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
with:
name: blaze-image
path: /tmp
- name: Load Blaze Image
run: docker load --input /tmp/blaze.tar
- name: Run Blaze
run: docker run --name blaze -d -e JAVA_TOOL_OPTIONS=-Xmx2g -e ENABLE_ADMIN_API=true -e CQL_EXPR_CACHE_SIZE=1000 -p 8080:8080 -p 8081:8081 -v blaze-data:/app/data blaze:latest
- name: Wait for Blaze
run: .github/scripts/wait-for-url.sh http://localhost:8080/health
- name: Docker Logs
run: docker logs blaze
- name: Check Capability Statement
run: .github/scripts/check-capability-statement.sh
- name: Ensure that the State of PatientLastChange Index is Current
run: .github/scripts/check-patient-last-change-index-state.sh current
- name: Load Data
run: blazectl --no-progress --server http://localhost:8080/fhir upload .github/test-data/synthea
- name: Prometheus Metrics
run: .github/scripts/test-cql-expr-cache-metrics.sh
- name: Check Total-Number of Resources are 92299
run: .github/scripts/check-total-number-of-resources.sh 92299
- name: Evaluate CQL Query 1
run: .github/scripts/evaluate-measure.sh q1 56
- name: Evaluate CQL Query 1 - Blazectl
run: .github/scripts/evaluate-measure-blazectl.sh q1 56
- name: Evaluate CQL Query 1 - Subject List
run: .github/scripts/evaluate-measure-subject-list.sh q1 56
- name: Evaluate CQL Query 1 - Subject List - Async
run: .github/scripts/evaluate-measure-subject-list-async.sh q1 56
- name: Evaluate CQL Query 1 on Individual Patients
run: .github/scripts/evaluate-patient-q1-measure.sh
- name: Evaluate CQL Query 2
run: .github/scripts/evaluate-measure.sh q2 42
- name: Evaluate CQL Query 2 - Blazectl
run: .github/scripts/evaluate-measure-blazectl.sh q2 42
- name: Evaluate CQL Query 2 - Subject List
run: .github/scripts/evaluate-measure-subject-list.sh q2 42
- name: Evaluate CQL Query 2 - Subject List - Async
run: .github/scripts/evaluate-measure-subject-list-async.sh q2 42
- name: Evaluate CQL Query 4
run: .github/scripts/evaluate-measure.sh q4 0
- name: Evaluate CQL Query 4 - Blazectl
run: .github/scripts/evaluate-measure-blazectl.sh q4 0
- name: Evaluate CQL Query 4 - Subject List
run: .github/scripts/evaluate-measure-subject-list.sh q4 0
- name: Evaluate CQL Query 4 - Subject List - Async
run: .github/scripts/evaluate-measure-subject-list-async.sh q4 0
- name: Evaluate CQL Query 7
run: .github/scripts/evaluate-measure.sh q7 81
- name: Evaluate CQL Query 7 - Blazectl
run: .github/scripts/evaluate-measure-blazectl.sh q7 81
- name: Evaluate CQL Query 7 - Subject List
run: .github/scripts/evaluate-measure-subject-list.sh q7 81
- name: Evaluate CQL Query 7 - Subject List - Async
run: .github/scripts/evaluate-measure-subject-list-async.sh q7 81
- name: Evaluate CQL Query 14
run: .github/scripts/evaluate-measure.sh q14 96
- name: Check Bloom Filter
run: .github/scripts/check-bloom-filter.sh a08d0235112a8033c36c5d33564aaa00f4190281e4db8f7ec1d8d55cd7f4c56f 96
- name: Evaluate CQL Query 14 - Blazectl
run: .github/scripts/evaluate-measure-blazectl.sh q14 96
- name: Evaluate CQL Query 14 - Subject List
run: .github/scripts/evaluate-measure-subject-list.sh q14 96
- name: Evaluate CQL Query 14 - Subject List - Async
run: .github/scripts/evaluate-measure-subject-list-async.sh q14 96
- name: Evaluate CQL Query 17
run: .github/scripts/evaluate-measure.sh q17 120
- name: Evaluate CQL Query 17 - Blazectl
run: .github/scripts/evaluate-measure-blazectl.sh q17 120
- name: Evaluate CQL Query 17 - Subject List
run: .github/scripts/evaluate-measure-subject-list.sh q17 120
- name: Evaluate CQL Query 17 - Subject List - Async
run: .github/scripts/evaluate-measure-subject-list-async.sh q17 120
- name: Evaluate CQL Query 20 - Blazectl
run: .github/scripts/evaluate-measure-blazectl-stratifier.sh q20-stratifier-city 120
- name: Evaluate CQL Query 21 - Blazectl
run: .github/scripts/evaluate-measure-blazectl-stratifier.sh q21-stratifier-city-of-only-women 64
- name: Evaluate CQL Query 26 - Blazectl
run: .github/scripts/evaluate-measure-blazectl-stratifier.sh q26-stratifier-bmi 120
- name: Evaluate CQL Query 27 - Blazectl
run: .github/scripts/evaluate-measure-blazectl-stratifier.sh q27-stratifier-calculated-bmi 120
- name: Evaluate CQL Query 32 - Blazectl
run: .github/scripts/evaluate-measure-blazectl-stratifier.sh q32-stratifier-underweight 120
- name: Evaluate CQL Query 36
run: .github/scripts/evaluate-measure.sh q36-parameter 86
- name: Check Bloom Filter
run: .github/scripts/check-bloom-filter.sh fbb79d85457069c8e1926c949690deecd60d751942d5b0cd0b61c08e6029224c 86
- name: Evaluate CQL Query 36 - Subject List
run: .github/scripts/evaluate-measure-subject-list.sh q36-parameter 86
- name: Evaluate CQL Query 36 - Subject List - Async
run: .github/scripts/evaluate-measure-subject-list-async.sh q36-parameter 86
- name: Evaluate CQL Query 37
run: .github/scripts/evaluate-measure.sh q37-overlaps 24
- name: Check Bloom Filter
run: .github/scripts/check-bloom-filter.sh 9fe779d821d7647831331b490939aa0cdf314d76c9b2a9518ffaf559353db043 24
- name: Evaluate CQL Query 37 - Blazectl
run: .github/scripts/evaluate-measure-blazectl.sh q37-overlaps 24
- name: Evaluate CQL Query 37 - Subject List
run: .github/scripts/evaluate-measure-subject-list.sh q37-overlaps 24
- name: Evaluate CQL Query 37 - Subject List - Async
run: .github/scripts/evaluate-measure-subject-list-async.sh q37-overlaps 24
- name: Evaluate CQL Query 46
run: .github/scripts/evaluate-measure.sh q46-between-date 19
- name: Check Bloom Filter
run: .github/scripts/check-bloom-filter.sh 237bcfac3e879272f508e143095e4a0025e1b54505bbb2cf36fbda83dec237f2 19
- name: Evaluate CQL Query 46 - Blazectl
run: .github/scripts/evaluate-measure-blazectl.sh q46-between-date 19
integration-test:
needs: build
runs-on: ubuntu-24.04
strategy:
matrix:
variant:
- standalone
- distributed
steps:
- name: Check out Git repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
- name: Install Blazectl
env:
GH_TOKEN: ${{ github.token }}
run: .github/scripts/install-blazectl.sh
- name: Install xq
run: .github/scripts/install-xq.sh
- name: Download Blaze Image
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
with:
name: blaze-image
path: /tmp
- name: Load Blaze Image
run: docker load --input /tmp/blaze.tar
- name: Run Blaze
run: docker run --name blaze -d -e JAVA_TOOL_OPTIONS=-Xmx2g -e ALLOW_MULTIPLE_DELETE=true -e ENABLE_INTERACTION_DELETE_HISTORY=true -e ENABLE_OPERATION_PATIENT_PURGE=true -e ENABLE_OPERATION_GRAPH=true -p 8080:8080 -p 8081:8081 --read-only --tmpfs /tmp:exec -v blaze-data:/app/data blaze:latest
if: ${{ matrix.variant == 'standalone' }}
- name: Run Kafka, Cassandra and Blaze
run: docker compose -f .github/distributed-test/docker-compose.yml up -d
if: ${{ matrix.variant == 'distributed' }}
- name: Wait for Blaze
run: .github/scripts/wait-for-url.sh http://localhost:8080/health
if: ${{ matrix.variant == 'standalone' }}
- name: Wait for Blaze 1
run: .github/scripts/wait-for-url.sh http://localhost:8081/metrics
if: ${{ matrix.variant == 'distributed' }}
- name: Wait for Blaze 2
run: .github/scripts/wait-for-url.sh http://localhost:8082/metrics
if: ${{ matrix.variant == 'distributed' }}
- name: Docker Logs
run: docker logs blaze
if: ${{ matrix.variant == 'standalone' }}
- name: Docker Logs Kafka
run: docker compose -f .github/distributed-test/docker-compose.yml logs kafka
if: ${{ matrix.variant == 'distributed' }}
- name: Docker Logs Cassandra 1
run: docker compose -f .github/distributed-test/docker-compose.yml logs cassandra-1
if: ${{ matrix.variant == 'distributed' }}
- name: Docker Logs Cassandra 2
run: docker compose -f .github/distributed-test/docker-compose.yml logs cassandra-2
if: ${{ matrix.variant == 'distributed' }}
- name: Docker Logs Blaze 1
run: docker compose -f .github/distributed-test/docker-compose.yml logs blaze-1
if: ${{ matrix.variant == 'distributed' }}
- name: Docker Logs Blaze 2
run: docker compose -f .github/distributed-test/docker-compose.yml logs blaze-2
if: ${{ matrix.variant == 'distributed' }}
- name: Docker Stats
run: docker stats --no-stream
- name: Check Capability Statement
run: .github/scripts/check-capability-statement.sh
- name: Check Capability Statement Filtered by _elements
run: .github/scripts/check-capability-statement-filtered.sh
- name: Check Capability Statement Caching
run: .github/scripts/check-capability-statement-caching.sh
- name: Check Referential Integrity Enforced
run: .github/scripts/check-referential-integrity-enforced.sh
- name: Check that the Patient StructureDefinition is read-only
run: .github/scripts/check-resource-read-only.sh StructureDefinition "http://hl7.org/fhir/StructureDefinition/Patient"
- name: Load Data
run: blazectl --no-progress --server http://localhost:8080/fhir upload .github/test-data/synthea
- name: Check Total-Number of Resources are 92299
run: .github/scripts/check-total-number-of-resources.sh 92299
- name: Check Resource Totals
run: .github/scripts/check-resource-totals.sh
- name: Count Resources
run: blazectl count-resources --server http://localhost:8080/fhir
- name: Download All Resources
run: .github/scripts/download-all-resources.sh
- name: Download Patient Resources
run: .github/scripts/download-resources.sh Patient
- name: Download Male Patient Resources
run: .github/scripts/download-resources-query.sh Patient "gender=male" 56
- name: Download Female Patient Resources
run: .github/scripts/download-resources-query.sh Patient "gender=female" 64
- name: Download Patient Resources - Including Observation, Condition, Encounter and Procedure
run: .github/scripts/revinclude.sh
- name: Download Observation Resources
run: .github/scripts/download-resources.sh Observation
- name: Check that Condition Resources don't contain Categories in Summary Mode
run: .github/scripts/check-summary-mode.sh Condition category
- name: Check that Observation Resources don't contain Categories in Summary Mode
run: .github/scripts/check-summary-mode.sh Observation category
- name: Check that Encounter Resources don't contain Periods in Summary Mode
run: .github/scripts/check-summary-mode.sh Encounter period
- name: Check that Condition Resources don't contain Categories in Summary Mode using search-system
run: .github/scripts/check-summary-mode-system.sh Condition category
- name: Check that Observation Resources don't contain Categories in Summary Mode using search-system
run: .github/scripts/check-summary-mode-system.sh Observation category
- name: Check that Encounter Resources don't contain Periods in Summary Mode using search-system
run: .github/scripts/check-summary-mode-system.sh Encounter period
- name: Download Observation Resources with special LOINC Codes
run: .github/scripts/download-resources-query.sh Observation "code=http://loinc.org|10230-1,http://loinc.org|10480-2,http://loinc.org|10834-0,http://loinc.org|14804-9,http://loinc.org|14959-1,http://loinc.org|1742-6,http://loinc.org|1751-7,http://loinc.org|17861-6,http://loinc.org|18262-6,http://loinc.org|19123-9" 2399
- name: Download Observation Resources with special LOINC Codes and Category Laboratory
run: .github/scripts/download-resources-query.sh Observation "category=laboratory&code=http://loinc.org|10230-1,http://loinc.org|10480-2,http://loinc.org|10834-0,http://loinc.org|14804-9,http://loinc.org|14959-1,http://loinc.org|1742-6,http://loinc.org|1751-7,http://loinc.org|17861-6,http://loinc.org|18262-6,http://loinc.org|19123-9" 2399
- name: Download Observation Resources with all LOINC Codes
run: .github/scripts/download-resources-query.sh Observation "code=http://loinc.org|10230-1,http://loinc.org|10480-2,http://loinc.org|10834-0,http://loinc.org|14804-9,http://loinc.org|14959-1,http://loinc.org|1742-6,http://loinc.org|1751-7,http://loinc.org|17861-6,http://loinc.org|18262-6,http://loinc.org|19123-9,http://loinc.org|1920-8,http://loinc.org|1960-4,http://loinc.org|1975-2,http://loinc.org|1988-5,http://loinc.org|19926-5,http://loinc.org|19994-3,http://loinc.org|2019-8,http://loinc.org|2028-9,http://loinc.org|20454-5,http://loinc.org|20505-4,http://loinc.org|20565-8,http://loinc.org|20570-8,http://loinc.org|2069-3,http://loinc.org|2075-0,http://loinc.org|2085-9,http://loinc.org|2093-3,http://loinc.org|21000-5,http://loinc.org|2157-6,http://loinc.org|2160-0,http://loinc.org|21905-5,http://loinc.org|21906-3,http://loinc.org|21907-1,http://loinc.org|21908-9,http://loinc.org|2276-4,http://loinc.org|2339-0,http://loinc.org|2345-7,http://loinc.org|2498-4,http://loinc.org|2500-7,http://loinc.org|2502-3,http://loinc.org|2514-8,http://loinc.org|2532-0,http://loinc.org|25428-4,http://loinc.org|2571-8,http://loinc.org|26881-3,http://loinc.org|2703-7,http://loinc.org|2708-6,http://loinc.org|2713-6,http://loinc.org|2744-1,http://loinc.org|2823-3,http://loinc.org|28245-9,http://loinc.org|2857-1,http://loinc.org|2885-2,http://loinc.org|29463-7,http://loinc.org|2947-0,http://loinc.org|2951-2,http://loinc.org|3094-0,http://loinc.org|32167-9,http://loinc.org|32207-3,http://loinc.org|32465-7,http://loinc.org|32623-1,http://loinc.org|33728-7,http://loinc.org|33756-8,http://loinc.org|33762-6,http://loinc.org|33914-3,http://loinc.org|33959-8,http://loinc.org|38208-5,http://loinc.org|38265-5,http://loinc.org|38483-4,http://loinc.org|39156-5,http://loinc.org|44667-4,http://loinc.org|44963-7,http://loinc.org|4544-3,http://loinc.org|4548-4,http://loinc.org|46240-8,http://loinc.org|46288-7,http://loinc.org|48065-7,http://loinc.org|49765-1,http://loinc.org|55277-8,http://loinc.org|5767-9,http://loinc.org|5770-3,http://loinc.org|5778-6,http://loinc.org|57905-2,http://loinc.org|5792-7,http://loinc.org|5794-3,http://loinc.org|5797-6,http://loinc.org|5799-2,http://loinc.org|5802-4,http://loinc.org|5803-2,http://loinc.org|5804-0,http://loinc.org|5811-5,http://loinc.org|5902-2,http://loinc.org|59032-3,http://loinc.org|5905-5,http://loinc.org|59408-5,http://loinc.org|59557-9,http://loinc.org|59576-9,http://loinc.org|6075-6,http://loinc.org|6082-2,http://loinc.org|6085-5,http://loinc.org|6095-4,http://loinc.org|6106-9,http://loinc.org|6158-0,http://loinc.org|6189-5,http://loinc.org|6206-7,http://loinc.org|6246-3,http://loinc.org|6248-9,http://loinc.org|6273-7,http://loinc.org|6276-0,http://loinc.org|6298-4,http://loinc.org|6299-2,http://loinc.org|6301-6,http://loinc.org|63513-6,http://loinc.org|65750-2,http://loinc.org|66519-0,http://loinc.org|66524-0,http://loinc.org|66529-9,http://loinc.org|66534-9,http://loinc.org|6690-2,http://loinc.org|6768-6,http://loinc.org|6833-8,http://loinc.org|6844-5,http://loinc.org|69453-9,http://loinc.org|704-7,http://loinc.org|706-2,http://loinc.org|711-2,http://loinc.org|713-8,http://loinc.org|718-7,http://loinc.org|71802-3,http://loinc.org|72106-8,http://loinc.org|72166-2,http://loinc.org|72514-3,http://loinc.org|7258-7,http://loinc.org|731-0,http://loinc.org|736-9,http://loinc.org|742-7,http://loinc.org|751-8,http://loinc.org|75325-1,http://loinc.org|76690-7,http://loinc.org|770-8,http://loinc.org|77606-2,http://loinc.org|777-3,http://loinc.org|785-6,http://loinc.org|786-4,http://loinc.org|787-2,http://loinc.org|788-0,http://loinc.org|789-8,http://loinc.org|80382-5,http://loinc.org|80383-3,http://loinc.org|8302-2,http://loinc.org|8310-5,http://loinc.org|8331-1,http://loinc.org|8478-0,http://loinc.org|85318-4,http://loinc.org|85319-2,http://loinc.org|85337-4,http://loinc.org|85339-0,http://loinc.org|85352-3,http://loinc.org|85354-9,http://loinc.org|88020-3,http://loinc.org|88021-1,http://loinc.org|88040-1,http://loinc.org|88262-1,http://loinc.org|8867-4,http://loinc.org|89579-7,http://loinc.org|91148-7,http://loinc.org|92130-4,http://loinc.org|92131-2,http://loinc.org|92134-6,http://loinc.org|92138-7,http://loinc.org|92139-5,http://loinc.org|92140-3,http://loinc.org|92141-1,http://loinc.org|92142-9,http://loinc.org|9279-1,http://loinc.org|94040-3,http://loinc.org|94531-1,http://loinc.org|9843-4,http://loinc.org|99999-0" 42929
- name: Download Observation Resources of male Patients
run: .github/scripts/download-resources-query.sh Observation "patient.gender=male" 20466
- name: Download Observation Resources of male Patients Sorted by ID
run: .github/scripts/download-resources-query-sort.sh Observation "patient.gender=male" "_id" 20466
- name: Download Observation Resources of male Patients Sorted Ascending by Last Updated
run: .github/scripts/download-resources-query-sort.sh Observation "patient.gender=male" "_lastUpdated" 20466
- name: Download Observation Resources of male Patients Sorted Descending by Last Updated
run: .github/scripts/download-resources-query-sort.sh Observation "patient.gender=male" "-_lastUpdated" 20466
- name: Download Laboratory Observation Resources Sorted by ID
run: .github/scripts/download-resources-query-sort.sh Observation "category=laboratory" "_id" 29206
- name: Download Laboratory Observation Resources Sorted Ascending by Last Updated
run: .github/scripts/download-resources-query-sort.sh Observation "category=laboratory" "_lastUpdated" 29206
- name: Download Observation Resources of female Patients
run: .github/scripts/download-resources-query.sh Observation "patient.gender=female" 22463
- name: Download Observation Resources of the year 1970
run: .github/scripts/download-resources-query.sh Observation "date=1970" 59
- name: Download Observation Resources of the year 1970 Sorted by ID
run: .github/scripts/download-resources-query-sort.sh Observation "date=1970" "_id" 59
- name: Download Observation Resources of the year 1980
run: .github/scripts/download-resources-query.sh Observation "date=1980" 0
- name: Download Observation Resources of the year 1980 Sorted by ID
run: .github/scripts/download-resources-query-sort.sh Observation "date=1980" "_id" 0
- name: Download Observation Resources of the year 1990
run: .github/scripts/download-resources-query.sh Observation "date=1990" 19
- name: Download Observation Resources of the year 2000
run: .github/scripts/download-resources-query.sh Observation "date=2000" 101
- name: Download Observation Resources of the year 2010
run: .github/scripts/download-resources-query.sh Observation "date=2010" 995
- name: Download Observation Resources of the year 2020
run: .github/scripts/download-resources-query.sh Observation "date=2020" 17419
- name: Download Observation Resources of the year 2020 Sorted by ID
run: .github/scripts/download-resources-query-sort.sh Observation "date=2020" "_id" 17419
- name: Download Observation Resources not of the year 2020
run: .github/scripts/download-resources-query.sh Observation "date=ne2020" 25510
- name: Download Observation Resources not of the year 2020 Sorted by ID
run: .github/scripts/download-resources-query-sort.sh Observation "date=ne2020" "_id" 25510
- name: Download Observation Resources greater than the year 2010
run: .github/scripts/download-resources-query.sh Observation "date=gt2010" 38486
- name: Download Observation Resources greater than the year 2020
run: .github/scripts/download-resources-query.sh Observation "date=gt2020" 983
- name: Download Observation Resources less than the year 2010
run: .github/scripts/download-resources-query.sh Observation "date=lt2010" 3448
- name: Download Observation Resources less than the year 2020
run: .github/scripts/download-resources-query.sh Observation "date=lt2020" 24527
- name: Download Observation Resources greater equal the year 2010
run: .github/scripts/download-resources-query.sh Observation "date=ge2010" 39481
- name: Download Observation Resources greater equal the year 2020
run: .github/scripts/download-resources-query.sh Observation "date=ge2020" 18402
- name: Download Observation Resources less equal the year 2010
run: .github/scripts/download-resources-query.sh Observation "date=le2010" 4443
- name: Download Observation Resources less equal the year 2020
run: .github/scripts/download-resources-query.sh Observation "date=le2020" 41946
- name: Download Observation Resources that start after the year 2010
run: .github/scripts/download-resources-query.sh Observation "date=sa2010" 38486
- name: Download Observation Resources that start after the year 2020
run: .github/scripts/download-resources-query.sh Observation "date=sa2020" 983
- name: Download Observation Resources that end before the year 2010
run: .github/scripts/download-resources-query.sh Observation "date=eb2010" 3448
- name: Download Observation Resources that end before the year 2020
run: .github/scripts/download-resources-query.sh Observation "date=eb2020" 24527
- name: Check Observation Date Search
run: .github/scripts/check-date-search.sh "Observation"
- name: Check Encounter Date Search
run: .github/scripts/check-date-search.sh "Encounter"
- name: Check DiagnosticReport Date Search
run: .github/scripts/check-date-search.sh "DiagnosticReport"
- name: Download Observation Resources of female Patients Sorted Ascending
run: .github/scripts/download-resources-query-sort.sh Observation "patient.gender=female" "_lastUpdated" 22463
- name: Download Observation Resources of female Patients Sorted Descending
run: .github/scripts/download-resources-query-sort.sh Observation "patient.gender=female" "-_lastUpdated" 22463
- name: Download Observation Resources - Including Patients
run: blazectl --no-progress --server http://localhost:8080/fhir download Observation -q '_include=Observation:patient' -o Observation-Patient.ndjson
- name: Download Observation Resources - Including Encounters and Patients
run: blazectl --no-progress --server http://localhost:8080/fhir download Observation -q '_include=Observation:encounter&_include=Observation:patient' -o Observation-Encounter-Patient.ndjson
- name: Download Observation Resources - Including Encounters and Encounter Patients
run: blazectl --no-progress --server http://localhost:8080/fhir download Observation -q '_include=Observation:encounter&_include:iterate=Encounter:patient' -o Observation-Encounter-Encounter-Patient.ndjson
- name: Download Condition Resources
run: .github/scripts/download-resources.sh Condition
- name: Download Condition Resources - Including Subjects
run: blazectl --no-progress --server http://localhost:8080/fhir download Condition -q '_include=Condition:subject' -o Condition-Subject.ndjson
- name: Download Condition Resources - Including Encounters
run: blazectl --no-progress --server http://localhost:8080/fhir download Condition -q '_include=Condition:encounter' -o Condition-Encounter.ndjson
- name: Download DiagnosticReport Resources
run: .github/scripts/download-resources.sh DiagnosticReport
- name: Download MedicationRequest Resources of Medications with code 1736854
run: .github/scripts/download-resources-query.sh MedicationRequest "medication.code=1736854" 112
- name: Download MedicationRequest Resources of Medications with code 1736854 Sorted Ascending
run: .github/scripts/download-resources-query-sort.sh MedicationRequest "medication.code=1736854" "_lastUpdated" 112
- name: Download MedicationRequest Resources of Medications with code 1736854 Sorted Descending
run: .github/scripts/download-resources-query-sort.sh MedicationRequest "medication.code=1736854" "-_lastUpdated" 112
- name: Download MedicationRequest Resources - Including Medications
run: blazectl --no-progress --server http://localhost:8080/fhir download MedicationRequest -q '_include=MedicationRequest:medication' -o MedicationRequest.ndjson
- name: Download male Patient Resources having inpatient Encounters in 2010
run: .github/scripts/download-resources-query.sh Patient "gender=male&_has:Encounter:patient:class=IMP&_has:Encounter:patient:date=2010" 8
- name: Download female Patient Resources having inpatient Encounters in 2010
run: .github/scripts/download-resources-query.sh Patient "gender=female&_has:Encounter:patient:class=IMP&_has:Encounter:patient:date=2010" 11
- name: Download Observations using _elements=subject
run: .github/scripts/download-observations-elements.sh
- name: Download Observations of all Encounters using ID's
run: .github/scripts/download-observations-of-all-encounters.sh
- name: Search Observation _lastUpdated
run: .github/scripts/search-patient-last-updated.sh
- name: Search Observation _profile
run: .github/scripts/search-observation-profile.sh
- name: Search Compartment
run: .github/scripts/search-compartment.sh
- name: Evaluate CQL Query 1
run: .github/scripts/evaluate-measure.sh q1 56
- name: Evaluate CQL Query 1 - Batch
run: .github/scripts/evaluate-measure-as-batch.sh q1 56
- name: Evaluate CQL Query 1 - Async
run: .github/scripts/evaluate-measure-async.sh q1 56
- name: Evaluate CQL Query 1 - Blazectl
run: .github/scripts/evaluate-measure-blazectl.sh q1 56
- name: Evaluate CQL Query 1 - Subject List
run: .github/scripts/evaluate-measure-subject-list.sh q1 56
- name: Evaluate CQL Query 1 - Subject List - Async
run: .github/scripts/evaluate-measure-subject-list-async.sh q1 56
- name: Evaluate CQL Query 1 - Subject List - Batch
run: .github/scripts/evaluate-measure-subject-list-as-batch.sh q1 56
- name: Evaluate CQL Query 1 on Individual Patients
run: .github/scripts/evaluate-patient-q1-measure.sh
- name: Evaluate CQL Query 2
run: .github/scripts/evaluate-measure.sh q2 42
- name: Evaluate CQL Query 2 - Async
run: .github/scripts/evaluate-measure-async.sh q2 42
- name: Evaluate CQL Query 2 - Batch
run: .github/scripts/evaluate-measure-as-batch.sh q2 42
- name: Evaluate CQL Query 2 - Blazectl
run: .github/scripts/evaluate-measure-blazectl.sh q2 42
- name: Evaluate CQL Query 2 - Subject List
run: .github/scripts/evaluate-measure-subject-list.sh q2 42
- name: Evaluate CQL Query 2 - Subject List - Async
run: .github/scripts/evaluate-measure-subject-list-async.sh q2 42
- name: Evaluate CQL Query 2 - Subject List - Batch
run: .github/scripts/evaluate-measure-subject-list-as-batch.sh q2 42
- name: Evaluate CQL Query 4
run: .github/scripts/evaluate-measure.sh q4 0
- name: Evaluate CQL Query 4 - Async
run: .github/scripts/evaluate-measure-async.sh q4 0
- name: Evaluate CQL Query 4 - Blazectl
run: .github/scripts/evaluate-measure-blazectl.sh q4 0
- name: Evaluate CQL Query 4 - Subject List
run: .github/scripts/evaluate-measure-subject-list.sh q4 0
- name: Evaluate CQL Query 4 - Subject List - Async
run: .github/scripts/evaluate-measure-subject-list-async.sh q4 0
- name: Evaluate CQL Query 7
run: .github/scripts/evaluate-measure.sh q7 81
- name: Evaluate CQL Query 7 - Blazectl
run: .github/scripts/evaluate-measure-blazectl.sh q7 81
- name: Evaluate CQL Query 7 - Subject List
run: .github/scripts/evaluate-measure-subject-list.sh q7 81
- name: Evaluate CQL Query 7 - Subject List - Async
run: .github/scripts/evaluate-measure-subject-list-async.sh q7 81
- name: Evaluate CQL Query 14
run: .github/scripts/evaluate-measure.sh q14 96
- name: Evaluate CQL Query 14 - Blazectl
run: .github/scripts/evaluate-measure-blazectl.sh q14 96
- name: Evaluate CQL Query 14 - Subject List
run: .github/scripts/evaluate-measure-subject-list.sh q14 96
- name: Evaluate CQL Query 14 - Subject List - Async
run: .github/scripts/evaluate-measure-subject-list-async.sh q14 96
- name: Evaluate CQL Query 17
run: .github/scripts/evaluate-measure.sh q17 120
- name: Evaluate CQL Query 17 - Blazectl
run: .github/scripts/evaluate-measure-blazectl.sh q17 120
- name: Evaluate CQL Query 17 - Subject List
run: .github/scripts/evaluate-measure-subject-list.sh q17 120
- name: Evaluate CQL Query 17 - Subject List - Async
run: .github/scripts/evaluate-measure-subject-list-async.sh q17 120
- name: Evaluate CQL Query 20 - Blazectl
run: .github/scripts/evaluate-measure-blazectl-stratifier.sh q20-stratifier-city 120
- name: Evaluate CQL Query 21 - Blazectl
run: .github/scripts/evaluate-measure-blazectl-stratifier.sh q21-stratifier-city-of-only-women 64
- name: Evaluate CQL Query 26 - Blazectl
run: .github/scripts/evaluate-measure-blazectl-stratifier.sh q26-stratifier-bmi 120
- name: Evaluate CQL Query 27 - Blazectl
run: .github/scripts/evaluate-measure-blazectl-stratifier.sh q27-stratifier-calculated-bmi 120
- name: Evaluate CQL Query 32 - Blazectl
run: .github/scripts/evaluate-measure-blazectl-stratifier.sh q32-stratifier-underweight 120
- name: Evaluate CQL Query 36
run: .github/scripts/evaluate-measure.sh q36-parameter 86
- name: Evaluate CQL Query 36 - Subject List
run: .github/scripts/evaluate-measure-subject-list.sh q36-parameter 86
- name: Evaluate CQL Query 36 - Subject List - Async
run: .github/scripts/evaluate-measure-subject-list-async.sh q36-parameter 86
- name: Evaluate CQL Query 34
run: .github/scripts/evaluate-measure.sh q37-overlaps 24
- name: Evaluate CQL Query 34 - Blazectl
run: .github/scripts/evaluate-measure-blazectl.sh q37-overlaps 24
- name: Evaluate CQL Query 34 - Subject List
run: .github/scripts/evaluate-measure-subject-list.sh q37-overlaps 24
- name: Evaluate CQL Query 34 - Subject List - Async
run: .github/scripts/evaluate-measure-subject-list-async.sh q37-overlaps 24
- name: Evaluate CQL Query 46
run: .github/scripts/evaluate-measure.sh q46-between-date 19
- name: Evaluate CQL Query 46 - Blazectl
run: .github/scripts/evaluate-measure-blazectl.sh q46-between-date 19
- name: Forwarded Header HTTPS
run: .github/scripts/forwarded-header.sh https
- name: Forwarded Header HTTP
run: .github/scripts/forwarded-header.sh http
- name: X-Forwarded Headers HTTPS
run: .github/scripts/x-forwarded-headers.sh https
- name: X-Forwarded Headers HTTP
run: .github/scripts/x-forwarded-headers.sh http
- name: Delete
run: .github/scripts/delete.sh
- name: Delete Violating Referential Integrity
run: .github/scripts/check-referential-integrity-for-delete.sh 409
- name: Delete After Referring Resource is Deleted Succeeds
run: .github/scripts/check-delete-succeeds-after-referring-resource-is-deleted.sh
- name: Batch
run: .github/scripts/batch.sh
- name: Batch Metadata
run: .github/scripts/batch-metadata.sh
- name: Transaction
run: .github/scripts/transaction.sh
- name: Transaction with Relative References
run: .github/scripts/transaction-relative-references.sh
- name: Transaction Read/Write
run: .github/scripts/transaction-rw.sh
- name: Transactional Delete Preserving Referential Integrity
run: .github/scripts/transactional-delete.sh
- name: Transaction with Invalid (Null) Resource
run: .github/scripts/transaction-null-resource.sh
- name: Health
run: curl -f http://localhost:8080/health
- name: Health - HEAD
run: curl -f --head http://localhost:8080/health
- name: Not Acceptable
run: .github/scripts/not-acceptable.sh
- name: Conditional Update If-None-Match
run: .github/scripts/conditional-update-if-none-match.sh
- name: GraphQL Patient
run: .github/scripts/graphql.sh Patient
- name: GraphQL Observation
run: .github/scripts/graphql.sh Observation
- name: Link Header Encoding
run: .github/scripts/link-header-encoding.sh
- name: Paging uses a Stable Snapshot of the Database (Patient)
run: .github/scripts/follow-patient-next-link-after-write.sh
- name: Paging uses a Stable Snapshot of the Database (system)
run: .github/scripts/follow-system-next-link-after-write.sh
- name: Create Patient
run: .github/scripts/create-patient.sh
- name: Create Patient in Batch
run: .github/scripts/create-patient-batch.sh
- name: Read Ignores T
run: .github/scripts/read-ignores-t.sh
- name: Patient Everything
run: .github/scripts/patient-everything.sh
- name: Patient Everything with Date Range
run: .github/scripts/patient-everything-date-range.sh
- name: Patient Everything Paged
run: .github/scripts/patient-everything-paged.sh
- name: Patient Everything Paged with Date Range
run: .github/scripts/patient-everything-paged-date-range.sh
- name: Patient Graph
run: .github/scripts/graph.sh
- name: Patient Identical Update
run: .github/scripts/patient-identical-update.sh
- name: System History
run: .github/scripts/system-history-paged.sh
- name: Patient History
run: .github/scripts/patient-history-paged.sh
- name: Patient X79746011X History
run: .github/scripts/single-patient-history.sh X79746011X
- name: History Paging uses a Stable Snapshot of the Database (system)
run: .github/scripts/follow-system-history-next-link-after-write.sh
- name: History Paging uses a Stable Snapshot of the Database (Patient)
run: .github/scripts/follow-patient-history-next-link-after-write.sh
- name: History Paging uses a Stable Snapshot of the Database (single Patient)
run: .github/scripts/follow-single-patient-history-next-link-after-write.sh
- name: Count Async 17861-6
run: .github/scripts/count-async.sh "17861-6" "299"
- name: Count Async 8310-5
run: .github/scripts/count-async.sh "8310-5" "512"
- name: Cancel Async Query
run: .github/scripts/cancel-async.sh
- name: Search _tag
run: .github/scripts/search-tag.sh
- name: Binary Content Download - not found
run: .github/scripts/read-binary-content-not-found.sh
- name: Binary Content Download - found (via JSON)
run: .github/scripts/read-binary-content-via-json-found.sh
- name: Binary Content Download - found (via XML)
run: .github/scripts/read-binary-content-via-xml-found.sh
- name: Binary Content Upload (via raw data)
run: .github/scripts/write-binary-content-via-raw-data.sh
- name: Conditional Delete - Check Referential Integrity Violated
run: .github/scripts/conditional-delete-type/check-referential-integrity-violated.sh
- name: Conditional Delete - Delete All Provenance Resources
run: .github/scripts/conditional-delete-type/delete-all-resources-of-type.sh "Provenance"
- name: Conditional Delete - Delete All Observation Resources Fails
run: .github/scripts/conditional-delete-type/delete-all-observation-resources-fails.sh
- name: Create Patient With Ancient Birth Year
run: .github/scripts/create-patient-with-ancient-birth-year.sh
- name: Delete History
run: .github/scripts/delete-history.sh
- name: Conditional Delete - Delete All List Resources
run: .github/scripts/conditional-delete-type/delete-all-resources-of-type.sh "List"
- name: Conditional Delete - Delete Multiple Types In Transaction
run: .github/scripts/conditional-delete-type/delete-multiple-types-in-transaction.sh
- name: Patient Purge
run: .github/scripts/patient-purge.sh
- name: Chaining on DocumentReference
run: .github/scripts/chaining-document-reference.sh
- name: Download Modul Person
run: wget --content-disposition https://packages.simplifier.net/de.medizininformatikinitiative.kerndatensatz.person/2025.0.0
- name: Unpack Modul Person
run: tar xzf de.medizininformatikinitiative.kerndatensatz.person-2025.0.0.tgz
- name: Upload StructureDefinition Person
run: .github/scripts/upload-profile.sh package/StructureDefinition-mii-pr-person-patient.json
- name: Check Capability Statement Supported Profiles
run: .github/scripts/check-capability-statement-supported-profiles.sh
- name: Patient Everything Since
run: .github/scripts/patient-everything-since.sh
- name: Control Character Handling
run: .github/scripts/control-character-handling.sh
- name: Prometheus Metrics
run: .github/scripts/test-metrics.sh
if: ${{ matrix.variant == 'standalone' }}
- name: Prometheus Metrics - Blaze 1
run: curl -sf http://localhost:8081/metrics
if: ${{ matrix.variant == 'distributed' }}
- name: Prometheus Metrics - Blaze 2
run: curl -sf http://localhost:8082/metrics
if: ${{ matrix.variant == 'distributed' }}
- name: Docker Stats
run: docker stats --no-stream
integration-test-synthea-1000:
needs: build
runs-on: ubuntu-24.04
steps:
- name: Check out Git repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
- name: Install Blazectl
env:
GH_TOKEN: ${{ github.token }}
run: .github/scripts/install-blazectl.sh
- name: Download Blaze Image
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
with:
name: blaze-image
path: /tmp
- name: Load Blaze Image
run: docker load --input /tmp/blaze.tar
- name: Run Blaze
run: docker run --name blaze -d -e JAVA_TOOL_OPTIONS=-Xmx2g -e DB_BLOCK_CACHE_SIZE=2048 -e ENABLE_ADMIN_API=true -p 8080:8080 --read-only --tmpfs /tmp:exec -v blaze-data:/app/data blaze:latest
- name: Download Synthea Test Data
uses: ./.github/actions/speicherwolke-download
with:
token: kDsa2ifeMFdqK35
filename: synthea-1000.tar
- name: Create Synthea Test Data Dir
run: mkdir test-data-synthea-1000
- name: Unpack Synthea Test Data
run: tar -C test-data-synthea-1000 -xf synthea-1000.tar
- name: Wait for Blaze
run: .github/scripts/wait-for-url.sh http://localhost:8080/health
- name: Docker Logs
run: docker logs blaze
- name: Check Capability Statement
run: .github/scripts/check-capability-statement.sh
- name: Check Referential Integrity Enforced
run: .github/scripts/check-referential-integrity-enforced.sh
- name: Load Data
run: blazectl --no-progress --server http://localhost:8080/fhir upload test-data-synthea-1000
- name: Compact All Column Families
run: .github/scripts/compact-all.sh
- name: Restart Blaze
run: docker restart blaze
- name: Wait for Blaze
run: .github/scripts/wait-for-url.sh http://localhost:8080/health
- name: Check Total-Number of Resources are 1099779
run: .github/scripts/check-total-number-of-resources.sh 1099779
- name: Count the Number of Patients with Stress Conditions at Inpatient Encounters using FHIR Search
run: .github/scripts/count-patients.sh Condition "code=http://snomed.info/sct|73595000&encounter.class=http://terminology.hl7.org/CodeSystem/v3-ActCode|IMP" 13
- name: Count the Number of Patients with Stress Conditions at Inpatient Encounters Plan
run: |
.github/scripts/explain-type-query.sh Condition "code=http://snomed.info/sct|73595000&encounter.class=http://terminology.hl7.org/CodeSystem/v3-ActCode|IMP" "SCANS(ordered): code, encounter.class; SEEKS: NONE"
- name: Download Observation Resources with 6 LOINC Codes
run: .github/scripts/download-resources-query.sh Observation "code=http://loinc.org|10230-1,http://loinc.org|10480-2,http://loinc.org|10834-0,http://loinc.org|14804-9,http://loinc.org|14959-1,http://loinc.org|1742-6&category=laboratory" 9453
- name: Download Observation Resources with 6 LOINC Codes Plan
run: |
.github/scripts/explain-type-query.sh Observation "code=http://loinc.org|10230-1,http://loinc.org|10480-2,http://loinc.org|10834-0,http://loinc.org|14804-9,http://loinc.org|14959-1,http://loinc.org|1742-6&category=laboratory" "SCANS(ordered): code; SEEKS: category"
- name: Download Condition Resources of common disorders from multiple patients
env:
SNOMED_CODES: >-
http://snomed.info/sct|444814009,
http://snomed.info/sct|195662009,
http://snomed.info/sct|10509002,
http://snomed.info/sct|271737000,
http://snomed.info/sct|40055000,
http://snomed.info/sct|233604007,
http://snomed.info/sct|389087006,
http://snomed.info/sct|75498004
PATIENT_SSNS: >-
999-89-9294,999-60-3949,999-40-8052,999-86-7721,999-31-6940,999-37-5253,
999-14-4781,999-71-5798,999-85-9014,999-88-9231,999-51-2985,999-14-2168,
999-51-2170,999-52-2914,999-45-6374,999-58-8110,999-92-6349,999-14-7569,
999-58-5645,999-89-6440,999-94-8430,999-90-6541,999-36-1192,999-30-5696,
999-91-6238,999-12-1519,999-44-9085,999-99-3624,999-28-6755,999-60-2281,
999-30-8040,999-99-3859,999-84-8058,999-70-9633,999-68-6985,999-83-6253,
999-24-4528,999-57-1697,999-27-7985,999-50-8738,999-21-6355,999-74-7491,
999-59-3737,999-54-5495,999-88-2066,999-64-2743,999-53-8490,999-18-4716,
999-22-4364,999-29-3271,999-11-9976,999-44-5315,999-48-9431,999-50-3850,
999-54-1289,999-49-1081,999-37-7151,999-25-2068,999-61-9829,999-56-2917,
999-37-1371,999-29-2856,999-96-2459,999-74-1202,999-74-3491,999-53-2578,
999-77-8967,999-53-6824,999-26-9128,999-71-5114,999-10-5138,999-58-7855,
999-11-1543,999-66-3180,999-39-8247,999-96-1580,999-72-5318,999-23-7555,
999-52-6588,999-88-2620,999-11-3074,999-89-9206,999-47-9791,999-43-4776,
999-84-6431,999-53-9409,999-57-9047,999-98-1131,999-23-9506,999-79-6781,
999-10-3828,999-31-2101,999-42-5310,999-46-3927,999-68-3132,999-45-8011,
999-11-7186,999-58-3121,999-48-7111,999-24-3722
run: .github/scripts/download-resources-query.sh Condition "code=$SNOMED_CODES&patient=$(.github/scripts/patient-ids.sh "$PATIENT_SSNS")" 281
- name: Download Patient Resources with given IDs
env:
PATIENT_SSNS: >-
999-21-6355,999-13-3823,999-27-7985,999-86-3618,999-93-7964,999-73-8558,
999-91-8665,999-50-8738,999-13-8439,999-28-7892,999-33-7679,999-83-6485,
999-30-5925,999-98-7459,999-14-8063,999-59-3737,999-54-5495,999-88-2066,
999-53-8490,999-74-7491,999-64-2743,999-18-4716,999-29-3271,999-11-9976,
999-44-5315,999-22-4364,999-50-3850,999-40-8052,999-54-1289,999-37-7151,
999-49-1081,999-61-9829,999-25-2068,999-48-9431,999-14-4781,999-71-5798,
999-86-7721,999-31-6940,999-37-5253,999-51-2985,999-85-9014,999-89-9294,
999-60-3949,999-88-9231,999-51-2170,999-14-2168,999-52-2914,999-45-6374,
999-58-8110,999-58-5645,999-14-7569,999-92-6349,999-89-6440,999-94-8430,
999-90-6541,999-36-1192,999-84-8058,999-91-6238,999-12-1519,999-44-9085,
999-99-3624,999-60-2281,999-28-6755,999-30-8040,999-99-3859,999-30-5696,
999-68-6985,999-70-9633,999-83-6253,999-24-4528,999-57-1697,999-29-2856,
999-96-2459,999-74-1202,999-74-3491,999-56-2917,999-53-2578,999-37-1371,
999-53-6824,999-26-9128,999-71-5114,999-10-5138,999-58-7855,999-11-1543,
999-11-3074,999-47-9791,999-89-9206,999-66-3180,999-77-8967,999-72-5318,
999-23-7555,999-52-6588,999-88-2620,999-23-9506,999-98-1131,999-79-6781,
999-43-4776,999-84-6431,999-39-8247,999-96-1580,999-36-5527,999-99-4279,
999-19-7218,999-91-6146,999-58-6456,999-35-2730,999-94-5196,999-36-7625,
999-87-4481,999-82-5173,999-58-9303,999-27-5358,999-38-8362,999-74-4503,
999-60-2346,999-81-7132,999-16-5530,999-59-3296,999-96-2754,999-31-5793,
999-63-9944,999-84-7193,999-37-7846,999-70-6935,999-79-7963,999-21-2993,
999-20-5711,999-49-6953,999-60-1829,999-17-9141,999-55-2550,999-33-3340,
999-75-8758,999-42-2353,999-41-4960,999-72-3108,999-51-9785,999-32-4696,
999-87-1692,999-78-6946,999-79-5928,999-28-4726,999-78-7357,999-91-5448,
999-71-7680,999-72-4531,999-55-4334,999-80-4102,999-99-1126,999-77-5295,
999-47-8672,999-91-5681,999-11-9949,999-42-1240,999-28-2768,999-79-4394,
999-74-6145,999-49-1648,999-98-9296,999-71-9591,999-27-1668,999-63-3783,
999-66-4132,999-63-9151,999-33-3123,999-60-4007,999-41-5400,999-36-1925,
999-78-6396,999-25-1767,999-27-6284,999-55-5744,999-91-3357,999-46-5669,
999-47-4456,999-37-3279,999-69-4320,999-96-1711,999-11-7347,999-87-2660,
999-40-9518,999-30-5419,999-84-6225,999-35-7213,999-50-4337,999-20-6881,
999-88-8626,999-85-4520,999-99-7423,999-93-6074,999-73-6096,999-49-7536,
999-16-8660,999-97-1001,999-55-7176,999-26-5009,999-21-2567,999-70-7173,
999-50-8491,999-47-1432,999-74-6461,999-97-2022,999-65-4916,999-50-3056,
999-44-2671,999-61-3570,999-64-7627,999-53-6591,999-73-9725,999-40-8071,
999-48-3926,999-82-4485,999-92-8668,999-28-9692,999-24-8156,999-63-8895,
999-45-8011,999-48-7111,999-10-3828,999-31-2101,999-46-3927,999-53-9409,
999-42-5310,999-68-3132,999-57-9047,999-24-3722,999-11-7186,999-43-3852,
999-58-3121,999-85-3188,999-43-4015,999-50-9097,999-53-9876,999-76-8113,
999-28-9201,999-48-5783,999-70-7158,999-89-4529,999-70-8614,999-81-2546,
999-75-7830,999-83-4725,999-69-9815,999-55-7212,999-31-9171,999-25-7065,
999-94-1053,999-45-4290,999-88-8247,999-89-4372,999-26-3144,999-22-8920,
999-98-1674,999-34-1694,999-10-3128,999-42-6020,999-86-3199,999-16-8888,
999-60-3122,999-90-2327,999-10-4587,999-57-2528,999-72-9441,999-45-7616,
999-55-8093,999-31-2790,999-94-1391,999-36-9334,999-55-7518,999-17-3141,
999-60-6082,999-90-1527,999-40-6116,999-24-7513,999-57-8253,999-55-5363,
999-89-6219,999-42-1353,999-82-6179,999-84-1172,999-44-1850,999-72-7332,
999-68-1649,999-26-2356,999-18-5134,999-42-2500,999-95-3358,999-35-1328,
999-87-5740,999-97-9920,999-83-2307,999-51-4707,999-38-2717,999-91-8913,
999-58-5930,999-50-2058,999-87-8426,999-98-3147,999-29-1152,999-95-9757
run: .github/scripts/download-resources-query.sh Patient "_id=$(.github/scripts/patient-ids.sh "$PATIENT_SSNS")" 300
- name: Download Vital Sign Resources
run: .github/scripts/download-resources-query.sh Observation "category=vital-signs" 152877
- name: Download Vital Sign Resources Plan
run: |
.github/scripts/explain-type-query.sh Observation "category=vital-signs" "SCANS(ordered): category; SEEKS: NONE"
- name: Download Observation Resources of the Year 2020
run: .github/scripts/download-resources-query.sh Observation "date=2020" 71236
- name: Download Observation Resources of the Year 2020 Plan
run: |
.github/scripts/explain-type-query.sh Observation "date=2020" "SCANS(unordered): date; SEEKS: NONE"
- name: Download Observation Resources of the Year 2020 from patient with SSN 999-89-9294
run: .github/scripts/download-resources-query.sh Observation "date=2020&patient=$(.github/scripts/patient-ids.sh "999-89-9294")" 20
- name: Download Observation Resources of the Year 2020 from patient with SSN 999-89-9294 Plan
run: |
.github/scripts/explain-type-query.sh Observation "date=2020&patient=$(.github/scripts/patient-ids.sh "999-89-9294")" "TYPE: compartment; SCANS: NONE; SEEKS: date"
- name: Download Observation Resources of the Year 2020 from multiple patients
env:
PATIENT_SSNS: >-
999-89-9294,999-60-3949,999-40-8052,999-86-7721,999-31-6940,999-37-5253,
999-14-4781,999-71-5798,999-85-9014,999-88-9231,999-51-2985,999-14-2168,
999-51-2170,999-52-2914,999-45-6374,999-58-8110,999-92-6349,999-14-7569,
999-58-5645,999-89-6440,999-94-8430,999-90-6541,999-36-1192,999-30-5696
run: .github/scripts/download-resources-query.sh Observation "date=2020&patient=$(.github/scripts/patient-ids.sh "$PATIENT_SSNS")" 741
- name: Download Vital Sign Resources of the Year 2020
run: .github/scripts/download-resources-query.sh Observation "category=vital-signs&date=2020" 17060
- name: Download Vital Sign Resources of the Year 2020 Plan
run: |
.github/scripts/explain-type-query.sh Observation "category=vital-signs&date=2020" "SCANS(ordered): category; SEEKS: date"
- name: Male Patient Query
run: .github/scripts/download-resources-query.sh Patient "gender=male" 467
- name: Male Patient Query Plan
run: |
.github/scripts/explain-type-query.sh Patient "gender=male" "SCANS(ordered): gender; SEEKS: NONE"
- name: Specific Male Patient Query
run: .github/scripts/download-resources-query.sh Patient "_id=$(.github/scripts/patient-ids.sh "999-89-9294")&gender=male" 1
- name: Count the number of Patients with Stress Conditions at Inpatient Encounters using CQL
run: .github/scripts/evaluate-measure-blazectl.sh inpatient-stress 13
- name: Condition Code Stratifier
run: .github/scripts/evaluate-measure-blazectl-stratifier.sh stratifier-condition-code 51599
- name: Patient Everything Too Costly
run: .github/scripts/patient-everything-too-costly.sh
- name: Patient Everything Paged
run: .github/scripts/patient-everything-paged-1000.sh
- name: Explain without Query Works
run: .github/scripts/explain-type-list.sh Observation
- name: Too Costly Search Include Lowers Page Size Dynamically
run: .github/scripts/search-dynamic-page-size.sh "_id=$(.github/scripts/patient-ids.sh "999-95-9757,999-84-6225")" 2 1
- name: Docker Stats
run: docker stats --no-stream
integration-test-kds:
needs: build
runs-on: ubuntu-24.04
steps:
- name: Check out Git repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
- name: Install Blazectl
env:
GH_TOKEN: ${{ github.token }}
run: .github/scripts/install-blazectl.sh
- name: Download Blaze Image
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
with:
name: blaze-image
path: /tmp
- name: Load Blaze Image
run: docker load --input /tmp/blaze.tar
- name: Download SNOMED CT Release
uses: ./.github/actions/speicherwolke-download
with:
token: ${{ secrets.SCT_DOWNLOAD_TOKEN }}
filename: SnomedCT_Germany-EditionRelease_PRODUCTION_20241115T120000Z.zip
- name: Unzip SNOMED CT Release
run: unzip SnomedCT_Germany-EditionRelease_PRODUCTION_20241115T120000Z.zip
- name: Run Blaze
run: docker compose -f .github/integration-test-kds/docker-compose.yml up -d
- name: Download and Unzip MII Test Data
run: make -C .github/test-data kds-testdata-2024.0.1/tx
- name: Install All KDS Terminology Resources
run: make -C .github/value-set-expand install
- name: Wait for the Data Server
run: .github/scripts/wait-for-url.sh http://localhost:8080/health
- name: Wait for the Terminology Server
run: .github/scripts/wait-for-url.sh http://localhost:8082/health
- name: Check Capability Statement of the Data Server
run: .github/scripts/check-capability-statement.sh
- name: Check Capability Statement of the Terminology Server
run: .github/scripts/check-capability-statement.sh http://localhost:8082/fhir
- name: Check Referential Integrity Enforced
run: .github/scripts/check-referential-integrity-enforced.sh
- name: Check Terminology Capabilities of the Terminology Server
run: .github/scripts/check-terminology-capabilities.sh http://localhost:8082/fhir
- name: Upload KDS Terminology Resources into the Terminology Server
run: .github/value-set-expand/upload-all.sh http://localhost:8082/fhir
- name: Check Terminology Capabilities of the Terminology Server
run: .github/scripts/check-terminology-capabilities.sh http://localhost:8082/fhir
- name: Load Data
run: blazectl --no-progress --server http://localhost:8080/fhir upload .github/test-data/kds-testdata-2024.0.1/tx
- name: Check Total-Number of Resources are 345
run: .github/scripts/check-total-number-of-resources.sh 345
- name: Download MedicationStatement Resources with ATC Code B01AC06
run: .github/scripts/download-resources-query.sh MedicationStatement "medication.code=http://fhir.de/CodeSystem/bfarm/atc|B01AC06" 1
- name: Download MedicationStatement Resources with ATC Code B01AC06
run: .github/scripts/download-resources-query.sh MedicationStatement "patient=mii-exa-test-data-patient-1&medication.code=http://fhir.de/CodeSystem/bfarm/atc|B01AC06" 1
- name: Run Condition Quality Report
run: .github/integration-test-kds/evaluate-measure.sh quality-report-condition 8
integration-test-patient-purge:
needs: build
runs-on: ubuntu-24.04
steps:
- name: Check out Git repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
- name: Install Blazectl
env:
GH_TOKEN: ${{ github.token }}
run: .github/scripts/install-blazectl.sh
- name: Install xq
run: .github/scripts/install-xq.sh
- name: Download Blaze Image
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
with:
name: blaze-image
path: /tmp
- name: Load Blaze Image
run: docker load --input /tmp/blaze.tar
- name: Run Blaze
run: docker run --name blaze -d -e JAVA_TOOL_OPTIONS=-Xmx2g -e DB_BLOCK_CACHE_SIZE=512 -e ENABLE_OPERATION_PATIENT_PURGE=true -p 8080:8080 --read-only --tmpfs /tmp:exec -v blaze-data:/app/data blaze:latest
- name: Wait for Blaze
run: .github/scripts/wait-for-url.sh http://localhost:8080/health
- name: Docker Logs
run: docker logs blaze
- name: Check Capability Statement
run: .github/scripts/check-capability-statement.sh
- name: Check Referential Integrity Enforced
run: .github/scripts/check-referential-integrity-enforced.sh
- name: Load Data
run: blazectl --no-progress --server http://localhost:8080/fhir upload .github/test-data/synthea
- name: Check Total-Number of Resources are 92299
run: .github/scripts/check-total-number-of-resources.sh 92299
- name: Patient Purge all
run: .github/scripts/patient-purge-all.sh
- name: Download All Resources
run: .github/scripts/download-all-resources.sh
- name: Download Patient Resources
run: .github/scripts/download-resources.sh Patient
- name: Check Resource Totals
run: .github/scripts/check-resource-totals-after-patient-purge.sh
- name: Docker Stats
run: docker stats --no-stream
integration-test-value-set-expand:
needs: build
runs-on: ubuntu-24.04
steps:
- name: Check out Git repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
- name: Setup Node
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6
with:
node-version-file: .nvmrc
- name: Install Blazectl
env:
GH_TOKEN: ${{ github.token }}
run: .github/scripts/install-blazectl.sh
- name: Install xq
run: .github/scripts/install-xq.sh
- name: Download Blaze Image
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
with:
name: blaze-image
path: /tmp
- name: Load Blaze Image
run: docker load --input /tmp/blaze.tar
- name: Download SNOMED CT Release
uses: ./.github/actions/speicherwolke-download
with:
token: ${{ secrets.SCT_DOWNLOAD_TOKEN }}
filename: SnomedCT_Germany-EditionRelease_PRODUCTION_20241115T120000Z.zip
- name: Unzip SNOMED CT Release
run: unzip SnomedCT_Germany-EditionRelease_PRODUCTION_20241115T120000Z.zip
- name: Run Blaze
run: docker run --name blaze -d -e JAVA_TOOL_OPTIONS=-Xmx8g -e ENABLE_TERMINOLOGY_SERVICE=true -e ENABLE_TERMINOLOGY_LOINC=true -e ENABLE_TERMINOLOGY_SNOMED_CT=true -e SNOMED_CT_RELEASE_PATH=/app/sct-release -p 8080:8080 -p 8081:8081 --read-only --tmpfs /tmp:exec -v blaze-data:/app/data -v ./SnomedCT_Germany-EditionRelease_PRODUCTION_20241115T120000Z:/app/sct-release blaze:latest
- name: Install All KDS Terminology Resources
run: make -C .github/value-set-expand install
- name: Wait for Blaze
run: .github/scripts/wait-for-url.sh http://localhost:8080/health
- name: Check Capability Statement
run: .github/scripts/check-capability-statement-terminology-service.sh
- name: Prometheus Metrics
run: .github/scripts/test-terminology-service-graph-cache-metrics.sh
- name: Upload KDS Terminology Resources
run: .github/value-set-expand/upload-all.sh
- name: Check Terminology Capabilities
run: .github/scripts/check-terminology-capabilities.sh
- name: Read CodeSystem Translations (tests extended primitives in JSON and XML)
run: .github/scripts/read-code-system-translations.sh
- name: Expand KDS Terminology Resources
run: .github/value-set-expand/expand.sh
- name: Expand KDS SNOMED CT Terminology Resources
run: .github/value-set-expand/expand-sct.sh
- name: Expand Most KDS Terminology Resources
run: .github/value-set-expand/expand-most.sh
integration-test-validation:
needs: build
runs-on: ubuntu-24.04
steps:
- name: Setup Java
uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5
with:
distribution: 'temurin'
java-version: '21'
- name: Check out Git repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
- name: Setup Node
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6
with:
node-version-file: .nvmrc
- name: Install Blazectl
env:
GH_TOKEN: ${{ github.token }}
run: .github/scripts/install-blazectl.sh
- name: Install Validator
run: .github/scripts/install-validator.sh
- name: Download Blaze Image
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
with:
name: blaze-image
path: /tmp
- name: Load Blaze Image
run: docker load --input /tmp/blaze.tar
- name: Download SNOMED CT Release
uses: ./.github/actions/speicherwolke-download
with:
token: ${{ secrets.SCT_DOWNLOAD_TOKEN }}
filename: SnomedCT_Germany-EditionRelease_PRODUCTION_20241115T120000Z.zip
- name: Unzip SNOMED CT Release
run: unzip SnomedCT_Germany-EditionRelease_PRODUCTION_20241115T120000Z.zip
- name: Run Blaze
run: docker run --name blaze -d -e JAVA_TOOL_OPTIONS=-Xmx8g -e ENABLE_TERMINOLOGY_SERVICE=true -e ENABLE_TERMINOLOGY_LOINC=true -e ENABLE_TERMINOLOGY_SNOMED_CT=true -e SNOMED_CT_RELEASE_PATH=/app/sct-release -p 8080:8080 --read-only --tmpfs /tmp:exec -v blaze-data:/app/data -v ./SnomedCT_Germany-EditionRelease_PRODUCTION_20241115T120000Z:/app/sct-release blaze:latest
- name: Install All KDS Terminology Resources
run: make -C .github/value-set-expand install
- name: Download and Unzip MII Test Data
run: make -C .github/test-data kds-testdata-2024.0.1
- name: Wait for Blaze
run: .github/scripts/wait-for-url.sh http://localhost:8080/health
- name: Docker Logs
run: docker logs blaze
- name: Check Capability Statement
run: .github/scripts/check-capability-statement-terminology-service.sh
- name: Upload KDS Terminology Resources
run: .github/value-set-expand/upload-all.sh
- name: Check Terminology Capabilities
run: .github/scripts/check-terminology-capabilities.sh
- name: Validate Resources
run: .github/validation/validate.sh
- name: SNOMED CT Validate Code
run: .github/scripts/snomed-ct-validate-code.sh
terminology-tests:
needs: build
runs-on: ubuntu-24.04
steps:
- name: Setup Java
uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5
with:
distribution: 'temurin'
java-version: '21'
- name: Check out Git repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
- name: Setup Node
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6
with:
node-version-file: .nvmrc
- name: Install Validator
run: .github/scripts/install-validator.sh
- name: Download Blaze Image
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
with:
name: blaze-image
path: /tmp
- name: Load Blaze Image
run: docker load --input /tmp/blaze.tar
- name: Run Blaze
run: docker run --name blaze -d -e JAVA_TOOL_OPTIONS=-Xmx2g -e ENABLE_TERMINOLOGY_SERVICE=true -e ENABLE_TERMINOLOGY_LOINC=true -p 8080:8080 --read-only --tmpfs /tmp:exec -v blaze-data:/app/data blaze:latest
- name: Wait for Blaze
run: .github/scripts/wait-for-url.sh http://localhost:8080/health
- name: Check Capability Statement
run: .github/scripts/check-capability-statement-terminology-service.sh
- name: Check Terminology Capabilities
run: .github/scripts/check-terminology-capabilities.sh
- name: Check that the BCP-13 Code System is read-only
run: .github/scripts/check-resource-read-only.sh CodeSystem "urn:ietf:bcp:13"
- name: Check that the BCP-47 Code System is read-only
run: .github/scripts/check-resource-read-only.sh CodeSystem "urn:ietf:bcp:47"
- name: Check that the LOINC Code System is read-only
run: .github/scripts/check-resource-read-only.sh CodeSystem "http://loinc.org"
- name: Check that the UCUM Code System is read-only
run: .github/scripts/check-resource-read-only.sh CodeSystem "http://unitsofmeasure.org"
- name: Check Simple Expand
run: .github/terminology-tests/simple-expand.sh
- name: Check Good
run: .github/terminology-tests/good.sh
- name: Check Validation Version
run: .github/terminology-tests/validation-version.sh
not-enforcing-referential-integrity-test:
needs: build
runs-on: ubuntu-24.04
steps:
- name: Check out Git repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
- name: Install Blazectl
env:
GH_TOKEN: ${{ github.token }}
run: .github/scripts/install-blazectl.sh
- name: Download Blaze Image
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
with:
name: blaze-image
path: /tmp
- name: Load Blaze Image
run: docker load --input /tmp/blaze.tar
- name: Run Blaze
run: docker run --name blaze -d -e JAVA_TOOL_OPTIONS=-Xmx2g -e ENFORCE_REFERENTIAL_INTEGRITY=false -p 8080:8080 --read-only --tmpfs /tmp:exec -v blaze-data:/app/data blaze:latest
- name: Wait for Blaze
run: .github/scripts/wait-for-url.sh http://localhost:8080/health
- name: Docker Logs
run: docker logs blaze
- name: Check Capability Statement
run: .github/scripts/check-capability-statement.sh
- name: Check Referential Integrity Not Enforced
run: .github/scripts/check-referential-integrity-not-enforced.sh
- name: Load Data
run: blazectl --no-progress --server http://localhost:8080/fhir upload -c1 .github/test-data/etl
- name: Check Total-Number of Resources are 190
run: .github/scripts/check-total-number-of-resources.sh 190
- name: Check Referential Integrity Not Enforced For Delete
run: .github/scripts/check-referential-integrity-for-delete.sh 204
admin-api-test:
needs: build
runs-on: ubuntu-24.04
steps:
- name: Check out Git repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
- name: Install Blazectl
env:
GH_TOKEN: ${{ github.token }}
run: .github/scripts/install-blazectl.sh
- name: Download Blaze Image
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
with:
name: blaze-image
path: /tmp
- name: Load Blaze Image
run: docker load --input /tmp/blaze.tar
- name: Run Blaze
run: docker run --name blaze -d -e JAVA_TOOL_OPTIONS=-Xmx2g -e ENABLE_ADMIN_API=true -p 8080:8080 --read-only --tmpfs /tmp:exec -v blaze-data:/app/data blaze:latest
- name: Wait for Blaze
run: .github/scripts/wait-for-url.sh http://localhost:8080/health
- name: Docker Logs
run: docker logs blaze
- name: Create Invalid Jobs
run: .github/scripts/admin-api/create-invalid-jobs.sh
- name: Create Async Job
run: .github/scripts/admin-api/async-job.sh
- name: Load Data
run: blazectl --no-progress --server http://localhost:8080/fhir upload .github/test-data/synthea
- name: Compact Unknown Database
run: .github/scripts/compact-unknown-database.sh
# This test uploads many small transactions in order to show that Blaze can handle many small requests containing
# chunked payload blazectl uses. Versions of Blaze from 0.13.2 to 0.15.3, starting with the migration to Jetty, had
# the problem that the JSON parser did not read the entire inputstream so that terminal chunks could remain, which
# caused Jetty to close the stream.
small-transactions-test:
needs: build
runs-on: ubuntu-24.04
steps:
- name: Check out Git repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
- name: Install Blazectl
env:
GH_TOKEN: ${{ github.token }}
run: .github/scripts/install-blazectl.sh
- name: Download Blaze Image
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
with:
name: blaze-image
path: /tmp
- name: Load Blaze Image
run: docker load --input /tmp/blaze.tar
- name: Run Blaze
run: docker run --name blaze -d -e JAVA_TOOL_OPTIONS=-Xmx2g -p 8080:8080 --read-only --tmpfs /tmp:exec -v blaze-data:/app/data blaze:latest
- name: Wait for Blaze
run: .github/scripts/wait-for-url.sh http://localhost:8080/health
- name: Docker Logs
run: docker logs blaze
- name: Check Capability Statement
run: .github/scripts/check-capability-statement.sh
- name: Generate Test Data
run: mkdir .github/test-data/small-txs && .github/scripts/gen-bundle-ndjson.sh > .github/test-data/small-txs/bundles.ndjson
- name: Load Data Sequentially
run: blazectl --no-progress --server http://localhost:8080/fhir upload -c 1 .github/test-data/small-txs
- name: Load Data with Concurrency 2
run: blazectl --no-progress --server http://localhost:8080/fhir upload -c 2 .github/test-data/small-txs
big-transaction-test:
needs: build
runs-on: ubuntu-24.04
steps:
- name: Check out Git repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
- name: Install Blazectl
env:
GH_TOKEN: ${{ github.token }}
run: .github/scripts/install-blazectl.sh
- name: Download Blaze Image
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
with:
name: blaze-image
path: /tmp
- name: Load Blaze Image
run: docker load --input /tmp/blaze.tar
- name: Run Blaze
run: docker run --name blaze -d -e JAVA_TOOL_OPTIONS=-Xmx2g -p 8080:8080 --read-only --tmpfs /tmp:exec -v blaze-data:/app/data blaze:latest
- name: Wait for Blaze
run: .github/scripts/wait-for-url.sh http://localhost:8080/health
- name: Docker Logs
run: docker logs blaze
- name: Check Capability Statement
run: .github/scripts/check-capability-statement.sh
- name: Load Data
run: blazectl --no-progress --server http://localhost:8080/fhir upload .github/test-data/big-tx
evaluate-measure-timeout-test:
needs: build
runs-on: ubuntu-24.04
steps:
- name: Check out Git repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
- name: Install Blazectl
env:
GH_TOKEN: ${{ github.token }}
run: .github/scripts/install-blazectl.sh
- name: Download Blaze Image
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
with:
name: blaze-image
path: /tmp
- name: Load Blaze Image
run: docker load --input /tmp/blaze.tar
- name: Run Blaze
run: docker run --name blaze -d -e JAVA_TOOL_OPTIONS=-Xmx2g -e FHIR_OPERATION_EVALUATE_MEASURE_TIMEOUT=10 -p 8080:8080 --read-only --tmpfs /tmp:exec -v blaze-data:/app/data blaze:latest
- name: Wait for Blaze
run: .github/scripts/wait-for-url.sh http://localhost:8080/health
- name: Docker Logs
run: docker logs blaze
- name: Check Capability Statement
run: .github/scripts/check-capability-statement.sh
- name: Load Data
run: blazectl --no-progress --server http://localhost:8080/fhir upload .github/test-data/synthea
- name: Evaluate CQL Query 1
run: .github/scripts/evaluate-measure-timeout.sh q1
include-without-referential-integrity-test:
needs: build
runs-on: ubuntu-24.04
steps:
- name: Check out Git repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
- name: Download Blaze Image
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
with:
name: blaze-image
path: /tmp
- name: Load Blaze Image
run: docker load --input /tmp/blaze.tar
- name: Run Blaze
run: docker run --name blaze -d -e JAVA_TOOL_OPTIONS=-Xmx2g -e ENFORCE_REFERENTIAL_INTEGRITY=false -p 8080:8080 --read-only --tmpfs /tmp:exec -v blaze-data:/app/data blaze:latest
- name: Wait for Blaze
run: .github/scripts/wait-for-url.sh http://localhost:8080/health
- name: Docker Logs
run: docker logs blaze
- name: Test Include
run: .github/scripts/include-without-referential-integrity.sh
chaining-without-referential-integrity-test:
needs: build
runs-on: ubuntu-24.04
steps:
- name: Check out Git repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
- name: Download Blaze Image
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
with:
name: blaze-image
path: /tmp
- name: Load Blaze Image
run: docker load --input /tmp/blaze.tar
- name: Run Blaze
run: docker run --name blaze -d -e JAVA_TOOL_OPTIONS=-Xmx2g -e ENFORCE_REFERENTIAL_INTEGRITY=false -p 8080:8080 --read-only --tmpfs /tmp:exec -v blaze-data:/app/data blaze:latest
- name: Wait for Blaze
run: .github/scripts/wait-for-url.sh http://localhost:8080/health
- name: Docker Logs
run: docker logs blaze
- name: Test Chaining
run: .github/scripts/chaining-without-referential-integrity.sh
# Test that a transaction can create a transaction bundle with references that will be taken "as-is" and not tried to
# resolve to existing resources
bundle-with-references-test:
needs: build
runs-on: ubuntu-24.04
steps:
- name: Check out Git repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
- name: Install Blazectl
env:
GH_TOKEN: ${{ github.token }}
run: .github/scripts/install-blazectl.sh
- name: Download Blaze Image
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
with:
name: blaze-image
path: /tmp
- name: Load Blaze Image
run: docker load --input /tmp/blaze.tar
- name: Run Blaze
run: docker run --name blaze -d -e JAVA_TOOL_OPTIONS=-Xmx2g -p 8080:8080 --read-only --tmpfs /tmp:exec -v blaze-data:/app/data blaze:latest
- name: Wait for Blaze
run: .github/scripts/wait-for-url.sh http://localhost:8080/health
- name: Docker Logs
run: docker logs blaze
- name: Load Data
run: blazectl --no-progress --server http://localhost:8080/fhir upload .github/test-data/bundle-with-references
jepsen-test:
needs: build
runs-on: ubuntu-24.04
steps:
- name: Setup Java
uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5
with:
distribution: 'temurin'
java-version: '21'
- name: Setup Clojure
uses: DeLaGuardo/setup-clojure@3fe9b3ae632c6758d0b7757b0838606ef4287b08 # 13.4
with:
cli: '1.12.3.1577'
- name: Check out Git repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
- name: Cache Local Maven Repo
uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4
with:
path: ~/.m2/repository
key: ${{ runner.os }}-temurin-21-maven-jepsen-${{ hashFiles('modules/jepsen/deps.edn') }}
- name: Cache Clojure GitLibs
uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4
with:
path: ~/.gitlibs
key: ${{ runner.os }}-gitlibs-jepsen-${{ hashFiles('modules/jepsen/deps.edn') }}
- name: APT Update
run: sudo apt-get update
- name: Install Gnuplot
run: sudo apt-get install gnuplot
- name: Download Blaze Image
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
with:
name: blaze-image
path: /tmp
- name: Load Blaze Image
run: docker load --input /tmp/blaze.tar
- name: Run Blaze
run: docker run --name blaze -d -e JAVA_TOOL_OPTIONS=-Xmx2g -e ENABLE_INTERACTION_DELETE_HISTORY=true -p 8080:8080 --read-only --tmpfs /tmp:exec -v blaze-data:/app/data blaze:latest
- name: Wait for Blaze
run: .github/scripts/wait-for-url.sh http://localhost:8080/health
- name: Docker Logs
run: docker logs blaze
- name: Check Capability Statement
run: .github/scripts/check-capability-statement.sh
- name: Jepsen Register Test
run: make -C modules/jepsen register-test-fast
- name: Jepsen Resource History Test
run: make -C modules/jepsen resource-history-test-fast
openid-auth-test:
needs: build
runs-on: ubuntu-24.04
steps:
- name: Check out Git repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
- name: Download Blaze Image
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
with:
name: blaze-image
path: /tmp
- name: Load Blaze Image
run: docker load --input /tmp/blaze.tar
- name: Run Keycloak
run: docker compose -f .github/openid-auth-test/docker-compose.yml up -d keycloak
- name: Wait for Keycloak
run: .github/scripts/wait-for-url.sh http://localhost:8090/health/ready
- name: Run Blaze
run: docker compose -f .github/openid-auth-test/docker-compose.yml up -d blaze
- name: Wait for Blaze
run: .github/scripts/wait-for-url.sh http://localhost:8080/health
- name: Docker Logs Keycloak
run: docker compose -f .github/openid-auth-test/docker-compose.yml logs keycloak
- name: Docker Logs Blaze
run: docker compose -f .github/openid-auth-test/docker-compose.yml logs blaze
- name: Unauthenticated Request
run: test "MSG_AUTH_REQUIRED" = "$(curl -s http://localhost:8080/fhir | jq -r .issue[0].details.coding[0].code)"
- name: Authenticated Request
run: .github/scripts/authenticated-request.sh
custom-search-parameters-test:
needs: build
runs-on: ubuntu-24.04
steps:
- name: Check out Git repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
- name: Download Blaze Image
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
with:
name: blaze-image
path: /tmp
- name: Load Blaze Image
run: docker load --input /tmp/blaze.tar
- name: Run Keycloak and Blaze
run: docker compose -f .github/custom-search-parameters-test/docker-compose.yml up -d
- name: Wait for Blaze
run: .github/scripts/wait-for-url.sh http://localhost:8080/health
- name: Docker Logs Blaze
run: docker compose -f .github/custom-search-parameters-test/docker-compose.yml logs blaze
- name: Create Patient
run: .github/custom-search-parameters-test/create-patient.sh
- name: Search Patient
run: .github/custom-search-parameters-test/search-patient.sh
doc-copy-data-test:
needs: build
runs-on: ubuntu-24.04
steps:
- name: Check out Git repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
- name: Install Blazectl
env:
GH_TOKEN: ${{ github.token }}
run: .github/scripts/install-blazectl.sh
- name: Download Blaze Image
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
with:
name: blaze-image
path: /tmp
- name: Load Blaze Image
run: docker load --input /tmp/blaze.tar
- name: Run Test Setup
run: docker compose -f docs/data-sync/copy/docker-compose.yml -f .github/doc-copy-data-test/docker-compose.override.yml up -d
- name: Wait for Source Blaze
run: .github/scripts/wait-for-url.sh http://localhost:8080/health
- name: Load Data Into Source Blaze
run: blazectl --no-progress --server http://localhost:8080/fhir upload .github/test-data/synthea
- name: Wait for Destination Blaze
run: .github/scripts/wait-for-url.sh http://localhost:8082/health
- name: Copy All Resources from Source to Destination
run: scripts/copy-data.sh http://localhost:8080/fhir http://localhost:8082/fhir
- name: Download Source Patients
run: blazectl download --server http://localhost:8080/fhir Patient | jq -c 'del(.meta.versionId) | del(.meta.lastUpdated)' > src-patients.ndjson
- name: Download Destination Patients
run: blazectl download --server http://localhost:8082/fhir Patient | jq -c 'del(.meta.versionId) | del(.meta.lastUpdated)' > dst-patients.ndjson
- name: Compare Source and Destination Patients
run: diff src-patients.ndjson dst-patients.ndjson
big-binary-test:
needs: build
runs-on: ubuntu-24.04
strategy:
matrix:
binary-size:
- '8388608'
- '67108864'
steps:
- name: Check out Git repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
- name: Download Blaze Image
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
with:
name: blaze-image
path: /tmp
- name: Load Blaze Image
run: docker load --input /tmp/blaze.tar
- name: Run Blaze
run: docker run --name blaze -d -e JAVA_TOOL_OPTIONS=-Xmx2g -e DB_RESOURCE_CACHE_SIZE=0 -p 8080:8080 --read-only --tmpfs /tmp:exec -v blaze-data:/app/data blaze:latest
- name: Wait for Blaze
run: .github/scripts/wait-for-url.sh http://localhost:8080/health
- name: Docker Logs
run: docker logs blaze
- name: Generate Large Binary Resources (JSON and XML)
run: .github/scripts/generate-large-binary-resource.sh ${{ matrix.binary-size }}
- name: Post Large Binary JSON Resource
run: curl -f -H Content-Type:application/fhir+json -H Prefer:return=minimal -d @large-binary.json http://localhost:8080/fhir/Binary
- name: Post Large Binary XML Resource
run: curl -f -H Content-Type:application/fhir+xml -H Prefer:return=minimal -d @large-binary.xml http://localhost:8080/fhir/Binary
- name: Download Both Resources
run: test "2" = "$(curl -s http://localhost:8080/fhir/Binary | jq .total)"
frontend-test:
needs: [ build, build-frontend ]
runs-on: ubuntu-24.04
steps:
- name: Check out Git repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
- name: Setup Node
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6
with:
node-version-file: .nvmrc
- name: Install Blazectl
env:
GH_TOKEN: ${{ github.token }}
run: .github/scripts/install-blazectl.sh
- name: Download Blaze Image
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
with:
name: blaze-image
path: /tmp
- name: Load Blaze Image
run: docker load --input /tmp/blaze.tar
- name: Download Blaze Frontend Image
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
with:
name: blaze-frontend-image
path: /tmp
- name: Load Blaze Frontend Image
run: docker load --input /tmp/blaze-frontend.tar
# https://bugs.webkit.org/show_bug.cgi?id=160504
- name: Add Blaze Localhost Entry needed for Webkit
run: |
sudo echo "127.0.0.1 blaze.localhost" | sudo tee -a /etc/hosts
sudo echo "127.0.0.1 keycloak.localhost" | sudo tee -a /etc/hosts
- name: Generate Ingress Certificates
run: make build-ingress
- name: Run Keycloak
run: docker compose -f modules/frontend-e2e/docker-compose.yml up -d keycloak
- name: Install Dependencies
run: make -C modules/frontend-e2e install-playwright
- name: Run Everything Else
run: docker compose -f modules/frontend-e2e/docker-compose.yml up -d
- name: Sleep 30 Seconds
run: sleep 30
- name: Docker Logs
run: docker compose -f modules/frontend-e2e/docker-compose.yml logs
- name: Load Data
run: modules/frontend-e2e/upload.sh
- name: Check Frontend
run: .github/scripts/check-frontend.sh
- name: Check Column Family resource-as-of-index
run: .github/scripts/admin-api/column-family-metadata.sh resource-as-of-index
- name: Check Column Family search-param-value-index
run: .github/scripts/admin-api/column-family-metadata.sh search-param-value-index
- name: Download Patient Resources
run: modules/frontend-e2e/download-patient-resources.sh
- name: Run Playwright Tests
run: make -C modules/frontend-e2e test
- uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with:
name: playwright-report
path: modules/frontend-e2e/playwright-report/
missing-resource-content-test:
needs: build
runs-on: ubuntu-24.04
steps:
- name: Check out Git repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
- name: Download Blaze Image
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
with:
name: blaze-image
path: /tmp
- name: Load Blaze Image
run: docker load --input /tmp/blaze.tar
- name: Create a Data Dir
run: mkdir data
- name: Run Blaze
run: docker run --name blaze -d -e JAVA_TOOL_OPTIONS=-Xmx2g -p 8080:8080 --read-only --tmpfs /tmp:exec -v "$(pwd)/data:/app/data" blaze:latest
- name: Wait for Blaze
run: .github/scripts/wait-for-url.sh http://localhost:8080/health
- name: Docker Logs
run: docker logs blaze
- name: Create Patient
run: .github/scripts/create-patient-0.sh
- name: Stop Blaze
run: docker stop blaze
- name: Remove Resource Database
run: rm -r data/resource
- name: Start Blaze Again
run: docker start blaze
- name: Wait for Blaze
run: .github/scripts/wait-for-url.sh http://localhost:8080/health
# TODO: Reactivate if we have an idea how to handle the missing DocumentReference
# of the page ID cipher at startup.
#- name: Fetch Patient Expecting an Error
# run: .github/scripts/fetch-resource-0-with-missing-resource-content.sh
# This test ensures that older versions of Blaze will migrate successfully to
# the new database schema especially building the PatientLastChange index.
build-patient-last-change-index-test:
needs: build
runs-on: ubuntu-24.04
steps:
- name: Check out Git repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
- name: Install Blazectl
env:
GH_TOKEN: ${{ github.token }}
run: .github/scripts/install-blazectl.sh
- name: Download Blaze Image
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
with:
name: blaze-image
path: /tmp
- name: Load Blaze Image
run: docker load --input /tmp/blaze.tar
- name: Run Blaze in the Version 0.27 before Introduction of the PatientLastChange Index
run: docker run --name blaze --rm -d -e JAVA_TOOL_OPTIONS=-Xmx2g -e ENABLE_ADMIN_API=true -p 8080:8080 -v blaze-data:/app/data samply/blaze:0.27
- name: Wait for Blaze
run: .github/scripts/wait-for-url.sh http://localhost:8080/health
- name: Load Data
run: blazectl --no-progress --server http://localhost:8080/fhir upload .github/test-data/synthea
- name: Ensure that the PatientLastChange Index does not exist
run: .github/scripts/check-patient-last-change-index-missing.sh
- name: Shut down Blaze
run: docker stop blaze
- name: Run Latest Blaze with the PatientLastChange Index
run: docker run --name blaze -d -e JAVA_TOOL_OPTIONS=-Xmx2g -e ENABLE_ADMIN_API=true -e LOG_LEVEL=debug -p 8080:8080 -v blaze-data:/app/data blaze:latest
- name: Wait for Blaze
run: .github/scripts/wait-for-url.sh http://localhost:8080/health
- name: Docker Logs
run: docker logs blaze
- name: Ensure that the State of PatientLastChange Index is Current
run: .github/scripts/check-patient-last-change-index-state.sh current
jepsen-distributed-test:
needs: build
runs-on: ubuntu-24.04
steps:
- name: Setup Java
uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5
with:
distribution: 'temurin'
java-version: '21'
- name: Setup Clojure
uses: DeLaGuardo/setup-clojure@3fe9b3ae632c6758d0b7757b0838606ef4287b08 # 13.4
with:
cli: '1.12.3.1577'
- name: Check out Git repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
- name: Cache Local Maven Repo
uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4
with:
path: ~/.m2/repository
key: ${{ runner.os }}-temurin-21-maven-jepsen-${{ hashFiles('modules/jepsen/deps.edn') }}
- name: Cache Clojure GitLibs
uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4
with:
path: ~/.gitlibs
key: ${{ runner.os }}-gitlibs-jepsen-${{ hashFiles('modules/jepsen/deps.edn') }}
- name: APT Update
run: sudo apt-get update
- name: Install Gnuplot
run: sudo apt-get install gnuplot
- name: Download Blaze Image
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
with:
name: blaze-image
path: /tmp
- name: Load Blaze Image
run: docker load --input /tmp/blaze.tar
- name: Run Kafka, Cassandra and Blaze
run: docker compose -f .github/distributed-test/docker-compose.yml up -d
- name: Wait for Blaze 1
run: .github/scripts/wait-for-url.sh http://localhost:8081/metrics
- name: Wait for Blaze 2
run: .github/scripts/wait-for-url.sh http://localhost:8082/metrics
- name: Docker Logs Kafka
run: docker compose -f .github/distributed-test/docker-compose.yml logs kafka
- name: Docker Logs Cassandra 1
run: docker compose -f .github/distributed-test/docker-compose.yml logs cassandra-1
- name: Docker Logs Cassandra 2
run: docker compose -f .github/distributed-test/docker-compose.yml logs cassandra-2
- name: Docker Logs Blaze 1
run: docker compose -f .github/distributed-test/docker-compose.yml logs blaze-1
- name: Docker Logs Blaze 2
run: docker compose -f .github/distributed-test/docker-compose.yml logs blaze-2
- name: Docker Stats
run: docker stats --no-stream
- name: Check Capability Statement
run: .github/scripts/check-capability-statement.sh
- name: Jepsen Register Test
run: make -C modules/jepsen register-test-slow
- name: Jepsen Resource History Test
run: make -C modules/jepsen resource-history-test-slow
- name: Docker Stats
run: docker stats --no-stream
# This job exists only as status check target for the branch protection
# because we can't use push-image as this isn't executed in forks.
pre-push-image:
needs:
- fmt
- lint
- test
- test-slow
- test-root
- image-scan
- cql-expr-cache-test
- integration-test
- integration-test-synthea-1000
- integration-test-kds
- integration-test-patient-purge
- integration-test-value-set-expand
- integration-test-validation
- terminology-tests
- not-enforcing-referential-integrity-test
- admin-api-test
- small-transactions-test
- big-transaction-test
- evaluate-measure-timeout-test
- include-without-referential-integrity-test
- chaining-without-referential-integrity-test
- bundle-with-references-test
- jepsen-test
- jepsen-distributed-test
- openid-auth-test
- doc-copy-data-test
- big-binary-test
- frontend-test
- missing-resource-content-test
- custom-search-parameters-test
- build-patient-last-change-index-test
runs-on: ubuntu-24.04
if: always()
steps:
- name: Check if any job failed
run: |
if [[ ${{ contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled') }} == true ]]; then
echo "One or more jobs have failed or been cancelled"
exit 1
else
echo "All jobs completed successfully"
fi
push-image:
if: github.event_name != 'pull_request' || (github.event.pull_request.base.repo.full_name == github.event.pull_request.head.repo.full_name)
needs:
- pre-push-image
runs-on: ubuntu-24.04
permissions:
packages: write
id-token: write
strategy:
matrix:
image:
- name: ${{ github.event.repository.name }}
context: .
- name: ${{ github.event.repository.name }}-frontend
context: modules/frontend
env:
dockerhub_username: ${{ secrets.DOCKERHUB_USERNAME }}
steps:
- name: Check out Git repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
- name: Download Blaze Uberjar
if: ${{ matrix.image.context == '.' }}
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
with:
name: blaze-uberjar
path: target
- name: Setup Node
if: ${{ matrix.image.context == 'modules/frontend' }}
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6
with:
node-version-file: .nvmrc
- name: Build Frontend
if: ${{ matrix.image.context == 'modules/frontend' }}
run: make build-frontend
- name: Download Image
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
with:
name: ${{ matrix.image.name }}-image
path: /tmp
- name: Load Image
run: docker load --input /tmp/${{ matrix.image.name }}.tar
- name: Set up QEMU
uses: docker/setup-qemu-action@c7c53464625b32c7a7e944ae62b3e17d2b600130 # v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v3
- name: Install Cosign
uses: sigstore/cosign-installer@398d4b0eeef1380460a10c8013a76f728fb906ac # v3
- name: Login to GHCR
uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Login to DockerHub
if: env.dockerhub_username != ''
uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3
with:
username: ${{ env.dockerhub_username }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Generate Image Metadata
id: meta
uses: docker/metadata-action@c299e40c65443455700f0fdfc63efafe5b349051 # v5
with:
images: |
ghcr.io/${{ github.repository_owner }}/${{ matrix.image.name }}
${{ env.dockerhub_username != '' && format('{0}/{1}', github.repository_owner, matrix.image.name ) || ''}}
tags: |
type=schedule
type=ref,event=branch
type=ref,event=pr
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
- name: Build and Push Image
id: push
uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v6
with:
context: ${{ matrix.image.context }}
platforms: linux/amd64,linux/arm64
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
- name: Sign GHCR Image
run: cosign sign --yes "ghcr.io/${{ github.repository_owner }}/${{ matrix.image.name }}@${{ steps.push.outputs.digest }}"
- name: Sign DockerHub Image
if: env.dockerhub_username != ''
run: cosign sign --yes "${{ github.repository_owner }}/${{ matrix.image.name }}@${{ steps.push.outputs.digest }}"
release:
if: github.ref_type == 'tag'
needs:
- push-image
runs-on: ubuntu-24.04
permissions:
contents: write
steps:
- name: Release
uses: softprops/action-gh-release@a06a81a03ee405af7f2048a818ed3f03bbf83c7b # v2
with:
draft: true
files: target/blaze-*-standalone.jar