* feat: migrate tooling and runtimes to bun * fix: serialize act installs and adapt backup checks * fix: finish bun scripts and rootless act setup * fix: support bun images in runtime benchmarks * fix: keep a single bun toolchain configuration * fix: include docs mascot sources in workshop build * docs: use bun in remaining tool commands * fix: complete bun sqlite development tooling * docs: explain sqlite development adapter * fix: align remaining commands and local ci validation * fix: use renovate regex fallback with bun * fix: finalize bun sqlite connections during cleanup * fix: preserve sqlite foreign key enforcement * fix: align docker build frontends * fix: prepare release versions with bun * Add Bun benchmarks and preserve SQLite connection defaults * Benchmark Bun installs, conflicts and production workloads * Force Bun workspace tools and HTTP/1.1 upstream streaming * Exclude benchmark evidence from Docker contexts * Expose branch benchmarks through CI * Verify hydrated widget data in production benchmarks * Measure image archives and document benchmark protocol * Audit dependency sharing across every workspace * Pin pnpm for nested baseline benchmark scripts * Preserve nested manager pinning on benchmark resume * Include application and runtime image footprints * Fail benchmark gates on candidate command errors * Report complete build overhead and sampled memory bounds * Validate migration comparisons across pinned revisions * Record configurable runtime memory budgets * Retain out-of-memory kills in runtime budget probes * Reject OOM events consistently across runtime metrics * Record complete Bun migration benchmarks * Record memory diagnosis and correct Turbo caching * Use Bun package management while preserving Node runtimes * Keep native build fallbacks and exclude development artifacts * Fix Node ESM metadata and isolate local CI configuration * Measure development performance and isolate act environment * Support isolated environment files in rootless act * Validate the full migration range with act * Preserve native SQLite binding for bundled migrations * Use documented dev defaults and report benchmark scope * Validate dev defaults and isolate restart measurements * Record package-manager and development benchmarks * Keep benchmark measurements and link full command artifacts * Clean up temporary act environment files * Validate Node runtimes in package-manager comparisons * Validate every workspace in manual CI runs * Retain patched nested brace expansion versions * Complete package-manager and Node performance report * Normalize archived benchmark logs * Record final hosted validation * Cache both Next builds with platform isolation * Prime cache with write-only mode * Split Next artifacts below Cloudflare upload limit * Assemble coherent standalone cache outputs * Preserve traced middleware entrypoints * Assemble traced directory links before files * Separate cached dependencies from assembled output * Record signed Turbo cache benchmarks * Remove archived benchmark captures Full benchmark evidence is preserved at 8f7d3bcd14109bfb13fa664d31710b88d820ad66. * Remove migration benchmark harness * fix: correct migration launch and local Act prerequisites * Consolidate Turbo caches and production artifacts * Exclude generated files from Docker cache inputs * fix: address Bun migration review findings * fix: check restored compiler bundle manifests
121 lines
3.3 KiB
Bash
121 lines
3.3 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
set -euo pipefail
|
|
|
|
mode="${1:-all}"
|
|
case "$mode" in
|
|
fast) job="fast-gate" ;;
|
|
docker) job="container" ;;
|
|
all) job="" ;;
|
|
cleanup) job="cleanup" ;;
|
|
*)
|
|
echo "Usage: $0 {fast|docker|all|cleanup}" >&2
|
|
exit 2
|
|
;;
|
|
esac
|
|
|
|
command -v act >/dev/null 2>&1 || {
|
|
echo "act is required: https://nektosact.com/installation/index.html" >&2
|
|
exit 1
|
|
}
|
|
|
|
docker info >/dev/null 2>&1 || {
|
|
echo "Docker is not running" >&2
|
|
exit 1
|
|
}
|
|
|
|
if [[ -z "${DOCKER_HOST:-}" ]]; then
|
|
DOCKER_HOST=$(docker context inspect --format '{{.Endpoints.docker.Host}}' 2>/dev/null || true)
|
|
export DOCKER_HOST
|
|
fi
|
|
|
|
head_sha=$(git rev-parse HEAD)
|
|
head_ref=$(git branch --show-current)
|
|
head_ref=${head_ref:-act-local}
|
|
event_file=$(mktemp "${TMPDIR:-/tmp}/homarr-act-event.XXXXXX")
|
|
environment_file=$(mktemp "${TMPDIR:-/tmp}/homarr-act-env.XXXXXX")
|
|
trap 'rm -f "$event_file" "$environment_file"' EXIT
|
|
|
|
json_escape() { printf '%s' "$1" | sed 's/\\/\\\\/g; s/"/\\"/g; s/\t/\\t/g'; }
|
|
|
|
if [[ "$mode" == "cleanup" ]]; then
|
|
event_name="workflow_dispatch"
|
|
cat >"$event_file" <<EOF
|
|
{
|
|
"inputs": { "operation": "cleanup", "pr_number": "1", "ref": "" },
|
|
"repository": { "full_name": "homarr-labs/homarr" }
|
|
}
|
|
EOF
|
|
elif [[ "$mode" == "docker" || "$mode" == "all" ]]; then
|
|
event_name="workflow_dispatch"
|
|
cat >"$event_file" <<EOF
|
|
{
|
|
"inputs": { "operation": "validate", "ref": "$head_sha" },
|
|
"repository": { "full_name": "homarr-labs/homarr" }
|
|
}
|
|
EOF
|
|
else
|
|
base_sha=$(git merge-base origin/dev HEAD)
|
|
event_name="pull_request"
|
|
safe_ref=$(json_escape "$head_ref")
|
|
cat >"$event_file" <<EOF
|
|
{
|
|
"action": "synchronize",
|
|
"number": 1,
|
|
"repository": { "full_name": "homarr-labs/homarr" },
|
|
"pull_request": {
|
|
"number": 1,
|
|
"draft": false,
|
|
"base": { "sha": "$base_sha", "ref": "dev" },
|
|
"head": {
|
|
"sha": "$head_sha",
|
|
"ref": "$safe_ref",
|
|
"repo": { "full_name": "homarr-labs/homarr" }
|
|
}
|
|
}
|
|
}
|
|
EOF
|
|
fi
|
|
|
|
runner_image="${ACT_RUNNER_IMAGE:-catthehacker/ubuntu:act-latest}"
|
|
args=(
|
|
"$event_name"
|
|
--workflows .github/workflows/ci.yml
|
|
--eventpath "$event_file"
|
|
--platform "ubuntu-latest=$runner_image"
|
|
--container-architecture linux/amd64
|
|
--env-file /dev/null
|
|
--bind
|
|
--env "DB_DRIVER=better-sqlite3"
|
|
--env "TURBO_CACHE_DIR=$PWD/.turbo/cache"
|
|
# Jobs share the dependency volume; installs must not race.
|
|
--concurrent-jobs 1
|
|
)
|
|
|
|
# Ryuk mounts the host socket; rootless runners also need a reachable host address.
|
|
if [[ "$DOCKER_HOST" == unix://* ]]; then
|
|
args+=(--env "TESTCONTAINERS_DOCKER_SOCKET_OVERRIDE=${DOCKER_HOST#unix://}")
|
|
fi
|
|
if [[ -n "${ACT_TESTCONTAINERS_HOST:-}" ]]; then
|
|
args+=(--env "TESTCONTAINERS_HOST_OVERRIDE=$ACT_TESTCONTAINERS_HOST")
|
|
fi
|
|
|
|
if [[ -n "$job" ]]; then
|
|
args+=(--job "$job")
|
|
fi
|
|
|
|
git_common_dir=$(cd "$(git rev-parse --git-common-dir)" && pwd)
|
|
# Bun loads .env automatically; reproduce GitHub's checkout without local settings.
|
|
container_options="--volume $environment_file:$PWD/.env --volume homarr-act-bun-1-4-2-node-24-18-0-modules:$PWD/node_modules --volume homarr-act-bun-cache:/root/.bun/install/cache"
|
|
case "$git_common_dir" in
|
|
"$PWD" | "$PWD"/*) ;;
|
|
*) container_options="$container_options --volume $git_common_dir:$git_common_dir:ro" ;;
|
|
esac
|
|
args+=(--container-options "$container_options")
|
|
|
|
if [[ -n "${ACT_SECRET_FILE:-}" ]]; then
|
|
args+=(--secret-file "$ACT_SECRET_FILE")
|
|
fi
|
|
|
|
act "${args[@]}"
|