.github/workflows/publish_v3.yml #89
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_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: | | |
mike delete --config-file "$FULL_MKDOCS_YML" --branch gh-pages --push --allow-empty v3.0 || true | |
mike delete --config-file "$FULL_MKDOCS_YML" --branch gh-pages --push --allow-empty v3.0.1-draft || true | |
mike deploy --update-aliase --config-file "$FULL_MKDOCS_YML" --branch gh-pages --push v3.0.1 $VERSION_ALIASES | |
mike set-default --config-file "$FULL_MKDOCS_YML" --branch gh-pages --push v3.0.1 | |
# Explanations of the above mike steps: | |
# 1) delete existing v3.0 alias/deployment, if exists | |
# 2) delete existing v3.0.1-draft alias/deployment, if exists | |
# 3) deploy v3.0.1, with aliases (v3.0.1-draft, v3-draft, v3.0-RC1, v3.0-RC2, v3.0 latest) | |
# 4) set default version to v3.0.1 | |
# 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 v3.0.1/rdf/* "$dir"/rdf | |
cp v3.0.1/rdf/* "$dir"/model | |
done |