Skip to content

add xlink type to content #2018

add xlink type to content

add xlink type to content #2018

name: Generate Model
on:
pull_request:
branches:
- '**'
release:
types:
- published
workflow_dispatch:
jobs:
generate:
runs-on: ubuntu-latest
env:
JAVA_POST_PROCESS_FILE: "/usr/bin/clang-format -i"
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Check for changes requiring running the parser
uses: dorny/paths-filter@v3
id: filter
with:
filters: |
parsing_required:
- 'csv_parser/csv_parser.py'
- 'csv_parser/uml_generator.py'
- 'csv_parser/workflow.py'
- 'csv_parser/models/**'
- 'csv_parser/nomenclature_parser/**'
- 'csv_parser/json_schema2xsd/**'
test_case_parsing_required:
- 'csv_parser/test_case_generator.py'
- 'csv_parser/workflow.py'
- 'csv_parser/test-cases-sources/**'
- name: Install Graphviz
if: steps.filter.outputs.parsing_required == 'true'
uses: ts-graphviz/setup-graphviz@v1
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Install python requirements
working-directory: ./csv_parser
if: steps.filter.outputs.parsing_required == 'true' || steps.filter.outputs.test_case_parsing_required == 'true'
run: pip install -r ./requirements.txt
- name: Clean up old generated schemas
working-directory: ./src/main/resources
run: find ./json-schema -type f -name '*.json' ! -name 'customContent.schema.json' ! -name 'EDXL-DE-*.schema.json' -exec rm {} +
- name: Clean up old generated java classes
working-directory: ./src/main/java/com/hubsante/model
# We specifically only remove FOLDERS with the exception of a couple manually created ones
run: find . -mindepth 1 -maxdepth 1 -type d ! -name 'builders' ! -name 'config' ! -name 'custom' ! -name 'edxl' ! -name 'exception' ! -name 'report' -exec rm -r {} +
- name: Run csv_parser and collect OpenAPI & JSON Schemas
working-directory: ./csv_parser
if: steps.filter.outputs.parsing_required == 'true'
run: python workflow.py --stage parser_and_mv
- name: Run test_case_generator
working-directory: ./csv_parser
if: steps.filter.outputs.test_case_parsing_required == 'true'
run: |
rm -r ./out/test-cases || true
python workflow.py --stage test_case_parser
- name: Run csv_parser to generate schemas.yaml
working-directory: ./csv_parser
if: steps.filter.outputs.parsing_required == 'true'
run: python workflow.py --stage output_schemas_yaml
- name: Collect schemas.yaml and copy it to json_schema2xsd
working-directory: ./csv_parser
if: steps.filter.outputs.parsing_required == 'true'
run: |
cp ./out/schemas.yaml ./json_schema2xsd/src/main/resources/schemas.yaml
- name: Setup gomplate
if: steps.filter.outputs.parsing_required == 'true'
uses: jason-dour/[email protected]
with:
gomplate-version: v4.2.0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Run automatic-schema-generator and move generated files to corresponding locations
if: steps.filter.outputs.parsing_required == 'true'
working-directory: ./automatic-schema-generator
run: |
rm -r output || true
chmod +x ./automatic-generator.sh
./automatic-generator.sh
# Move generated OpenAPI config files to the corresponding locations
rm -r ../generator/config/generated || true
rsync -a --remove-source-files output/generator ..
rm -r ../generator_ruby/config/generated || true
rsync -a --remove-source-files output/generator_ruby ..
rm -r ../generator_python/config/generated || true
rsync -a --remove-source-files output/generator_python ..
rm -r ../generator_csharp/config/generated || true
rsync -a --remove-source-files output/generator_csharp ..
# Move generated EDXL-DE and JSON Schemas to the corresponding locations
rsync -a --remove-source-files output/edxl ../src/main/java/com/hubsante/model
rsync -a --remove-source-files output/json-schema ../src/main/resources
rsync -a --remove-source-files output/xsd ../src/main/resources
- name: Install JDK 11
uses: actions/setup-java@v4
if: steps.filter.outputs.parsing_required == 'true'
with:
java-version: '11'
distribution: 'temurin'
- name: Generate XSDs
working-directory: ./csv_parser/json_schema2xsd
if: steps.filter.outputs.parsing_required == 'true'
run: gradle run
- name: Move XSDs to src
working-directory: ./csv_parser/json_schema2xsd
if: steps.filter.outputs.parsing_required == 'true'
run: |
# Clean XSD repo but keep manual XSDs
find ../../src/main/resources/xsd -type f -name '*.xsd' ! -name 'EDXL-DE-*.xsd' ! -name 'customContent.xsd' ! -name 'RC-DE.xsd' ! -name 'RC-XML-ContentType.xsd' ! -name 'RS-ERROR.xsd' ! -path '**/other-supporting-schema/*' -exec rm {} +
mv out/*.xsd ../../src/main/resources/xsd/
- name: Remove input JSON Schemas
working-directory: ./csv_parser/json_schema2xsd
if: steps.filter.outputs.parsing_required == 'true'
run: |
rm src/main/resources/*.json
- name: Install node env 🏗
uses: actions/setup-node@v4
with:
node-version: 16
- name: Install openapi-generator-cli
run: npm install -g @openapitools/openapi-generator-cli
- name: Install linter
run: sudo apt install -y clang-format
- name: Generate Java classes
working-directory: ./generator
run: |
# Iterate over each file in the ./config directory, including the entire subfolder structure
# and then run @openapitools/openapi-generator-cli generate for each file found
# Important notice:
# Results of the find command are sorted in an alphabetic order before being passed to xargs
# This means that since the order of class generation is important, it's necessary to maintain an adequately
# named file structure in the ./config/** directories
# generator-config.json (if exists) -> usecase.generator-config.json -> wrapper.generator-config.json
find ./config/ -type f | sort -n | while read -r file; do npx @openapitools/openapi-generator-cli generate -c "$file" --skip-validate-spec; done
- name: Replace src/ with generated classes
run: |
rm -r ./src/main/java/com/hubsante/model/rcde || true
rm -r ./src/main/java/com/hubsante/model/cisu || true
rm -r ./src/main/java/com/hubsante/model/health || true
rm -r ./src/main/java/com/hubsante/model/emsi || true
rm -r ./src/main/java/com/hubsante/model/geolocation || true
rm -r ./src/main/java/com/hubsante/model/resources || true
rm -r ./src/main/java/com/hubsante/model/rpis || true
rm -r ./src/main/java/com/hubsante/model/technical || true
rm -r ./generator/classes/src/main/java/com/hubsante/model/report/ErrorCode.java || true
cp -r ./generator/classes/src/main/java/com/hubsante/model/* ./src/main/java/com/hubsante/model/
- name: Grant execute permission for Gradlew
run: chmod +x ./gradlew
- name: Apply license
run: ./gradlew licenseFormat
- name: Delete old xml files
run: |
find ./src/main/resources/sample/examples -name "*.xml" -type f -delete
- name: Generate XML files
run: |
./gradlew generateXml
continue-on-error: true
- name: Commit and push changes
uses: stefanzweifel/git-auto-commit-action@v5
with:
commit_message: ⚙️ Auto-génération des classes et des specs
- name: Build and run TECHNICAL tests
run: ./gradlew test --info -Ptechnical=true
- name: Build and run REAL MESSAGES tests
run: ./gradlew test --info
# Ref.: https://github.com/gradle/gradle-build-action/issues/619#issuecomment-1453244157
- name: Upload test report
if: failure()
uses: actions/upload-artifact@v4
with:
name: test-report
path: build/reports/tests/test/**
- name: Add coverage to PR
id: jacoco
uses: madrapps/[email protected]
with:
paths: ${{ github.workspace }}/build/reports/jacoco/test/jacocoTestReport.xml
token: ${{ secrets.GITHUB_TOKEN }}
min-coverage-overall: 40
min-coverage-changed-files: 60
- name: Setup .NET Core # Required to execute ReportGenerator
uses: actions/setup-dotnet@v3
with:
dotnet-version: 6.x
dotnet-quality: 'ga'
- name: Run ReportGenerator for test coverage
uses: danielpalme/[email protected]
with:
reports: ${{ github.workspace }}/build/reports/jacoco/test/jacocoTestReport.xml
targetdir: coveragereport