From c98bee1ea4619c02a12dcd96b700ee73b16fb193 Mon Sep 17 00:00:00 2001 From: Codex User Date: Mon, 13 Jul 2026 15:35:07 +0800 Subject: [PATCH 1/4] fix coolify source builds --- deploy/docker-compose.yml | 6 ++++++ tools/test_docker_deployment.py | 9 +++++++++ 2 files changed, 15 insertions(+) diff --git a/deploy/docker-compose.yml b/deploy/docker-compose.yml index 22b13dc44839..15025141b1ef 100644 --- a/deploy/docker-compose.yml +++ b/deploy/docker-compose.yml @@ -17,6 +17,12 @@ services: # =========================================================================== sub2api: image: ${SUB2API_IMAGE:-weishaw/sub2api:latest} + build: + context: .. + dockerfile: deploy/Dockerfile + args: + VERSION: ${SOURCE_COMMIT:-} + COMMIT: ${SOURCE_COMMIT:-docker} restart: unless-stopped ulimits: nofile: diff --git a/tools/test_docker_deployment.py b/tools/test_docker_deployment.py index 608f769e363b..ff6f505e5986 100644 --- a/tools/test_docker_deployment.py +++ b/tools/test_docker_deployment.py @@ -35,6 +35,15 @@ def test_compose_image_can_be_overridden(self): if "image: weishaw/sub2api" in text: self.assertIn("${SUB2API_IMAGE:-", text, path) + def test_production_compose_builds_from_local_source(self): + with (DEPLOY / "docker-compose.yml").open("r", encoding="utf-8") as handle: + compose = yaml.safe_load(handle) + service = compose["services"]["sub2api"] + self.assertIn("build", service) + self.assertEqual(service["build"]["context"], "..") + self.assertEqual(service["build"]["dockerfile"], "deploy/Dockerfile") + self.assertEqual(service["build"]["args"]["COMMIT"], "${SOURCE_COMMIT:-docker}") + def test_compose_files_do_not_define_custom_networks(self): for path in COMPOSE_FILES: with path.open("r", encoding="utf-8") as handle: From 030dfcde4ec5a5f067ee8da43476b5023828847e Mon Sep 17 00:00:00 2001 From: Codex User Date: Mon, 13 Jul 2026 15:51:28 +0800 Subject: [PATCH 2/4] fix coolify build context --- deploy/docker-compose.yml | 2 +- tools/test_docker_deployment.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/deploy/docker-compose.yml b/deploy/docker-compose.yml index 15025141b1ef..a43bb36bedb3 100644 --- a/deploy/docker-compose.yml +++ b/deploy/docker-compose.yml @@ -18,7 +18,7 @@ services: sub2api: image: ${SUB2API_IMAGE:-weishaw/sub2api:latest} build: - context: .. + context: . dockerfile: deploy/Dockerfile args: VERSION: ${SOURCE_COMMIT:-} diff --git a/tools/test_docker_deployment.py b/tools/test_docker_deployment.py index ff6f505e5986..47307b763d88 100644 --- a/tools/test_docker_deployment.py +++ b/tools/test_docker_deployment.py @@ -40,7 +40,7 @@ def test_production_compose_builds_from_local_source(self): compose = yaml.safe_load(handle) service = compose["services"]["sub2api"] self.assertIn("build", service) - self.assertEqual(service["build"]["context"], "..") + self.assertEqual(service["build"]["context"], ".") self.assertEqual(service["build"]["dockerfile"], "deploy/Dockerfile") self.assertEqual(service["build"]["args"]["COMMIT"], "${SOURCE_COMMIT:-docker}") From 9dfa661ab74b805f6b066d4ec90d68de3041653b Mon Sep 17 00:00:00 2001 From: Codex User Date: Mon, 13 Jul 2026 16:24:52 +0800 Subject: [PATCH 3/4] fix release docker version fallback --- backend/scripts/resolve-version.sh | 15 --------------- deploy/Dockerfile | 4 ++-- tools/test_docker_deployment.py | 5 +++++ 3 files changed, 7 insertions(+), 17 deletions(-) diff --git a/backend/scripts/resolve-version.sh b/backend/scripts/resolve-version.sh index 7e3ac5834894..48a116068c6a 100755 --- a/backend/scripts/resolve-version.sh +++ b/backend/scripts/resolve-version.sh @@ -3,21 +3,6 @@ set -eu SCRIPT_DIR="$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)" BACKEND_DIR="$(CDPATH= cd -- "$SCRIPT_DIR/.." && pwd)" -REPO_DIR="$(CDPATH= cd -- "$BACKEND_DIR/.." && pwd)" VERSION_FILE="$BACKEND_DIR/cmd/server/VERSION" -# Prefer the exact release tag when building from a tagged checkout so -# source builds from vX.Y.Z don't inherit the previous VERSION file value. -if command -v git >/dev/null 2>&1; then - TAG="$( - git -C "$REPO_DIR" describe --tags --exact-match --match 'v[0-9]*' 2>/dev/null || \ - git -C "$REPO_DIR" describe --tags --exact-match --match '[0-9]*' 2>/dev/null || \ - true - )" - if [ -n "$TAG" ]; then - printf '%s\n' "${TAG#v}" - exit 0 - fi -fi - printf '%s\n' "$(tr -d '\r\n' < "$VERSION_FILE")" diff --git a/deploy/Dockerfile b/deploy/Dockerfile index 9a0801e14be7..f682fcf3b5b8 100644 --- a/deploy/Dockerfile +++ b/deploy/Dockerfile @@ -68,9 +68,9 @@ COPY backend/ ./ COPY --from=frontend-builder /app/backend/internal/web/dist ./internal/web/dist # Build the binary (BuildType=release for CI builds, embed frontend) -# Version precedence: build arg VERSION > exact git tag > cmd/server/VERSION +# Version precedence: build arg VERSION > cmd/server/VERSION RUN VERSION_VALUE="${VERSION}" && \ - if [ -z "${VERSION_VALUE}" ]; then VERSION_VALUE="$(./scripts/resolve-version.sh)"; fi && \ + if [ -z "${VERSION_VALUE}" ]; then VERSION_VALUE="$(tr -d '\r\n' < ./cmd/server/VERSION)"; fi && \ DATE_VALUE="${DATE:-$(date -u +%Y-%m-%dT%H:%M:%SZ)}" && \ CGO_ENABLED=0 GOOS=linux go build \ -tags embed \ diff --git a/tools/test_docker_deployment.py b/tools/test_docker_deployment.py index 47307b763d88..c9352b09e5f4 100644 --- a/tools/test_docker_deployment.py +++ b/tools/test_docker_deployment.py @@ -44,6 +44,11 @@ def test_production_compose_builds_from_local_source(self): self.assertEqual(service["build"]["dockerfile"], "deploy/Dockerfile") self.assertEqual(service["build"]["args"]["COMMIT"], "${SOURCE_COMMIT:-docker}") + def test_release_dockerfile_version_fallback_uses_version_file(self): + text = (DEPLOY / "Dockerfile").read_text(encoding="utf-8") + self.assertNotIn("./scripts/resolve-version.sh", text) + self.assertIn("cmd/server/VERSION", text) + def test_compose_files_do_not_define_custom_networks(self): for path in COMPOSE_FILES: with path.open("r", encoding="utf-8") as handle: From 78255ea9ee53ca64f712d54a843e4097274043f1 Mon Sep 17 00:00:00 2001 From: Codex User Date: Mon, 13 Jul 2026 16:38:00 +0800 Subject: [PATCH 4/4] fix go module proxy defaults --- deploy/Dockerfile | 4 ++-- deploy/docker-compose.yml | 2 ++ tools/test_docker_deployment.py | 2 ++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/deploy/Dockerfile b/deploy/Dockerfile index f682fcf3b5b8..41a9431ab50e 100644 --- a/deploy/Dockerfile +++ b/deploy/Dockerfile @@ -46,8 +46,8 @@ FROM ${GOLANG_IMAGE} AS backend-builder ARG VERSION= ARG COMMIT=docker ARG DATE -ARG GOPROXY -ARG GOSUMDB +ARG GOPROXY=https://goproxy.cn,direct +ARG GOSUMDB=sum.golang.google.cn ENV GOPROXY=${GOPROXY} ENV GOSUMDB=${GOSUMDB} diff --git a/deploy/docker-compose.yml b/deploy/docker-compose.yml index a43bb36bedb3..bde085429b28 100644 --- a/deploy/docker-compose.yml +++ b/deploy/docker-compose.yml @@ -23,6 +23,8 @@ services: args: VERSION: ${SOURCE_COMMIT:-} COMMIT: ${SOURCE_COMMIT:-docker} + GOPROXY: ${GOPROXY:-https://goproxy.cn,direct} + GOSUMDB: ${GOSUMDB:-sum.golang.google.cn} restart: unless-stopped ulimits: nofile: diff --git a/tools/test_docker_deployment.py b/tools/test_docker_deployment.py index c9352b09e5f4..304ad1544fbb 100644 --- a/tools/test_docker_deployment.py +++ b/tools/test_docker_deployment.py @@ -43,6 +43,8 @@ def test_production_compose_builds_from_local_source(self): self.assertEqual(service["build"]["context"], ".") self.assertEqual(service["build"]["dockerfile"], "deploy/Dockerfile") self.assertEqual(service["build"]["args"]["COMMIT"], "${SOURCE_COMMIT:-docker}") + self.assertEqual(service["build"]["args"]["GOPROXY"], "${GOPROXY:-https://goproxy.cn,direct}") + self.assertEqual(service["build"]["args"]["GOSUMDB"], "${GOSUMDB:-sum.golang.google.cn}") def test_release_dockerfile_version_fallback_uses_version_file(self): text = (DEPLOY / "Dockerfile").read_text(encoding="utf-8")