Skip to content

Commit

Permalink
Feature/devopsauto (#165)
Browse files Browse the repository at this point in the history
* devcontainer and actions upgrade

* images folder restructuring

* auto-generated diagrams by GitHub Action after source code change

* dependency correct

* auto-generated FHIR files by GitHub Actions (CI FSH to FHIR Validation)

---------

Co-authored-by: MaxMTheilig <[email protected]>
  • Loading branch information
MaxMTheilig and MaxMTheilig authored Jan 31, 2024
1 parent 941c90f commit e1329f4
Show file tree
Hide file tree
Showing 57 changed files with 309 additions and 48 deletions.
59 changes: 59 additions & 0 deletions .devcontainer/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
FROM mcr.microsoft.com/devcontainers/base:alpine-3.18

# Setzen der Umgebungsvariablen
ENV FIRELY_TERMINAL_VERSION=3.1.0
ENV JAVA_VALIDATOR_VERSION=6.0.11
ENV SUSHI_VERSION=3.5.0

# Installieren der notwendige Tools
# Add Microsoft's .NET SDK repository and install .NET SDK
RUN wget https://dot.net/v1/dotnet-install.sh \
&& chmod +x dotnet-install.sh \
&& ./dotnet-install.sh --channel 6.0 --install-dir /usr/share/dotnet \
&& ln -s /usr/share/dotnet/dotnet /usr/local/bin \
&& rm dotnet-install.sh

# Install ICU libraries
RUN apk add --no-cache icu-libs

# Install Node.js and npm
RUN apk add --no-cache nodejs npm

# Install Java (OpenJDK)
RUN apk add --no-cache openjdk11

# Install Firely Terminal as vscode user
# Switch to the vscode user
USER vscode

# Install Firely Terminal
RUN dotnet tool install --global Firely.Terminal --version $FIRELY_TERMINAL_VERSION

# Add .NET tools to PATH for vscode user
ENV PATH="/home/vscode/.dotnet/tools:${PATH}"

# Switch back to root user to perform remaining installations
USER root

RUN npm install -g fsh-sushi@$SUSHI_VERSION

# Installieren der zusätzliche Abhängigkeiten
RUN apk update && apk add --no-cache jq findutils curl ca-certificates

# Setup for FHIR Validator
RUN mkdir -p /home/vscode/.fhir/validators/
RUN wget -q https://github.com/hapifhir/org.hl7.fhir.core/releases/download/$JAVA_VALIDATOR_VERSION/validator_cli.jar -O /home/vscode/.fhir/validators/validator_cli.jar

# Set ownership
RUN mkdir -p /home/vscode/.fhir/packages && \
chown -R vscode:vscode /home/vscode/.fhir/packages

RUN mkdir -p /home/vscode/.fhir/settings/
COPY codfsh-config.yaml /home/vscode/.fhir/settings/codfsh-config.yaml

# Setzen des Arbeitsverzeichnis
WORKDIR /workspace

COPY . /workspace

CMD [ "/bin/bash" ]
9 changes: 9 additions & 0 deletions .devcontainer/codfsh-config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
sushi:
min_version: "3.5.0"
hapi:
min_version: "3.0.0"
parameters:
jurisdiction: DE
locale: de-DE
tx: "n/a"
debug: true
34 changes: 34 additions & 0 deletions .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
// For format details, see https://aka.ms/devcontainer.json. For config options, see the
// README at: https://github.com/devcontainers/templates/tree/main/src/alpine
{
"name": "FHIR Development Container",
// Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile
"build": {
"dockerfile": "Dockerfile"
},
"customizations": {
"vscode": {
"extensions": [
"gematikde.codfsh",
"MITRE-Health.vscode-language-fsh",
"ms-azuretools.vscode-docker"
],
"settings": {
"codfsh.HapiValidator.Executable": "/home/vscode/.fhir/validators/validator_cli.jar",
"codfsh.HapiValidator.Settings.SettingsFile": "/home/vscode/.fhir/settings/codfsh-config.yaml"
}
}
}

// Features to add to the dev container. More info: https://containers.dev/features.
// "features": {},

// Use 'forwardPorts' to make a list of ports inside the container available locally.
// "forwardPorts": [],

// Use 'postCreateCommand' to run commands after the container is created.
// "postCreateCommand": "uname -a",

// Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root.
// "remoteUser": "root"
}
102 changes: 102 additions & 0 deletions .github/workflows/RenderAllDiagrams.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
name: Render All Diagrams

on:
push:
paths:
- '**/Material/images/src/**/*.puml'
- '**/Material/images/src/**/*.drawio'
branches-ignore:
- 'main**'

# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:

jobs:
build:
runs-on: ubuntu-latest

steps:

# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- name: Checkout repository
uses: actions/checkout@v4

# Installs Java distribution for running the plantUML jar
- name: Install Java
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '17'
check-latest: true

# Install graphviz for plantuml
- name: Setup Graphviz
uses: ts-graphviz/setup-graphviz@v1

# Download plantUML jar
- name: Download plantuml file
run: |
wget -O plantuml.jar "https://github.com/plantuml/plantuml/releases/latest/download/plantuml.jar"
# Clean Folder
- name: Ensure and clean folder
run: |
img_dir=Material/images/diagrams
mkdir -p $img_dir
rm -rf Material/images/diagrams/*.svg
# Generate the SVGs from PUML
- name: Render PUML to SVG and Move files
run: |
FileNamePaths=$(find . -path "*/images/src/*/*.puml" -exec dirname {} \; | sort -u)
for dir in $FileNamePaths
do
# Render SVGs from PUMLs
find $dir -name "*.puml" -exec java -jar plantuml.jar -tsvg {} \;
done
# Remove plantUML jar
- name: remove plantuml file
run: |
rm -f plantuml.jar
# Generate the SVGs from DrawIO
- name: Render DrawIO to SVG with predefined action
uses: rlespinasse/drawio-export-action@v2
with:
path: ./Material/images/src/drawio/
remove-page-suffix: true
output: .
format: svg
action-mode: all

# copies the created SVG files to the images/diagrams folder and deletes the drawio files
- name: Move SVGs to target image folder
run: |
img_dir=Material/images/diagrams
# Find all unique directories containing *.SVGs files under any /imgsrc/ folder
FileNamePaths=$(find . -path "*/images/src/*/*.svg" -exec dirname {} \; | sort -u)
for dir in $FileNamePaths
do
# Move SVGs to out directory
find $dir -name "*.svg" -exec mv {} $img_dir \;
done
## add and commit the new generated files
#- name: Create Pull Request
# uses: peter-evans/create-pull-request@v5
# with:
# branch: auto/images-generation
# commit-message: Generated Images from source Code by GitHub Action
# title: Generated Images from GitHub Action
# assignees: ${{ github.actor }}
# reviewers: ${{ github.actor }}
# delete-branch: true
# labels: automated pr

- name: Commit rendered files
uses: stefanzweifel/git-auto-commit-action@v5
with:
commit_user_name: GitHub Actions Bot
commit_user_email: [email protected]
commit_message: auto-generated diagrams by GitHub Action after source code change
11 changes: 9 additions & 2 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,13 @@ name: CI (FHIR Validation)
on:
# Triggers the workflow on push or pull request events but only for the master branch
push:
branches: [ master ]
paths:
- 'Resources/**'
branches-ignore:
- 'main**'
pull_request:
branches: [ master ]
branches:
- 'main**'

# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
Expand Down Expand Up @@ -48,4 +52,7 @@ jobs:
- name: Add & Commit
uses: EndBug/add-and-commit@v7
with:
committer_name: GitHub Actions Bot
committer_email: [email protected]
add: 'Resources/fsh-generated/resources/'
message: auto-generated FHIR files by GitHub Actions (CI FSH to FHIR Validation)
Binary file not shown.
Binary file not shown.
2 changes: 1 addition & 1 deletion ImplementationGuide/markdown/Einfuehrung.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<img src="https://raw.githubusercontent.com/gematik/spec-ISiK-Basismodul/master-isik-stufe-2/Material/Gematik_Logo_Flag.png" alt="gematik logo" width="400"/>
<img src="https://raw.githubusercontent.com/gematik/spec-ISiK-Terminplanung/main-stufe-3/Material/images/Gematik_Logo_Flag.svg" alt="gematik logo" width="400"/>

----
Version: 3.0.2
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,8 @@ Es sei zu beachten, dass in vielen Fällen ein Terminmangementsystem aus untersc
2. Ein Termin Requestor, um intern im System einen Termin zu vereinbaren
3. Ein Termin Consumer um eine Übersicht der vereinbarten Termine anzuzeigen

{{render:ImplementationGuide/images/Übersicht Termin Akteure (1).drawio.png}}
<img src="https://raw.githubusercontent.com/gematik/spec-ISiK-Terminplanung/main-stufe-3/Material/images/diagrams/akteure_1.svg" alt="Übersicht Termin Akteure 1" width="90%"/>

Darüber hinaus kann auch der Fall eintreten, dass ein Termin Repository als Termin Requestor interagiert. In diesem Fall ist das Termin Repository (z.B. ein Patientenportal) das terminführende System und übermittelt die vereinbarten Termine einem weiteren (internen) Termin Repository zur Synchronisation.

{{render:ImplementationGuide/images/Übersicht Termin Akteure (2).drawio.png}}
<img src="https://raw.githubusercontent.com/gematik/spec-ISiK-Terminplanung/main-stufe-3/Material/images/diagrams/akteure_2.svg" alt="Übersicht Termin Akteure 2" width="90%"/>
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ Für folgende Interaktionen werden im vorliegenden Implementierungsleitfaden Vor

---

{{render:ImplementationGuide/images/Interaktionen/1. Übermittelung Patienteninformationen - zum Termin zugehörige Vorabinformationen.png}}
{{render:Material/images/Interaktionen/1. Übermittelung Patienteninformationen - zum Termin zugehörige Vorabinformationen.png}}

Für die Auswahl eines verfügbaren Terminblocks kann es notwendig sein, dass das Termin Repository vorab durch den Termin Requestor Vorabinformationen (z.B. für die Krankenversicherung) erhält. Diese können über eine schreibende Schnittstelle an das Terminrepository übermittelt werden. Es ist zu beachten, dass das Termin Repository gegebenenfalls diese Informationen separat von eigens erstellten Datenobjekten vorhält und/oder die Information dauerhaft erst nach einer manuellen Überprüfung durch eine BenutzerIn freigibt.

Expand All @@ -14,31 +14,31 @@ Siehe {{pagelink:ImplementationGuide/markdown/Datenobjekte/Operations.md, text:A

---

{{render:ImplementationGuide/images/Interaktionen/2. Verfügbare Behandlungsleistungen abrufen.png}}
{{render:Material/images/Interaktionen/2. Verfügbare Behandlungsleistungen abrufen.png}}

Als Einstiegspunkt in die Terminvereinbarung können durch den Termin Requester alle verfügbaren Behandlungsleistungen (HealthcareServices) abgerufen werden, für die das Termin Repository Informationen zu notwendigen Ressourcen (Räume, Personen, Geräte, etc.) bereitstellt.

Siehe {{pagelink:ImplementationGuide/markdown/Datenobjekte/ISiKMedizinischeBehandlungseinheitHealthcareService.md, text: ISiKMedizinischeBehandlungseinheit (HealthcareService) - Interaktionen}} für die technische Umsetzung. Es sind die Hinweise zum Abruf der ValueSets für die Kodierung der Medizinischen Behandlungseinheit zu beachten.

---

{{render:ImplementationGuide/images/Interaktionen/3. Verfügbare Terminlisten abrufen.png}}
{{render:Material/images/Interaktionen/3. Verfügbare Terminlisten abrufen.png}}

Der Termin Requestor kann nach der Auswahl einer Behandlungsleistung verfügbare Terminlisten (Schedules) für diese im Termin Repository abrufen. Die Terminlisten repräsentieren somit den "Kalender" in dem Termine gebucht werden können.

Siehe {{pagelink:ImplementationGuide/markdown/Datenobjekte/ISiKKalenderSchedule.md, text: ISiKKalender (Schedule) - Interaktionen}} für die technische Umsetzung.

---

{{render:ImplementationGuide/images/Interaktionen/4. Abfrage von (verfübaren) Terminblöcken.png}}
{{render:Material/images/Interaktionen/4. Abfrage von (verfübaren) Terminblöcken.png}}

Für einen jeweiligen Kalender kann der Termin Requestor die darin definierten Terminblöcke abfragen. Diese können entsprechend eines Zeitraums und/oder Status (verfügbar, belegt) gefiltert werden.

Siehe {{pagelink:ImplementationGuide/markdown/Datenobjekte/ISiKTerminblockSlot.md, text: ISiKTerminblock (Slot) - Interaktionen}} für die technische Umsetzung.

---

{{render:ImplementationGuide/images/Interaktionen/5. Termin neu buchen - Buchungsmanagemnent von verfügbaren Terminen.png}}
{{render:Material/images/Interaktionen/5. Termin neu buchen - Buchungsmanagemnent von verfügbaren Terminen.png}}

Für einen durch die BenutzerIn ausgewählten Terminblock bzw. mehreren aufeinander folgenden Terminblöcken kann durch den Termin Requestor ein Termin angefragt werden. Dieser kann direkt oder erst nach manueller Bestätigung durch das Termin Repository freigegeben werden.

Expand All @@ -50,30 +50,30 @@ Siehe {{pagelink:ImplementationGuide/markdown/Datenobjekte/Operations.md, text:B

---

{{render:ImplementationGuide/images/Interaktionen/6.1 Termin absagen (ausgehend vom Client).png}}
{{render:Material/images/Interaktionen/6.1 Termin absagen (ausgehend vom Client).png}}


{{render:ImplementationGuide/images/Interaktionen/6.2 Termin absagen (ausgehend vom terminführenden System).png}}
{{render:Material/images/Interaktionen/6.2 Termin absagen (ausgehend vom terminführenden System).png}}

Termine können sowohl durch den Termin Requestor als Client oder durch das Termin Repository als terminführendes System abgesagt werden.

Siehe {{pagelink:ImplementationGuide/markdown/Datenobjekte/Operations.md, text:Aktualisierung / Absage eines Termins}} für die technische Umsetzung.

---

{{render:ImplementationGuide/images/Interaktionen/7.1 Termin verschieben (ausgehend vom Client).png}}
{{render:Material/images/Interaktionen/7.1 Termin verschieben (ausgehend vom Client).png}}

{{render:ImplementationGuide/images/Interaktionen/7.2 Termin verschieben (ausgehend vom Termin Repository).png}}
{{render:Material/images/Interaktionen/7.2 Termin verschieben (ausgehend vom Termin Repository).png}}

Termine können sowohl durch den Termin Requestor als Client oder durch das Termin Repository als terminführendes System verschoben werden. Im Falle, dass das Termin Repository den Termin verschiebt ist der Termin Consumer darüber zu benachrichtigen.

Siehe {{pagelink:ImplementationGuide/markdown/Datenobjekte/Operations.md, text:Buchung eines Termins}} für die technische Umsetzung.

---

{{render:ImplementationGuide/images/Interaktionen/8.1 Terminzusatzinformationen aktualisieren (ausgehend vom Client).png}}
{{render:Material/images/Interaktionen/8.1 Terminzusatzinformationen aktualisieren (ausgehend vom Client).png}}

{{render:ImplementationGuide/images/Interaktionen/8.2 Terminzusatzinformationen aktualisieren (ausgehend vom Termin Repository).png}}
{{render:Material/images/Interaktionen/8.2 Terminzusatzinformationen aktualisieren (ausgehend vom Termin Repository).png}}

Termine können sowohl durch den Termin Requestor als Client oder durch das Termin Repository als terminführendes System durch Zusatzinformationen (z.B. welche Teilnehmer oder Ressourcen sind Teil des Termins) erweitert werden.

Expand All @@ -83,7 +83,7 @@ Siehe {{pagelink:ImplementationGuide/markdown/Datenobjekte/Operations.md, text:A

---

{{render:ImplementationGuide/images/Interaktionen/9. Abfrage von (verinbarten) Terminen.png}}
{{render:Material/images/Interaktionen/9. Abfrage von (verinbarten) Terminen.png}}

Der Termin Requestor oder Termin Consumer kann einen, mehrere oder alle Termine eines Termin Repositories abfragen.

Expand Down
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
40 changes: 40 additions & 0 deletions Material/images/Gematik_Logo_Flag.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading

0 comments on commit e1329f4

Please sign in to comment.