我有一个 GitHub 项目,这个项目配置了仅需要在源仓库才能执行的 Action 如推送 NuGet 等发布动作。如何在 Action 里面设置让 Fork 的仓库不执行 Action 的步骤

想要设置 Action 不在 Fork 的仓库执行,只需要添加 if 判断,判断当前执行的仓库和设置的相同,即可执行,否则不执行

在 GitHub 的 Action 的判断使用 if 方法,条件可以是判断 repositoryrepository_owner 的内容

如使用下面代码判断,让构建步骤仅在 lindexi/doubi 仓库执行

    - name: Build with dotnet
      run: dotnet build --configuration Release
      if: github.repository == 'lindexi/doubi'

上面的 lindexi/doubi 的意思就是 用户名或组织名/项目名 这就会跟随用户的 Fork 仓库修改值。也就是小伙伴 frendguo 他 fork 了我的仓库,那么在他仓库里面执行的 action 拿到的 github.repository 的值是 frendguo/doubi 也就是判断逻辑不通过

判断不仅可以放在步骤里面,还可以写在 job 里面,让整个 job 都需要通过某个条件

jobs:
  build:
    runs-on: windows-latest
    if: github.repository == 'lindexi/doubi'

上面代码设置了只有在 lindexi 的 doubi 仓库才进行 build 这个 job 内容

当然上面代码写起来是针对仓库,不利于相同的一个组织内的复制粘贴代码。也就是我将代码粘贴到相同的组织里面的另一个仓库,可以看到另一个仓库是跑不起来的,因为仓库名不相同,此时可以尝试使用 repository_owner 这个值替换,请看代码

    if: github.repository_owner == 'lindexi'

上面代码判断的是只要拥有者是 lindexi 就执行。这里的 repository_owner 的值可以是用户也可以是组织,具体和仓库所在的拥有者相关

如果自己只是 fork 对方的仓库,改不动对方的代码,可以自己禁用 Action 请看 GitHub 的 Action 如何禁用

更多请看 GitHub 操作的工作流程语法 - GitHub 帮助

Context and expression syntax for GitHub Actions - GitHub Help


本文会经常更新,请阅读原文: https://blog.lindexi.com/post/GitHub-%E7%9A%84-Action-%E5%88%A4%E6%96%AD%E4%BB%85%E5%9C%A8%E4%B8%BB%E4%BB%93%E5%BA%93%E6%89%8D%E6%89%A7%E8%A1%8C%E8%84%9A%E6%9C%AC.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

如果你想持续阅读我的最新博客,请点击 RSS 订阅,推荐使用RSS Stalker订阅博客,或者收藏我的博客导航

知识共享许可协议 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接: https://blog.lindexi.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系

微软最具价值专家


无盈利,不卖课,做纯粹的技术博客

以下是广告时间

推荐关注 Edi.Wang 的公众号

欢迎进入 Eleven 老师组建的 .NET 社区

以上广告全是友情推广,无盈利