6de5d52363
build / build (push) Successful in 51s
按使用者要求定的版本规则(自动升的是**开发标识**,发布版本与 tag 仍由人批准): - **开发号自动递增**:display_version(development) = `<正式版本的主.次>.<自 v<正式版本> 以来的提交数>` (正式 0.1.0 之后第 1 个提交 0.1.1、第 12 个 0.1.12;恰在发布提交上 = 正式号)。 它**不写进 CHANGELOG**(发布记录只在发版时动),由 git 算出来 ⇒ 每个提交都有自己的号、数字只增。 - **浅克隆不猜号**:`--depth` 会把条数算少 ⇒ 浅仓库里拒绝算号,退回 `<版本>-dev+g<短SHA>`; 检出步骤在仓库有 tag 时 `--unshallow` 补全历史。 - 接线三处齐全:`version.py --identity` → 门禁 `-X …CommitsSinceRelease=<n>`;Makefile 的 `COMMITS_SINCE_RELEASE`;Dockerfile 同名 build-arg;Go 侧新增 `CommitsSinceRelease` 与 DisplayVersion() 新规则;契约测试**交叉核对**"注入的提交数 == git 算出的"(防注入错号)。 - **首个正式版本 0.1.0**:CHANGELOG 的 `[Unreleased]` 提成 `## [0.1.0] - 2026-10-13`; 头部补"版本怎么走"两行;RELEASE_RUNBOOK 补递增规则与"下一次发布把次版本加一"。 - 发版预检新增:打印**当前开发号**,并挡住"候选正式版本 <= 当前开发号"(会把开发号当正式号;建议次版本加一)。 验证:version.py --self-test(含 tag 后第 2 个提交 = 0.2.2、恰在 tag 上 = 0.2.0、无 tag 不猜号); release_preflight --self-test(21 分支,含开发号两条);go test 本地三态 + 临时仓库 tag+2 提交实测 (Python 与 Go 都得出 0.2.2);反向夹具 85/0;make verify 15/15 success。
56 lines
3.6 KiB
Docker
56 lines
3.6 KiB
Docker
FROM golang:1.26-alpine AS build
|
||
WORKDIR /src
|
||
COPY go.mod go.sum ./
|
||
RUN go mod download
|
||
COPY cmd ./cmd
|
||
COPY internal ./internal
|
||
# 构建期身份:由调用方 --build-arg 传入。依据是仓库根 CHANGELOG.md 顶部的已发布版本
|
||
# (`python3 scripts/version.py --identity`),**不要手填**。不传就落成 dev / unknown —— 那是故意的:
|
||
# 一个显眼的 dev 好过一个看起来正常的假版本号(正本 §6.1)。
|
||
# BUILD_KIND 只有**显式的发布上下文**才传 release;普通构建一律 development,
|
||
# 产物的 DisplayVersion() 会是 dev+g<短SHA>(开发构建不许只显示上一正式版本号)。
|
||
# ⚠️ TODO:compose.yaml 还没把这三个 args 透传进来(改动会与在审的 PR #2 冲突),
|
||
# 所以当前由 compose 构建出的镜像会报 dev;透传后即报真实版本。
|
||
ARG VERSION=dev
|
||
ARG RELEASE_VERSION=
|
||
ARG BUILD_KIND=development
|
||
ARG COMMITS_SINCE_RELEASE=
|
||
ARG COMMIT_SHA=unknown
|
||
ARG BUILD_TIME=unknown
|
||
RUN LDFLAGS="-X knowledge-governance/internal/version.Number=${VERSION} -X knowledge-governance/internal/version.ReleaseVersion=${RELEASE_VERSION} -X knowledge-governance/internal/version.BuildKind=${BUILD_KIND} -X knowledge-governance/internal/version.CommitsSinceRelease=${COMMITS_SINCE_RELEASE} -X knowledge-governance/internal/version.CommitSHA=${COMMIT_SHA} -X knowledge-governance/internal/version.BuildTime=${BUILD_TIME}" \
|
||
&& CGO_ENABLED=0 GOOS=linux go build -trimpath -ldflags "$LDFLAGS" -o /out/api ./cmd/api \
|
||
&& CGO_ENABLED=0 GOOS=linux go build -trimpath -ldflags "$LDFLAGS" -o /out/worker ./cmd/worker \
|
||
&& CGO_ENABLED=0 GOOS=linux go build -trimpath -ldflags "$LDFLAGS" -o /out/release-worker ./cmd/release-worker \
|
||
&& CGO_ENABLED=0 GOOS=linux go build -trimpath -ldflags "$LDFLAGS" -o /out/test-publication-seed ./cmd/test-publication-seed \
|
||
&& CGO_ENABLED=0 GOOS=linux go build -trimpath -ldflags "$LDFLAGS" -o /out/test-weknora-e2e-report ./cmd/test-weknora-e2e-report \
|
||
&& CGO_ENABLED=0 GOOS=linux go build -trimpath -ldflags "$LDFLAGS" -o /out/test-weknora-probe ./cmd/test-weknora-probe
|
||
|
||
FROM alpine:3.22
|
||
ENV PYTHONDONTWRITEBYTECODE=1
|
||
RUN apk add --no-cache ca-certificates python3 postgresql-client curl openssh-client gcompat libc6-compat \
|
||
&& addgroup -g 65532 governance \
|
||
&& adduser -D -H -u 65532 -G governance governance
|
||
|
||
# ssh 客户端需要"本机 uid 有 passwd 条目"(否则报 No user exists for uid 1000);
|
||
# 备份计划的下发与读回都走 ssh,容器以 1000 运行,这里给该 uid 建一个名字。
|
||
RUN adduser -D -u 1000 -h /home/app appuser 2>/dev/null || true
|
||
# dws (DingTalk Workspace CLI) v1.0.63:版本+校验和固定(禁用 dws upgrade)。
|
||
# 官方产物是动态链接 glibc 的二进制,alpine(musl) 靠 gcompat/libc6-compat 运行,
|
||
# 已验证端到端取件并与 glibc 原生环境字节一致。构建期 `dws version` 即自检。
|
||
ARG DWS_VERSION=v1.0.63
|
||
ARG DWS_SHA256=78cab668bf671c17128ac55347627fb28f80c15b9c30c5f86e32e2b5ee6e34bc
|
||
RUN set -eux; \
|
||
curl -fsSL -o /tmp/dws.tgz \
|
||
"https://github.com/DingTalk-Real-AI/dingtalk-workspace-cli/releases/download/${DWS_VERSION}/dws-linux-amd64.tar.gz"; \
|
||
echo "${DWS_SHA256} /tmp/dws.tgz" | sha256sum -c -; \
|
||
tar -xzf /tmp/dws.tgz -C /tmp ./dws; \
|
||
install -m 0755 /tmp/dws /usr/local/bin/dws; \
|
||
rm -rf /tmp/dws.tgz /tmp/dws; \
|
||
dws version
|
||
WORKDIR /app
|
||
COPY --from=build /out/ /app/
|
||
COPY scripts/source_catalog_import.py scripts/live_catalog_refresh.py scripts/artifact_fetch.py \
|
||
scripts/axls_to_xlsx.py scripts/dws_error_map.py /app/scripts/
|
||
USER 65532:65532
|
||
CMD ["/app/api"]
|