怎么使用github actions自动构建并上传到release
在 GitHub Actions 里自动构建并上传到 Release,最省心的方法是使用现成的开源 Action,其中 **`softprops/action-gh-release`** 是目前社区里最主流、最推荐的选择。
### 🎯 最快上手方案:使用 softprops/action-gh-release
这个 Action 用起来很简单,只要在构建步骤完成后加上几行配置,它就会自动帮你创建 Release 并把文件上传上去。
**一个完整的最小工作流示例**(保存为 `.github/workflows/release.yml`):
```yaml
name: Build and Release
on:
push:
tags:
- 'v*' # 只在推送 v 开头的标签时触发,比如 v1.0.0
jobs:
build-and-release:
runs-on: ubuntu-latest
# 关键:必须给工作流写入内容的权限,否则无法创建 Release
permissions:
contents: write
steps:
- name: Checkout code
uses: actions/checkout@v4
# --- 这里放你的构建步骤 ---
- name: Build your project
run: |
# 示例:假设构建产物是 dist/my-app.zip
mkdir -p dist
echo "Hello" > dist/my-app.zip
# --- 核心:上传到 Release ---
- name: Upload to Release
uses: softprops/action-gh-release@v2
with:
files: dist/my-app.zip # 支持通配符,如 dist/*.zip
```
### 💡 几个关键点
**1. 权限设置(最容易踩坑)**
必须在工作流级别或 job 级别设置 `permissions: contents: write`。如果不加,GitHub 默认只给 Token 读权限,上传 Release 会失败并报错 “Resource not accessible by integration”。
**2. 触发方式**
通常用 **推送标签(tag)** 来触发发布,比如 `git tag v1.0.0 && git push origin v1.0.0`。`on: push: tags: ['v*']` 这种写法可以确保只有版本标签才会触发发布。
**3. 上传多个文件**
`files` 参数支持多行路径或通配符,例如:
```yaml
files: |
dist/*.zip
dist/*.tar.gz
README.md
```
### 🔧 替代方案
如果你需要更精细的控制(比如在同一个工作流里先创建草稿、上传所有文件、再发布),可以考虑:
* **`ncipollo/release-action`**:功能类似,也支持通过 `tag` 参数一步到位创建 Release 并上传。
* **直接用 `gh` CLI**:如果只是想灵活控制,可以用 `gh release create` 和 `gh release upload` 命令组合,适合有特殊流程的场景。
你是打算用这个工作流来发布什么类型的项目(比如 Rust 二进制、Python 包、还是普通的 ZIP 压缩包)?告诉我构建产物长什么样,我可以帮你把 `files` 路径改得更精确。
- 点赞
- 收藏
- 关注作者
评论(0)