我如何重新运行 Github 操作?

How do I re-run Github Actions?

我在 Github 网上看到这个 UI:

但我不清楚禁用的重新运行是我的 .github/main.workflow 配置的结果,还是继承自 Github Actions 服务。

下面的示例工作流程 - 我没有看到任何明显的禁止重新运行的东西。

workflow "Test, Lint" {
  on = "push"
  resolves = [
    "Test",
    "Lint",
    "Lint Format"
  ]
}

action "Install" {
  uses = "actions/npm@master"
  args = "install"
  secrets = ["SECRET_TOKEN"]
}

action "Test" {
  needs = "Install"
  uses = "actions/npm@master"
  args = "test"
  secrets = ["SECRET_TOKEN"]
}

action "Lint" {
  needs = "Install"
  uses = "actions/npm@master"
  args = "run lint"
  secrets = ["SECRET_TOKEN"]
}

action "Lint Format" {
  needs = "Install"
  uses = "actions/npm@master"
  args = "run lint:format"
  secrets = ["SECRET_TOKEN"]
}

有两种情况:

1) 在构建失败时 ,来自 docs

Optionally, if the run failed, to re-run the workflow, in the upper-right corner of the workflow, use the Re-run checks drop-down menu, and select Re-run all checks.

2) 如果您的运行没有失败,您必须触发您的工作流运行s on:的事件。

在最常见的on: push情况下,您可以添加一个空提交来戳GitHub actions:

git commit --allow-empty -m "trigger GitHub actions"
git push

这将添加一个空提交(没有文件更改),并将在 GitHub 上触发另一个 push 事件,因此触发另一个工作流 运行。

然而,这确实会弄乱提交历史。 如果你愿意,以后可以 squash/remove 这些,但这可能并不理想。


这是对我的原始答案的更新,它提到了 2019 年 8 月 YAML-based re-release 之前的 GitHub 操作 HCL-based v1。 @tuff 首先做对了,@instantepiphany 的警告。

这只是 Github 操作的 missing/unimplemented 功能,现已添加。我没有对我的工作流文件或回购设置进行任何更改,但我现在可以看到 UI 到 "Re-run all checks":

(我通过我的 PR 的检查部分中的 "Details" link 进入了这个页面)。

您现在(2020 年 1 月)也可以使用新的 GitHub Actions API(!, still beta though), as announced here

它确实包括 GitHub Actions Secrets API:

Re-run a workflow

Re-runs your workflow run using its id.
Anyone with write access to the repository can use this endpoint.
GitHub Apps must have the actions permission to use this endpoint.

POST /repos/:owner/:repo/actions/runs/:run_id/rerun

因此您可以尝试编写脚本并通过这个新的 API 重新运行 Actions 工作流。

假设您的工作流从任何推送开始(您的 yml 包含触发器 on: [push]),要重新 运行 由提交触发的成功操作,添加一个新的轻量级标签就足够了.

我用这个liner来创建标签,推送标签,删除标签,推送标签删除:

git tag tmp-rerun && git push --tags && git tag -d tmp-rerun && git push origin :tmp-rerun

我制作了一个 python 脚本来触发 github 工作流程:

from github import Github

# using an access token : https://github.com/settings/tokens
g = Github("access_token")
#g = Github(base_url="https://{hostname}/api/v3", login_or_token="access_token")


for repo in g.get_user().get_repos():
    if (repo.get_workflows().totalCount > 0):
        print(repo.name, 'Have github workflow')
        for workflow in repo.get_workflows():
            if workflow.create_dispatch(repo.default_branch) is True:
                print(repo.name, 'Manual workflow has been trigger')
            else:
                print(repo.name, 'No nanual workflow, you need to add "workflow_dispatch:" to workflow file')
    else:
        print(repo.name, 'Does not have github workflow')

您需要安装这个:https://github.com/PyGithub/PyGithub