发布于 2026-01-06 0 阅读
0

🚀 使用 GitHub Action 以最快、最简便的方式发布您的 Go 项目 Create Go App CLI

🚀 使用 GitHub Action 以最快、最简便的方式发布您的 Go 项目

创建 Go 应用 CLI

介绍

开发者世界,大家好!😉 继续介绍如何使用优秀的 CI/CD 工具 GitHub Actions 实现例行自动化的系列文章。

是时候实现用 Go 语言编写的应用程序的自动化发布了!

📝 目录

🤔 我们将实现哪些自动化?

如果你曾经面临过将用 Go 语言编写的项目发布到不同平台/操作系统的挑战,你肯定已经知道会遇到哪些问题。如果没有,我将列举一些:

  • 你需要不断监控每个操作系统的特性(例如,路径中的特定斜杠)。
  • 您需要手动创建归档文件并将其上传到 GitHub 上的发布页面。
  • 你需要查看所有提交记录才能创建CHANGELOG新版本。
  • 还有更多!

那么,如果我告诉你,有一个工具可以让你在仓库中创建标签后自动完成所有这些(以及更多)操作,你会怎么想?

我没开玩笑,它真的可以让你用GoReleaserGitHub Actions 完成所有这些操作👇

GitHub 标志 goreleaser / goreleaser-动作

GitHub Action for GoReleaser

GoReleaser 标志

GoReleaser 行动

GitHub Action for GoReleaser

GitHub 发布 GitHub 市场 测试工作流程 Codecov


GoRelease 操作

用法

GoReleaser Action 运行goreleaser,请参考其文档以了解更多关于如何自定义 GoReleaser 的功能的信息。

工作流程

name: goreleaser

on:
  pull_request:
  push:

permissions:
  contents: write

jobs:
  goreleaser:
    runs-on: ubuntu-latest
    steps:
      -
        name: Checkout
        uses: actions/checkout@v4
        with:
          fetch-depth: 0
      -
        name: Set up Go
        uses: actions/setup-go@v5
      -
        name: Run GoReleaser
        uses: goreleaser/goreleaser-action@v6
        with:
          # either 'goreleaser' (default) or 'goreleaser-pro'
          distribution: goreleaser
          # 'latest', 'nightly', or a semver
          version: '~> v2'
          args: release --clean
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          # Your GoReleaser Pro key, if you are using the 'goreleaser-pro' distribution
          # GORELEASER_KEY: ${{ secrets.GORELEASER_KEY }}
Enter fullscreen mode Exit fullscreen mode

重要的

↑ 目录

👀 仓库结构

简而言之,本项目将包含一个非常简单的功能:

package main

import "fmt"

func main() {
    fmt.Println("Hi, DEV World! 😉")
}
Enter fullscreen mode Exit fullscreen mode

存储库结构就这么简单:

.
├── .github
│   └── workflows
│       └── release_build.yml  # <-- GitHub Action
└── main.go                    # <-- main function
Enter fullscreen mode Exit fullscreen mode

↑ 目录

🤖 配置 GitHub Action

接下来,让我们来看看故事的主角。看看这个文件的清单release_build.yml,里面已经有很多熟悉的元素了(如果你读过我之前关于 GitHub Action 的文章的话😏):

name: Release Go project

on:
  push:
    tags:
      - "*" # triggers only if push new tag version, like `0.8.4` or else

jobs:
  build:
    name: GoReleaser build
    runs-on: ubuntu-latest

    steps:
      - name: Check out code into the Go module directory
        uses: actions/checkout@v2
        with:
          fetch-depth: 0 # See: https://goreleaser.com/ci/actions/

      - name: Set up Go 1.14
        uses: actions/setup-go@v2
        with:
          go-version: 1.14
        id: go

      - name: Run GoReleaser
        uses: goreleaser/goreleaser-action@master
        with:
          version: latest
          args: release --rm-dist
        env:
          GITHUB_TOKEN: ${{ secrets.GO_RELEASER_GITHUB_TOKEN }}
Enter fullscreen mode Exit fullscreen mode

是的,GitHub 会自动创建一个密钥供您在工作流程中使用,但我建议您在此处GITHUB_TOKEN创建带有repo作用域的自定义令牌

GITHUB_TOKEN

现在,创建一个新的 GitHub 密钥(GO_RELEASER_GITHUB_TOKEN以我为例):

GitHub 密钥

↑ 目录

✅故障排除

