svenstaro/upload-release-action
GitHub: svenstaro/upload-release-action
一个 GitHub Action,用于在 CI/CD 工作流中自动将构建产物上传到 GitHub Release。
Stars: 708 | Forks: 119
# 上传文件到 GitHub release [](https://github.com/svenstaro/upload-release-action/actions)
此操作允许你选择要将哪些文件上传到刚刚打上 tag 的 release 中。
它可以在 GitHub 提供的所有操作系统类型上运行。
## 输入变量
你必须提供:
- `file`:要作为 asset 上传的本地文件。
### 可选参数
| **参数** | **默认值** | **描述** |
|--------------------|---------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `repo_token` | `github.token` | 默认为 `github.token`。 |
| `tag` | `github.ref` | 要上传到的 tag。如果你想使用当前事件的 tag 或分支名称,请使用 `${{ github.ref }}`(`refs/tags/` 和 `refs/heads/` 前缀将被自动去除)。 |
| `asset_name` | 文件名 | 该文件作为 asset 在 release 上显示的名称。使用 `$tag` 可以包含 tag 名称。如果 `file_glob` 设置为 `true`,则不会使用此项。 |
| `file_glob` | `false` | 如果设置为 true,`file` 参数可以是 glob 模式(在这种情况下 `asset_name` 会被忽略)。 |
| `overwrite` | `false` | 如果已存在同名 asset,则覆盖它。 |
| `check_duplicates` | `true` | 检查是否存在同名 asset。禁用此选项可移除该有效性检查,并在文件数量庞大时减少 GitHub API 的使用量。 |
| `promote` | `false` | 如果已存在 prerelease,则将其提升为 release。 |
| `draft` | `false` | 将 release 设置为 draft 而不是直接发布,这允许你在正式发布前进行任何必要的编辑。 |
| `release_id` | --- | 用于搜索现有的 release,而不是根据 tag 搜索。如果要将文件上传到现有的 draft release,则必须使用此项。 |
| `prerelease` | `false` | 将 release 标记为 pre-release。 |
| `make_latest` | `true` | 将此 release 标记为仓库的最新 release。 |
| `release_name` | 与 `tag` 相同 | 显式设置 release 名称。 |
| `target_commit` | 默认分支(通常是 `main`) | 设置该 tag 所基于的 commit hash 或分支。 |
| `body` | `""` | release 文本的内容。 |
| `repo_name` | 当前仓库 | 指定将在其中创建、编辑和删除 GitHub release 的 GitHub 仓库名称。 |
## 输出变量
- `browser_download_url`:asset 的公开访问 URL。
- `release_id`:创建或更新的 release 的数字 ID。
## 用法
此用法假设你只想在创建 tag 时进行构建。
这是一种常见的用例,因为你希望为你的 tag 上传 release 二进制文件。
简单示例:
```
name: Publish
on:
push:
tags:
- '*'
jobs:
build:
name: Publish binaries
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Build
run: cargo build --release
- name: Upload binaries to release
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: target/release/mything
asset_name: mything
tag: ${{ github.ref }}
overwrite: true
body: "This is my release text"
```
包含更多操作系统的复杂示例:
```
name: Publish
on:
push:
tags:
- '*'
jobs:
publish:
name: Publish for ${{ matrix.os }}
runs-on: ${{ matrix.os }}
strategy:
matrix:
include:
- os: ubuntu-latest
artifact_name: mything
asset_name: mything-linux-amd64
- os: windows-latest
artifact_name: mything.exe
asset_name: mything-windows-amd64
- os: macos-latest
artifact_name: mything
asset_name: mything-macos-amd64
steps:
- uses: actions/checkout@v4
- name: Build
run: cargo build --release --locked
- name: Upload binaries to release
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: target/release/${{ matrix.artifact_name }}
asset_name: ${{ matrix.asset_name }}
tag: ${{ github.ref }}
```
使用 `file_glob` 的示例:
```
name: Publish
on:
push:
tags:
- '*'
jobs:
build:
name: Publish binaries
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Build
run: cargo build --release
- name: Upload binaries to release
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: target/release/my*
tag: ${{ github.ref }}
overwrite: true
file_glob: true
```
使用 `repo_name` 在外部仓库中创建 release 的示例:
```
name: Publish
on:
push:
tags:
- '*'
jobs:
build:
name: Publish binaries
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Build
run: cargo build --release
- name: Upload binaries to release
uses: svenstaro/upload-release-action@v2
with:
repo_name: owner/repository-name
# A personal access token for the GitHub repository in which the release will be created and edited.
# It is recommended to create the access token with the following scopes: `repo, user, admin:repo_hook`.
repo_token: ${{ secrets.YOUR_PERSONAL_ACCESS_TOKEN }}
file: target/release/mything
asset_name: mything
tag: ${{ github.ref }}
overwrite: true
body: "This is my release text"
```
**将仓库中的文件内容提供给 `body` 标签的示例:**
此示例涵盖以下几点:
* 读取仓库中存在的文件。例如,放置在仓库根目录下的 `release.md`。
* 在触发此操作(本例中为创建 tag)之前修改并推送 `release.md` 文件,以动态更改 release 的 body。
```
name: Publish
on:
push:
tags:
- '*'
jobs:
build:
name: Publish binaries
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
# This step reads a file from repo and use it for body of the release
# This works on any self-hosted runner OS
- name: Read release.md and use it as a body of new release
id: read_release
shell: bash
run: |
r=$(cat path/to/release.md) # <--- Read release.md (Provide correct path as per your repo)
r="${r//'%'/'%25'}" # Multiline escape sequences for %
r="${r//$'\n'/'%0A'}" # Multiline escape sequences for '\n'
r="${r//$'\r'/'%0D'}" # Multiline escape sequences for '\r'
echo "RELEASE_BODY=$r" >> $GITHUB_OUTPUT # <--- Set environment variable
- name: Upload Binaries to Release
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
tag: ${{ github.ref }}
body: |
${{ steps.read_release.outputs.RELEASE_BODY }} # <--- Use environment variables that was created earlier
```
### 权限
此操作需要对 release 的写入权限。如果你遇到“resource not accessible by integration”错误,你需要使用[细粒度权限](https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#permissions)为 token 添加 `contents: write` 权限:
```
permissions:
contents: write
```
默认情况下,这些权限会在 `push` 时授予,但不会在 `pr` 时授予——你应该警惕将它们添加到在 `pr` 上运行的工作流中,因为它们允许[广泛地更改整个仓库的内容](https://docs.github.com/en/rest/authentication/permissions-required-for-github-apps?apiVersion=2022-11-28#repository-permissions-for-contents)
## 发布
要发布此 Action:
- 在 `package.json` 中提升版本号
- 创建 `CHANGELOG.md` 条目
- `npm update`
- `npm run all`
- `git commit -am `
- `git tag -sm `
- `git push --follow-tags`
- 前往 https://github.com/svenstaro/upload-release-action/releases 并发布新版本
标签:MITM代理, 暗色界面, 自动化攻击