GitHub Actions 上的 SwiftLint 安装步骤失败

Posted

技术标签:

【中文标题】GitHub Actions 上的 SwiftLint 安装步骤失败【英文标题】:SwiftLint install step fails on GitHub Actions 【发布时间】:2021-05-02 08:47:45 【问题描述】:

最近 GitHub Actions 发生了一些变化,我们不确定发生了什么或如何解决它。我们正在测试和构建 ios 应用,并使用 SwiftLint 进行自动 PR 检查。

几个月来,我们的工作配置就像一个魅力,但大约 1.5 周前,事情开始变得不稳定。有时会通过,有时不会。

我们曾经在我们的run-tests.yml 文件中有这个:

  - name: Install SwiftLint
    run: brew install swiftlint

9 天前,测试在这一步突然开始失败。以下是来自 GitHub Actions 的日志:

==> 浇注 swiftlint-0.42.0.catalina.bottle.tar.gz

错误:brew link 步骤未成功完成 公式已构建,但未符号链接到 /usr/local 无法符号链接 bin/swiftlint 目标 /usr/local/bin/swiftlint 已经存在。您可能想要删除它: rm '/usr/local/bin/swiftlint'

要强制链接并覆盖所有冲突文件: brew link --overwrite swiftlint

列出所有将被删除的文件: brew link --overwrite --dry-run swiftlint

可能的冲突文件有: /usr/local/bin/swiftlint

==> 总结 ??? /usr/local/Cellar/swiftlint/0.42.0:6 个文件,12.2MB 错误:进程已完成,退出代码为 1。

在做了一些研究、查看错误消息并看到其他作业成功运行(意味着可以正确安装 SwiftLint)后,我们决定设置故障保护:尝试链接现有的 SwiftLint,如果失败,只需安装它:

  - name: Link SwiftLint or install it
    run: brew link --overwrite swiftlint || brew install swiftlint

这工作了几天,昨天又出现了。错误日志让我们感到困惑,所以我们决定在这里询问其他人是否也遇到这种情况以及如何解决这个问题。错误日志:

运行 brew link --overwrite swiftlint || brew install swiftlint

错误:没有这样的小桶:/usr/local/Cellar/swiftlint

==> 正在下载https://homebrew.bintray.com/bottles/swiftlint-0.42.0.catalina.bottle.tar.gz

==> 从https://d29vzk4ow07wi7.cloudfront.net/e9023ed754eb8cb78a9f2b469a90875ca42a7afffd3e96f8142252e81d889793?response-content-disposition=attachment%3Bfilename%3D%22swiftlint-0.42.0.catalina.bottle.tar.gz%22&Policy=eyJTdGF0ZW1lbnQiOiBbeyJSZXNvdXJjZSI6Imh0dHAqOi8vZDI5dnprNG93MDd3aTcuY2xvdWRmcm9udC5uZXQvZTkwMjNlZDc1NGViOGNiNzhhOWYyYjQ2OWE5MDg3NWNhNDJhN2FmZmZkM2U5NmY4MTQyMjUyZTgxZDg4OTc5Mz9yZXNwb25zZS1jb250ZW50LWRpc3Bvc2l0aW9uPWF0dGFjaG1lbnQlM0JmaWxlbmFtZSUzRCUyMnN3aWZ0bGludC0wLjQyLjAuY2F0YWxpbmEuYm90dGxlLnRhci5neiUyMiIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTYxMTgzMjUzNH0sIklwQWRkcmVzcyI6eyJBV1M6U291cmNlSXAiOiIwLjAuMC4wLzAifX19XX0_&Signature=lH2~FMqNvi1jQxbtgvCFQoZPh3SFuZa3JCgsZ1h3cie4zpArrLUxmRU6OpNk0tgEJ9y3IWpYtBs6xz-NsyeYgZQkbwLGjPA42wBxzT2CfaOgCXlUEK6a7ve5ar7NwOOOUBmr1ypkraZkAP3OVEZ89TFj-ztS8rhGrUNQ3juJOKj11V-SSn07zZVuKwbNsLHqsjHSjqigrRHDng3lQPUE-al~coYbjTED2n87I4lbWSM2m9x30C-vrE5rrKHMyAqgTMiPxECz9ml8pMAuxisNNhLVsg2QySRsw5VtIjJi1h0WglzxHai37yV6fnzuuduDzlhPxtFx1jnvNEkpU5~mGg__&Key-Pair-Id=APKAIFKFWOMXM2UMTSFA下载

==> 浇注 swiftlint-0.42.0.catalina.bottle.tar.gz

错误:brew link 步骤未成功完成 公式已构建,但未符号链接到 /usr/local 无法符号链接 bin/swiftlint 目标 /usr/local/bin/swiftlint 已经存在。您可能想要删除它: rm '/usr/local/bin/swiftlint'

要强制链接并覆盖所有冲突文件: brew link --overwrite swiftlint

列出所有将被删除的文件: brew link --overwrite --dry-run swiftlint

可能的冲突文件有: /usr/local/bin/swiftlint ==> 总结 ??? /usr/local/Cellar/swiftlint/0.42.0:6 个文件,12.2MB

错误:进程已完成,退出代码为 1。

首先它说它无法链接现有的 SwiftLint。好的。然后它继续下载它.. 然后它说它无法链接,因为它已经在那里了?!

当然,我们可以继续尝试以下方法:

  - name: Link SwiftLint or install it
    run: brew link --overwrite swiftlint || brew install swiftlint || brew link --overwrite swiftlint

但这似乎太老套了,必须有更好的解决方案。

非常感谢您的想法和解决方案。

【问题讨论】:

【参考方案1】:

实际上,解决方案似乎非常简单明了。查看 GitHub Actions 的最新虚拟 macOS 环境,我发现 SwiftLint 现在已预装。

奇怪的是,Homebrew 在某些 VM 上能够安装 SwiftLint,而在其他 VM 上却不能。我希望这一步可以在所有机器上工作或在所有机器上失败。

无论如何,现在只需删除链接/安装步骤即可解决此问题。

【讨论】:

以上是关于GitHub Actions 上的 SwiftLint 安装步骤失败的主要内容,如果未能解决你的问题,请参考以下文章

Windows 主机上的 GitHub Actions(powershell?):前几行的退出代码被忽略

使用GitHub Actions自动构建DockerHub镜像

GitHub Actions 完成CI CD

如何使用 Github Actions 运行特定作业

如何将 GitHub Actions 与多个存储库一起使用并部署到 GitHub Pages?

如何配置 GitHub Actions 以构建依赖于私有存储库的 Azure 静态 Web 应用程序?