Update pyshacl==0.30.0 #138
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
# Publish SPDX specification to https://spdx.github.io/spdx-spec/ | |
# | |
# There will be this workflow in "main", "develop", and "support" branches. | |
# Each of them publish to a different URL. | |
# | |
# For example, | |
# the workflow in "main" may publish to https://spdx.github.io/spdx-spec/3.0.1/, | |
# the workflow in "develop" may publish to https://spdx.github.io/spdx-spec/3.1-dev/, | |
# the workflow in "support/3.0" may publish to https://spdx.github.io/spdx-spec/3.0.0/. | |
# | |
# The workflow should be configured to have an URL without a version number | |
# specified be redirected to an URL published from "main" branch. | |
# | |
# ## Workflow overview | |
# | |
# 1) Generate model documents and RDFs from model files in spdx-3-model repo | |
# 2) Combine the model documents from (1) with the chapters in spdx-spec repo | |
# 3) Generate a website using files from (2) | |
# 4) Upload RDFs from (1) and a website from (3) to GitHub Pages | |
# 5) Make URL redirections as needed | |
# | |
# See notes at: | |
# https://github.com/spdx/spdx-spec/issues/1155 | |
# https://github.com/spdx/spdx-spec/pull/1146 | |
# See branch structure at: | |
# https://github.com/spdx/spdx-spec/blob/develop/README.md#branch-structure | |
on: | |
push: | |
branches: | |
- develop # This should match with REF_SPEC, | |
# to automatically publish from a correct branch | |
repository_dispatch: | |
types: | |
- publish_v3_spec | |
workflow_dispatch: {} # Manually trigger from https://github.com/spdx/spdx-spec/actions | |
jobs: | |
build: | |
runs-on: ubuntu-latest | |
env: | |
REF_SPEC: "develop" # spdx-spec branch: "main" or "develop" or "support/x.y" | |
REF_MODEL: "main" # spdx-3-model branch: "main" or "develop" or "support/x.y" | |
REF_PARSER: "main" # spdx-3-model branch: "main" or "develop" or "support/x.y" | |
# (now we have only "main" for spdx-3-model and spec-parser) | |
GH_PAGES_BRANCH: "gh-pages" # spdx-spec branch to publish HTML to | |
VERSION_DEFAULT: "v3.0.1" # Default version: | |
# - A version to be redirected to from the URL without | |
# a version number specified | |
# - Should be a latest stable version from "main" branch | |
# - VERSION_DEFAULT should be the same in this workflow | |
# across all branches/tags | |
# - VERSION_DEFAULT should also match with the | |
# mike's canonical_version in mkdocs.yml | |
VERSION: "v3.0.1" # Publishing version, to be publish by this workflow: | |
# - VERSION can be different from VERSION_DEFAULT; | |
# For example, if VERSION is a draft/release candidate, | |
# or if VERSION is a stable version that is behind the | |
# default version (e.g. v3.0.2 vs v3.1) | |
# - VERSION from "develop" branch should be indicated with | |
# a suffix ("-dev", "-draft", etc.). | |
# The content of this version will constantly change. | |
# - VERSION should match with the version in the copyright | |
# text defined in mkdocs.yml | |
# e.g. "SPDX v3.x.x Copyright (c) 2010-2024, ..." | |
# - A release candidate (with suffix "-RC") may be published | |
# from a very short-lived "support" branch. | |
# The content of this version should be kept unchanged, | |
# so it can be properly referenced during the review period, | |
# but the URL of the RC version may subjected to be | |
# redirected to the release version later. | |
# For example, v3.0-RC1 was redirected to v3.0 and | |
# will be redirected to v3.0.1 later. | |
VERSION_ALIASES: "latest v3.0 v3.0.1-dev v3.0.1-draft v3-draft v3.0-RC1 v3.0-RC2" | |
# VERSION_ALIASES are names that will be redirected to VERSION | |
# - Can be empty, can be multiple; separated by space | |
# - "latest" should be reserved for the latest version | |
# - Versions like "v3.0" will be expanded to "v3.0 3.0" | |
GIT_USER_NAME: "ci-bot" # Username for gh-pages commit | |
GIT_USER_EMAIL: "[email protected]" # E-mail for gh-pages commit | |
PARSER_OUT_BASE_DIR: "__parser_out" # Temporary dir for output from spec-parser | |
PARSER_OUT_RDF_DIR: "rdf" # Contains RDFs and schema; relative to PARSER_OUT_BASE_DIR | |
PARSER_OUT_MKDOCS_DIR: "mkdocs" # Contains model Markdown files: | |
# - relative to PARSER_OUT_BASE_DIR | |
MKDOCS_MODEL_YML: "model-files.yml" # Contains list of model Markdown files: | |
# - relative to PARSER_OUT_BASE_DIR | |
MKDOCS_BASE_YML: "mkdocs.yml" # Initial MkDocs configuration; from spdx-spec repo | |
MKDOCS_FULL_YML: "__mkdocs-full.yml" # MkDocs configuration combined with model list: | |
# - to be generated from MKDOCS_BASE_YML and MKDOCS_MODEL_YML | |
REDIRECT_MAP_PATH: "etc/redirect-map.csv" # URL redirect map | |
REDIRECT_TEMPLATE_PATH: "etc/redirect-template.html" # URL redirect HTML template | |
steps: | |
- name: Expand version aliases to include a version without 'v' prefix | |
# VERSION: "v3.0.1" | |
# Original VERSION_ALIASES: "latest v3.0" | |
# Expanded VERSION_ALIASES: "3.0.1 latest v3.0 3.0" | |
run: | | |
echo VERSION: $VERSION | |
echo Original VERSION_ALIASES: $VERSION_ALIASES | |
original_aliases="$VERSION_ALIASES" | |
expanded_aliases="" | |
if [[ $VERSION =~ ^v[0-9] ]]; then | |
expanded_aliases="$expanded_aliases ${VERSION#v}" | |
fi | |
for version in $original_aliases; do | |
expanded_aliases="$expanded_aliases $version" | |
if [[ $version =~ ^v[0-9] ]]; then | |
expanded_aliases="$expanded_aliases ${version#v}" | |
fi | |
done | |
expanded_aliases=$(echo $expanded_aliases | sed 's/^ *//g') | |
echo "VERSION_ALIASES=$expanded_aliases" >> $GITHUB_ENV | |
- name: Check expanded version aliases | |
run: | | |
echo Expanded VERSION_ALIASES: $VERSION_ALIASES | |
- name: Checkout spdx-spec | |
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 #v4.2.2 | |
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@11bd71901bbe5b1630ceea73d27597364c9af683 #v4.2.2 | |
with: | |
repository: spdx/spdx-3-model | |
ref: ${{ env.REF_MODEL }} | |
path: spdx-3-model | |
- name: Checkout spec-parser | |
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 #v4.2.2 | |
with: | |
repository: spdx/spec-parser | |
ref: ${{ env.REF_PARSER }} | |
path: spec-parser | |
- name: Set up specific Python version | |
uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b #v5.3.0 | |
with: | |
python-version: "3.12" | |
cache: "pip" | |
- 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: Install fake pandoc (to bypass the Tex generation by spec-parser) | |
run: | | |
echo "#!/bin/sh" > /usr/local/bin/pandoc | |
echo "exit 0" >> /usr/local/bin/pandoc | |
chmod +x /usr/local/bin/pandoc | |
- name: Build model files | |
run: python3 spec-parser/main.py spdx-3-model/model $PARSER_OUT_BASE_DIR | |
- name: Create directories for model (MkDocs) and RDF files | |
run: | | |
mkdir -p spdx-spec/docs/rdf | |
mkdir -p spdx-spec/docs/model | |
- name: Copy JSON annotations | |
# Will be redirected from https://spdx.org/rdf/3.0.x/spdx-json-serialize-annotations.ttl | |
# and available at https://spdx.github.io/spdx-spec/v3.0.x/rdf/jsonld-annotations.ttl | |
# Note: When release a new version, update the content of annotations.ttl to match the version | |
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.x/spdx-context.jsonld, spdx-model.ttl, etc. | |
# and available at https://spdx.github.io/spdx-spec/v3.0.x/rdf/spdx-context.jsonld | |
run: | | |
echo "====================" | |
echo "Source: $PARSER_OUT_BASE_DIR/$PARSER_OUT_RDF_DIR" | |
echo "--------------------" | |
ls $PARSER_OUT_BASE_DIR/$PARSER_OUT_RDF_DIR | |
echo "====================" | |
cp $PARSER_OUT_BASE_DIR/$PARSER_OUT_RDF_DIR/spdx-context.jsonld spdx-spec/docs/rdf/ | |
cp $PARSER_OUT_BASE_DIR/$PARSER_OUT_RDF_DIR/spdx-model.* 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_OUT_BASE_DIR/$PARSER_OUT_RDF_DIR/spdx-context.jsonld spdx-spec/docs/model/ | |
cp $PARSER_OUT_BASE_DIR/$PARSER_OUT_RDF_DIR/spdx-model.* 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.x/spdx-json-schema.json | |
# and available at https://spdx.github.io/spdx-spec/v3.0.x/rdf/schema.json | |
# Note: When release a new version, update URL in --context-url line to match the version | |
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 Markdown files and a model file list for MkDocs | |
# Will be available at https://spdx.github.io/spdx-spec/v3.0.x/model/* | |
run: | | |
cp -R $PARSER_OUT_BASE_DIR/$PARSER_OUT_MKDOCS_DIR/* spdx-spec/docs/model | |
cp $PARSER_OUT_BASE_DIR/$MKDOCS_MODEL_YML spdx-spec | |
# mkdir -p spdx-spec/docs/diagram | |
# cp $PARSER_OUT_BASE_DIR/diagram/model.plantuml spdx-spec/docs/diagram | |
# mkdir -p spdx-spec/docs/jsondump | |
# cp $PARSER_OUT_BASE_DIR/jsondump/model.json spdx-spec/docs/jsondump | |
- 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 | |
# Combines model file list (MKDOCS_MODEL_YML, generated by spec-parser) | |
# with the base MkDocs configuration file (MKDOCS_BASE_YML), | |
# to produce the full MkDocs configuration file (MKDOCS_FULL_YML). | |
# The script below finds "__MODEL_PLACEHOLDER__" string in | |
# MKDOCS_BASE_YML, replaces it with the content from MKDOCS_MODEL_YML. | |
# MKDOCS_FULL_YML will be used by mike in the deploy step. | |
working-directory: spdx-spec | |
run: | | |
echo "Build $MKDOCS_FULL_YML from $MKDOCS_BASE_YML and $MKDOCS_MODEL_YML" | |
bin/make-mkdocs-config.sh \ | |
-b "$MKDOCS_BASE_YML" \ | |
-m "$MKDOCS_MODEL_YML" \ | |
-f "$MKDOCS_FULL_YML" \ | |
-p "__MODEL_PLACEHOLDER__" | |
echo "====================" | |
echo "Full MkDocs configuration: $MKDOCS_FULL_YML" | |
echo "--------------------" | |
cat "$MKDOCS_FULL_YML" | |
echo "====================" | |
- name: Deploy and set aliases | |
# mike is used here to manage multiple versions of MkDocs-powered documentation | |
# This step does 2 things: | |
# 1) delete existing aliases (in VERSION_ALIASES), if exists | |
# 2) deploy as VERSION, with aliases | |
# If the existing aliases were redirected to other versions, | |
# it means this VERSION will "steal" the aliases from those versions. | |
working-directory: spdx-spec | |
run: | | |
for alias in $VERSION_ALIASES; do | |
mike delete --config-file "$MKDOCS_FULL_YML" --branch $GH_PAGES_BRANCH --push --allow-empty "$alias" || true | |
done | |
mike deploy --update-aliase --config-file "$MKDOCS_FULL_YML" --branch $GH_PAGES_BRANCH --push $VERSION $VERSION_ALIASES | |
- name: Set default version | |
# Set default version to VERSION_DEFAULT; | |
# if not set, the default version will remain the same. | |
# Should only be done from the "main" branch. | |
if: github.ref == 'refs/heads/main' | |
working-directory: spdx-spec | |
run: | | |
mike set-default --config-file "$MKDOCS_FULL_YML" --branch $GH_PAGES_BRANCH --push $VERSION_DEFAULT | |
- 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 | |
# This step creates copies of annotations/schema/RDFs to all alias | |
# directories, so they can be accessible from all old URLs. | |
# For example, | |
# - https://spdx.github.io/spdx-spec/v3.0/model/schema.json (old directory structure) | |
# - https://spdx.github.io/spdx-spec/v3.0.1/rdf/schema.json (new directory structure) | |
# will all accessible and have the same content. | |
# Unlike HTML files, these files have to be a copy, | |
# since it cannot use the HTML refresh mechanism. | |
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: $VERSION_ALIASES" | |
git push origin $GH_PAGES_BRANCH | |
- name: Make redirections (for renamed model elements and moved annexes) | |
# Fallback for backward compatibility with old URLs before v3.0.1 | |
# More redirections can be added in etc/redirect-map.csv (from,to) | |
# See name changes in model at | |
# https://github.com/spdx/spdx-3-model/blob/main/CHANGELOG.md | |
# | |
# This step creates a HTML files to facilitate additional directions. | |
# It reads a redirect map from /etc/redirect-map.csv; in the CSV, | |
# first value is 'from' (source) and second value is 'to' (target). | |
# | |
# The 'from' and 'to' values will be inserted into a HTML template at | |
# from /etc/redirect-template.html, to create a redirect HTML | |
# page (index.html) under a subdirectory with the name of 'from' | |
# that will refresh the browser to a URL of 'to'. | |
# | |
# For example, given: | |
# | |
# VERSION = "v3.0.1" | |
# VERSION_ALIASES = "latest v3.0" | |
# from = "model/Core/Properties/imports" | |
# to = "model/Core/Properties/import" | |
# | |
# these HTML files will be created for every aliases: | |
# | |
# v3.0.1/model/Core/Properties/imports/index.html | |
# latest/model/Core/Properties/imports/index.html | |
# v3.0/model/Core/Properties/imports/index.html | |
# | |
# and all of them will redirect to | |
# | |
# v3.0.1/model/Core/Properties/import/ | |
working-directory: spdx-spec | |
run: | | |
ALL_VERSIONS=$(echo "$VERSION" "$VERSION_ALIASES") | |
INDEX_HTML="index.html" | |
git checkout $REF_SPEC | |
maps=$(cat "$REDIRECT_MAP_PATH") | |
template=$(cat "$REDIRECT_TEMPLATE_PATH") | |
echo "====================" | |
echo "Redirect map: $REDIRECT_MAP_PATH" | |
echo "--------------------" | |
echo "$maps" | |
echo "====================" | |
echo "====================" | |
echo "Redirect HTML template: $REDIRECT_TEMPLATE_PATH" | |
echo "--------------------" | |
echo "$template" | |
echo "====================" | |
git checkout $GH_PAGES_BRANCH | |
for alias in $ALL_VERSIONS; do | |
echo "$maps" | while read -r line; do | |
from=$(echo "$line" | cut -d',' -f1) | |
to=$(echo "$line" | cut -d',' -f2) | |
slash_count=$(echo "$from" | tr -cd '/' | wc -c) | |
upper_dirs=".." | |
if [ -n "$from" ]; then | |
for i in $(seq 0 $slash_count); do | |
upper_dirs="$upper_dirs/.." | |
done | |
fi | |
escaped_upper=$(echo "$upper_dirs" | sed 's/[\/&]/\\&/g') | |
escaped_version=$(echo "$VERSION" | sed 's/[\/&]/\\&/g') | |
html="" | |
case "$to" in | |
http://*|https://*) | |
echo "Redirect: $alias/$from -> $to" | |
escaped_to=$(echo "$to" | sed 's/[\/&]/\\&/g') | |
html=$(echo "$template" | sed -e "s|__UPPER__/__VERSION__/__TO__|$escaped_to|g") | |
;; | |
*) | |
echo "Redirect: $alias/$from -> $VERSION/$to" | |
escaped_to=$(echo "$to" | sed 's/[\/&]/\\&/g') | |
html=$(echo "$template" | sed -e "s/__UPPER__/$escaped_upper/g" -e "s/__VERSION__/$escaped_version/g" -e "s/__TO__/$escaped_to/g") | |
;; | |
esac | |
mkdir -p "$alias/$from" | |
echo "$html" > "$alias/$from/$INDEX_HTML" | |
git add "$alias/$from/$INDEX_HTML" | |
done | |
done | |
git commit -m "Add redirections for: $ALL_VERSIONS" | |
git push origin $GH_PAGES_BRANCH |