mirror of
https://github.com/Syngnat/GoNavi.git
synced 2026-06-21 22:14:02 +08:00
- 发布链路新增 driver release 资产自检,校验已发布二进制与 manifest revision/sha256 一致 - dev-build 与 release 工作流在复用已发布驱动前先校验实际资产,发现旧二进制混入时强制全量重建 - driver manifest 新增 sha256 字段,避免仅凭 source commit 与 manifest 一致就误判发布有效 - 驱动变更检测与全量重建判定纳入 release asset 校验脚本变更,确保链路修复提交会触发自愈重建 - 驱动下载优先使用 GitHub release asset API 地址,并对资产接口按 octet-stream 下载,降低 dev-latest 同名资产命中旧缓存的风险 - 保持 DuckDB 无主键编辑修复不回退,并通过 internal/db 与前端相关回归测试
97 lines
3.2 KiB
Bash
Executable File
97 lines
3.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
cd "$SCRIPT_DIR"
|
|
|
|
tmpdir="$(mktemp -d "${TMPDIR:-/tmp}/gonavi-force-global-driver-builds.XXXXXX")"
|
|
cleanup() {
|
|
rm -rf "$tmpdir"
|
|
}
|
|
trap cleanup EXIT
|
|
|
|
git init -q "$tmpdir"
|
|
mkdir -p "$tmpdir/tools" "$tmpdir/.github/workflows" "$tmpdir/internal/db"
|
|
cp tools/should-force-global-driver-builds.sh "$tmpdir/tools/should-force-global-driver-builds.sh"
|
|
cat >"$tmpdir/.github/workflows/dev-build.yml" <<'YAMLEOF'
|
|
name: Dev Build
|
|
YAMLEOF
|
|
cat >"$tmpdir/tools/package-driver-release-assets.py" <<'PYEOF'
|
|
print("package")
|
|
PYEOF
|
|
cat >"$tmpdir/tools/validate-driver-release-assets.py" <<'PYEOF'
|
|
print("validate")
|
|
PYEOF
|
|
cat >"$tmpdir/internal/db/duckdb_impl.go" <<'GOEOF'
|
|
package db
|
|
GOEOF
|
|
|
|
base_ref=""
|
|
cd "$tmpdir"
|
|
git add .
|
|
git -c user.name=GoNavi -c user.email=gonavi@example.test commit -q -m initial
|
|
base_ref="$(git rev-parse HEAD)"
|
|
|
|
(
|
|
cd "$tmpdir"
|
|
printf '\n# workflow change\n' >> .github/workflows/dev-build.yml
|
|
git add .github/workflows/dev-build.yml
|
|
git -c user.name=GoNavi -c user.email=gonavi@example.test commit -q -m 'workflow change'
|
|
actual="$(bash ./tools/should-force-global-driver-builds.sh --base "$base_ref" --head HEAD)"
|
|
if [[ "$actual" != "true" ]]; then
|
|
echo "expected workflow change to force global driver builds, got: ${actual:-<empty>}" >&2
|
|
exit 1
|
|
fi
|
|
)
|
|
|
|
(
|
|
cd "$tmpdir"
|
|
git reset --hard -q "$base_ref"
|
|
printf '\nprint("changed")\n' >> tools/package-driver-release-assets.py
|
|
git add tools/package-driver-release-assets.py
|
|
git -c user.name=GoNavi -c user.email=gonavi@example.test commit -q -m 'packaging change'
|
|
actual="$(bash ./tools/should-force-global-driver-builds.sh --base "$base_ref" --head HEAD)"
|
|
if [[ "$actual" != "true" ]]; then
|
|
echo "expected packaging change to force global driver builds, got: ${actual:-<empty>}" >&2
|
|
exit 1
|
|
fi
|
|
)
|
|
|
|
(
|
|
cd "$tmpdir"
|
|
git reset --hard -q "$base_ref"
|
|
printf '\nprint("changed")\n' >> tools/validate-driver-release-assets.py
|
|
git add tools/validate-driver-release-assets.py
|
|
git -c user.name=GoNavi -c user.email=gonavi@example.test commit -q -m 'release asset validation change'
|
|
actual="$(bash ./tools/should-force-global-driver-builds.sh --base "$base_ref" --head HEAD)"
|
|
if [[ "$actual" != "true" ]]; then
|
|
echo "expected release asset validation change to force global driver builds, got: ${actual:-<empty>}" >&2
|
|
exit 1
|
|
fi
|
|
)
|
|
|
|
(
|
|
cd "$tmpdir"
|
|
git reset --hard -q "$base_ref"
|
|
printf '\n// source-only change\n' >> internal/db/duckdb_impl.go
|
|
git add internal/db/duckdb_impl.go
|
|
git -c user.name=GoNavi -c user.email=gonavi@example.test commit -q -m 'duckdb source change'
|
|
actual="$(bash ./tools/should-force-global-driver-builds.sh --base "$base_ref" --head HEAD)"
|
|
if [[ "$actual" != "false" ]]; then
|
|
echo "expected source-only driver change not to force global driver builds, got: ${actual:-<empty>}" >&2
|
|
exit 1
|
|
fi
|
|
)
|
|
|
|
(
|
|
cd "$tmpdir"
|
|
actual="$(bash ./tools/should-force-global-driver-builds.sh --base all --head HEAD)"
|
|
if [[ "$actual" != "true" ]]; then
|
|
echo "expected base=all to force global driver builds, got: ${actual:-<empty>}" >&2
|
|
exit 1
|
|
fi
|
|
)
|
|
|
|
echo "should-force-global-driver-builds test passed"
|