基于GitHub Action构建Go项目并创建Release的替代方案咨询
解决方案
1. 替代actions/create-release的方案
目前主流且维护活跃的替代工具是softprops/action-gh-release,它支持上传构建产物、自动关联标签、自定义Release说明等核心功能,完全能满足你的需求。
2. 完善多平台构建的GitHub Action配置
下面是补全后的完整配置,同时支持Ubuntu和Windows平台构建,并自动将产物上传到Release:
name: Build and Create Release on: push: tags: - v* jobs: build: strategy: matrix: os: [ubuntu-latest, windows-latest] runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v3 - name: Set up Go uses: actions/setup-go@v4 with: go-version: '1.20' - name: Build Linux binary if: matrix.os == 'ubuntu-latest' run: go build -o main-linux main.go - name: Build Windows binary if: matrix.os == 'windows-latest' run: go build -o main-windows.exe main.go - name: Upload build artifact uses: actions/upload-artifact@v4 with: name: build-${{ matrix.os }} path: | main-linux main-windows.exe if-no-files-found: error release: needs: build runs-on: ubuntu-latest steps: - name: Download all build artifacts uses: actions/download-artifact@v4 with: path: artifacts - name: Create GitHub Release uses: softprops/action-gh-release@v1 with: files: | artifacts/build-ubuntu-latest/main-linux artifacts/build-windows-latest/main-windows.exe body: | ## 本次更新内容 - 支持Linux/Windows双平台构建 - 自动化发布流程 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
配置说明:
- 用
strategy.matrix同时触发Ubuntu和Windows的构建任务 - 根据系统生成对应后缀的二进制文件,避免文件名冲突
release任务依赖所有构建任务完成后,下载产物并上传到Release中
3. 基于Git提交的自动语义化版本方案
要实现自动语义化版本,需要先遵循Conventional Commits提交规范(比如feat: 新增用户登录功能对应minor版本,fix: 修复支付回调BUG对应patch版本),再配合工具自动生成版本号和Release说明:
步骤1:配置语义化版本工具
在项目根目录创建.releaserc.json配置文件:
{ "branches": ["main"], "plugins": [ "@semantic-release/commit-analyzer", "@semantic-release/release-notes-generator", "@semantic-release/github", "@semantic-release/git" ] }
步骤2:添加GitHub Action自动触发
name: Automated Semantic Release on: push: branches: [main] jobs: release: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 with: fetch-depth: 0 - name: Set up Node.js uses: actions/setup-node@v4 with: node-version: 20 - name: Install semantic-release dependencies run: npm install -g semantic-release @semantic-release/git @semantic-release/github - name: Run semantic-release env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: semantic-release
该配置会在main分支有新提交时,自动分析提交信息生成语义化版本号、创建标签并发布Release。
4. 手动创建版本标签是否属于不良实践?
手动创建版本标签不是不良实践,它的适用场景非常明确:
- 适合场景:
- 小型个人/团队项目,迭代节奏慢,版本规划清晰
- 需要精准控制版本号(比如发布重大里程碑版本、紧急安全修复版本)
- 劣势:
- 大型团队或高频迭代项目中,容易出现版本号冲突、遗漏更新说明的人为失误
- 无法自动化关联构建和发布流程,效率较低
建议:如果项目规模小,手动打标签完全够用;若团队规模扩大或迭代频率提升,可逐步过渡到自动语义化版本方案,兼顾效率和规范性。
内容的提问来源于stack exchange,提问作者RiBi
相关产品推荐
相关产品推荐

