diff --git a/common/.gitlab-ci-common.yml b/common/.gitlab-ci-common.yml index 30ea168af70c2f1077bf94cc9718235fd48a8987..671bc85bfe45f85e2bbd6ccf217fd55e2d242c56 100644 --- a/common/.gitlab-ci-common.yml +++ b/common/.gitlab-ci-common.yml @@ -29,28 +29,20 @@ Validate OpenAPIs: - if: $CLEAN_WEB_PAGES == "false" when: always -pages: +Publication OpenaAPIs: stage: publish - dependencies: - - Validate OpenAPIs - script: - # Get the previous GitLab Pages content - - set +e - - curl --fail "$CI_PAGES_URL/content.zip" -o "content.zip" - - if [ -e "content.zip" ]; then unzip "content.zip"; rm "content.zip"; fi - - set -e - # Add/update content - - if [[ -n "$CI_COMMIT_TAG" ]]; then mkdir -p "public/$CI_COMMIT_TAG"; cp -r -f build/* public/$CI_COMMIT_TAG; fi - - if [ "$CLEAN_WEB_PAGES" != "false" ]; then echo "Removing folder $CLEAN_WEB_PAGES..."; rm -r public/$CLEAN_WEB_PAGES; fi - # Remove all pdf files - - rm -f public/*/*.pdf - # Zip the content and publish the zip again - - zip -r "content.zip" "public" - - mv "content.zip" "public/" - - du -h public/ - artifacts: - paths: - - public + needs: ["Validate OpenAPIs"] + before_script: + - git clone "https://gitlab-ci-token:${CI_JOB_TOKEN}@$CI_SERVER_HOST/rep/$CI_PROJECT_PATH.git" ${CI_PROJECT_NAME} + - cd $CI_PROJECT_NAME # Go to cloned repo + - git checkout openapis || git checkout -b openapis + script: + - echo 'Publish OpenAPI $CI_COMMIT_TAG' + - mkdir -p "$CI_COMMIT_TAG" + - cp -r -f ../build/* $CI_COMMIT_TAG + - git add $CI_COMMIT_TAG/* + - git commit -m "Added new version $CI_COMMIT_TAG" + - git push --push-option="ci.skip" -u origin openapis rules: # Job executed when creating a tag - if: $CI_COMMIT_TAG diff --git a/specifications/.gitlab-ci.yml b/specifications/.gitlab-ci.yml new file mode 100644 index 0000000000000000000000000000000000000000..6e9118143a595796614b4b6b66cbd182eb005ae6 --- /dev/null +++ b/specifications/.gitlab-ci.yml @@ -0,0 +1,162 @@ +# CI/CD: +# +# GENERATION triggered by: +# - merge request +# + +workflow: + rules: + - if: $CI_PIPELINE_SOURCE == "merge_request_event" # Creation of Merge Request (generation of CR) + - if: $CI_PIPELINE_SOURCE == "trigger" # Upgrade of the index.html page + - if: $CI_COMMIT_TAG # Creation of tag (publish spec) + - if: $CI_PIPELINE_SOURCE == "web" # Removal of a specific entry + - if: $CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS + when: never # Pipeline to be run manually as defined in the contribution procedure as it is not known when the CR is ready + +variables: + +stages: + - checking + - generation + - publication + - web + +Checking conflicts: + stage: checking + rules: + - if: $CI_MERGE_REQUEST_TITLE !~ /v.*_baseline$/ && $CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_MILESTONE + when: always + variables: + MERGE_REQUEST_MILESTONE: $CI_MERGE_REQUEST_MILESTONE + - if: $CI_MERGE_REQUEST_TITLE !~ /v.*_baseline$/ && $CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_MILESTONE == null + when: always + variables: + MERGE_REQUEST_MILESTONE: "all" + allow_failure: true + image: forge.etsi.org:5050/cti/md-specs-dev/tools/generatecr:master + tags: + - docker + before_script: + # Installation of required software + - apt-get update -qq && apt-get -qq install -y git curl jq > /dev/null + - | + curl "https://git.onem2m.org/api/v4/projects/42/repository/files/checking_conflicts%2Esh/raw?ref=master" >> checking_conflicts.sh + - chmod +x checking_conflicts.sh + - git clone "https://oauth2:${SPECIFICATIONS_PIPELINE_TOKEN}@$CI_SERVER_HOST/rep/$CI_PROJECT_PATH.git" ${CI_PROJECT_NAME} + script: + - echo 'Checking conflicts' + - /generateCR/checking_conflicts.sh ${CI_API_V4_URL} ${CI_MERGE_REQUEST_PROJECT_ID} ${MERGE_REQUEST_MILESTONE} ${CI_MERGE_REQUEST_TARGET_BRANCH_NAME} ${CI_MERGE_REQUEST_IID} ${CI_MERGE_REQUEST_SOURCE_BRANCH_NAME} ${CI_PROJECT_NAME} "$GITLAB_USER_NAME" $GITLAB_USER_EMAIL $SPECIFICATIONS_PIPELINE_TOKEN + artifacts: + when: on_failure + paths: + - conflicting_merge_requests.txt + expose_as: 'Checking conflicts log' + +Word CR: + stage: generation + rules: + - if: $CI_MERGE_REQUEST_TITLE !~ /v.*_baseline$/ && $CI_PIPELINE_SOURCE == "merge_request_event" + when: on_success + dependencies: [] + when: on_success + before_script: + - | + curl "${CI_API_V4_URL}/projects/$PIPELINE_SCRIPTS_PROJECT_ID/repository/files/specifications%2Fgenerate_changemarks%2Esh/raw?ref=nfv" >> generate_changemarks.sh + - chmod +x generate_changemarks.sh + - | + curl "${CI_API_V4_URL}/projects/$PIPELINE_SCRIPTS_PROJECT_ID/repository/files/specifications%2Fnfv_delimiter_start%2Edocx/raw?ref=nfv" >> nfv_delimiter_start.docx + #- | + # curl "${CI_API_V4_URL}/projects/$PIPELINE_SCRIPTS_PROJECT_ID/repository/files/specifications%2Fmec_delimiter_end%2Edocx/raw?ref=specifications" >> mec_delimiter_end.docx + - | + curl "${CI_API_V4_URL}/projects/$PIPELINE_SCRIPTS_PROJECT_ID/repository/files/specifications%2Fnfv_coversheet_template%2Edocx/raw?ref=nfv" >> nfv_coversheet_template.docx + #- | + # curl "${CI_API_V4_URL}/projects/$TOOLS_SCRIPTS_PROJECT_ID/repository/files/specifications%2FSpec-template%2Edocx/raw?ref=specifications" >> mec_spec_template.docx + script: + - echo 'CR contribution' + - mkdir docs + - ./generate_changemarks.sh ${CI_PROJECT_URL} ${CI_MERGE_REQUEST_PROJECT_ID} ${CI_MERGE_REQUEST_IID} nfv_delimiter_start.docx nfv_coversheet_template.docx $SPECIFICATIONS_PIPELINE_TOKEN + artifacts: + paths: + - docs/ + expose_as: 'Word CR' + +Baseline contribution: + stage: generation + rules: + - if: $CI_MERGE_REQUEST_TITLE =~ /v.*_baseline$/ && $CI_PIPELINE_SOURCE == "merge_request_event" + when: on_success + dependencies: [] + when: on_success + before_script: + - | + curl "${CI_API_V4_URL}/projects/$PIPELINE_SCRIPTS_PROJECT_ID/repository/files/publish_spec%2Esh/raw?ref=main" >> publish_spec.sh + - chmod +x publish_spec.sh + - | + curl "${CI_API_V4_URL}/projects/$PIPELINE_SCRIPTS_PROJECT_ID/repository/files/specifications%2FSpec-template%2Edocx/raw?ref=main" >> mec_spec_template.docx + - | + curl "${CI_API_V4_URL}/projects/$PIPELINE_SCRIPTS_PROJECT_ID/repository/files/specifications%2FETSI_GR_cover_skeleton%2Edocx/raw?ref=main" >> ETSI_GR_cover_skeleton.docx + - | + export SPEC_NAME=$(ls | grep T*.md | cut -d'.' -f1) + export BASELINE_VERSION=$(echo ${CI_MERGE_REQUEST_TITLE} | grep -o v.*_baseline | cut -d'_' -f1-3 ) + script: + - echo 'Generating baseline' + - ./publish_spec.sh ${CI_PROJECT_URL} ${BASELINE_VERSION} mec_spec_template.docx $SPEC_NAME ETSI_GR_cover_skeleton.docx "onlyDocx" + artifacts: + name: "Baseline" + paths: + - baseline/ + expose_as: 'Baseline' + +# Do not protect branch until creation and update of merge request can be differenciated for triggering pipeline, otherwise branch is protected_branches +# with a single update of a merge request (which is not desired). This should be run only for a creation of merge request +# Protect branch: +# stage: generation +# when: on_success +# needs: ["Word CR"] +# only: +# - merge_requests +# script: +# - | +# curl --request POST --header "PRIVATE-TOKEN: ${ACCESS_TOKEN}" "${CI_API_V4_URL}/projects/${CI_MERGE_REQUEST_PROJECT_ID}/protected_branches?name=${CI_MERGE_REQUEST_SOURCE_BRANCH_NAME}" +# + +Publish spec: + stage: publication + only: + - tags + before_script: + - | + curl "${CI_API_V4_URL}/projects/$PIPELINE_SCRIPTS_PROJECT_ID/repository/files/specifications%2Fpublish_spec%2Esh/raw?ref=nfv" > publish_spec.sh + - chmod +x publish_spec.sh + - | + curl "${CI_API_V4_URL}/projects/$PIPELINE_SCRIPTS_PROJECT_ID/repository/files/specifications%2Fgenerate_releasenotes%2Esh/raw?ref=nfv" > generate_releasenotes.sh + - chmod +x generate_releasenotes.sh + - | + curl "${CI_API_V4_URL}/projects/$PIPELINE_SCRIPTS_PROJECT_ID/repository/files/specifications%2Fnfv_release_notes_template%2Edocx/raw?ref=nfv" > release_notes_template.docx + - | + curl "${CI_API_V4_URL}/projects/$PIPELINE_SCRIPTS_PROJECT_ID/repository/files/specifications%2FSpec-template%2Edocx/raw?ref=nfv" > nfv_spec_template.docx + - | + export SPEC_NAME=$(ls | grep -E "(GS|GR).*\.md" | cut -d'.' -f1) + - | + echo 'Checking if GS or GR specification' + if [[ $SPEC_NAME =~ ^GS.* ]] + then + curl "${CI_API_V4_URL}/projects/$PIPELINE_SCRIPTS_PROJECT_ID/repository/files/specifications%2FETSI_GS_cover_skeleton%2Edocx/raw?ref=nfv" > nfv_cover_skeleton.docx + elif [[ $SPEC_NAME =~ ^GR.* ]] + then + curl "${CI_API_V4_URL}/projects/$PIPELINE_SCRIPTS_PROJECT_ID/repository/files/specifications%2FETSI_GR_cover_skeleton%2Edocx/raw?ref=main" > nfv_cover_skeleton.docx + else + echo 'Specification is not a GS or GR specification' + exit 1 + fi + script: + - echo 'Publishing spec' + - ./publish_spec.sh ${CI_COMMIT_TAG} nfv_spec_template.docx ${CI_PROJECT_NAME} nfv_cover_skeleton.docx + - ./generate_releasenotes.sh ${CI_PROJECT_URL} ${CI_PROJECT_ID} ${CI_COMMIT_TAG} release_notes_template.docx "$GITLAB_USER_NAME" $SPECIFICATIONS_PIPELINE_TOKEN + artifacts: + name: "${CI_PROJECT_NAME}_${CI_COMMIT_TAG}" + paths: + - "baseline/*_${CI_COMMIT_TAG}.docx" + #- "baseline/*_${CI_COMMIT_TAG}.pdf" + #- "baseline/*_${CI_COMMIT_TAG}.epub" + diff --git a/specifications/ETSI_GR_cover_skeleton.docx b/specifications/ETSI_GR_cover_skeleton.docx new file mode 100644 index 0000000000000000000000000000000000000000..9dd27b6b47ae09662d2f093e564a717f7bd663bb Binary files /dev/null and b/specifications/ETSI_GR_cover_skeleton.docx differ diff --git a/specifications/ETSI_GS_cover_skeleton.docx b/specifications/ETSI_GS_cover_skeleton.docx new file mode 100644 index 0000000000000000000000000000000000000000..ccd3ba4e6cebe8cce72abb220d191180934e3481 Binary files /dev/null and b/specifications/ETSI_GS_cover_skeleton.docx differ diff --git a/specifications/Spec-template.docx b/specifications/Spec-template.docx new file mode 100644 index 0000000000000000000000000000000000000000..3c21b40e0e7865b74060f098a1edf373edfc0925 Binary files /dev/null and b/specifications/Spec-template.docx differ diff --git a/specifications/generate_changemarks.sh b/specifications/generate_changemarks.sh new file mode 100644 index 0000000000000000000000000000000000000000..2a5613741c9b14c11712452f3eeefe5be637bbd4 --- /dev/null +++ b/specifications/generate_changemarks.sh @@ -0,0 +1,81 @@ +# +# generate_changemarks.sh +# +# Script to generate CR Word documents from merge requests. Outputs: +# - 1 - Word CR document containing the git diff +# - 2 - Word CR document containing tracked changes (informative) - Deprecated +# (c) 2024 by Miguel Angel Reina Ortega +# License: BSD 3-Clause License. See the LICENSE file for further details. +# +#!/bin/bash + +FORGELIB_DOCKER_IMAGE=forge.3gpp.org:5050/tools/3gpp-scripts/forgelib:v2.27.0 +GENERATE_CHANGEMARKS_DOCKER_IMAGE=forge.etsi.org:5050/cti/md-specs-dev/tools/generatecr:master + +#Parameters + +#${CI_PROJECT_URL} -> 1 +echo "CI_PROJECT_URL:" $1 +#${CI_MERGE_REQUEST_PROJECT_ID} -> 2 +echo "CI_MERGE_REQUEST_PROJECT_ID:" $2 +#${CI_MERGE_REQUEST_IID} -> 3 +echo "CI_MERGE_REQUEST_IID:" $3 +#${mec_start_delimiter} -> 4 +echo "nfv_start_delimiter:" $4 +#${mec_coversheet_template} -> 5 +echo "nfv_coversheet_template:" $5 +#"$SPECIFICATIONS_PIPELINE_TOKEN" -> 6 +echo "SPECIFICATIONS_PIPELINE_TOKEN:" $6 + +echo "\n------ Checking for docker image --------" +docker logout $(echo "$GENERATE_BASELINE_DOCKER_IMAGE" | cut -d "/" -f 1) +docker pull "$GENERATE_CHANGEMARKS_DOCKER_IMAGE" +docker logout $(echo "$FORGELIB_DOCKER_IMAGE" | cut -d "/" -f 1) +docker pull "$FORGELIB_DOCKER_IMAGE" + + +echo "------ Removing previous outputs --------" +rm **/*.docx +rm out/*.md + +echo "------ Parsing repo URL --------" + +HOST_URL=$(echo $1 | cut -d'/' -f 1-4) +PROJECT_NAME=$(echo $1 | grep -o '[^/]*$' | cut -d'.' -f 1) +echo "HOST URL:" $HOST_URL +echo "PROJECT NAME:" $PROJECT_NAME +echo "PROJECT ID:" $2 +echo "MERGE IID:" $3 + +echo "\n------ Generating change marks MD --------" +#docker container run --rm -v $(pwd):/tmp/ "$DOCKER_IMAGE" forgelib-changedocs -vv --combine --diffs --preprocessor onem2m --outPath=/tmp/docs --startdelimiter "/tmp/$4" --enddelimiter "/tmp/$5" --coversheet "/tmp/$6" "$HOST_URL" "$2" "$PROJECT_NAME" "$3" +docker container run --rm -v $(pwd):/tmp/ -u $(id -u):$(id -g) "$GENERATE_CHANGEMARKS_DOCKER_IMAGE" changemarks -o "/tmp/out" "$HOST_URL" "$2" "$3" + +#echo "\n------ Generating changemarks docx --------" +#for i in out/*.md ; do +# DOCUMENT_NAME=$(echo $i | cut -d'/' -f 2) +# echo "\n------ Preparaing spec --------" +# docker run --rm -v $(pwd):/tmp/ -u $(id -u):$(id -g) "$GENERATE_CHANGEMARKS_DOCKER_IMAGE" pandocFilter -o "/tmp/out" "/tmp/$i" +# echo "\n------ Publishing spec --------" +# docker run --rm -v $(pwd):/data -u $(id -u):$(id -g) "$DOCKER_IMAGE" "/data/$i" -f markdown -t docx --reference-doc "/data/${7}" -o "/data/out/${DOCUMENT_NAME}.docx" +# #docker run --rm -v $(pwd):/data -u $(id -u):$(id -g) "$DOCKER_IMAGE" "/data/$i" -f markdown -t html -o "/data/out/${DOCUMENT_NAME}.html" +# #docker run --rm -v $(pwd):/data -u $(id -u):$(id -g) "$DOCKER_IMAGE" "/data/out/${DOCUMENT_NAME}.html" -f html -t docx --reference-doc "Spec-template.docx" -o "/data/out/${DOCUMENT_NAME}.docx" +#done + +#echo "\n------ Combining docx --------" +##docker container run --rm -v $(pwd):/tmp/ -u $(id -u):$(id -g) "$FORGELIB_DOCKER_IMAGE" forgelib-changedocs -vv -sf "/tmp/out/" --preprocessor onem2m --outPath=/tmp/docs --startdelimiter "/tmp/$4" --enddelimiter "/tmp/$5" --coversheet "/tmp/$6" "$HOST_URL" "$2" "$3" +#docker container run --rm -v $(pwd):/tmp/ -u $(id -u):$(id -g) -w "/tmp" "$FORGELIB_DOCKER_IMAGE" forgelib-changedocs -vv -sf "out/" --preprocessor onem2m --token ${8} --outPath=docs/ --startdelimiter "$4" --enddelimiter "$5" --coversheet "$6" "$HOST_URL" "$2" "$3" + +#echo "\n------ Converting to tracked changes docx --------" +#for i in docs/*.docx ; do +# DOCUMENT_NAME=$(echo $i | cut -d'/' -f 2) +# docker container run --rm -v $(pwd):/tmp/ -u $(id -u):$(id -g) "$GENERATE_CHANGEMARKS_DOCKER_IMAGE" addTrackedChanges -o "/tmp/docs/$DOCUMENT_NAME" "/tmp/$i" "$HOST_URL" "$2" "$3" +#done +#for filename in docs/*.docx; do +# mv $filename ${filename%.*}_revisionMarks\(informative\).docx; done; +# #mv "$filename" "prefix_${filename}"; done; + +echo "\n------ Generating change marks --------" +docker container run --rm -v $(pwd):/tmp/ -u $(id -u):$(id -g) -w "/tmp" "$FORGELIB_DOCKER_IMAGE" forgelib-changedocs -vv --combine --diffs --linenumbers --extension "png" --extension "jpg" --extension "svg" --extension "md" --preprocessor nfv --token ${6} --outPath=docs/ --startdelimiter "$4" --coversheet "$5" "$HOST_URL" "$2" "$3" + +exit 0 diff --git a/specifications/generate_releasenotes.sh b/specifications/generate_releasenotes.sh new file mode 100644 index 0000000000000000000000000000000000000000..bac0dce89cd9ab9a816faa8a480b67dbc9e1ef70 --- /dev/null +++ b/specifications/generate_releasenotes.sh @@ -0,0 +1,41 @@ +# +# generate_changemarks.sh +# +# Script to generate CR Word documents from merge requests. Outputs: +# - 1 - Word CR document containing the git diff +# - 2 - Word CR document containing tracked changes (informative) - Deprecated +# (c) 2024 by Miguel Angel Reina Ortega +# License: BSD 3-Clause License. See the LICENSE file for further details. +# +#!/bin/bash + +FORGELIB_DOCKER_IMAGE=forge.3gpp.org:5050/tools/3gpp-scripts/forgelib:v2.28.0 + +echo "\n------ Checking for docker image --------" +docker logout $(echo "$FORGELIB_DOCKER_IMAGE" | cut -d "/" -f 1 ) +docker pull "$FORGELIB_DOCKER_IMAGE" + + +echo "------ Removing previous outputs --------" + +echo "------ Parsing repo URL --------" + +HOST_URL=$(echo $1 | cut -d'/' -f 1-4) +PROJECT_NAME=$(echo $1 | grep -o '[^/]*$' | cut -d'.' -f 1) +echo "HOST URL:" $HOST_URL +echo "PROJECT NAME:" $PROJECT_NAME +PROJECT_ID=$2 +echo "PROJECT ID:" $PROJECT_ID +TAG=$3 +echo "TAG:" $TAG +RELEASE_NOTES_TEMPLATE=$4 +echo "RELEASE NOTES TEMPLATE:" $RELEASE_NOTES_TEMPLATE +GITLAB_USER_NAME=$5 +echo "GITLAB USER NAME:" $GITLAB_USER_NAME +TOKEN=$6 +echo "TOKEN:" $TOKEN + +echo "\n------ Generating release notes --------" +docker container run --rm -v $(pwd):/tmp/ -u $(id -u):$(id -g) -w "/tmp" "$FORGELIB_DOCKER_IMAGE" forgelib-releaseNotes -vv --combine --filename --diffs --linenumbers --extension "png" --extension "jpg" --extension "svg" --extension "md" --outPath=baseline/ --token ${TOKEN} --coversheet ${RELEASE_NOTES_TEMPLATE} "$HOST_URL" "${PROJECT_ID}" "${TAG}" "$GITLAB_USER_NAME" + +exit 0 diff --git a/specifications/nfv_coversheet_template.docx b/specifications/nfv_coversheet_template.docx new file mode 100644 index 0000000000000000000000000000000000000000..133d0fd61060b0305fd16402a77e591e2c894912 Binary files /dev/null and b/specifications/nfv_coversheet_template.docx differ diff --git a/specifications/nfv_delimiter_start.docx b/specifications/nfv_delimiter_start.docx new file mode 100644 index 0000000000000000000000000000000000000000..5dc9b47599f488e4d373ba866136541c04bba34a Binary files /dev/null and b/specifications/nfv_delimiter_start.docx differ diff --git a/specifications/nfv_release_notes_template.docx b/specifications/nfv_release_notes_template.docx new file mode 100644 index 0000000000000000000000000000000000000000..ac6f2e58985144eb1c9cb27770e625ccd1d49250 Binary files /dev/null and b/specifications/nfv_release_notes_template.docx differ diff --git a/specifications/publish_spec.sh b/specifications/publish_spec.sh new file mode 100644 index 0000000000000000000000000000000000000000..a6b9d786a359211b76f8847de82c1792e87cd1b7 --- /dev/null +++ b/specifications/publish_spec.sh @@ -0,0 +1,96 @@ +# +# publish_specs.sh +# +# Script to generate documents from markdown files with Pandoc. Outputs: +# - .docx +# - .pdf +# - .epub +# +# (c) 2024 by Miguel Angel Reina Ortega +# License: BSD 3-Clause License. See the LICENSE file for further details. +# +#!/bin/bash + +PANDOC_DOCKER_IMAGE=forge.etsi.org:5050/cti/md-specs-dev/tools/generatebaseline/pandoc:master +GENERATE_BASELINE_DOCKER_IMAGE=forge.etsi.org:5050/cti/md-specs-dev/tools/generatebaseline:master +MARKDOWN_TOOLS_DOCKER_IMAGE=forge.etsi.org:5050/cti/md-specs-dev/tools/markdowntools:master +FORGELIB_DOCKER_IMAGE=forge.3gpp.org:5050/tools/3gpp-scripts/forgelib:v2.28.0 + +echo "\n------ Checking for docker image --------" +docker logout $(echo "$PANDOC_DOCKER_IMAGE" | cut -d "/" -f 1) +docker pull "$PANDOC_DOCKER_IMAGE" +docker logout $(echo "$GENERATE_BASELINE_DOCKER_IMAGE" | cut -d "/" -f 1) +docker pull "$GENERATE_BASELINE_DOCKER_IMAGE" +docker logout $(echo "$MARKDOWN_TOOLS_DOCKER_IMAGE" | cut -d "/" -f 1) +docker pull "$MARKDOWN_TOOLS_DOCKER_IMAGE" +docker logout $(echo "$FORGELIB_DOCKER_IMAGE" | cut -d "/" -f 1) +docker pull "$FORGELIB_DOCKER_IMAGE" + +echo "------ Removing previous outputs --------" +rm -f **/*.docx 2>/dev/null || true + +echo "------ Parsing repo URL --------" + +TAG_NAME=$1 +echo "TAG NAME:" $TAG_NAME +SPEC_TEMPLATE=$2 +echo "SPEC TEMPLATE:" $SPEC_TEMPLATE +SPEC_NAME=$3 +echo "SPEC NAME:" $SPEC_NAME +ETSI_COVER_TEMPLATE=$4 +echo "SPEC COVER TEMPLATE:" $ETSI_COVER_TEMPLATE +CONTRIBUTION_TYPE=$5 +echo "CONTRIBUTION TYPE:" $CONTRIBUTION_TYPE + + +echo "------ Getting .md file(s) ------" +# If there are no .md files, then simply exit +ls | grep -q 'md' +specs=$? +if [ ! $specs ] ; then + echo "-- No Markdown files." + exit 0 +fi + +for i in $(find -name "*.svg") ; do + echo "\n------ Converting SVG to PNG for pandoc --------" + png="${i%.svg}.png" + if [ -f "$png" ]; then + echo "Skipping $i — PNG already exists at $png" + continue + fi +done + +for i in *.md ; do + if [ $i != 'README.md' ]; then + if [[ $i =~ (GS|GR).*\.md ]] ; then + echo "\n------ Processing MD file to combine all clauses (::include) -------" + docker run --rm -v $(pwd):/tmp/ -u $(id -u):$(id -g) -w "/tmp" "$MARKDOWN_TOOLS_DOCKER_IMAGE" processMDSpec -fmo "$i" -fmf frontmatter.md + docker run --rm -v $(pwd):/tmp/ -u $(id -u):$(id -g) -w "/tmp" "$MARKDOWN_TOOLS_DOCKER_IMAGE" processMDSpec "$i" > combined.md + cat combined.md > $i + echo "\n------ Preparing spec --------" + docker run --rm -v $(pwd):/tmp/ -u $(id -u):$(id -g) "$GENERATE_BASELINE_DOCKER_IMAGE" pandocFilter -o "/tmp/" "/tmp/$i" + echo "\n------ Publishing spec --------" + mkdir baseline + # Word output + docker run --rm -v $(pwd):/data -u $(id -u):$(id -g) -w "/data" "$PANDOC_DOCKER_IMAGE" "/data/$i" --toc --metadata toc-title="Contents" -F mermaid-filter -f markdown+escaped_line_breaks -t docx --reference-doc "/data/${SPEC_TEMPLATE}" -o "baseline/${SPEC_NAME}_${TAG_NAME}.docx" + if [ -f "frontmatter.md" ] && [ "$(cat frontmatter.md | tr -d ' \n\t')" != "{}" ]; then + docker container run --rm -v $(pwd):/tmp/ -u $(id -u):$(id -g) -w "/tmp" "$FORGELIB_DOCKER_IMAGE" forgelib-baseline ${ETSI_COVER_TEMPLATE} frontmatter.md "baseline/${SPEC_NAME}_${TAG_NAME}.docx" + fi + #if [ "$6" != "onlyDocx" ]; then + #Do not convert to PDF or EPUB until a solution is found to include the spec cover pages + # PDF Output + #docker run --rm -v $(pwd):/data -u $(id -u):$(id -g) -w "/data" "$PANDOC_DOCKER_IMAGE" pandoc "/data/$i" -F mermaid-filter -f markdown+escaped_line_breaks -t pdf -o "baseline/${4}_${2}.pdf" + # EPUB Output + #docker run --rm -v $(pwd):/data -u $(id -u):$(id -g) -w "/data" "$PANDOC_DOCKER_IMAGE" pandoc "/data/$i" -f markdown+escaped_line_breaks -t epub3 -o "baseline/${4}_${2}.epub" --metadata title="${PROJECT_NAME}_${2}" --metadata creator="oneM2M Partnership Project" --metadata rights="Copyright 2024 oneM2M Partners +#hip Project" + cho "\n------ Postprocessing spec --------" + docker run --rm -v $(pwd):/tmp/ -u $(id -u):$(id -g) -w "/tmp" "$GENERATE_BASELINE_DOCKER_IMAGE" update_toc "baseline/${SPEC_NAME}_${TAG_NAME}.docx" "baseline/${SPEC_NAME}_${TAG_NAME}.docx" + docker run --rm -v $(pwd):/tmp/ -u $(id -u):$(id -g) -w "/tmp" "$GENERATE_BASELINE_DOCKER_IMAGE" update_format_styles "baseline/${SPEC_NAME}_${TAG_NAME}.docx" "baseline/${SPEC_NAME}_${TAG_NAME}.docx" + + fi + fi +done + + +exit 0