Generate release WebUI lockfile
This commit is contained in:
@@ -37,12 +37,12 @@ govoplan-campaign git@git.add-ideas.de:add-ideas/govoplan-campaign.git v0.1.1
|
|||||||
|
|
||||||
Local development uses `webui/package.json`, which may point at sibling module checkouts while active development is happening.
|
Local development uses `webui/package.json`, which may point at sibling module checkouts while active development is happening.
|
||||||
|
|
||||||
Release WebUI installs should use `webui/package.release.json`. It points module dependencies at the same tagged git repositories. To generate a release lockfile, copy it over `package.json` in a release branch or build workspace and then run `npm install` there:
|
Release WebUI installs should use `webui/package.release.json`. It points module dependencies at the same tagged git repositories. After the module tags referenced there exist, generate the committed release lockfile without touching the development package files:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd /mnt/DATA/git/govoplan-core/webui
|
cd /mnt/DATA/git/govoplan-core
|
||||||
cp package.release.json package.json
|
scripts/generate-release-lock.sh
|
||||||
PATH=/home/zemion/.nvm/versions/node/v22.22.3/bin:$PATH /home/zemion/.nvm/versions/node/v22.22.3/bin/npm install
|
cd webui
|
||||||
PATH=/home/zemion/.nvm/versions/node/v22.22.3/bin:$PATH /home/zemion/.nvm/versions/node/v22.22.3/bin/npm run build
|
PATH=/home/zemion/.nvm/versions/node/v22.22.3/bin:$PATH /home/zemion/.nvm/versions/node/v22.22.3/bin/npm run build
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -59,6 +59,6 @@ Frontend module permutations are regression-tested through `GOVOPLAN_WEBUI_MODUL
|
|||||||
- Keep Python package versions, WebUI package versions, and git tags aligned.
|
- Keep Python package versions, WebUI package versions, and git tags aligned.
|
||||||
- Tag core, files, mail, and campaign repositories together.
|
- Tag core, files, mail, and campaign repositories together.
|
||||||
- Update `requirements-release.txt` and `webui/package.release.json` when the release tag changes.
|
- Update `requirements-release.txt` and `webui/package.release.json` when the release tag changes.
|
||||||
- Generate the committed full-product release lockfile from `package.release.json` in a clean build workspace.
|
- Generate the committed full-product release lockfile from `package.release.json` with `scripts/generate-release-lock.sh`.
|
||||||
- Add separate release manifest/lockfile pairs only for module compositions that are shipped as their own products.
|
- Add separate release manifest/lockfile pairs only for module compositions that are shipped as their own products.
|
||||||
- Do not commit local sibling paths into release manifests.
|
- Do not commit local sibling paths into release manifests.
|
||||||
|
|||||||
81
scripts/generate-release-lock.sh
Normal file
81
scripts/generate-release-lock.sh
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
cat <<'USAGE'
|
||||||
|
Usage:
|
||||||
|
scripts/generate-release-lock.sh [options]
|
||||||
|
|
||||||
|
Generates webui/package-lock.release.json from webui/package.release.json in a
|
||||||
|
temporary workspace. The normal development package.json and package-lock.json
|
||||||
|
are left untouched.
|
||||||
|
|
||||||
|
Run this after the module git tags referenced by package.release.json exist and
|
||||||
|
are reachable, and before tagging the core release commit that should contain
|
||||||
|
the regenerated release lockfile.
|
||||||
|
|
||||||
|
Options:
|
||||||
|
--npm <path> npm executable to use.
|
||||||
|
-h, --help Show this help.
|
||||||
|
USAGE
|
||||||
|
}
|
||||||
|
|
||||||
|
fail() {
|
||||||
|
echo "error: $*" >&2
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||||
|
WEBUI="$ROOT/webui"
|
||||||
|
NPM_BIN="${NPM:-}"
|
||||||
|
|
||||||
|
if [[ -z "$NPM_BIN" ]]; then
|
||||||
|
if [[ -x "/home/zemion/.nvm/versions/node/v22.22.3/bin/npm" ]]; then
|
||||||
|
NPM_BIN="/home/zemion/.nvm/versions/node/v22.22.3/bin/npm"
|
||||||
|
else
|
||||||
|
NPM_BIN="npm"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
while [[ $# -gt 0 ]]; do
|
||||||
|
case "$1" in
|
||||||
|
--npm)
|
||||||
|
[[ $# -ge 2 ]] || fail "missing value for $1"
|
||||||
|
NPM_BIN="$2"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
-h|--help)
|
||||||
|
usage
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Unknown argument: $1" >&2
|
||||||
|
usage >&2
|
||||||
|
exit 2
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
[[ -f "$WEBUI/package.release.json" ]] || fail "missing $WEBUI/package.release.json"
|
||||||
|
command -v "$NPM_BIN" >/dev/null 2>&1 || fail "npm executable not found: $NPM_BIN"
|
||||||
|
|
||||||
|
TMP_DIR="$(mktemp -d "${TMPDIR:-/tmp}/govoplan-release-lock.XXXXXXXX")"
|
||||||
|
cleanup() {
|
||||||
|
rm -rf "$TMP_DIR"
|
||||||
|
}
|
||||||
|
trap cleanup EXIT
|
||||||
|
|
||||||
|
cp "$WEBUI/package.release.json" "$TMP_DIR/package.json"
|
||||||
|
if [[ -f "$WEBUI/package-lock.release.json" ]]; then
|
||||||
|
cp "$WEBUI/package-lock.release.json" "$TMP_DIR/package-lock.json"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Generating release lockfile from $WEBUI/package.release.json"
|
||||||
|
echo "Temporary workspace: $TMP_DIR"
|
||||||
|
(
|
||||||
|
cd "$TMP_DIR"
|
||||||
|
PATH="$(dirname "$NPM_BIN"):$PATH" "$NPM_BIN" install --package-lock-only --ignore-scripts
|
||||||
|
)
|
||||||
|
|
||||||
|
cp "$TMP_DIR/package-lock.json" "$WEBUI/package-lock.release.json"
|
||||||
|
echo "Updated $WEBUI/package-lock.release.json"
|
||||||
Reference in New Issue
Block a user