为什么使用 TypeScript 写 Github Action 是愚蠢的
内容提要
本文讨论了 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 的区别对于有效使用 GitHub Actions 至关重要。Composite Actions 主要用于复用多个步骤,适合设置构建依赖,而 Reusable Workflows 则是复用整个工作流,包含触发条件和作业定义。掌握这两者的应用场景,可以帮助开发者更高效地组织和管理 CI/CD 流程。
TypeScript 的复杂性与挑战
虽然 TypeScript 提供了更好的代码结构和美观性,但其复杂性也带来了不少挑战。开发者需要面对 lint 检查、格式化工具的配置以及异步编程的理解难度。这些问题可能导致开发效率下降,因此在选择使用 TypeScript 时,需权衡其带来的好处与潜在的开发成本。
异步编程的陷阱
在使用 TypeScript 进行 GitHub Actions 开发时,异步编程的特性可能会让开发者感到困惑。与其他语言相比,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 的异步编程使用 async/await 模式,这与其他语言的同步执行方式不同,可能导致理解上的困难。
为什么作者认为使用 TypeScript 写 GitHub Action 是愚蠢的?
作者认为 TypeScript 的复杂性和配置问题使得开发过程繁琐,且没有明确的结论支持其使用。