The openapi-generator invocation still passed --git-host=git.psi.ch and a user id of jungfraujoch, from before the move to gitea.psi.ch/mx/jungfraujoch. Those properties are not cosmetic: they become the source URL in the generated README and pyproject, so the published client documentation - docs/python_client/README.md, which is copied out of the generated tree - told readers to pip install from a host that no longer answers. Regenerating with the corrected flags changes those two lines and nothing else, verified against the committed tree. update_version.sh, make_doc.sh and gen_python_client.sh were all mode 644, so the "run update_version.sh" the documentation asks for fails on the shebang. CMake and the CI both work around it by invoking them through bash. make_doc.sh builds a throw-away venv in the working tree and deletes it on the last line, which set -e skips whenever pip or sphinx fails - so a failed docs build left tmp_venv/ behind. Delete it from a trap instead, and ignore it along with the default output directory and the sdist directory gen_python_client.sh creates. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
125 lines
4.6 KiB
Bash
Executable File
125 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" \
|
|
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
|
|
|