如果包含函数的文件main()不在代码仓库的根目录下,GoReleaser将会报错。因此,您需要在步骤设置中指定正确的目录,例如像这样:

# ...

    steps:

      # ...

      - name: Run GoReleaser
        uses: goreleaser/goreleaser-action@master
        with:
          version: latest
          args: release --rm-dist
          workdir: ./cmd/myapp # <-- path to directory with main() func
        env:
          GITHUB_TOKEN: ${{ secrets.GO_RELEASER_GITHUB_TOKEN }}
Enter fullscreen mode Exit fullscreen mode

↑ 目录

🚀 释放时刻到了!

创建带有标签(在我的例子中是0.8.4)的新版本,然后转到“操作”页面以跟进该任务:

发布者工作

成功完成工作后,请前往发布页面查看精彩结果:CHANGELOG包含您所有提交(两个版本之间)、checksums.txt文件和上传的归档文件,以及适用于所有平台的已编译应用程序!

发布页面

就这样!就这么简单!🎉

↑ 目录

🎯 真实案例

如果上面的截图还不够清晰,我邀请您看看我的一个项目,其中我GoReleaser实际运用了动作捕捉技术:

GitHub 标志 创建 Go 应用/命令行

✨ 为任何资质的开发人员提供了一个完整且独立的解决方案,只需运行一条 CLI 命令即可创建具有后端 (Go)、前端 (JavaScript、TypeScript) 和部署自动化 (Ansible、Docker) 的生产就绪项目。

创建 Go 应用

创建 Go 应用 CLI

Go 版本 去报告 代码覆盖率
维基百科 执照

只需运行一条命令,即可创建一个全新的生产就绪项目,该项目包含后端(Golang)、前端(JavaScript、TypeScript)以及自动化部署(Ansible、Docker)。您可以专注于编写代码思考业务逻辑!CLI 将处理其余的一切。

⚡️快速入门

首先,下载并安装Go 语言1.21需要 8.0 或更高版本。

👆 您还可以通过其他 Go 版本使用Create Go App CLI1.16 : ,1.17

安装方法是使用以下go install命令:

go install github.com/create-go-app/cli/v4/cmd/cgapp@latest
Enter fullscreen mode Exit fullscreen mode

或者,如果您想下载现成的软件包请查看存储库的发布页面debrpmapkArch Linux

此外,GNU/Linux 和 macOS 用户还可以通过Homebrew安装

# Tap a new formula:
brew tap create-go-app/tap

# Installation:
brew install create-go-app/tap/cgapp
Enter fullscreen mode Exit fullscreen mode

让我们通过交互式控制台用户界面(简称CUI)创建一个新项目……

↑ 目录

💬 问题以加深理解

  1. GitHub Actions 配置中的哪个参数触发了作业?
  2. 为什么我们需要fetch-depth: 0actions/checkout行动制定定义?
  3. -rm-dist步骤中的论证是什么意思Run GoReleaser

↑ 目录

✏️ 独立完成的练习

  • 请用你自己的 Golang 项目重复文章中的所有内容。请在下方评论区分享你的成果并附上你的简短网站的链接!
  • 更改触发值,使其仅适用于主版本。请点击此处了解更多关于软件版本控制的信息。

↑ 目录

照片/图像由

  • GoReleaser Action 存储库和网站(链接1、2
  • GitHub 仓库设置(链接

PS

如果你想在这个博客上看到更多类似的文章,请在下方留言并订阅我。谢谢!😻

❗️您可以通过Boosty平台支持我,既可以长期支持,也可以一次性支持。所有收益都将用于支持我的开源软件项目,并激励我为社区创作新的产品和文章。

在Boosty上支持我

当然,您也可以帮助我让开发者的工作变得更好!只需以贡献者的身份加入我的项目即可。很简单!

我最需要你帮助(和点赞)的项目👇

  • 🔥 gowebly:一款新一代 CLI 工具,可轻松使用 Go 在后端创建出色的 Web 应用程序,使用 htmx、hyperscript 或 Alpine.js 以及最流行的 CSS 框架在前端进行开发。
  • create-go-app:通过运行一条 CLI 命令,创建一个包含 Go 后端、前端和部署自动化功能的新生产就绪项目。

我的其他一些小项目:yatrgosljson2csvcsv2api

文章来源:https://dev.to/koddr/github-action-for-release-your-go-projects-as-fast-and-easily-as-possible-20a2