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
)
2. Und in Form von Kommentaren zu Pull-Requests (github-pr-review
)
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 vonGemfile.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.