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>
123 lines
4.4 KiB
Bash
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
|
|
|