From 02bbd1048600a85c3454ccfdd73e7fd24d8185d8 Mon Sep 17 00:00:00 2001 From: Max Theilig Date: Tue, 9 Jan 2024 11:11:03 +0100 Subject: [PATCH 01/12] initial committ --- .github/workflows/RenderAllDiagrams.yml | 105 +++++++++++ .github/workflows/RenderPlantUML.yml | 45 +++++ .vscode/keybindings.json | 11 ++ .vscode/tasks.json | 15 ++ .../images/Gematik_Logo_Flag.png | Bin .../docs/Beispiel_MedikationsAbgleich.xlsx | Bin 0 -> 104323 bytes Material/imgsrc/drawio/Klassendiagramm.drawio | 1 + .../imgsrc/plantuml/amts_data_objects.puml | 10 ++ README.md | 2 + scripts/build_with_replace_includes.sh | 67 +++++++ scripts/release_publish.py | 170 ++++++++++++++++++ scripts/setup.sh | 4 + 12 files changed, 430 insertions(+) create mode 100644 .github/workflows/RenderAllDiagrams.yml create mode 100644 .github/workflows/RenderPlantUML.yml create mode 100644 .vscode/keybindings.json create mode 100644 .vscode/tasks.json rename Gematik_Logo_Flag.png => ImplementationGuide/images/Gematik_Logo_Flag.png (100%) create mode 100644 Material/docs/Beispiel_MedikationsAbgleich.xlsx create mode 100644 Material/imgsrc/drawio/Klassendiagramm.drawio create mode 100644 Material/imgsrc/plantuml/amts_data_objects.puml create mode 100644 scripts/build_with_replace_includes.sh create mode 100644 scripts/release_publish.py diff --git a/.github/workflows/RenderAllDiagrams.yml b/.github/workflows/RenderAllDiagrams.yml new file mode 100644 index 0000000..cfba559 --- /dev/null +++ b/.github/workflows/RenderAllDiagrams.yml @@ -0,0 +1,105 @@ +name: Render All Diagrams + +on: + push: + branches: + - '**' + paths: + - 'Material/imgsrc/plantuml/**' + - 'Material/imgsrc/drawio/**' + + workflow_dispatch: + +jobs: + build: + runs-on: ubuntu-latest + + steps: + + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v3 + + # Installs Java distribution for running the plantUML jar + - name: Install Java + uses: actions/setup-java@v3 + with: + distribution: 'temurin' + java-version: '11' + 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/download/v1.2023.10/plantuml-1.2023.10.jar" + + # Runs a single command using the runners shell + - name: Generate images + run: | + imagedir=ImplementationGuide/images/diagrams + mkdir -p $imagedir + rm -rf ImplementationGuide/images/diagrams/* + for fullname in $(find Material/imgsrc/plantuml/ -type f -name '*.puml') + do + echo "Fullname: ${fullname}" + base=$(basename "${fullname}" .puml) + dir=$(dirname $fullname) + echo "Basename: ${base}" + outdir=$(dirname $fullname | sed s+src/plantuml+${imagedir}+) + echo "Outdir: ${outdir}" + mkdir -p $outdir + plantoutdir="${PWD}/${outdir}" + echo "PlantOutdir: ${plantoutdir}" + + # PlantUML arguments: + # -v for verbose output (Debugging) + # -checkmetadata checks whether the target png/svg has the same source + # and if there are no changes, doesn't regenerate the image file + # -o sets the output folder for the png/svg files + plantargs="-v -checkmetadata -o ${plantoutdir} ${fullname}" + + # separate calls are needed, because only one file type can be set + # per call + java -jar plantuml.jar -tpng ${plantargs} + java -jar plantuml.jar -tsvg ${plantargs} + + # method with pipes + #cat "${fullname}" | java -jar plantuml.jar -p -tpng -checkmetadata > "${outdir}/${base}.png" + #cat "${fullname}" | java -jar plantuml.jar -p -tsvg -checkmetadata > "${outdir}/${base}.svg" + done + tree ./images + + # creates png files from draw io image files + - name: Export drawio files as png + uses: rlespinasse/drawio-export-action@v2 + with: + path: ./src/drawio/ + output: . + format: png + action-mode: all + + # creates svg files from draw io image files + - name: Export drawio files + uses: rlespinasse/drawio-export-action@v2 + with: + path: ./src/drawio/ + output: . + format: svg + action-mode: all + + # copies the created png & svg files to the images/diagrams folder and deletes the drawio files + - name: Copy draw io + run: | + imagedir=images/diagrams + cp -RT ./src/drawio $imagedir + find $imagedir -name '*.drawio' -exec rm -rv {} \; + tree ./images + + # add and commit the new generated files + - name: Add & Commit + uses: EndBug/add-and-commit@v9 + with: + add: 'ImplementationGuide/images/diagrams/' diff --git a/.github/workflows/RenderPlantUML.yml b/.github/workflows/RenderPlantUML.yml new file mode 100644 index 0000000..4d2b744 --- /dev/null +++ b/.github/workflows/RenderPlantUML.yml @@ -0,0 +1,45 @@ +name: Render PlantUML diagrams + +on: + push: + branches: + - '**' + paths: + - '**/Material/imgsrc/**/*.puml' + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + - name: Install dependencies + run: | + sudo apt-get install -y graphviz + wget http://sourceforge.net/projects/plantuml/files/plantuml.jar/download -O plantuml.jar + + - name: Render and Move SVG files + run: | + # Find all unique directories containing *.puml files under any /imgsrc/ folder + directories=$(find . -path "*/imgsrc/*.puml" -exec dirname {} \; | sort -u) + for dir in $directories; do + # Generate the corresponding out directory path + out_dir=${ImplementationGuide/diagrams} + mkdir -p $out_dir + + # Render SVGs from PUMLs + find $dir -name "*.puml" -exec java -jar plantuml.jar -tsvg {} \; + + # Move SVGs to out directory + find $dir -name "*.svg" -exec mv {} $out_dir \; + done + + - name: Commit and push + run: | + git config --local user.email "action@github.com" + git config --local user.name "GitHub Action" + git add -A + git commit -m "Add rendered SVG diagrams" || exit 0 + git push \ No newline at end of file diff --git a/.vscode/keybindings.json b/.vscode/keybindings.json new file mode 100644 index 0000000..79192d7 --- /dev/null +++ b/.vscode/keybindings.json @@ -0,0 +1,11 @@ +[ + { + "key": "f5", + "command": "workbench.action.tasks.runTask", + "args": "buildWithReplaceIncludes" + }, + { + "key": "f5", + "command": "-workbench.action.debug.start" + } +] diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..7359920 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,15 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "buildWithReplaceIncludes", + "type": "shell", + "command": "./resources/scripts/build_with_replace_includes.sh", + "problemMatcher": [], + "group": { + "kind": "build", + "isDefault": true + } + } + ] +} diff --git a/Gematik_Logo_Flag.png b/ImplementationGuide/images/Gematik_Logo_Flag.png similarity index 100% rename from Gematik_Logo_Flag.png rename to ImplementationGuide/images/Gematik_Logo_Flag.png diff --git a/Material/docs/Beispiel_MedikationsAbgleich.xlsx b/Material/docs/Beispiel_MedikationsAbgleich.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..8d7eb95e149d65076d00fe1993b64cee14c6ad94 GIT binary patch literal 104323 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 literal 0 HcmV?d00001 diff --git a/Material/imgsrc/drawio/Klassendiagramm.drawio b/Material/imgsrc/drawio/Klassendiagramm.drawio new file mode 100644 index 0000000..c6d9cc5 --- /dev/null +++ b/Material/imgsrc/drawio/Klassendiagramm.drawio @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/Material/imgsrc/plantuml/amts_data_objects.puml b/Material/imgsrc/plantuml/amts_data_objects.puml new file mode 100644 index 0000000..e7333b4 --- /dev/null +++ b/Material/imgsrc/plantuml/amts_data_objects.puml @@ -0,0 +1,10 @@ +```plantuml +@startuml component +actor client +node app +database db + +db -> app +app -> client +@enduml +``` \ No newline at end of file diff --git a/README.md b/README.md index 1119369..28e851f 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ +![Include Gematik Logo](ImplementationGuide/images/Gematik_Logo_Flag.png) + # About This template standardizes the development of fhir resources with .fsh resources. It should reduce time for setup and ease the development process. diff --git a/scripts/build_with_replace_includes.sh b/scripts/build_with_replace_includes.sh new file mode 100644 index 0000000..745893f --- /dev/null +++ b/scripts/build_with_replace_includes.sh @@ -0,0 +1,67 @@ +#!/bin/bash +echo "Start building source files" + +# check prerequisites +required_asciidoctor_version="2.0.20" +actual_asciidoctor_version=$(asciidoctor --version) +if ! grep -q "$required_asciidoctor_version" <<<"$actual_asciidoctor_version"; then + echo "Incorrect asciidoctor version. Expected $required_asciidoctor_version but found $actual_asciidoctor_version" + exit 1 +fi + +required_asciidoctor_diagram_version="2.2.14" +actual_asciidoctor_diagram_version=$(gem list | grep "asciidoctor-diagram (") +if ! grep -q "$required_asciidoctor_diagram_version" <<<"$actual_asciidoctor_diagram_version"; then + echo "Incorrect asciidoctor diagram version. Expected $required_asciidoctor_diagram_version but found $actual_asciidoctor_diagram_version" + exit 1 +fi + +# STAGE_1: creates images from the puml files and will store them in /puml/images + +# prepare +cd "$(dirname "$0")" || exit +# rm ../../images/puml_* + +# loop through all puml files and create the image +for filename in $(find ../../puml -name '*.puml'); do + + filebase=$(basename -- "$filename") # test.adoc + name="${filebase%.*}" # test + + if ! git diff --quiet -- "$filename"; then + echo "$filebase has been modified. Creating Puml" + + pumlPath=../puml/${name}.puml + newFileRoot=../puml/${name} + newFileName=${newFileRoot//-source/} + echo "Creating Puml ${name}" + + tempAdocFile=../../docs_sources/${name}.adoc + + # creates a temporary adoc file in order to render with asciidoctor-diagram + touch ${tempAdocFile} + echo "[plantuml, target=../../images/puml_${name}, format=png] +.... +include::${pumlPath}[] +...." >${tempAdocFile} + asciidoctor -r asciidoctor-diagram -o ../puml/$newFileName ../../docs_sources/${name}.adoc + rm ../../docs_sources/${name}.adoc + fi + +done + +# cleanup temp files +if [ -d "../puml" ]; then + rm -r ../puml +fi + +# STAGE_2 this creates new adoc files in /docs/resources + +for filename in $(find ../../docs_sources -name '*.adoc'); do + newFileName=${filename//-source/} + newFileName=${newFileName//_sources/} + asciidoctor-reducer $filename -o $newFileName +done + +# Echo that the process is finished +echo "Finished building source files" diff --git a/scripts/release_publish.py b/scripts/release_publish.py new file mode 100644 index 0000000..92e9cca --- /dev/null +++ b/scripts/release_publish.py @@ -0,0 +1,170 @@ +import re +import subprocess +import os +import argparse +from datetime import date + +class FileWithVersionToUpdate: + def __init__(self, filename, version_regex) -> None: + self.filename = filename + self.version_regex = version_regex + self.location = None + + def set_file_location(self, location): + self.location = location + +class FileWithDateToUpdate: + def __init__(self, filename, date_regex) -> None: + self.filename = filename + self.date_regex = date_regex + self.location = None + + def set_file_location(self, location): + self.location = location + +# class FileWithDateToUpdate: +# def __init__(self, filename, date_regex, format) -> None: +# self.filename = filename +# self.date_regex = date_regex +# self.location = None +# self.format = format +# def set_file_location(self, location): +# self.location = location + + + + +def get_new_release_version_from_branch_name() -> str: + git_branch = subprocess.check_output(['git', 'rev-parse', '--abbrev-ref', 'HEAD']).strip().decode() + return git_branch + +def replace_version_in_files(files : list, new_release_version: str): + if files is None: + print("Error: No Files found!") + return + + for file in files: + replace_version_in_file(file,new_release_version) + +def replace_version_in_file(file: FileWithVersionToUpdate,new_release_version: str): + with open(file.location, 'r') as input_file: + input_text = input_file.read() + + output_text = re.sub(file.version_regex, rf'\g<1>{new_release_version}\g<3>', input_text) + print(f"Info: Replaced version with '{new_release_version}' in file '{file.location}'.") + + with open(file.location, 'w') as output_file: + output_file.write(output_text) + +def replace_date_in_files(files : list, new_release_date: str): + if files is None: + print("Error: No Files found!") + return + + for file in files: + replace_date_in_file(file,new_release_date) + +def replace_date_in_file(file: FileWithVersionToUpdate, new_date: str): + with open(file.location, 'r') as input_file: + input_text = input_file.read() + + #output_text = re.sub(file.date_regex, rf'\g<1>{new_date.strftime(file.format)}\g<3>', input_text) #see https://www.programiz.com/python-programming/datetime#:~:text=Python%20format%20datetime&text=It%27s%20more%20common%20to%20use,()%20methods%20to%20handle%20this. + output_text = re.sub(file.date_regex, rf'\g<1>{new_date}\g<3>', input_text) + print(f"Info: Replaced date with '{new_date}' in file '{file.location}'.") + + with open(file.location, 'w') as output_file: + output_file.write(output_text) + +def get_file_to_update_version_list(): + file_list = [] + file_list.append(FileWithVersionToUpdate('package.json', r'("version":\s*")([\d\.]+.*)(")')) + file_list.append(FileWithVersionToUpdate('sushi-config.yaml', r'(version:\s*")(\d+\.\d+\.\d+.*)(")')) + file_list.append(FileWithVersionToUpdate('sushi-config.yaml', r'(version:\s*)(\d+\.\d+\.\d+.*)()')) + file_list.append(FileWithVersionToUpdate('ruleset.fsh', r'(\*\s*version\s*=\s*")([\d\.]+.*)(")')) + file_list.append(FileWithVersionToUpdate('ruleset.fsh', r'(\*\s*\^version\s*=\s*")([\d\.]+.*)(")')) + file_list.append(FileWithVersionToUpdate('Einfuehrung.md', r'(Version: \s*)(\d+\.\d+\.\d+.*)()')) + file_list.append(FileWithVersionToUpdate('ImplementierungsleitfadenIsiK_basismodul.json', r'("version":\s*")([\d\.]+.*)(")')) + file_list.append(FileWithVersionToUpdate('ImplementierungsleitfadenIsiK_Terminplanung.json', r'("version":\s*")([\d\.]+.*)(")')) + return file_list + +def get_file_to_update_date_list(): + file_list = [] + #file_list.append(FileWithDateToUpdate('ruleset.fsh', r'(date\s*=\s*")(\d+\-\d+\-\d+)(")'), '%m/%d/%Y' ) + #file_list.append(FileWithDateToUpdate('Einfuehrung.md', r'(Datum: \s*)(\d+\.\d+\.\d+)()') , '%m/%d/%Y') + file_list.append(FileWithDateToUpdate('ruleset.fsh', r'(\*\s*date\s*=\s*")(\d+\-\d+\-\d+)(")')) + file_list.append(FileWithDateToUpdate('ruleset.fsh', r'(\*\s*\^date\s*=\s*")(\d+\-\d+\-\d+)(")')) + file_list.append(FileWithDateToUpdate('Einfuehrung.md', r'(Datum:\s*)(\d+\.\d+\.\d+.*)()')) + return file_list + + +def locate_files_in_current_project(files: list): + return_list = [] + for current_file in files: + file_location = find_file(current_file.filename, ".") + if file_location is not None: + current_file.set_file_location(file_location) + return_list.append(current_file) + else: + print(f"Warning: File '{current_file.filename}' not found.") + return return_list + +def find_file(name, path="."): + for root, dirs, files in os.walk(path): + + if name in files: + print(f"Info: Found '{name}' in {root}.") + return os.path.join(root, name) + return None + +def get_latest_release_tag(): + cmd = 'git describe --abbrev=0 --tags --match "v*.*.*" HEAD' + try: + output = subprocess.check_output(cmd, shell=True) + return output.decode().strip() + except subprocess.CalledProcessError: + return None + +def output_commit_messages_since_last_release(): + latest_release_tag = get_latest_release_tag() + if latest_release_tag is None: + print("Warning: No release tag found.") + return + + cmd = f'git log --pretty=format:"%s" {latest_release_tag}..HEAD' + try: + output = subprocess.check_output(cmd, shell=True) + print(output.decode()) + except subprocess.CalledProcessError: + print("Warning: Failed to get commit messages.") + +def main(): + today = date.today() + + parser = argparse.ArgumentParser(description='Update release version number') + parser.add_argument('-b', '--branch', action='store_true', help='get new version from branch name') + parser.add_argument('-v', '--version', type=str, help='specify new version number') + parser.add_argument('-o', '--output', action='store_true', help='output commit messages since last release') + # TODO new argument -d if not date_time now + + args = parser.parse_args() + + if args.version: + new_release_version = args.version + elif args.branch: + new_release_version = get_new_release_version_from_branch_name() + else: + parser.error('No new release version specified. Please use either -v or -b to specify the new release version.') + + if args.output: + output_commit_messages_since_last_release() + + file_to_update_version_list = get_file_to_update_version_list() + file_version_list = locate_files_in_current_project(file_to_update_version_list) + replace_version_in_files(file_version_list, new_release_version) + + file_to_update_date_list = get_file_to_update_date_list() + file_date_list = locate_files_in_current_project(file_to_update_date_list) + replace_date_in_files(file_date_list, today) + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/scripts/setup.sh b/scripts/setup.sh index 849557a..196c20e 100644 --- a/scripts/setup.sh +++ b/scripts/setup.sh @@ -1,6 +1,10 @@ #!/bin/bash rm ./Resources/input/fsh/*.fsh rm ./Resources/fsh-generated/resources/* +rm ./Material/docs/* +rm ./Material/docs/imgsrc/drawio/* +rm ./Material/docs/imgsrc/plantuml/* +rm ./ImplementationGuide/diagrams/* rm ./README.md cat Readme_template.md USAGE.md > ./README.md rm Readme_template.md From f816a6204e2ebdcec87ea272e6b8384222448279 Mon Sep 17 00:00:00 2001 From: Max Theilig Date: Tue, 9 Jan 2024 11:21:58 +0100 Subject: [PATCH 02/12] debug --- .github/workflows/RenderPlantUML.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/RenderPlantUML.yml b/.github/workflows/RenderPlantUML.yml index 4d2b744..102c318 100644 --- a/.github/workflows/RenderPlantUML.yml +++ b/.github/workflows/RenderPlantUML.yml @@ -23,10 +23,11 @@ jobs: - name: Render and Move SVG files run: | # Find all unique directories containing *.puml files under any /imgsrc/ folder - directories=$(find . -path "*/imgsrc/*.puml" -exec dirname {} \; | sort -u) + directories=$(find . -path "*/imgsrc/*/*.puml" -exec dirname {} \; | sort -u) for dir in $directories; do # Generate the corresponding out directory path - out_dir=${ImplementationGuide/diagrams} + out_dir=${/ImplementationGuide/diagrams} + echo $out_dir mkdir -p $out_dir # Render SVGs from PUMLs From bb9ef3b43e0a9084152a48f1878edc71663db000 Mon Sep 17 00:00:00 2001 From: Max Theilig Date: Tue, 9 Jan 2024 11:29:51 +0100 Subject: [PATCH 03/12] g --- ImplementationGuide/diagrams/test.txt | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 ImplementationGuide/diagrams/test.txt diff --git a/ImplementationGuide/diagrams/test.txt b/ImplementationGuide/diagrams/test.txt new file mode 100644 index 0000000..e69de29 From 008cecf918b040bc90b98c48a9f0cd7b66c2493b Mon Sep 17 00:00:00 2001 From: Max Theilig Date: Tue, 9 Jan 2024 13:35:26 +0100 Subject: [PATCH 04/12] next --- .github/workflows/RenderAllDiagrams.yml | 9 ++++----- .github/workflows/RenderPlantUML.yml | 7 ++++--- .github/workflows/main.yml | 12 ++++++++---- 3 files changed, 16 insertions(+), 12 deletions(-) diff --git a/.github/workflows/RenderAllDiagrams.yml b/.github/workflows/RenderAllDiagrams.yml index cfba559..6657eb4 100644 --- a/.github/workflows/RenderAllDiagrams.yml +++ b/.github/workflows/RenderAllDiagrams.yml @@ -2,12 +2,11 @@ name: Render All Diagrams on: push: - branches: - - '**' - paths: - - 'Material/imgsrc/plantuml/**' - - 'Material/imgsrc/drawio/**' + paths: + - '**/Material/imgsrc/**/*.puml' + - '**/Material/imgsrc/**/*.drawio' + # Allows you to run this workflow manually from the Actions tab workflow_dispatch: jobs: diff --git a/.github/workflows/RenderPlantUML.yml b/.github/workflows/RenderPlantUML.yml index 102c318..fa4fb51 100644 --- a/.github/workflows/RenderPlantUML.yml +++ b/.github/workflows/RenderPlantUML.yml @@ -2,11 +2,12 @@ name: Render PlantUML diagrams on: push: - branches: - - '**' paths: - '**/Material/imgsrc/**/*.puml' + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + jobs: build: runs-on: ubuntu-latest @@ -42,5 +43,5 @@ jobs: git config --local user.email "action@github.com" git config --local user.name "GitHub Action" git add -A - git commit -m "Add rendered SVG diagrams" || exit 0 + git commit -m "Add rendered PlantUML diagrams" || exit 0 git push \ No newline at end of file diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 6db33ce..61545d7 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -4,11 +4,11 @@ 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 + # Triggers the workflow on all push or pull request events but only for the main branches push: - branches: [ master ] + branches: [ main* ] pull_request: - branches: [ master ] + branches: [ main* ] # Allows you to run this workflow manually from the Actions tab workflow_dispatch: @@ -38,7 +38,6 @@ jobs: JAVA_VALIDATION_ENABLED: true OUTPUT_FORMAT: RAW JAVA_VALIDATION_OPTIONS: -allow-example-urls true - JAVA_VALIDATOR_VERSION: 6.0.11 SIMPLIFIER_USERNAME: ${{ secrets.SIMPLIFIER_USERNAME }} SIMPLIFIER_PASSWORD: ${{ secrets.SIMPLIFIER_PASSWORD }} SUSHI_ENABLED: true @@ -46,6 +45,11 @@ jobs: SUSHI_OPTIONS: Resources/ EXPECTED_FAILS: VALIDATION_CONFORMANCE_DOTNET VALIDATION_CONFORMANCE_JAVA VALIDATION_EXAMPLES_JAVA + # - name: Add & Commit + # uses: EndBug/add-and-commit@v7 + # with: + # add: 'Resources/fsh-generated/resources/' + - name: Check for Uncommitted Changes run: | git diff --exit-code 'Resources/fsh-generated/resources'|| (echo "Es gibt Änderungen durch die Pipeline. Lokale Sushi Konfiguration prüfen!" && exit 1) \ No newline at end of file From 66d69d16ef8c19d41292ceec3879bb86df59acb5 Mon Sep 17 00:00:00 2001 From: Max Theilig Date: Tue, 9 Jan 2024 13:39:21 +0100 Subject: [PATCH 05/12] workflow dispatch --- .github/workflows/RenderAllDiagrams.yml | 2 +- .github/workflows/RenderPlantUML.yml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/RenderAllDiagrams.yml b/.github/workflows/RenderAllDiagrams.yml index 6657eb4..4790914 100644 --- a/.github/workflows/RenderAllDiagrams.yml +++ b/.github/workflows/RenderAllDiagrams.yml @@ -5,7 +5,7 @@ on: paths: - '**/Material/imgsrc/**/*.puml' - '**/Material/imgsrc/**/*.drawio' - + # Allows you to run this workflow manually from the Actions tab workflow_dispatch: diff --git a/.github/workflows/RenderPlantUML.yml b/.github/workflows/RenderPlantUML.yml index fa4fb51..2c4e120 100644 --- a/.github/workflows/RenderPlantUML.yml +++ b/.github/workflows/RenderPlantUML.yml @@ -4,7 +4,7 @@ on: push: paths: - '**/Material/imgsrc/**/*.puml' - + # Allows you to run this workflow manually from the Actions tab workflow_dispatch: @@ -43,5 +43,5 @@ jobs: git config --local user.email "action@github.com" git config --local user.name "GitHub Action" git add -A - git commit -m "Add rendered PlantUML diagrams" || exit 0 + git commit -m "Add rendered PlantUML to SVG diagrams" || exit 0 git push \ No newline at end of file From fc2ab178b69d0eebb1fe314c7e8e226711ce0253 Mon Sep 17 00:00:00 2001 From: Max Theilig Date: Tue, 9 Jan 2024 13:43:19 +0100 Subject: [PATCH 06/12] outdirfix --- .github/workflows/RenderPlantUML.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/RenderPlantUML.yml b/.github/workflows/RenderPlantUML.yml index 2c4e120..88018b3 100644 --- a/.github/workflows/RenderPlantUML.yml +++ b/.github/workflows/RenderPlantUML.yml @@ -27,7 +27,7 @@ jobs: directories=$(find . -path "*/imgsrc/*/*.puml" -exec dirname {} \; | sort -u) for dir in $directories; do # Generate the corresponding out directory path - out_dir=${/ImplementationGuide/diagrams} + out_dir=${ImplementationGuide/diagrams} echo $out_dir mkdir -p $out_dir From ffeaf87dfa9dfb48f49e4dd770957fc1c2f6cf4b Mon Sep 17 00:00:00 2001 From: Max Theilig Date: Tue, 9 Jan 2024 13:49:26 +0100 Subject: [PATCH 07/12] -p option broke --- .github/workflows/RenderPlantUML.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/RenderPlantUML.yml b/.github/workflows/RenderPlantUML.yml index 88018b3..9e7083f 100644 --- a/.github/workflows/RenderPlantUML.yml +++ b/.github/workflows/RenderPlantUML.yml @@ -28,8 +28,7 @@ jobs: for dir in $directories; do # Generate the corresponding out directory path out_dir=${ImplementationGuide/diagrams} - echo $out_dir - mkdir -p $out_dir + mkdir --parents $out_dir # Render SVGs from PUMLs find $dir -name "*.puml" -exec java -jar plantuml.jar -tsvg {} \; From e718422bd6f829ba7e39718ac9b3e42440fbad8b Mon Sep 17 00:00:00 2001 From: Max Theilig Date: Tue, 9 Jan 2024 13:58:09 +0100 Subject: [PATCH 08/12] kmdir --- .github/workflows/RenderPlantUML.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/RenderPlantUML.yml b/.github/workflows/RenderPlantUML.yml index 9e7083f..4ebf72b 100644 --- a/.github/workflows/RenderPlantUML.yml +++ b/.github/workflows/RenderPlantUML.yml @@ -27,8 +27,8 @@ jobs: directories=$(find . -path "*/imgsrc/*/*.puml" -exec dirname {} \; | sort -u) for dir in $directories; do # Generate the corresponding out directory path - out_dir=${ImplementationGuide/diagrams} - mkdir --parents $out_dir + out_dir=ImplementationGuide/diagrams + mkdir -p $out_dir # Render SVGs from PUMLs find $dir -name "*.puml" -exec java -jar plantuml.jar -tsvg {} \; From c0da360c6ff5325d3cd10df272aeb417370f3d59 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Tue, 9 Jan 2024 13:09:20 +0000 Subject: [PATCH 09/12] Add rendered PlantUML to SVG diagrams --- ImplementationGuide/diagrams/component.svg | 1 + plantuml.jar | Bin 0 -> 11196866 bytes 2 files changed, 1 insertion(+) create mode 100644 ImplementationGuide/diagrams/component.svg create mode 100644 plantuml.jar diff --git a/ImplementationGuide/diagrams/component.svg b/ImplementationGuide/diagrams/component.svg new file mode 100644 index 0000000..b7f47e1 --- /dev/null +++ b/ImplementationGuide/diagrams/component.svg @@ -0,0 +1 @@ +clientappdb \ No newline at end of file diff --git a/plantuml.jar b/plantuml.jar new file mode 100644 index 0000000000000000000000000000000000000000..0e402de783f3688938aaa168f9c266819e034ebf GIT binary patch literal 11196866 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