Skip to content

[WIP] Implement Operation ValueSet $validate-code #7751

[WIP] Implement Operation ValueSet $validate-code

[WIP] Implement Operation ValueSet $validate-code #7751

Workflow file for this run

name: Build
on:
schedule:
- cron: '0 10 * * *' # every day at 10am
push:
tags:
- 'v*.*.*'
pull_request:
branches:
- main
merge_group:
permissions: read-all
jobs:
fmt:
runs-on: ubuntu-24.04
steps:
- name: Setup Clojure
uses: DeLaGuardo/setup-clojure@cc67f8308550d0f18b0ba445c2476f84626a5d6a # 13.1
with:
cljfmt: 0.13.0
- name: Check out Git repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Check Formatting
run: make fmt
lint:
runs-on: ubuntu-24.04
steps:
- name: Setup Clojure
uses: DeLaGuardo/setup-clojure@cc67f8308550d0f18b0ba445c2476f84626a5d6a # 13.1
with:
clj-kondo: '2024.09.27'
- name: Check out Git repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Lint
run: make lint
job-ig:
runs-on: ubuntu-24.04
steps:
- name: Check out Git repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Setup Node
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4
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@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4
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-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:
- '17'
- '21'
exclude:
- module: jepsen
java-version: '17'
needs: job-ig
runs-on: ubuntu-24.04
steps:
- name: Setup Java
uses: actions/setup-java@7a6d8a8234af8eb26422e24e3006232cccaa061b # v4
with:
distribution: 'temurin'
java-version: ${{ matrix.java-version }}
- name: Setup Clojure
uses: DeLaGuardo/setup-clojure@cc67f8308550d0f18b0ba445c2476f84626a5d6a # 13.1
with:
cli: '1.12.0.1479'
- name: Check out Git repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Cache Local Maven Repo
uses: actions/cache@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4
with:
path: ~/.m2/repository
key: ${{ runner.os }}-temurin-${{ matrix.java-version }}-maven-${{ matrix.module }}-${{ hashFiles(format('modules/{0}/deps.edn', matrix.module)) }}
- name: Download Job IG Profiles
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4
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: Upload Coverage Report
if: ${{ matrix.java-version == '21' && matrix.module != 'db' && matrix.module != 'jepsen' }}
uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4
with:
name: coverage-report-${{ matrix.module }}
path: modules/${{ matrix.module }}/target/coverage/codecov.json
# Special treatment, because it runs much longer as the other modules.
test-coverage-db:
needs: job-ig
runs-on: ubuntu-24.04
steps:
- name: Setup Java
uses: actions/setup-java@7a6d8a8234af8eb26422e24e3006232cccaa061b # v4
with:
distribution: 'temurin'
java-version: '21'
- name: Setup Clojure
uses: DeLaGuardo/setup-clojure@cc67f8308550d0f18b0ba445c2476f84626a5d6a # 13.1
with:
cli: '1.12.0.1479'
- name: Check out Git repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Cache Local Maven Repo
uses: actions/cache@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4
with:
path: ~/.m2/repository
key: ${{ runner.os }}-temurin-21-maven-db-coverage-${{ hashFiles('modules/db/deps.edn') }}
- name: Download Job IG Profiles
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4
with:
name: job-ig-profiles
path: job-ig/fsh-generated/resources
- name: Test Coverage
run: make -C modules/db test-coverage
- name: Upload Coverage Report
uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4
with:
name: coverage-report-db
path: modules/db/target/coverage/codecov.json
test-root:
strategy:
matrix:
java-version:
- '17'
- '21'
needs: job-ig
runs-on: ubuntu-24.04
steps:
- name: Setup Java
uses: actions/setup-java@7a6d8a8234af8eb26422e24e3006232cccaa061b # v4
with:
distribution: 'temurin'
java-version: ${{ matrix.java-version }}
- name: Setup Clojure
uses: DeLaGuardo/setup-clojure@cc67f8308550d0f18b0ba445c2476f84626a5d6a # 13.1
with:
cli: '1.12.0.1479'
- name: Check out Git repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Cache Local Maven Repo
uses: actions/cache@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4
with:
path: ~/.m2/repository
key: ${{ runner.os }}-temurin-${{ matrix.java-version }}-maven-${{ hashFiles('deps.edn') }}
- name: Download Job IG Profiles
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4
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@fa0a91b85d4f404e444e00e005971372dc801d16 # v4
with:
pattern: coverage-report-*
- name: Codecov Upload
uses: codecov/codecov-action@1e68e06f1dbfde0e4cefc87efeba9e4643565303 # v5
with:
name: codecov-umbrella
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@7a6d8a8234af8eb26422e24e3006232cccaa061b # v4
with:
distribution: 'temurin'
java-version: '21'
- name: Setup Clojure
uses: DeLaGuardo/setup-clojure@cc67f8308550d0f18b0ba445c2476f84626a5d6a # 13.1
with:
cli: '1.12.0.1479'
- name: Check out Git repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Cache Local Maven Repo
uses: actions/cache@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4
with:
path: ~/.m2/repository
key: ${{ runner.os }}-temurin-21-maven-build-${{ hashFiles('**/deps.edn') }}
- name: Download Job IG Profiles
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4
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@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4
with:
name: blaze-uberjar
path: target/blaze-*-standalone.jar
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@6524bf65af31da8d45b59e8c27de4bd072b392f5 # v3
- name: Build and Export to Docker
uses: docker/build-push-action@48aba3b46d1b1fec4febb7c5d0c644b249a11355 # v6
with:
context: .
tags: blaze:latest
outputs: type=docker,dest=/tmp/blaze.tar
- name: Upload Blaze Image
uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4
with:
name: blaze-image
path: /tmp/blaze.tar
build-frontend:
runs-on: ubuntu-24.04
steps:
- name: Check out Git repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Setup Node
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4
with:
node-version-file: .nvmrc
- name: Build Frontend
run: make build-frontend
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@6524bf65af31da8d45b59e8c27de4bd072b392f5 # v3
- name: Build and Export to Docker
uses: docker/build-push-action@48aba3b46d1b1fec4febb7c5d0c644b249a11355 # 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@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4
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@fa0a91b85d4f404e444e00e005971372dc801d16 # v4
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@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Run Trivy Vulnerability Scanner
uses: aquasecurity/trivy-action@18f2510ee396bbf400402947b394f2dd8c87dbb0 # 0.29.0
with:
image-ref: ${{ matrix.image }}:latest
format: sarif
output: trivy-results.sarif
severity: 'CRITICAL,HIGH'
timeout: '15m0s'
env:
TRIVY_DB_REPOSITORY: public.ecr.aws/aquasecurity/trivy-db:2
TRIVY_JAVA_DB_REPOSITORY: public.ecr.aws/aquasecurity/trivy-java-db:1
- 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@48ab28a6f5dbc2a99bf1e0131198dd8f1df78169 # v3
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@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Install Blazectl
run: .github/scripts/install-blazectl.sh
- name: Download Blaze Image
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4
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 92114
run: .github/scripts/check-total-number-of-resources.sh 92114
- name: Evaluate CQL Query 1
run: .github/scripts/evaluate-measure.sh q1 56
- name: Evaluate CQL Query 1 using 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 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 using 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 4
run: .github/scripts/evaluate-measure.sh q4 0
- name: Evaluate CQL Query 4 using 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 7
run: .github/scripts/evaluate-measure.sh q7 81
- name: Evaluate CQL Query 7 using 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 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 using 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 17
run: .github/scripts/evaluate-measure.sh q17 120
- name: Evaluate CQL Query 17 using 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 20 using Blazectl
run: .github/scripts/evaluate-measure-blazectl-stratifier.sh q20-stratifier-city 120
- name: Evaluate CQL Query 21 using Blazectl
run: .github/scripts/evaluate-measure-blazectl-stratifier.sh q21-stratifier-city-of-only-women 64
- name: Evaluate CQL Query 26 using Blazectl
run: .github/scripts/evaluate-measure-blazectl-stratifier.sh q26-stratifier-bmi 120
- name: Evaluate CQL Query 27 using Blazectl
run: .github/scripts/evaluate-measure-blazectl-stratifier.sh q27-stratifier-calculated-bmi 120
- name: Evaluate CQL Query 32 using 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 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 using 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 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 using 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@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Install Blazectl
run: .github/scripts/install-blazectl.sh
- name: Install xq
run: .github/scripts/install-xq.sh
- name: Download Blaze Image
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4
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 -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: Load Data
run: blazectl --no-progress --server http://localhost:8080/fhir upload .github/test-data/synthea
- name: Check Total-Number of Resources are 92114
run: .github/scripts/check-total-number-of-resources.sh 92114
- 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: 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 all LOINC Codes
run: .github/scripts/download-resources-query.sh Observation "_count=500&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 "_count=500&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 854235
run: .github/scripts/download-resources-query.sh MedicationRequest "medication.code=1736854" 112
- name: Download MedicationRequest Resources of Medications with code 854235 Sorted Ascending
run: .github/scripts/download-resources-query-sort.sh MedicationRequest "medication.code=1736854" "_lastUpdated" 112
- name: Download MedicationRequest Resources of Medications with code 854235 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 as 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 using 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 as 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 as Batch
run: .github/scripts/evaluate-measure-as-batch.sh q2 42
- name: Evaluate CQL Query 2 using 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 as 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 using 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 7
run: .github/scripts/evaluate-measure.sh q7 81
- name: Evaluate CQL Query 7 using 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 14
run: .github/scripts/evaluate-measure.sh q14 96
- name: Evaluate CQL Query 14 using 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 15 using Blazectl
run: .github/scripts/evaluate-measure.sh q15 31
- name: Evaluate CQL Query 17
run: .github/scripts/evaluate-measure.sh q17 120
- name: Evaluate CQL Query 17 using 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 20 using Blazectl
run: .github/scripts/evaluate-measure-blazectl-stratifier.sh q20-stratifier-city 120
- name: Evaluate CQL Query 21 using Blazectl
run: .github/scripts/evaluate-measure-blazectl-stratifier.sh q21-stratifier-city-of-only-women 64
- name: Evaluate CQL Query 26 using Blazectl
run: .github/scripts/evaluate-measure-blazectl-stratifier.sh q26-stratifier-bmi 120
- name: Evaluate CQL Query 27 using Blazectl
run: .github/scripts/evaluate-measure-blazectl-stratifier.sh q27-stratifier-calculated-bmi 120
- name: Evaluate CQL Query 32 using 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 34
run: .github/scripts/evaluate-measure.sh q37-overlaps 24
- name: Evaluate CQL Query 34 using 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 46
run: .github/scripts/evaluate-measure.sh q46-between-date 19
- name: Evaluate CQL Query 46 using 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 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: OPTIONS
run: curl -f -XOPTIONS http://localhost:8080/fhir/metadata
- 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: 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 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: 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: Patient Purge
run: .github/scripts/patient-purge.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@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Install Blazectl
run: .github/scripts/install-blazectl.sh
- name: Download Blaze Image
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4
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: 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: Download Synthea Test Data
run: wget https://speicherwolke.uni-leipzig.de/index.php/s/kDsa2ifeMFdqK35/download/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: 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: Check Total-Number of Resources are 1099594
run: .github/scripts/check-total-number-of-resources.sh 1099594
- 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 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: Docker Stats
run: docker stats --no-stream
integration-test-patient-purge:
needs: build
runs-on: ubuntu-24.04
steps:
- name: Check out Git repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Install Blazectl
run: .github/scripts/install-blazectl.sh
- name: Download Blaze Image
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4
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 92114
run: .github/scripts/check-total-number-of-resources.sh 92114
- 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@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Setup Node
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4
with:
node-version-file: .nvmrc
- name: Install Blazectl
run: .github/scripts/install-blazectl.sh
- name: Download Blaze Image
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4
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 -p 8080:8080 --read-only --tmpfs /tmp:exec -v blaze-data:/app/data blaze:latest
- name: Install All KDS Terminology Resources
working-directory: .github/value-set-expand
run: npm 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: Check Terminology Capabilities
run: .github/scripts/check-terminology-capabilities.sh
- name: Upload KDS Terminology Resources
run: .github/value-set-expand/upload-all.sh
- name: Expand KDS Terminology Resources
run: .github/value-set-expand/expand.sh
integration-test-validation:
needs: build
runs-on: ubuntu-24.04
steps:
- name: Check out Git repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Setup Node
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4
with:
node-version-file: .nvmrc
- name: Install Blazectl
run: .github/scripts/install-blazectl.sh
- name: Download Blaze Image
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4
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 -p 8080:8080 --read-only --tmpfs /tmp:exec -v blaze-data:/app/data blaze:latest
- name: Install All KDS Terminology Resources
working-directory: .github/value-set-expand
run: npm install
- name: Download and Unzip MII Test Data
run: make kds-test-data
working-directory: .github/validation
- name: Install Validator
run: make validator_cli.jar
working-directory: .github/validation
- 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: Upload KDS Terminology Resources
run: .github/value-set-expand/upload-all.sh
- name: Validate Medication Resources
run: .github/validation/validate-medication.sh
not-enforcing-referential-integrity-test:
needs: build
runs-on: ubuntu-24.04
steps:
- name: Check out Git repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Install Blazectl
run: .github/scripts/install-blazectl.sh
- name: Download Blaze Image
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4
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 5
run: .github/scripts/check-total-number-of-resources.sh 5
- 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@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Install Blazectl
run: .github/scripts/install-blazectl.sh
- name: Download Blaze Image
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4
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@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Install Blazectl
run: .github/scripts/install-blazectl.sh
- name: Download Blaze Image
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4
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@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Install Blazectl
run: .github/scripts/install-blazectl.sh
- name: Download Blaze Image
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4
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@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Install Blazectl
run: .github/scripts/install-blazectl.sh
- name: Download Blaze Image
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4
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@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Download Blaze Image
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4
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@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Download Blaze Image
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4
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@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Install Blazectl
run: .github/scripts/install-blazectl.sh
- name: Download Blaze Image
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4
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@7a6d8a8234af8eb26422e24e3006232cccaa061b # v4
with:
distribution: 'temurin'
java-version: '21'
- name: Setup Clojure
uses: DeLaGuardo/setup-clojure@cc67f8308550d0f18b0ba445c2476f84626a5d6a # 13.1
with:
cli: '1.12.0.1479'
- name: Check out Git repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Cache Local Maven Repo
uses: actions/cache@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4
with:
path: ~/.m2/repository
key: ${{ runner.os }}-temurin-21-maven-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@fa0a91b85d4f404e444e00e005971372dc801d16 # v4
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@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Download Blaze Image
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4
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@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Download Blaze Image
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4
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@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Install Blazectl
run: .github/scripts/install-blazectl.sh
- name: Download Blaze Image
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4
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
steps:
- name: Check out Git repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Download Blaze Image
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4
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
- 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@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Setup Node
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4
with:
node-version-file: .nvmrc
- name: Install Blazectl
run: .github/scripts/install-blazectl.sh
- name: Download Blaze Image
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4
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@fa0a91b85d4f404e444e00e005971372dc801d16 # v4
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: Sleep 20 Seconds
run: sleep 20
- 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: Install Playwright
run: make -C modules/frontend-e2e install
- name: Run Playwright Tests
run: make -C modules/frontend-e2e test
- uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4
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@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Download Blaze Image
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4
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@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Install Blazectl
run: .github/scripts/install-blazectl.sh
- name: Download Blaze Image
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4
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: 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@7a6d8a8234af8eb26422e24e3006232cccaa061b # v4
with:
distribution: 'temurin'
java-version: '21'
- name: Setup Clojure
uses: DeLaGuardo/setup-clojure@cc67f8308550d0f18b0ba445c2476f84626a5d6a # 13.1
with:
cli: '1.12.0.1479'
- name: Check out Git repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Cache Local Maven Repo
uses: actions/cache@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4
with:
path: ~/.m2/repository
key: ${{ runner.os }}-temurin-21-maven-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@fa0a91b85d4f404e444e00e005971372dc801d16 # v4
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-root
- image-scan
- cql-expr-cache-test
- integration-test
- integration-test-synthea-1000
- integration-test-patient-purge
- integration-test-value-set-expand
- integration-test-validation
- 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
steps:
- name: Check out Git repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
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
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@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Download Blaze Uberjar
if: ${{ matrix.image.context == '.' }}
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4
with:
name: blaze-uberjar
path: target
- name: Setup Node
if: ${{ matrix.image.context == 'modules/frontend' }}
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4
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@fa0a91b85d4f404e444e00e005971372dc801d16 # v4
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@49b3bc8e6bdd4a60e6116a5414239cba5943d3cf # v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@6524bf65af31da8d45b59e8c27de4bd072b392f5 # v3
- name: Login to GHCR
uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 # v3
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: GHCR meta
id: ghcr-meta
uses: docker/metadata-action@369eb591f429131d6889c46b94e711f089e6ca96 # v5
with:
images: |
ghcr.io/${{ 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 to GHCR
uses: docker/build-push-action@48aba3b46d1b1fec4febb7c5d0c644b249a11355 # v6
with:
context: ${{ matrix.image.context }}
platforms: linux/amd64,linux/arm64
push: true
tags: ${{ steps.ghcr-meta.outputs.tags }}
labels: ${{ steps.ghcr-meta.outputs.labels }}
- name: Login to DockerHub
if: ${{ env.dockerhub_username != '' }}
uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 # v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: DockerHub meta
if: ${{ env.dockerhub_username != '' }}
id: dockerhub-meta
uses: docker/metadata-action@369eb591f429131d6889c46b94e711f089e6ca96 # v5
with:
images: |
${{ 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 to DockerHub
if: ${{ env.dockerhub_username != '' }}
uses: docker/build-push-action@48aba3b46d1b1fec4febb7c5d0c644b249a11355 # v6
with:
context: ${{ matrix.image.context }}
platforms: linux/amd64,linux/arm64
push: true
tags: ${{ steps.dockerhub-meta.outputs.tags }}
labels: ${{ steps.dockerhub-meta.outputs.labels }}
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@e7a8f85e1c67a31e6ed99a94b41bd0b71bbee6b8 # v2
with:
files: target/blaze-*-standalone.jar
build-pages:
runs-on: ubuntu-24.04
steps:
- name: Check out Git repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Setup Node
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4
with:
node-version-file: .nvmrc
cache: npm
cache-dependency-path: 'docs/package-lock.json'
- name: Build
working-directory: docs
env:
DOCS_BASE: "/${{ github.event.repository.name }}/"
run: make build
- name: Setup Pages
uses: actions/configure-pages@983d7736d9b0ae728b81ab479565c72886d7745b # v5
- name: Upload artifact
uses: actions/upload-pages-artifact@56afc609e74202658d3ffba0e8f6dda462b719fa # v3
with:
path: docs/.vitepress/dist
deploy-pages:
if: github.ref == 'refs/heads/main'
runs-on: ubuntu-24.04
needs: [ build-pages ]
permissions:
pages: write
id-token: write
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@d6db90164ac5ed86f2b6aed7e0febac5b3c0c03e # v4