svenstaro/upload-release-action

GitHub: svenstaro/upload-release-action

一个 GitHub Action,用于在 CI/CD 工作流中自动将构建产物上传到 GitHub Release。

Stars: 708 | Forks: 119

# 上传文件到 GitHub release [![GitHub Actions Workflow](https://static.pigsec.cn/wp-content/uploads/repos/cas/d2/d22868e7aaf1e1fdd7be55025100cd448c1f1cad85c15a349a3c39810403ae09.svg)](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代理, 暗色界面, 自动化攻击