From df3e665978193a19f2d8c59ba61acb329a37201e Mon Sep 17 00:00:00 2001 From: Arunavo Ray Date: Fri, 6 Mar 2026 08:19:44 +0530 Subject: [PATCH] fix: bump Bun to 1.3.10 and harden startup for non-AVX CPUs (#213) Bun 1.3.9 crashes with a segfault on CPUs without AVX support due to a WASM IPInt bug (oven-sh/bun#27340), fixed in 1.3.10 via oven-sh/bun#26922. - Bump Bun from 1.3.9 to 1.3.10 in Dockerfile, CI workflows, and packageManager - Skip env config script when no GitHub/Gitea env vars are set - Make startup scripts (env-config, recovery, repair) fault-tolerant so a crash in a non-critical script doesn't abort the entrypoint via set -e --- .github/workflows/astro-build-test.yml | 2 +- .github/workflows/e2e-tests.yml | 2 +- Dockerfile | 4 +-- docker-entrypoint.sh | 47 +++++++++++++++----------- package.json | 2 +- 5 files changed, 33 insertions(+), 24 deletions(-) diff --git a/.github/workflows/astro-build-test.yml b/.github/workflows/astro-build-test.yml index 58a94f4..4ee8086 100644 --- a/.github/workflows/astro-build-test.yml +++ b/.github/workflows/astro-build-test.yml @@ -33,7 +33,7 @@ jobs: - name: Setup Bun uses: oven-sh/setup-bun@v1 with: - bun-version: '1.3.6' + bun-version: '1.3.10' - name: Check lockfile and install dependencies run: | diff --git a/.github/workflows/e2e-tests.yml b/.github/workflows/e2e-tests.yml index a89d2e4..1c6170f 100644 --- a/.github/workflows/e2e-tests.yml +++ b/.github/workflows/e2e-tests.yml @@ -40,7 +40,7 @@ env: FAKE_GITHUB_PORT: 4580 GIT_SERVER_PORT: 4590 APP_PORT: 4321 - BUN_VERSION: "1.3.6" + BUN_VERSION: "1.3.10" jobs: e2e-tests: diff --git a/Dockerfile b/Dockerfile index c83c8b5..74351f0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ # syntax=docker/dockerfile:1.4 -FROM oven/bun:1.3.9-debian AS base +FROM oven/bun:1.3.10-debian AS base WORKDIR /app RUN apt-get update && apt-get install -y --no-install-recommends \ python3 make g++ gcc wget sqlite3 openssl ca-certificates \ @@ -26,7 +26,7 @@ COPY bun.lock* ./ RUN bun install --production --omit=peer --frozen-lockfile # ---------------------------- -FROM oven/bun:1.3.9-debian AS runner +FROM oven/bun:1.3.10-debian AS runner WORKDIR /app RUN apt-get update && apt-get install -y --no-install-recommends \ git git-lfs wget sqlite3 openssl ca-certificates \ diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh index 4e25c3e..5698269 100644 --- a/docker-entrypoint.sh +++ b/docker-entrypoint.sh @@ -139,16 +139,29 @@ fi # Initialize configuration from environment variables if provided echo "Checking for environment configuration..." -if [ -f "dist/scripts/startup-env-config.js" ]; then - echo "Loading configuration from environment variables..." - bun dist/scripts/startup-env-config.js - ENV_CONFIG_EXIT_CODE=$? -elif [ -f "scripts/startup-env-config.ts" ]; then - echo "Loading configuration from environment variables..." - bun scripts/startup-env-config.ts - ENV_CONFIG_EXIT_CODE=$? + +# Only run the env config script if relevant env vars are set +# This avoids spawning a heavy Bun process on memory-constrained systems +HAS_ENV_CONFIG=false +if [ -n "$GITHUB_USERNAME" ] || [ -n "$GITHUB_TOKEN" ] || [ -n "$GITEA_URL" ] || [ -n "$GITEA_USERNAME" ] || [ -n "$GITEA_TOKEN" ]; then + HAS_ENV_CONFIG=true +fi + +if [ "$HAS_ENV_CONFIG" = "true" ]; then + if [ -f "dist/scripts/startup-env-config.js" ]; then + echo "Loading configuration from environment variables..." + bun dist/scripts/startup-env-config.js || ENV_CONFIG_EXIT_CODE=$? + ENV_CONFIG_EXIT_CODE=${ENV_CONFIG_EXIT_CODE:-0} + elif [ -f "scripts/startup-env-config.ts" ]; then + echo "Loading configuration from environment variables..." + bun scripts/startup-env-config.ts || ENV_CONFIG_EXIT_CODE=$? + ENV_CONFIG_EXIT_CODE=${ENV_CONFIG_EXIT_CODE:-0} + else + echo "Environment configuration script not found. Skipping." + ENV_CONFIG_EXIT_CODE=0 + fi else - echo "Environment configuration script not found. Skipping." + echo "No GitHub/Gitea environment variables found, skipping env config initialization." ENV_CONFIG_EXIT_CODE=0 fi @@ -161,17 +174,15 @@ fi # Run startup recovery to handle any interrupted jobs echo "Running startup recovery..." +RECOVERY_EXIT_CODE=0 if [ -f "dist/scripts/startup-recovery.js" ]; then echo "Running startup recovery using compiled script..." - bun dist/scripts/startup-recovery.js --timeout=30000 - RECOVERY_EXIT_CODE=$? + bun dist/scripts/startup-recovery.js --timeout=30000 || RECOVERY_EXIT_CODE=$? elif [ -f "scripts/startup-recovery.ts" ]; then echo "Running startup recovery using TypeScript script..." - bun scripts/startup-recovery.ts --timeout=30000 - RECOVERY_EXIT_CODE=$? + bun scripts/startup-recovery.ts --timeout=30000 || RECOVERY_EXIT_CODE=$? else echo "Warning: Startup recovery script not found. Skipping recovery." - RECOVERY_EXIT_CODE=0 fi # Log recovery result @@ -185,17 +196,15 @@ fi # Run repository status repair to fix any inconsistent mirroring states echo "Running repository status repair..." +REPAIR_EXIT_CODE=0 if [ -f "dist/scripts/repair-mirrored-repos.js" ]; then echo "Running repository repair using compiled script..." - bun dist/scripts/repair-mirrored-repos.js --startup - REPAIR_EXIT_CODE=$? + bun dist/scripts/repair-mirrored-repos.js --startup || REPAIR_EXIT_CODE=$? elif [ -f "scripts/repair-mirrored-repos.ts" ]; then echo "Running repository repair using TypeScript script..." - bun scripts/repair-mirrored-repos.ts --startup - REPAIR_EXIT_CODE=$? + bun scripts/repair-mirrored-repos.ts --startup || REPAIR_EXIT_CODE=$? else echo "Warning: Repository repair script not found. Skipping repair." - REPAIR_EXIT_CODE=0 fi # Log repair result diff --git a/package.json b/package.json index 41e6649..f72d560 100644 --- a/package.json +++ b/package.json @@ -119,5 +119,5 @@ "tsx": "^4.21.0", "vitest": "^4.0.18" }, - "packageManager": "bun@1.3.3" + "packageManager": "bun@1.3.10" }