Für die deutsche Version bitte hier klicken.
For better understanding of the architecture of TerminoloGit basic knowledge of the following technologies and/or systems is assumed:
TerminoloGit is an open source project that is made up of multiple interacting repositories, initialized by the Austrian ELGA GmbH.
If TerminoloGit shall be used in connection with a FHIR® server, please take a look at the project TerminoloGit tergi which allows to set up a fully-fledged FHIR® server complemented with a lightweight Git repository.
This chapter briefly explains the structure of a TerminoloGit repository:
.
- contains the README
, the CODE_OF_CONDUCT
, the CONTRIBUTING
, the CHANGELOG
, the LICENSE
, as well as a lot of scripts used throughout a pipeline run.input/files/
- contains some templates to be used for terminology creation.input/fsh/
- kept to tell TerminoloGit users that no fsh
files shall be put into that directory.input/images/
- images which are used within the documentation.input/includes/
- for each terminology a fragment for its downloads and its previous versions is provided in this directory. These fragments will later be processed by the TerminoloGit template.input/pagecontent/
- several markdown files that form the documentation of TerminoloGit.input/redirects/
- for each terminology a redirects file exists which allows to access the terminologies based on their canonical.input/resources/
- FHIR® resources which shall not be processed by MaLaC-CT are placed in this directory, e.g. ConceptMaps or intensional ValueSets.input/sitemap/
- Meta-information for web crawler where to find the sitemap and which pages shall be indexed.terminologies/
- for each terminology a directory exists (pattern [CodeSystem | ValueSet]-[id]
). Furthermore, it contains the terminologiesMetadata.csv
.The terminologies/terminologiesMeta.csv
contains some important meta-information about all terminologies which are managed by TerminoloGit:
name
- [CodeSystem | ValueSet]-[id]
canonical
- [TERMGIT_CANONICAL]/[CodeSystem | ValueSet]/[id]
oid
- OID of the terminologyversion
- version of the terminologyid
- the terminology's id
type
- [CodeSystem | ValueSet]
metadata-change-timestamp
- the time of the last change of the terminology metadata.The CI/CD pipeline in TerminoloGit consists of several stages and its corresponding jobs and is structured as follows. Please note, that neither all stages nor all jobs are executed in every pipeline, however, rules control which will be executed.
manual_trigger
manual_trigger
- A manual trigger to start the pipeline in branches apart from the default branch. On the default branch the pipeline will start automatically upon a push of new commits.check_variables
check_variables
- Check if the required environment variables are set.run_malac-ct
- Depending on the circumstances one of the following jobs will be executed.
run_malac-ct
- This job automatically detects new/updated terminologies within the terminologies/
directory and will convert them to all file formats by using MaLaC-CT.run_malac-ct_integration_test
- This job is not part of the default pipeline in a TerminoloGit project. It can be triggered from within a MaLaC-CT repository and will then run instead of the usual run_malac-ct
. It converts all existing terminologies of a specified TerminoloGit repository using a specified file format as source.skip_malac-ct
- This job can be triggered if a commit is prepended with SKIP_MALAC
. As a result, no terminology will be processed by MaLaC-CT. Note, currently new business versions will NOT be detected in this case.version_ig_files
version_ig_files
- This job handles the creation of previous versions (except for pipelines started with a SKIP_MALAC
commit)run_ig
run_ig
- These jobs, divided into logical groups, take care of starting several HL7® FHIR® IG Publishers that create the static HTML pages. In addition, these jobs ensure that two Git tags are created for each terminology, which continuously refer to the current version of the respective terminology (see Retrieving meta information of a Git-tag).html
- prepare_output_and_update_html
is always executed, except for pipelines that start from other pipelines, such as the MaLaC-CT integration tests. In this case, prepare_output
is executed.
prepare_output_and_update_html
- The results of run_ig
are merged and pushed into the TERMGIT_HTML_PROJECT
. The name of the branch is the same as in the TerminoloGit project; this also applies to the default branch.prepare_output
- The results of run_ig
are prepared and made available to the following pages
job.publish
- The following jobs run in parallel.
pages
- Updates the GitLab pages of the TerminoloGit project.upload_input_resources
- Uploads all resources within the input/resources/
directory to the given FHIR® servers.The following is a visualization of the three most common flows of the CI/CD pipeline. For details, refer to the .gitlab-ci.yml
.
The entire concept is shown in a fully dressed use case diagram, below the written use cases at subfunction/fish level can be found. Please note, this diagram is not fully compliant to the Cockburn diagram for fully dressed use case diagrams. A few changes have been made to show all the needed information in one diagram.
Parameters for all use cases:
$validate-code
.$subsumes
.$lookup
.Knowing the architecture through the fully dressed use case diagram, the following BigPicture shows the different ways to use TerminoloGit, including the possible cascading system dependencies.
Cascading synchronization between TerminoloGit instances is recommended through merge requests. You can create merge requests to and from every forked project, you can even add fork relations afterwards. Beware that if there are some errors doing the post (like a 500 internal server error), you may have to delete the old fork relation before. You can also use the Git function Submodule or Subtree. Furthermore, it is possible to automate the sync via CI/CD in your own system or via "mirroring" or "sync" features, if you do not perform any adaptations/extensions to the terminologies yourself.
Cascading synchronization between a TerminoloGit instance and a tergi instance has to be set up in your TerminoloGit instance, see the README in the tergi repo for more information.