🚀 使用 GitHub Action 以最快、最简便的方式发布您的 Go 项目
创建 Go 应用 CLI
介绍
开发者世界,大家好!😉 继续介绍如何使用优秀的 CI/CD 工具 GitHub Actions 实现例行自动化的系列文章。
是时候实现用 Go 语言编写的应用程序的自动化发布了!
📝 目录
🤔 我们将实现哪些自动化?
如果你曾经面临过将用 Go 语言编写的项目发布到不同平台/操作系统的挑战,你肯定已经知道会遇到 哪些问题 。如果没有,我将列举一些:
你需要不断监控每个操作系统的特性(例如,路径中的特定斜杠)。
您需要手动创建归档文件并将其上传到 GitHub 上的发布页面。
你需要查看所有提交记录才能创建 CHANGELOG新版本。
还有更多!
那么,如果我告诉你,有一个工具可以让你在仓库中创建标签后自动完成所有这些(以及更多)操作,你会怎么想?
我没开玩笑,它真的可以让你用 GoReleaserGitHub Actions 完成所有这些操作👇
GitHub Action for GoReleaser
GoReleaser 行动
GitHub Action for GoReleaser
用法
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 密钥( GO_RELEASER_GITHUB_TOKEN以我为例):
↑ 目录
✅故障排除
如果包含函数的文件 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实际运用了动作捕捉技术:
✨ 为任何资质的开发人员提供了一个完整且独立的解决方案,只需运行一条 CLI 命令即可创建具有后端 (Go)、前端 (JavaScript、TypeScript) 和部署自动化 (Ansible、Docker) 的生产就绪项目。
创建 Go 应用 CLI
只需运行一条命令, 即可创建一个全新的生产就绪项目,该项目包含 后端 (Golang)、 前端 (JavaScript、TypeScript)以及 自动化部署(Ansible、Docker)。您可以专注于 编写代码 和 思考业务逻辑 !CLI 将处理其余的一切。
⚡️快速入门
首先, 下载 并安装 Go 语言 。 1.21需要 8.0 或更高版本。
👆 您还可以 通过其他 Go 版本使用 Create Go App CLI 1.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 )创建一个新项目……
↑ 目录
💬 问题以加深理解
GitHub Actions 配置中的哪个参数触发了作业?
为什么我们需要 fetch-depth: 0为 actions/checkout行动制定定义?
-rm-dist步骤中的论证 是什么意思 Run GoReleaser?
↑ 目录
✏️ 独立完成的练习
请用你自己的 Golang 项目重复文章中的所有内容。 请在下方评论区分享你的成果并附上你的简短网站的链接!
更改触发值,使其仅适用于主版本。 请点击 此处 了解更多关于软件版本控制的信息。
↑ 目录
照片/图像由
GoReleaser Action 存储库和网站( 链接 : 1、2 )
GitHub 仓库设置( 链接 )
PS
如果你想在这个博客上看到更多类似的文章,请在下方留言并订阅我。谢谢!😻
❗️您可以通过 Boosty平台 支持我,既可以 长期 支持,也可以一次性 支持 。所有收益都将用于 支持 我的开源软件项目,并激励我 为社区 创作新的产品和文章。
当然,您也可以帮助我让开发者的工作变得更好!只需以贡献者的身份加入我的项目即可。很简单!
我最需要你帮助(和点赞)的项目👇
🔥 gowebly :一款新一代 CLI 工具,可轻松使用 Go 在后端创建出色的 Web 应用程序,使用 htmx、hyperscript 或 Alpine.js 以及最流行的 CSS 框架在前端进行开发。
✨ create-go-app :通过运行一条 CLI 命令,创建一个包含 Go 后端、前端和部署自动化功能的新生产就绪项目。
我的其他一些小项目: yatr 、 gosl 、 json2csv 、 csv2api 。
文章来源:https://dev.to/koddr/github-action-for-release-your-go-projects-as-fast-and-easily-as-possible-20a2