前几天我一直在玩 GitHub Actions。真是个好用的工具!简而言之:你可以让它为你运行代码,例如运行你的构建流程、测试和部署。但它仅仅是配置文件,可以运行任何你需要的东西。有一个 完整的市场,有很多 Actions 想要为你工作。
我想要做的是运行代码来进行图片优化。这样我就不必再考虑它了。存储库中的任何图片都已优化。
已经有一个 Action 可以做到这一点,Calibre 的 image-actions,我们将在本文中使用它。你还需要确保已为存储库启用了 Actions。我知道在我的主要组织中,我们只在每个存储库的基础上启用 Actions,这是其中一个选项。

然后你在 ./github/workflows/optimize-images.yml
中创建一个文件。你可以在那里配置此 Action。如果需要,所有 Action 都可以有单独的文件。我将此设置为一个单独的文件,因为 (1) 它只适用于“推送到拉取请求”,因此如果你有在不同触发器上运行的其他 Action,它们不会很好地混合,以及 (2) 他们的文档中就是这样,并且看起来是建议的使用方式。

name: Optimize images
on: pull_request
jobs:
build:
name: calibreapp/image-actions
runs-on: ubuntu-latest
steps:
- name: Checkout Repo
uses: actions/checkout@master
- name: Compress Images
uses: calibreapp/image-actions@master
with:
githubToken: ${{ secrets.GITHUB_TOKEN }}
现在,如果你创建一个拉取请求,你就会看到它运行。

然后,成功的运行会在拉取请求上留下一个注释,说明它能够优化什么。

它还会将这些文件重新提交回拉取请求,因此,如果你要继续处理拉取请求并继续工作,你需要再次推送才能推送优化后的图片。
我可以查看该自动提交并查看差异。

我知道一切都很好,如何合并 PR。

非常酷。在本地优化你的图片是否特别困难?不。永远不必再考虑它是否更好?是的。你在这里承担了一点点技术债务,但在其他地方减少了它,这至少在我看来是一笔非常公平的交易。
这是否会通过在提交后再次触发工作流来创建一个循环?
不会。它会保存哪些图片已被优化。
所有图片仅优化一次。
这太有用且节省时间了。谢谢
是的,它确实不错。请注意,目前它仅适用于来自同一存储库的拉取请求。由于 GitHub 安全权限,它不适用于 fork。
但我们正在研究一个解决方法: https://github.com/calibreapp/image-actions/pull/54