All checks were successful
Dependency Audit / dependency-audit (push) Successful in 1m34s
75 lines
2.1 KiB
Bash
75 lines
2.1 KiB
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
WEBUI_DIR="${1:-$ROOT/webui}"
|
|
WORK_ROOT="$(mktemp -d "${TMPDIR:-/tmp}/govoplan-webui-release-deps.XXXXXXXX")"
|
|
GOVOPLAN_DEPS="$WORK_ROOT/govoplan-webui-deps.tsv"
|
|
export GOVOPLAN_DEPS
|
|
|
|
trap 'rm -rf "$WORK_ROOT"' EXIT
|
|
|
|
retry() {
|
|
local attempt status
|
|
for attempt in 1 2 3; do
|
|
if "$@"; then
|
|
return 0
|
|
fi
|
|
status=$?
|
|
if [[ "$attempt" == 3 ]]; then
|
|
return "$status"
|
|
fi
|
|
sleep $((attempt * 10))
|
|
done
|
|
}
|
|
|
|
cd "$WEBUI_DIR"
|
|
|
|
node <<'JS'
|
|
const fs = require("fs");
|
|
|
|
const pkg = JSON.parse(fs.readFileSync("package.json", "utf8"));
|
|
const rel = JSON.parse(fs.readFileSync("package.release.json", "utf8"));
|
|
const govoplanDeps = [];
|
|
const dependencies = {...(rel.dependencies || {})};
|
|
|
|
for (const [name, spec] of Object.entries(dependencies)) {
|
|
if (name.startsWith("@govoplan/")) {
|
|
govoplanDeps.push([name, spec]);
|
|
delete dependencies[name];
|
|
}
|
|
}
|
|
|
|
for (const key of ["devDependencies", "peerDependencies", "optionalDependencies", "overrides"]) {
|
|
if (rel[key]) pkg[key] = rel[key];
|
|
}
|
|
pkg.dependencies = dependencies;
|
|
|
|
fs.writeFileSync("package.json", JSON.stringify(pkg, null, 2) + "\n");
|
|
fs.writeFileSync(process.env.GOVOPLAN_DEPS, govoplanDeps.map((item) => item.join("\t")).join("\n") + "\n");
|
|
JS
|
|
|
|
rm -f package-lock.json
|
|
npm cache clean --force
|
|
retry npm install --prefer-online
|
|
|
|
module_paths=()
|
|
while IFS=$'\t' read -r package_name spec; do
|
|
[[ -n "${package_name:-}" ]] || continue
|
|
git_url="${spec%%#*}"
|
|
git_ref="${spec#*#}"
|
|
if [[ "$git_url" == "$spec" || -z "$git_ref" ]]; then
|
|
echo "Unsupported GovOPlaN WebUI git spec for $package_name: $spec" >&2
|
|
exit 1
|
|
fi
|
|
clone_url="${git_url#git+}"
|
|
clone_dir="$WORK_ROOT/${package_name#@govoplan/}"
|
|
echo "Installing $package_name from $clone_url#$git_ref"
|
|
retry git clone --depth 1 --branch "$git_ref" "$clone_url" "$clone_dir"
|
|
module_paths+=("file:$clone_dir")
|
|
done < "$GOVOPLAN_DEPS"
|
|
|
|
if [[ "${#module_paths[@]}" -gt 0 ]]; then
|
|
retry npm install --prefer-online --no-save --install-links "${module_paths[@]}"
|
|
fi
|