shogo82148/actions-go-fuzz

GitHub: shogo82148/actions-go-fuzz

一个在 GitHub Actions 中自动化运行 Go 原生模糊测试并通过 PR 或 Slack 报告问题的 CI 集成工具。

Stars: 2 | Forks: 0

[![test](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/5b0712c9be170454.svg)](https://github.com/shogo82148/actions-go-fuzz/actions/workflows/test.yml) # 用于 Go Fuzz 的 GitHub Action 此 Action 在 GitHub Actions 上运行 [Go Fuzzing](https://go.dev/security/fuzz/)。 ## 用法 ### 以 Pull Request 形式报告 在您的仓库中创建一个工作流文件,例如 `.github/workflows/fuzz.yml`: ``` name: "fuzz" on: workflow_dispatch: schedule: - cron: "36 2 * * 1,4" permissions: contents: write pull-requests: write jobs: list: runs-on: ubuntu-latest timeout-minutes: 10 steps: - uses: actions/checkout@v4 - uses: actions/setup-go@v5 with: go-version: "stable" - id: list uses: shogo82148/actions-go-fuzz/list@v1 outputs: fuzz-tests: ${{steps.list.outputs.fuzz-tests}} fuzz: runs-on: ubuntu-latest timeout-minutes: 360 needs: list strategy: fail-fast: false matrix: include: ${{fromJson(needs.list.outputs.fuzz-tests)}} steps: - uses: actions/checkout@v4 - uses: actions/setup-go@v5 with: go-version: "stable" - uses: shogo82148/actions-go-fuzz/run@v1 with: packages: ${{ matrix.package }} fuzz-regexp: ${{ matrix.func }} fuzz-time: "355m" ``` `actions-go-fuzz` 通过执行 `go test -fuzz FuzzFoo` 来运行 fuzz 测试,提交[失败的输入](https://go.dev/security/fuzz/#glos-failing-input),并在 fuzz 测试失败时创建一个 pull request。 查看由此 Action 生成的 [pull request 示例](https://github.com/shogo82148/actions-go-fuzz/pull/53)。 ### 以 Slack 消息形式报告 您也可以通过 Slack 消息接收报告。 [创建一个 Incoming Webhook](https://api.slack.com/messaging/webhooks),并将其设置为 `SLACK_INCOMING_WEBHOOK` secret 的值。 然后,在您的仓库中添加一个工作流文件: ``` name: "fuzz" on: workflow_dispatch: schedule: - cron: "36 2 * * 1,4" permissions: contents: write pull-requests: write jobs: list: runs-on: ubuntu-latest timeout-minutes: 10 steps: - uses: actions/checkout@v4 - uses: actions/setup-go@v5 with: go-version: "stable" - id: list uses: shogo82148/actions-go-fuzz/list@v1 outputs: fuzz-tests: ${{steps.list.outputs.fuzz-tests}} fuzz: runs-on: ubuntu-latest timeout-minutes: 360 needs: list strategy: fail-fast: false matrix: include: ${{fromJson(needs.list.outputs.fuzz-tests)}} steps: - uses: actions/checkout@v4 - uses: actions/setup-go@v5 with: go-version: "stable" - uses: shogo82148/actions-go-fuzz/run@v1 with: packages: ${{ matrix.package }} fuzz-regexp: ${{ matrix.func }} fuzz-time: "355m" report-method: "slack" webhook-url: ${{ secrets.SLACK_INCOMING_WEBHOOK }} ``` ## 权限 使用 `pull-request` 报告方式时,`actions-go-fuzz` Action 需要以下 GitHub 权限: - `contents: write` - `pull-requests: write` 您可以在工作流 YAML 文件中指定这些权限: ``` permissions: contents: write pull-requests: write ``` 使用 `slack` 报告方式时,`actions-go-fuzz` Action 需要以下 GitHub 权限: - `contents: read` ## list action 的输入 - `packages`:这是一个可选参数,允许您指定要为其列出 fuzz 测试的 Go 包。默认情况下,它会针对您项目中的所有包(`./...`)。 - `working-directory`:这也是一个可选参数,允许您指定工作目录。默认为根目录(`.`)。 - `tags`:以逗号分隔的额外构建 tag 列表,在构建期间被视为已满足。它相当于 `go test` 命令的 `-tags` 标志。 ## list action 的输出 - `fuzz-tests`:指定 Go 包的所有 fuzz 测试的 JSON 编码列表。 ## run action 的输入 - `repository`:包含所有者的仓库名称(例如 `shogo82148/actions-go-fuzz`)。默认为运行该 Action 的仓库。 - `token`:仓库的 GitHub token。默认为 GitHub Actions 环境提供的 token。 - `packages`:用于指定 fuzz 测试 Go 包的可选参数。默认情况下,它会针对您项目中的所有包(`./...`)。 - `working-directory`:这也是一个可选参数,允许您指定工作目录。默认为根目录(`.`)。 - `fuzz-regexp`:运行匹配该正则表达式的 fuzz 测试。对应于 `go test` 命令的 `-fuzz` 标志。 - `fuzz-time`:fuzz 目标迭代持续时间,指定为 `time.Duration`(例如 `1h30s`)。对应于 `go test` 命令的 `-fuzztime` 标志。请确保此时间少于您的作业超时时间。 - `fuzz-minimize-time`:fuzz 最小化持续时间,指定为 `time.Duration`(例如 `1h30s`)。对应于 `go test` 命令的 `-fuzzminimizetime` 标志。如果您提供此输入,请确保它少于您的作业超时时间。 - `report-method`:报告结果的方法。使用 `pull-request` 创建 pull request,使用 `slack` 通过 Slack Incoming Web Hook 发送消息。 - `base-branch`:pull request 的基础分支名称。 - `head-branch-prefix`:pull request 的头分支名称的前缀。 - `webhook-url`:Slack Incoming Web Hook 的 URL。 - `tags`:以逗号分隔的额外构建 tag 列表,在构建期间被视为已满足。它相当于 `go test` 命令的 `-tags` 标志。 ## list action 的输出 - `found`:如果发现了新的 crasher,则为 `true`。否则为假值。 - `head-branch`:该 Action 创建的 pull request 的头分支名称。 - `pull-request-number`:该 Action 创建的 pull request 的编号。 - `pull-request-url`:该 Action 创建的 pull request 的 URL。 ## 安全性 任何拥有仓库读取权限的人都可以查看此 Action 创建的 pull request。 由于该 pull request 可能包含有关漏洞的信息,因此请谨慎处理。 如果可能,我们建议使用 `slack` 报告方式。 ## 许可证 本项目中的脚本和文档基于 [MIT 许可证](LICENSE) 发布。
标签:GitHub Actions, Go语言, 开源框架, 持续集成, 日志审计, 程序破解, 自动化攻击, 自动笔记