Files
Jungfraujoch/update_version.sh
T
leonarski_fandClaude Opus 5 2ccd1a7e4b update_version.sh: clear the python client before regenerating it
The script now removes the generated C++ model, the frontend client and the
published python docs before regenerating, but not python-client/ itself - and
docs/python_client/docs is filled by copying that directory. So a schema dropped
from the API kept its generated model in the PyPI package and its .md page in
the published docs, linked from no index. Eight such pages are in the tree
today, JfjochSettingsSsl among them.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-30 11:23:21 +02:00

123 lines
4.4 KiB
Bash

#!/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
java -jar openapi-generator-cli.jar generate -i broker/jfjoch_api.yaml -o python-client/ -g python --git-host=git.psi.ch --git-repo-id jungfraujoch --git-user-id jungfraujoch --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" \
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