为除 main 之外的所有分支触发 GitHub Actions,其中唯一的工作流定义文件是

Posted

技术标签:

【中文标题】为除 main 之外的所有分支触发 GitHub Actions,其中唯一的工作流定义文件是【英文标题】:Trigger GitHub Actions for all branches except main, where the only workflow definition file is 【发布时间】:2021-11-10 07:33:59 【问题描述】:

我正在尝试构建一个存储库,它允许我为我正在分叉的项目的不同版本构建 Docker 映像。 存储库应具有以下布局:

main 定义工作流的分支,触发器如下:
on:
   push:
     branches-ignore:
       - main
该工作流从任何分支构建软件(基本上是适用于所有版本的软件的mvn clean packagedocker builddocker push) 许多software-1.2.3 分支不包含任何.github/workflow 文件(将此文件复制到每个分支并在那里维护会很麻烦)

从我目前的研究来看,GitHub Actions 似乎只在存在工作流定义时运行。但是,我想知道是否有办法使用 webhook 或其他东西来欺骗系统做我想做的事情。

我的下一个最佳选择可能是使用workflow_dispatch,

【问题讨论】:

如果你在main有工作流,然后新建分支,所有的分支都包含工作流,不是吗? 不,分支不是从main 分叉出来的。它们是来自外部存储库的分支。这是一个示例:github.com/rmetzger/flink-docker-factory。我想在每次推送到flink-1.13(或类似分支)时运行master 中定义的工作流。 恐怕我不明白你的工作流程。 如果你不需要它是实时的,你可以考虑使用cron功能,并检测已添加到repo的分支,通过Github API检查是否存在工作流最后一次提交,如果没有,则触发一次。这不会是微不足道的。也许您可以使用所需的工作流程在每个外部分支之上添加一个提交? 这看起来很有希望:***.com/a/57903434/7453391 【参考方案1】:

on: push !main 不起作用,因为 !main 分支需要在其中包含此工作流。

手动运行工作流是最容易实施的解决方案。

on:
  workflow_dispatch:
    inputs:
      BRANCH_OF_FORK:
        description: 'branch name, on which this pipeline should run'
        required: true
jobs:
  doSomething:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
        ref: $ github.event.inputs.BRANCH_OF_FORK 

      - run: docker build something something

有一个 on:fork 事件,可用于触发运行,但它只能触发此特定分支的 fork 事件,该分支的工作流中有 on:fork 代码。

可以在没有 on-fork 事件的 cron 作业上运行工作流,但您必须以编程方式选择正确的分支。

steps:
 - id: branch-selector
   run: |
     git clone $ github.event.repo.url  .

     all_branches=`git branch --all | grep -v " main\$" | grep -v "/main\$"`
     correct_branch=`pick_correct_branch.py $all_branches`
     git checkout -b $correct_branch

  - run: docker build something something

pick_correct_branch.py 留作练习供读者实施。

【讨论】:

以上是关于为除 main 之外的所有分支触发 GitHub Actions,其中唯一的工作流定义文件是的主要内容,如果未能解决你的问题,请参考以下文章

配置 nginx 为除主页之外的所有页面返回 503 错误代码

为除一个/几个表之外的所有表授予 [几乎] 所有 mySQL 权限

为除管理员之外的所有用户禁用Wordpress管理栏

Discord.py 重写 get_member() 函数,为除 bot 之外的所有用户返回 None

如何在推送某个分支时设置 github webhook 触发器

MFC - 是不是可以为除 CEdit 之外的任何其他控件显示气球提示?