From ed632f44332d490e4871b238d928b9668b1b9391 Mon Sep 17 00:00:00 2001 From: Julian Sass Date: Fri, 22 Dec 2023 17:57:23 +0100 Subject: [PATCH] Updated CI/CD and QC rules --- .github/workflows/main.yml | 45 ++++++++++++++ .github/workflows/validate-profiles.yaml | 21 ------- README.md | 11 +++- qc/custom.rules.yaml | 74 ++++++++++++++++++++++++ 4 files changed, 129 insertions(+), 22 deletions(-) create mode 100644 .github/workflows/main.yml delete mode 100644 .github/workflows/validate-profiles.yaml create mode 100644 qc/custom.rules.yaml diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 00000000..ef95548c --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,45 @@ +# This is a basic workflow to help you get started with Actions + +name: CI (FHIR Validation) + +# Controls when the action will run. +on: + # Triggers the workflow on push or pull request events but only for the master branch + push: + branches: [ master ] + pull_request: + branches: [ master ] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + + # Validate all resources using Firely Terminal + CI_FHIR_VALIDATION: + # The type of runner that the job will run on + runs-on: ubuntu-latest + + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + + - name: Checkout code + uses: actions/checkout@v3 + + # Java and .NET are already installed on ubuntu-latest + + - name: Firely.Terminal (GitHub Actions) + uses: FirelyTeam/firely-terminal-pipeline@v0.4.0 + with: + PATH_TO_CONFORMANCE_RESOURCES: fsh-generated/resources + PATH_TO_EXAMPLES: fsh-generated/resources + PATH_TO_QUALITY_CONTROL_RULES: qc/custom + DOTNET_VALIDATION_ENABLED: true + JAVA_VALIDATION_ENABLED: true + EXPECTED_FAILS: VALIDATION_CONFORMANCE_DOTNET VALIDATION_CONFORMANCE_JAVA VALIDATION_EXAMPLES_JAVA + OUTPUT_FORMAT: RAW + JAVA_VALIDATION_OPTIONS: -allow-example-urls true -tx n/a + SIMPLIFIER_USERNAME: ${{ secrets.SIMPLIFIER_USERNAME }} + SIMPLIFIER_PASSWORD: ${{ secrets.SIMPLIFIER_PASSWORD }} + JAVA_VALIDATOR_VERSION: 6.2.3 diff --git a/.github/workflows/validate-profiles.yaml b/.github/workflows/validate-profiles.yaml deleted file mode 100644 index d2007196..00000000 --- a/.github/workflows/validate-profiles.yaml +++ /dev/null @@ -1,21 +0,0 @@ -name: FHIR Validator - -on: - workflow_run: - workflows: ["FHIR Profiles"] - types: [completed] - -jobs: - verify: - name: Validation - runs-on: ubuntu-latest - if: ${{ github.event.workflow_run.conclusion == 'success' }} - steps: - - name: Checkout code - uses: actions/checkout@v3 - - name: Get FHIR packages - uses: cybernop/fill-fhir-cache@v1 - - name: Validate profiles - uses: cybernop/validate-fhir@v1 - with: - fhir-version: "4.0" diff --git a/README.md b/README.md index 2130ff7b..aa8dc9b4 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,16 @@ # MII Kerndatensatz Modul Onkologie +### Übersicht + +[![FHIR Project on GitHub.com](https://img.shields.io/badge/FHIR_project_on_GitHub.com-kerndatensatzmodul--onkologie-green)](https://github.com/medizininformatik-initiative/kerndatensatzmodul-onkologie) + +[![CI (FHIR Validation)](https://github.com/medizininformatik-initiative/kerndatensatzmodul-onkologie/actions/workflows/main.yml/badge.svg)](https://github.com/medizininformatik-initiative/kerndatensatzmodul-onkologie/actions/workflows/main.yml) + +Das vorliegende Projekt beschreibt die FHIR-Spezifikation des Basismoduls 'Onkologie'. Die hier veröffentlichten FHIR-Profile und ImplemenationGuides dienen als zentrale und verbindliche Spezifikation für die syntaktische und semantische Kodierung der Modulinhalte. + +--- + [![FHIR Profiles](https://github.com/medizininformatik-initiative/kerndatensatzmodul-onkologie/actions/workflows/build-profiles.yaml/badge.svg)](https://github.com/medizininformatik-initiative/kerndatensatzmodul-onkologie/actions/workflows/build-profiles.yaml) -[![FHIR Validator](https://github.com/medizininformatik-initiative/kerndatensatzmodul-onkologie/actions/workflows/validate-profiles.yaml/badge.svg)](https://github.com/medizininformatik-initiative/kerndatensatzmodul-onkologie/actions/workflows/validate-profiles.yaml) [![IG Publisher](https://github.com/medizininformatik-initiative/kerndatensatzmodul-onkologie/actions/workflows/build-ig.yml/badge.svg)](https://github.com/medizininformatik-initiative/kerndatensatzmodul-onkologie/actions/workflows/build-ig.yml) ## Profiling diff --git a/qc/custom.rules.yaml b/qc/custom.rules.yaml new file mode 100644 index 00000000..fc213b71 --- /dev/null +++ b/qc/custom.rules.yaml @@ -0,0 +1,74 @@ +# This is the minimal rule series +# removed 'action: unique' due to multiple versions of OPS CodeSystem + +- action: parse + name: parse-fhir-resources + status: "Checking if all FHIR Resource files can be parsed" + files: + - /**/*.xml + - /**/*.json + - "!package.json" + - "!fhirpkg.lock.json" + +- name: resource-validation + status: "Validating resources against the FHIR standard and their profiles" + action: validate + category: Resource + suppress: + - 6005 + - eld-16 + +- name: version-filled + filter: (StructureDefinition or ValueSet or CodeSystem or ConceptMap or StructureMap or NamingSystem or SearchParameter or CapabilityStatement or OperationDefinition or ImplementationGuide).exists() + # Excluding NamingSystem as they have no version + status: "Checking if all resources have version filled" + predicate: version.exists() and (version in ('2024.0.0') or version in ('2024.0.0-ballot')) + error-message: "version not filled (correctly)" + files: + - /**/*.xml + - /**/*.json + - "!package.json" + +- action: Check for valid ids + # See https://github.com/FirelyTeam/firely-net-sdk/issues/1773 + predicate: id.matches('^[A-Za-z0-9\\-\\.]{1,64}$') + error: The resource must have a valid id + +- name: naming-convention-id + status: "Checking if all resource ids follow the naming convention" + predicate: id.matches('^mii-(pr|ex|lm|vs|cs|cm|sm|ns|sp|cps|od|ig|exa)-onko') + error-message: "resource id naming convention mismatch" + files: + - /**/*.xml + - /**/*.json + - "!package.json" + +- name: naming-convention-name + filter: (StructureDefinition or ValueSet or CodeSystem or ConceptMap or StructureMap or NamingSystem or SearchParameter or CapabilityStatement or OperationDefinition or ImplementationGuide).exists() + status: "Checking if all resource names follow the naming convention" + predicate: name.exists() implies name.matches('^MII_(PR|EX|LM|VS|CS|CM|SM|NS|SP|CPS|OD|IG|EXA)_Onko') + error-message: "resource name naming convention mismatch" + files: + - /**/*.xml + - /**/*.json + - "!package.json" + +- name: naming-convention-title + filter: (StructureDefinition or ValueSet or CodeSystem or ConceptMap or StructureMap or NamingSystem or SearchParameter or CapabilityStatement or OperationDefinition or ImplementationGuide).exists() + status: "Checking if all resource titles follow the naming convention" + predicate: title.exists() implies title.matches('^MII (PR|EX|LM|VS|CS|CM|SM|NS|SP|CPS|OD|IG|EXA) Onko') + error-message: "resource name naming convention mismatch" + files: + - /**/*.xml + - /**/*.json + - "!package.json" + +- name: naming-convention-url + filter: (StructureDefinition or ValueSet or CodeSystem or ConceptMap or StructureMap or NamingSystem or SearchParameter or CapabilityStatement or OperationDefinition or ImplementationGuide).exists() + status: "Checking if all resource urls follow the naming convention" + predicate: url.exists() implies url.matches('^https://www.medizininformatik-initiative.de/fhir/core/modul-onko/') + error-message: "resource url naming convention mismatch" + files: + - /**/*.xml + - /**/*.json + - "!package.json"