Kotlin und Dart Code via GitHub Action formatieren
Code, egal wie gut er logisch geschrieben ist, ist ohne eine ordentliche Formatierung problematisch. Man kann es vergleichen mit dem besten Buch aller Zeiten, welches aber quasi unlesbar ist, weil die Schriftgröße auf drei gesetzt wurde.
Bei den Programmiersprachen bin ich bekanntlich in den Bereichen Dart und Kotlin unterwegs und auch wenn normalerweise die IDE und die integrierten Tools das Formatting übernehmen, so gibt es doch Situation wo eine schnelle Formatierung via CLI hilfreich ist. Als konkretes Beispiel hätte ich hier die CI, welche z.B. Code generiert, optimiert oder vor dem Release von Libraries und Apps für Ordnung sorgt.
In einem meiner GitHub Repositories open_in_new bin ich darauf angewiesen sowohl Dart, wie auch Kotlin Code zu formatieren. Für Dart nutze ich dabei eine globale Installation des Dart SDKs und den darin enthaltenen dart format
Befehl. Grund dafür ist, dass das Repository ohnehin Dart als Hauptsprache nutzt und die CI bzw. GitHub Action somit schon ein Setup für Dart beinhaltet.
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: dart-lang/setup-dart@v1
- name: Format Dart
run: dart format path/to/my_file.dart
Für den Kotlin Part wollte ich eine möglichst kleine und einfache Lösung ohne große Abhängigkeiten, welche leicht wartbar ist. Hier setze ich auf einen Einzeiler, welcher die ktlint
Binary herunterlädt, sie ausführbar macht und direkt die gewünschte Datei formatiert.
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Format Kotlin
run: curl -sSLO https://github.com/pinterest/ktlint/releases/download/0.46.1/ktlint && chmod a+x ktlint && ./ktlint -F path/to/my_file.kt
Auf diesem Weg und mit diesen kleinen Bausteinen erzeugt das genannte Repository Dart und Kotlin Code, welcher formatiert ist und direkt genutzt werden kann. Da ich die generierten Daten mindestens einmal im Monat selbst benötige, war diese Anforderung auch für mich persönlich durchaus relevant. Die komplette GitHub Action habe ich in den Related Links hinterlegt. Bei Fragen meldet euch gerne direkt in den Kommentaren.