Files
Jungfraujoch/update_version.sh
T
leonarski_fandClaude Opus 5 1eb9d5a2fa Notices: list traccc in the canonical third-party manifest
The SparseCCL connected-component labelling adapted from traccc is MPL-2.0 source in this tree, and
MPL-2.0 requires the notice to be conveyed with it. The licence text has always shipped
(licenses/traccc.txt, installed with the rest of licenses/ into share/doc/jfjoch) and
docs/ACKNOWLEDGEMENT.md has always credited it - but the root THIRD_PARTY_NOTICES.md, which is the
manifest a recipient actually reads, never named it.

The generated docs/ copy DID name it, and more completely than a fresh row would have: both files
it touches, and a note explaining that only one of them adapts the source while the other follows
the design. So the fix is to carry that entry back into the canonical file rather than write a new
one - the generated copy had been edited directly at some point, against its own banner, and the
edit never reached the file it is generated from. Regenerating now reproduces docs/ byte for byte,
which is the check that the two are finally in step.

update_version.sh gains the link rewrite that entry needs: the acknowledgement is docs/ACKNOWLEDGEMENT.md
from the root and ACKNOWLEDGEMENT.md from inside docs/, so without the rule the next regeneration
would have written a path that resolves nowhere.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-11 17:08:34 +02:00

126 lines
4.6 KiB
Bash
Executable File

#!/bin/bash
#
# Copyright (2019-2024) Paul Scherrer Institute
#
# Stop at the first failing command (this script rewrites generated code and version
# strings in place, so a silently skipped step leaves the tree half-updated).
set -e
set -o pipefail
VERSION=$(<VERSION)
# Regular expression for semantic versioning with optional pre-release and build metadata
regex="^([0-9]+)\.([0-9]+)\.([0-9]+)(-[A-Za-z0-9.\-]+)?(\+[A-Za-z0-9.\-]+)?$"
if [[ $VERSION =~ $regex ]]; then
major="${BASH_REMATCH[1]}"
minor="${BASH_REMATCH[2]}"
patch="${BASH_REMATCH[3]}"
prerelease="${BASH_REMATCH[4]}"
build="${BASH_REMATCH[5]}"
echo "Major version: $major"
echo "Minor version: $minor"
echo "Patch version: $patch"
[ -n "$prerelease" ] && echo "Pre-release version: ${prerelease:1}" # Remove the leading '-'
[ -n "$build" ] && echo "Build metadata: ${build:1}" # Remove the leading '+'
else
echo "Invalid semantic version: $VERSION"
exit 1
fi
OPENAPI_VERSION=7.20.0
wget https://repo1.maven.org/maven2/org/openapitools/openapi-generator-cli/${OPENAPI_VERSION}/openapi-generator-cli-${OPENAPI_VERSION}.jar -O openapi-generator-cli.jar
SRC=' version:.*'
DST=" version: $VERSION"
sed -i -e "s/$SRC/$DST/" broker/jfjoch_api.yaml
git rm -r broker/gen/model docs/python_client frontend/src/client
# The python generator only overwrites what the current schema produces, and the docs below are
# copied out of this directory wholesale - so without clearing it, a schema that has been removed
# from the API keeps its generated model and its published .md page for good.
rm -rf python-client
# The --git-* properties only end up as the source URL in the generated README/pyproject; they must
# name the current repository (gitea.psi.ch/mx/jungfraujoch), not the retired git.psi.ch instance.
java -jar openapi-generator-cli.jar generate -i broker/jfjoch_api.yaml -o python-client/ -g python --git-host=gitea.psi.ch --git-repo-id jungfraujoch --git-user-id mx --additional-properties=packageName=jfjoch_client,packageVersion=$VERSION
java -jar openapi-generator-cli.jar generate -i broker/jfjoch_api.yaml -o broker/gen -g cpp-pistache-server
# Bump package.json BEFORE npm install, so the regenerated package-lock.json records the
# new version instead of the previous one.
sed -i "s,\"version\":.*,\"version\": \"$VERSION\"\,," frontend/package.json
cd frontend
sed -i s/\".*\"/\"$VERSION\"/g src/version.ts
npm install
npm run openapi
npm run redocly4broker
cd ..
mkdir -p docs/python_client/docs
cp python-client/README.md docs/python_client
cp python-client/docs/*.md docs/python_client/docs
# Mirror the root third-party notices into the docs tree so they are published with
# the documentation. The verbatim license texts (licenses/*.txt) are not part of the
# docs source tree, so point those links at the repository; the project-license links
# point at the in-docs LICENSE / FPGA_LICENSE pages.
REPOBASE=https://gitea.psi.ch/mx/jungfraujoch/src/branch/main
{
echo "<!--"
echo " Auto-generated from THIRD_PARTY_NOTICES.md by update_version.sh — do not hand-edit."
echo " Edit the canonical THIRD_PARTY_NOTICES.md at the repository root instead."
echo "-->"
echo
sed -e "s,](licenses/,]($REPOBASE/licenses/,g" \
-e "s,](LICENSE)),](LICENSE.md)),g" \
-e "s,](fpga/LICENSE),](FPGA_LICENSE.md),g" \
-e "s,](docs/ACKNOWLEDGEMENT.md),](ACKNOWLEDGEMENT.md),g" \
THIRD_PARTY_NOTICES.md
} > docs/THIRD_PARTY_NOTICES.md
git add broker/gen/model/*.cpp broker/gen/model/*.h frontend/src/client docs/python_client/*.md docs/python_client/docs/*.md docs/THIRD_PARTY_NOTICES.md
sed -i "s,release =.*,release = \'$VERSION\'," docs/conf.py
cd fpga
SRC="define JFJOCH_FPGA_MAJOR_VERSION 8'd.*"
DST="define JFJOCH_FPGA_MAJOR_VERSION 8'd${major}"
sed -i "s/$SRC/$DST/" hdl/action_config.v
SRC="define JFJOCH_FPGA_MINOR_VERSION 8'd.*"
DST="define JFJOCH_FPGA_MINOR_VERSION 8'd${minor}"
sed -i "s/$SRC/$DST/" hdl/action_config.v
SRC="define JFJOCH_FPGA_PATCH_VERSION 8'd.*"
DST="define JFJOCH_FPGA_PATCH_VERSION 8'd${patch}"
sed -i "s/$SRC/$DST/" hdl/action_config.v
SRC="define JFJOCH_FPGA_PRERELEASE 64'h.*"
if [ -n "$prerelease" ]; then
result=$(printf '%.7s' "${prerelease:1}" | rev | xxd -p -u)
DST="define JFJOCH_FPGA_PRERELEASE 64'h$result"
else
DST="define JFJOCH_FPGA_PRERELEASE 64'h0"
fi
sed -i "s/$SRC/$DST/" hdl/action_config.v
cd pcie_driver
sed -i s,MODULE_VERSION\(\".*,MODULE_VERSION\(\"$VERSION\"\)\;, jfjoch_drv.c
sed -i s,VERSION=.*,VERSION=$VERSION, postinstall.sh
sed -i s,VERSION=.*,VERSION=$VERSION, preuninstall.sh
sed -i s,PACKAGE_VERSION=.*,PACKAGE_VERSION=$VERSION, dkms.conf
sed -i s,VERSION=.*,VERSION=$VERSION, install_dkms.sh