Skip to content

Update pyshacl==0.30.0 #138

Update pyshacl==0.30.0

Update pyshacl==0.30.0 #138

Workflow file for this run

# 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