You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 20:22:37