.github/workflows/publish_v3.yml #94
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
on: | |
push: | |
branches: | |
- development/v3.0.1 | |
repository_dispatch: | |
types: | |
- publish_v3_spec | |
workflow_dispatch: {} | |
jobs: | |
build: | |
runs-on: ubuntu-latest | |
container: python:3 | |
env: | |
REF_SPEC: "test-new-ci-301-on-bact" # spec branch/tag release | |
REF_MODEL: "main" # model branch/tag release | |
REF_PARSER: "main" # parser branch/tag release | |
GH_PAGES_BRANCH: "gh-pages" # branch name to publish HTML to | |
VERSION: "v3.0.1" # current version (default) | |
VERSION_ALIASES: "latest v3.0 v3.0.1-draft v3-draft v3.0-RC1 v3.0-RC2" # list of aliases for v3.0.1 | |
GIT_USER_NAME: "bact" # for gh-pages commit | |
GIT_USER_EMAIL: "arthit@gmail.com" # for gh-pages commit | |
PARSER_OUTPUT_DIR: "__parser_output" # temp dir for output from spec-parser | |
RDF_BASE_DIR: "" # change to "rdf" in new spec-parser output dir structure | |
MKDOCS_BASE_DIR: "" # change to "mkdocs" in new spec-parser output dir structure | |
MKDOCS_MODEL_YML: "mkdocs-files.yml" # contains list of model Markdown files | |
BASE_MKDOCS_YML: "mkdocs.yml" # initial MkDocs configuration | |
FULL_MKDOCS_YML: "__mkdocs-full.yml" # MkDocs configuration combined with model list | |
steps: | |
- name: Checkout spdx-spec | |
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 #v4.1.7 | |
with: | |
ref: ${{ env.REF_SPEC }} | |
path: spdx-spec | |
fetch-depth: 0 # Because we will be pushing the gh-pages branch | |
- name: Checkout spdx-3-model | |
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 #v4.1.7 | |
with: | |
repository: spdx/spdx-3-model | |
ref: ${{ env.REF_MODEL }} | |
path: spdx-3-model | |
- name: Checkout spec-parser | |
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 #v4.1.7 | |
with: | |
repository: spdx/spec-parser | |
ref: ${{ env.REF_PARSER }} | |
path: spec-parser | |
- name: Install pre-requisites for spdx-spec | |
run: pip install -r spdx-spec/requirements.txt | |
- name: Install pre-requisites for spec-parser | |
run: pip install -r spec-parser/requirements.txt | |
- name: Build model files | |
run: python3 spec-parser/main.py spdx-3-model/model $PARSER_OUTPUT_DIR | |
- name: Create directories for model (MkDocs) and RDF files | |
run: | | |
mkdir spdx-spec/docs/rdf | |
mkdir spdx-spec/docs/model | |
- name: Copy JSON annotations | |
# Will be redirected from https://spdx.org/rdf/3.0.0/spdx-json-serialize-annotations.ttl | |
# and available at https://spdx.github.io/spdx-spec/v3.0/rdf/jsonld-annotations.ttl | |
run: | | |
cp spdx-spec/serialization/jsonld/annotations.ttl spdx-spec/docs/rdf/jsonld-annotations.ttl | |
cp spdx-spec/serialization/jsonld/annotations.ttl spdx-spec/docs/model/jsonld-annotations.ttl | |
- name: Copy JSON-LD context and RDFs | |
# Will be redirected from https://spdx.org/rdf/3.0.0/spdx-context.jsonld, spdx-model.ttl, etc. | |
# and available at https://spdx.github.io/spdx-spec/v3.0/model/spdx-context.jsonld | |
run: | | |
echo "=====================" | |
echo "Source: $PARSER_OUTPUT_DIR/$RDF_BASE_DIR" | |
echo "---------------------" | |
ls $PARSER_OUTPUT_DIR/$RDF_BASE_DIR | |
echo "=====================" | |
cp $PARSER_OUTPUT_DIR/$RDF_BASE_DIR/spdx-context.jsonld spdx-spec/docs/rdf/ | |
cp $PARSER_OUTPUT_DIR/$RDF_BASE_DIR/spdx-model.dot spdx-spec/docs/rdf/ | |
cp $PARSER_OUTPUT_DIR/$RDF_BASE_DIR/spdx-model.json-ld spdx-spec/docs/rdf/ | |
cp $PARSER_OUTPUT_DIR/$RDF_BASE_DIR/spdx-model.pretty-xml spdx-spec/docs/rdf/ | |
cp $PARSER_OUTPUT_DIR/$RDF_BASE_DIR/spdx-model.ttl spdx-spec/docs/rdf/ | |
cp $PARSER_OUTPUT_DIR/$RDF_BASE_DIR/spdx-model.xml spdx-spec/docs/rdf/ | |
cp spdx-spec/docs/rdf/spdx-model.json-ld spdx-spec/docs/rdf/spdx-model.jsonld | |
echo "=====================" | |
echo "Target (after copy): spdx-spec/docs/rdf" | |
echo "---------------------" | |
ls spdx-spec/docs/rdf | |
echo "=====================" | |
cp $PARSER_OUTPUT_DIR/$RDF_BASE_DIR/spdx-context.jsonld spdx-spec/docs/model/ | |
cp $PARSER_OUTPUT_DIR/$RDF_BASE_DIR/spdx-model.dot spdx-spec/docs/model/ | |
cp $PARSER_OUTPUT_DIR/$RDF_BASE_DIR/spdx-model.json-ld spdx-spec/docs/model/ | |
cp $PARSER_OUTPUT_DIR/$RDF_BASE_DIR/spdx-model.pretty-xml spdx-spec/docs/model/ | |
cp $PARSER_OUTPUT_DIR/$RDF_BASE_DIR/spdx-model.ttl spdx-spec/docs/model/ | |
cp $PARSER_OUTPUT_DIR/$RDF_BASE_DIR/spdx-model.xml spdx-spec/docs/model/ | |
cp spdx-spec/docs/model/spdx-model.json-ld spdx-spec/docs/model/spdx-model.jsonld | |
echo "=====================" | |
echo "Target (after copy): spdx-spec/docs/model" | |
echo "---------------------" | |
ls spdx-spec/docs/model | |
echo "=====================" | |
- name: Generate JSON schema | |
# Will be redirected from https://spdx.org/schema/3.0.0/spdx-json-schema.json | |
# and available at https://spdx.github.io/spdx-spec/v3.0/model/schema.json | |
run: | | |
shacl2code generate \ | |
--input spdx-spec/docs/rdf/spdx-model.ttl \ | |
--input spdx-spec/docs/rdf/jsonld-annotations.ttl \ | |
--context-url spdx-spec/docs/rdf/spdx-context.jsonld https://spdx.org/rdf/3.0.1/spdx-context.jsonld \ | |
jsonschema \ | |
--output spdx-spec/docs/rdf/schema.json | |
cp spdx-spec/docs/rdf/schema.json spdx-spec/docs/model/schema.json | |
- name: Copy model files and file list for MkDocs | |
# Will be available at https://spdx.github.io/spdx-spec/v3.0/model/* | |
run: | | |
cp -R $PARSER_OUTPUT_DIR/$MKDOCS_BASE_DIR/* spdx-spec/docs/model | |
cp $PARSER_OUTPUT_DIR/$MKDOCS_MODEL_YML spdx-spec | |
- name: Set Git identity | |
working-directory: spdx-spec | |
run: git config user.name $GIT_USER_NAME; git config user.email $GIT_USER_EMAIL | |
- name: Sync GitHub Pages | |
working-directory: spdx-spec | |
run: git checkout $GH_PAGES_BRANCH && git pull && git checkout $REF_SPEC | |
- name: Build complete MkDocs configuration | |
working-directory: spdx-spec | |
run: | | |
echo "Build $FULL_MKDOCS_YML from $BASE_MKDOCS_YML and $MKDOCS_MODEL_YML" | |
sed -e "\|- model.*#.*__MODEL_PLACEHOLDER__.*|{ | |
r $MKDOCS_MODEL_YML | |
a\\ | |
d | |
}" "$BASE_MKDOCS_YML" > "$FULL_MKDOCS_YML" | |
sed -i "/__MODEL_PLACEHOLDER__/d" "$FULL_MKDOCS_YML" | |
echo "=====================" | |
echo "$FULL_MKDOCS_YML" | |
echo "---------------------" | |
cat "$FULL_MKDOCS_YML" | |
echo "[End of File]" | |
rm $MKDOCS_MODEL_YML | |
- name: Deploy and set aliases | |
working-directory: spdx-spec | |
run: | | |
for alias in $VERSION_ALIASES; do | |
mike delete --config-file "$FULL_MKDOCS_YML" --branch $GH_PAGES_BRANCH --push --allow-empty "$alias" || true | |
done | |
mike deploy --update-aliase --config-file "$FULL_MKDOCS_YML" --branch $GH_PAGES_BRANCH --push $VERSION $VERSION_ALIASES | |
mike set-default --config-file "$FULL_MKDOCS_YML" --branch $GH_PAGES_BRANCH --push $VERSION | |
# Explanations of the above mike steps: | |
# 1) delete existing aliases, if exists | |
# 2) deploy VERSION, with aliases (see VERSION_ALIASES) | |
# 3) set default version to VERSION | |
# A script for additional redirections will be run after this point | |
# See https://github.com/spdx/spdx-spec/issues/1069 | |
- name: Copy JSON annotations, JSON schema, JSON-LD context, and RDFs to alias directories | |
# Fallback for backward compatibility with old URLs before v3.0.1 | |
working-directory: spdx-spec | |
run: | | |
git checkout $GH_PAGES_BRANCH | |
dirs="$VERSION_ALIASES" | |
for dir in $dirs; do | |
mkdir -p "$dir"/rdf | |
cp $VERSION/rdf/* "$dir"/rdf | |
cp $VERSION/rdf/* "$dir"/model | |
git add "$dir"/rdf/* "$dir"/model/* | |
done | |
git commit -m "Copy schema and RDFs to alias directories" | |
git push origin $GH_PAGES_BRANCH | |
- name: Make model redirections (for name changes) | |
# Fallback for backward compatibility with old URLs before v3.0.1 | |
working-directory: spdx-spec | |
run: | | |
MAP_PATH="etc/model-redirect-map.csv" | |
TEMPLATE_PATH="etc/model-redirect-template.html" | |
INDEX_HTML="index.html" | |
git checkout $REF_SPEC | |
maps=$(cat "$MAP_PATH") | |
template=$(cat "$TEMPLATE_PATH") | |
git checkout $GH_PAGES_BRANCH | |
IFS=$'\n' | |
for line in $maps; do | |
echo "$line" | IFS=',' read -r from to | |
for alias in $VERSION $VERSION_ALIASES; do | |
echo "Redirect: $alias/docs/model/$from -> $VERSION/docs/model/$to" | |
html=$(echo "$template" | sed -e "s/__VERSION__/$VERSION/g" -e "s/__THING__/$to/g") | |
mkdir -p "$alias/docs/model/$from" | |
echo "$html" > "$alias/docs/model/$from/$INDEX_HTML" | |
git add "$alias/docs/model/$from/$INDEX_HTML" | |
done | |
done | |
git commit -m "Add model redirections for: $VERSION $VERSION_ALIASES" | |
git push origin $GH_PAGES_BRANCH |