Skip to content

.github/workflows/publish_v3.yml #102

.github/workflows/publish_v3.yml

.github/workflows/publish_v3.yml #102

Workflow file for this run

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: |
ALL_VERSIONS=$(echo "$VERSION" "$VERSION_ALIASES")
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
echo "$maps"
for alias in $ALL_VERSIONS; do
echo "$alias"
echo "$maps" | while read -r line; do
echo "$line"
from=$(echo "$line" | cut -d',' -f1)
to=$(echo "$line" | cut -d',' -f2)
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