GitHub Actions

GitHub-actions zum Schutz Ihres Workflows

Die moderne Entwicklung in der IT ist so komplex, dass es unmöglich ist, alles im Kopf zu behalten, insbesondere verschiedene Praktiken zum Schreiben von Code. Hier kommen Linters ins Spiel. Sie helfen dabei, bestimmte Standards im Projekt einzuhalten und die Codebasis sauber zu halten.

Wir bei Evrone entwickeln Projektein einer Vielzahl von Programmiersprachen, darunter Ruby, Go, Rust, Python, Elixir usw. Weiterhin verbinden wir verschiedene Linters mit jedem Projekt. Um sicherzustellen, dass unser Code alle Qualitätsstandards erfüllt, führen wir für jeden Commit, der bei GitHub eingereicht wird, Linters mit CI-Diensten durch.

Reviewdog

Es ist uns sehr wichtig, dass das Ergebnis der Arbeit der Linters immer auf GitHub sichtbar ist, zum Beispiel in Form von Kommentaren zu Pull-Requests. Dazu verwenden wir reviewdog, , das Code-Reviews automatisiert und eine nahtlose Integration jedes Linters mit GitHub ermöglicht. Hier ein paar Gründe, die reviewdog so hilfreich machen:

  • Es ist in Go geschrieben und kann in eine Binärdatei kompiliert und mit jedem Projekt verbunden werden, unabhängig von der Programmiersprache.
  • Es kann mit beliebigen Linters arbeiten. Sie müssen nur das Linter-Ergebnis an den reviewdog-Input umleiten und das Linter-Ausgabeformat definieren. Beispiel:$ dotenv-linter | reviewdog -efm="%f:%l %m"
  • Es unterstützt standardmäßig eine große Anzahl von Linters wie dotenv-linter, rubocop und andere.

GitHub Actions

So cool reviewdog auch ist, mussten wir trotzdem Zeit damit verbringen, CI-Dienste einzurichten, um Linters für jedes Projekt laufen zu lassen. Doch das hat sich geändert, als GitHub GitHub Actions, ankündigte, ein neues Tool zur Automatisierung von Arbeitsabläufen. Einfach ausgedrückt, handelt es sich um einen vollwertigen CI/CD-Dienst mit großartigen Möglichkeiten, der es erlaubt, eigene Aktionen zu erstellen und diese mit der Community zu teilen.

Nachdem wir auf GitHub-Aktionen umgestiegen sind, haben wir beschlossen, unsere eigenen Aktionen zu schreiben, um beliebte Linters auszuführen. Auf diese Weise konnten wir den Anschluss von Linters an jedes Projekt vereinfachen. Das ist unser Ergebnis:

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

Alle unsere Aktionen können Linter-Kommentare in zwei Modi veröffentlichen.

1. Als Anmerkung im Code (github-pr-check)

github example

2. Und in Form von Kommentaren zu Pull-Requests (github-pr-review)

example github pr

Ruby Actions

Mit den ersten 4 Aktionen (action-rubocop, action-brakeman, action-reek und action-fasterer) können Sie populäre Linters der Ruby-Community ausführen:rubocop, brakeman, reek, und fasterer. Um diese Aktionen mit Ihrem Projekt zu verbinden, müssen Sie lediglich eine .github/workflows/linters.yml-Datei mit folgendem Inhalt erstellen:

# .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 }}

Für action-rubocop, action-brakeman und action-reek ist es möglich, die Linter-Version anzugeben. Es stehen 3 Optionen zur Verfügung:

  • Ein leerer Wert oder keine Version – wodurch die neueste Version installiert wird.
  • gemfile – wodurch die Version von Gemfile.lock installiert wird.
  • 1.0.0 - wodurch die angegebene Version installiert wird.

Action-rubocop bietet auch die Möglichkeit, zusätzliche Erweiterungen zu installieren. Die folgenden Erweiterungen sind standardmäßig installiert: rubocop-rails, rubocop-performance, rubocop-rspec, rubocop-i18n, rubocop-rake. Dies kann allerdings mit dem Attribut rubocop_extensions überschrieben werden.

Dockerfile Action

Die nächste Aktion, action-hadolint, sucht jede Dockerfile im Projekt und überprüft sie mit dem hadolint linter. Anwendungsbeispiel:

# .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

Und zu guter Letzt ist da noch action-dotenv-linter. Damit lassen sich alle .env-Dateien des Projekts leicht und einfach überprüfen. Anwendungsbeispiel:

# .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

Sie finden weitere GitHub Actions auf der GitHub Marketplace -Seite. Kontaktieren Sie uns, wenn Sie Hilfe bei der Entwicklung Ihres Projekts benötigen.

GitHub Actions ist ein cooles Workflow-Automatisierungstool, mit dem alle bestehenden CI/CD-Dienste eines Projekts komplett ersetzt werden können. Wir haben mehrere GitHub-Aktionen geschrieben, um beliebte Linters zu starten, wodurch wir den Prozess des Verbindens und Konfigurierens von Linters für jedes Projekt deutlich vereinfachen konnten.
Mikhail Grachev
Software-Ingenieur, Evrone
Kontaktieren Sie uns
Schwebt Ihnen ein Projekt vor?
Setzen wir es gemeinsam um
Datei anhängen
Die Dateien müssen kleiner als 8 MB sein.
Zulässige Dateierweiterungen: jpg jpeg png txt rtf pdf doc docx ppt pptx.
Diese Website wird durch reCAPTCHA geschützt. Es gelten die Datenschutzerklärung und die Nutzungsbedingungen von Google.