为什么使用 TypeScript 写 Github Action 是愚蠢的

💡 原文中文,约2900字,阅读约需7分钟。
📝

内容提要

本文讨论了 TypeScript 和 GitHub Actions 的应用,区分了 Composite Actions(复用步骤)和 Reusable Workflows(复用整个工作流)。还分析了使用 TypeScript 重写的优缺点,以及开发中遇到的 lint 检查和异步编程复杂性等问题。最后,作者分享了对不同编程语言设计的看法。

🎯

关键要点

  • Composite Actions 是复用多个步骤,Reusable Workflows 是复用整个工作流。

  • action.yml 属于 Composite Actions,github/workflows/*.yml 属于 Reusable Workflows。

  • Composite Actions 可以嵌套 actions,主要用于设置构建依赖。

  • Shell 编写的优点是简单,但缺点是语法检查不足。

  • 使用 TypeScript 重写的原因是为了改善代码结构和美观性。

  • TypeScript 的使用带来了 lint 检查和格式化工具的配置问题。

  • TypeScript 项目需要配置 dependabot 或 renovate 来检查库的更新。

  • TypeScript 的语法复杂性可能导致理解上的困难,尤其是异步编程。

  • Reusable Workflows 中大部分过程是串行执行,而 JavaScript 设计为异步模型。

  • 结论是文章作者对不同编程语言设计的看法,没有明确结论。

延伸问答

什么是 Composite Actions 和 Reusable Workflows?

Composite Actions 是复用多个步骤,而 Reusable Workflows 是复用整个工作流,包括触发条件和作业定义。

使用 TypeScript 重写 GitHub Action 的优缺点是什么?

优点是改善代码结构和美观性,缺点包括 lint 检查和格式化工具的配置问题,以及语法复杂性导致的理解困难。

为什么 Shell 编写的 GitHub Action 有语法检查不足的问题?

Shell 的语法检查不足是因为 shellcheck 不能检查 yml 中 shell 的语法,而 yamllint 主要检查 yaml 语法的合法性。

TypeScript 项目需要配置哪些工具来管理库的更新?

TypeScript 项目通常需要配置 dependabot 或 renovate 来检查库的更新。

TypeScript 的异步编程与其他语言有什么不同?

TypeScript 和 JavaScript 的设计是异步模型,使用 async 和 await,而 Python 和 Rust 默认是同步的,不需要 async。

文章的结论是什么?

文章没有明确结论,作者主要分享了对不同编程语言设计的看法。

➡️

继续阅读