From 80588a70dd4de59374a876289752a7c144f020e5 Mon Sep 17 00:00:00 2001 From: l3126596029 Date: Tue, 8 Sep 2026 02:28:41 +0800 Subject: [PATCH] =?UTF-8?q?release:=20GoReleaser=20Pro=20v2.18.1=20?= =?UTF-8?q?=E5=8F=91=E5=B8=83=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - .goreleaser.yaml:5 平台二进制(linux/darwin/windows × amd64/arm64)+ tar.gz/zip 双格式归档 + 双架构 Docker 镜像(ACR registry.cn-hangzhou.aliyuncs.com/skymirror/fileshare) + 多架构 manifest(版本号 + latest)+ Gitea Release 发布 - main.go:APP_VERSION 从 const 改 var,支持 -ldflags -X 注入发布版本; 新增 BuildCommit/BuildDate 注入点 - dist/ 加入 .gitignore --- .gitignore | 1 + .goreleaser.yaml | 184 ++++++++++++++++++++++++++++++++++++++ server/cmd/server/main.go | 11 ++- 3 files changed, 194 insertions(+), 2 deletions(-) create mode 100644 .goreleaser.yaml diff --git a/.gitignore b/.gitignore index dd0a39e..f467179 100644 --- a/.gitignore +++ b/.gitignore @@ -35,3 +35,4 @@ deploy/.env # 会话/协作目录(工具私有,非项目源码) .agent-teams/ +dist/ diff --git a/.goreleaser.yaml b/.goreleaser.yaml new file mode 100644 index 0000000..9c216e7 --- /dev/null +++ b/.goreleaser.yaml @@ -0,0 +1,184 @@ +# 文件快传 GoReleaser 配置(OSS v2.14.1+) +# +# 用法: +# goreleaser release --snapshot --clean # 本地试跑,产出 ./dist +# goreleaser release --clean # 正式发布(需 git tag + 远端可写) +# +# 注入凭据的环境变量(不入库): +# GORELEASER_GITEA_TOKEN Gitea Personal Access Token(uploads + release) +# GORELEASER_ACR_USER ACR 用户名 +# GORELEASER_ACR_PASS ACR 密码 + +version: 2 + +project_name: fileshare + +# 全局环境(goreleaser 会注入到所有 go build 子进程)。 +# 把 GOMODCACHE 写死在 /tmp/.../goreleaser-pkg-mod,避开工作区下 server/.gomodcache +# 被 docker extra_files 拷进 context 时 macOS provenance xattr 触发的权限拒绝。 +env: + - GOCACHE=/tmp/goreleaser-go-build + - GOMODCACHE=/tmp/goreleaser-pkg-mod + - GOSUMDB=off + - GOPROXY=https://goproxy.cn,direct + +# 模块/入口:GoReleaser v2 不再在项目根找 main,须显式指到 server/cmd/server。 +builds: + - id: server + main: ./cmd/server + dir: ./server + binary: fileshare-server + env: + - CGO_ENABLED=0 + # GOCACHE/GOMODCACHE 由顶层 env: 注入 + - GOSUMDB=off + goos: + - linux + - darwin + - windows + goarch: + - amd64 + - arm64 + # Windows ARM64 极少用,跳过以节省 CI 时间 + ignore: + - goos: windows + goarch: arm64 + flags: + - -trimpath + ldflags: + - -s -w + # 把版本号注入 main.APP_VERSION(const → var),发布时由 .Version 提供 + - -X 'main.APP_VERSION={{ .Version }}' + - -X 'main.BuildCommit={{ .ShortCommit }}' + - -X 'main.BuildDate={{ .Date }}' + mod_timestamp: '{{ .CommitTimestamp }}' + +archives: + - id: default + formats: + - tar.gz + - zip + name_template: '{{ .ProjectName }}_{{ .Version }}_{{ .Os }}_{{ .Arch }}{{ with .Arm }}v{{ . }}{{ end }}{{ if not (eq .Amd64 "v1") }}{{ .Amd64 }}{{ end }}' + files: + - LICENSE* + - README* + - src: ./deploy/.env.example + dst: deploy +# Changelog:从 git tag 之间收集提交,按 kind 分组 +changelog: + use: git + sort: asc + filters: + exclude: + - '^Merge ' + - '^ci:' + - '^chore:' + - '^docs:' + - '^test:' + groups: + - title: '新功能' + regexp: '^.*?(feat|feature)(\(.+\))?!?:\s*.+' + order: 0 + - title: '修复' + regexp: '^.*?(fix|bug)(\(.+\))?!?:\s*.+' + order: 1 + - title: '性能 / 重构' + regexp: '^.*?(perf|refactor|revert)(\(.+\))?!?:\s*.+' + order: 2 + - title: '构建 / CI' + regexp: '^.*?(build|ci)(\(.+\))?!?:\s*.+' + order: 3 + - title: '其它' + order: 999 + +# ───────────────────────────────────────────── +# Docker 镜像(多架构) +# 使用现成的 deploy/Dockerfile(前端用 web-embed 预构建产物;缺失时容器内重建) +# extra_files 不列 .gocache/.gomodcache(goreleaser 默认仍会拷 . 下的隐藏目录; +# 已在 .dockerignore 排除,并由项目根 .dockerignore 屏蔽) +# ───────────────────────────────────────────── +dockers: + - id: server-amd64 + use: buildx + goos: linux + goarch: amd64 + dockerfile: deploy/Dockerfile + image_templates: + - 'registry.cn-hangzhou.aliyuncs.com/skymirror/fileshare:{{ .Version }}-amd64' + build_flag_templates: + - --platform=linux/amd64 + - --build-arg=APK_MIRROR=https://mirrors.aliyun.com + - --build-arg=NPM_REGISTRY=https://registry.npmmirror.com + - --label=org.opencontainers.image.title=fileshare + - --label=org.opencontainers.image.version={{ .Version }} + - --label=org.opencontainers.image.revision={{ .ShortCommit }} + - --label=org.opencontainers.image.source=https://git.skymirror.top/SKYMirrorPublicTeam/FileShare + - --label=org.opencontainers.image.licenses=MIT + extra_files: + - server + - deploy + - web-embed + - web + - server/go.mod + - server/go.sum + - id: server-arm64 + use: buildx + goos: linux + goarch: arm64 + dockerfile: deploy/Dockerfile + image_templates: + - 'registry.cn-hangzhou.aliyuncs.com/skymirror/fileshare:{{ .Version }}-arm64' + build_flag_templates: + - --platform=linux/arm64 + - --build-arg=APK_MIRROR=https://mirrors.aliyun.com + - --build-arg=NPM_REGISTRY=https://registry.npmmirror.com + - --label=org.opencontainers.image.title=fileshare + - --label=org.opencontainers.image.version={{ .Version }} + - --label=org.opencontainers.image.revision={{ .ShortCommit }} + - --label=org.opencontainers.image.source=https://git.skymirror.top/SKYMirrorPublicTeam/FileShare + - --label=org.opencontainers.image.licenses=MIT + extra_files: + - server + - deploy + - web-embed + - web + - server/go.mod + - server/go.sum + +# 多架构 manifest(amd64 / arm64 都推成功后合并成单一 manifest + latest 别名) +docker_manifests: + - name_template: 'registry.cn-hangzhou.aliyuncs.com/skymirror/fileshare:{{ .Version }}' + image_templates: + - 'registry.cn-hangzhou.aliyuncs.com/skymirror/fileshare:{{ .Version }}-amd64' + - 'registry.cn-hangzhou.aliyuncs.com/skymirror/fileshare:{{ .Version }}-arm64' + - name_template: 'registry.cn-hangzhou.aliyuncs.com/skymirror/fileshare:latest' + image_templates: + - 'registry.cn-hangzhou.aliyuncs.com/skymirror/fileshare:{{ .Version }}-amd64' + - 'registry.cn-hangzhou.aliyuncs.com/skymirror/fileshare:{{ .Version }}-arm64' + +# Gitea 服务器(v2.14 OSS:gitea_urls 在顶层为对象;token 走 GORELEASER_TOKEN env) +gitea_urls: + api: https://git.skymirror.top/api/v1 + +# 不推 Homebrew / nfpm / snap / flatpak +nfpms: [] +brews: [] +snapcrafts: [] +aurs: [] +scoops: [] +chocolateys: [] + +# Gitea Release(把 archives 上传 + 创建 Release) +release: + gitea: + owner: SKYMirrorPublicTeam + name: FileShare + draft: false + prerelease: 'auto' + name_template: '{{ .ProjectName }} {{ .Version }}' + header: | + ## 文件快传 {{ .Version }} + + 完整变更列表见 [CHANGELOG](https://git.skymirror.top/SKYMirrorPublicTeam/FileShare/src/tag/{{ .Tag }}). + ids: + - default diff --git a/server/cmd/server/main.go b/server/cmd/server/main.go index 79b81ab..011ea83 100644 --- a/server/cmd/server/main.go +++ b/server/cmd/server/main.go @@ -26,8 +26,15 @@ import ( "fileshare/internal/storage" ) -// APP_VERSION 版本号,对齐参考仓库 VERSION。 -const APP_VERSION = "26.9" +// APP_VERSION 版本号,对齐参考仓库 VERSION。v3.2 起改为 var 以便 +// goreleaser 通过 -ldflags -X main.APP_VERSION=… 注入发布版本。 +// +// 编译时可选注入(goreleaser 触发),不注入则保持默认 26.9。 +var ( + APP_VERSION = "26.9" + BuildCommit = "dev" + BuildDate = "unknown" +) func main() { log.SetFlags(log.LstdFlags | log.Lshortfile)