GitHub Actions

使用 GitHub Actions 保护您的工作流

现代开发非常复杂,根本不可能记住所有事情,尤其是编写代码的各种实践。 于是各种 Linter 工具应运而生。 它们有助于维护项目中的某些标准,并保持代码库井然有序。

在 Evrone,我们会使用各种编程语言开发项目,包括Ruby、Go、Rust、Python、Elixir 等,并且会为每个项目连接不同的 Linter。 为了确保我们的代码符合所有质量标准,我们使用 CI 服务为提交到 GitHub 的每个提交运行 Linter。

Reviewdog

对于我们来说,能够始终在 GitHub 上看到 Linter 的工作结果非常重要,例如,以注释的形式拉取请求。 为此,我们使用了 reviewdog,它能够自动进行代码审查,并提供任何 Linter 与 GitHub 的无缝集成。 下面是 Reviewdog 如此出色的原因:

  • 它用 Go 语言编写,可以编译成二进制文件并连接到任何项目,而无需考虑编程语言。
  • 它可以和任何 Linter 一起使用,只需将 Linter 结果重定向到 Reviewdog 输入并定义 Linter 输出格式,例如 $ dotenv-linter | reviewdog -efm="%f:%l %m"
  • 它支持大量开箱即用的 Linter,如 dotenv-linter, rubocop 和其他。

GitHub Actions

虽然 Reviewdog 很棒,但我们仍然需要花费时间设置 CI 服务来为每个项目运行 Linter。 但当 GitHub 发布 GitHub Actions 后,一切都改变了,GitHub Actions, 是一款用于自动化工作流的新工具。 简而言之,这是一个功能强大且成熟的 CI/CD 服务,允许您创建自己的操作并与社区共享。

切换到 GitHub Actions 后,我们决定编写自己的操作来运行流行的 Linter。 这样,我们就可以简化将 Linter 连接到任何项目的过程。 下面是我们最终得到的结果:

  • action-rubocop
  • action-brakeman
  • action-reek
  • action-fasterer
  • action-hadolint
  • action-dotenv-linter

我们的所有操作都能以两种模式发布 Linter 注释。

1.作为代码中的注解 (github-pr-check)

github example

2.以注释的形式拉取请求 (github-pr-review)

example github pr

Ruby Actions

前 4 个操作(action-rubocop、action-brakeman、action-reek 和 action-fasterer)允许您运行来自 Ruby 社区的流行 Linter:rubocop, brakeman, reek, 和 fasterer. 要将这些操作连接到您的项目,只需创建一个 .github/workflows/linters.yml 文件并在其中包含以下内容:

# .github/workflows/linters.yml
name: linters
on: [pull_request]
jobs:
  linters:
    name: runner / linters
    runs-on: ubuntu-latest
    steps:
      - name: Check out code
        uses: actions/checkout@v1
      - name: rubocop
        uses: reviewdog/action-rubocop@v1
        with:
          rubocop_version: gemfile
          rubocop_extensions: rubocop-rails:gemfile rubocop-rspec:gemfile
          github_token: ${{ secrets.github_token }}
      - name: brakeman
        uses: reviewdog/action-brakeman@v1
        with:
          brakeman_version: gemfile
          github_token: ${{ secrets.github_token }}
      - name: reek
        uses: reviewdog/action-reek@v1
        with:
          reek_version: gemfile
          github_token: ${{ secrets.github_token }}
      - name: fasterer
        uses: vk26/action-fasterer@v1
        with:
          github_token: ${{ secrets.github_token }}

对于 action-rubocop、action-brakeman 和 action-reek,可以指定 Linter 版本。 有 3 种选择:

  • 空值或无版本 - 将安装最新版本。
  • gemfile - 将安装来自 Gemfile.lock 的版本。
  • 1.0.0 - 将安装指定版本。

Action-rubocop 还提供了安装其他扩展的能力。 默认安装以下扩展 rubocop-rails, rubocop-performance, rubocop-rspec, rubocop-i18n, rubocop-rake. 但这可以使用 rubocop_extensions 属性进行覆盖。

Dockerfile Action

下一个操作,action-hadolint,会寻找项目中的所有 Dockerfile 并使用 hadolint Linter 检查它们。 用法示例:

# .github/workflows/hadolint.yml
name: hadolint
on: [pull_request]
jobs:
  hadolint:
    name: runner / hadolint
    runs-on: ubuntu-latest
    steps:
      - name: Check out code
        uses: actions/checkout@v1
      - name: hadolint
        uses: reviewdog/action-hadolint@v1
        with:
          github_token: ${{ secrets.github_token }}
          hadolint_ignore: DL3008

Dotenv-linter Action

最后,但同样重要的是 action-dotenv-linter。 您可以用它来轻松简单地检查项目上的所有 .env 文件。 用法示例:

# .github/workflows/dotenv_linter.yml
name: dotenv-linter
on: [pull_request]
jobs:
  dotenv-linter:
    name: runner / dotenv-linter
    runs-on: ubuntu-latest
    steps:
      - name: Check out code
        uses: actions/checkout@v1
      - name: dotenv-linter
        uses: dotenv-linter/action-dotenv-linter@v2
        with:
          github_token: ${{ secrets.github_token }}
          dotenv_linter_flags: --skip UnorderedKey

GitHub Marketplace 页面上可以找到更多 GitHub Actions,如果您需要项目开发方面的帮助,请联系我们。

GitHub Actions 是一款很棒的工作流自动化工具,你完全可以用它来替换项目中所有现有的 CI/CD 服务。 我们编写了几个 GitHub Actions 来启动流行的 Linter,这使我们能够极大简化在每个项目上连接和配置 Linter 的过程。
Mikhail Grachev
软件工程师,Evrone
联系我们
已有项目构想?
我们一起来实现它吧
添加附件
文件必须小于 8 MB
允许的文件类型:jpg jpeg png txt rtf pdf doc docx ppt pptx
本网站受 reCAPTCHA 保护,并适用 Google 隐私政策服务条款