Hallo Habr. In diesem Artikel wird beschrieben, wie Sie mithilfe von Github-Aktionen das Erstellen auf allen Plattformen einrichten.
Hintergrund
Ich schrieb eine einfache Anwendung über Elektronen, ich selbst benutzte Linux, aber mein Freund bevorzugte Macos. Als ich versuchte, auf meinem Computer für Macos zu kompilieren und meinem Freund pkg überreichte, startete es nicht. Infolgedessen stellte sich heraus, dass die einzige Option zum Kompilieren einer Anwendung für Macos darin bestand, sie auf Macos zu kompilieren. Um die Aufgabe so weit wie möglich zu vereinfachen, habe ich drei Skripte erstellt: build: linux, build: mac, build: win. Als Ergebnis wurden nach dem Kompilieren die folgenden Dateien erhalten: linux.deb, linux.AppImage, mac.pkg, win.exe. Es blieb jedoch ein Problem, das auf verschiedenen Systemen kompiliert werden musste. Und dann die Rettung von Gihub-Aktionen.
Wie alles funktionieren soll
Ich drücke die neue Release-Taste auf Github, und dann startet der Magic den Workflow für Github-Aktionen. Er wird auf allen Betriebssystemen kompiliert und fügt dem Release Binärdateien hinzu
Ich habe https://github.com/JasonEtco/upload-to-releas verwendet , um zu veröffentlichende Dateien hinzuzufügen, aber es gab einen Haken bei dieser Aktion. Dies ist eine Containeraktion, und in Github-Aktionen sind Containeraktionen nur unter Linux verfügbar. Daher wurde beschlossen, vier Jobs zu verwenden, drei zum Kompilieren und einen zum Laden. Da die Umgebung nicht für jeden Job gespeichert wird, werden Artefakte zum Austausch zwischen ihnen verwendet
Übe
Zuerst im Ordner .github / workflows / workflow.yml mit dem Inhalt
name: CI on: release
Nun, ich denke, es ist klar, dass dies ein CI-Workflow ist, der mit der Veröffentlichung gestartet wird und jetzt der wichtigste Job ist
jobs: build-linux: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - name: Install bluetooth run: sudo apt-get install -y build-essential libbluetooth-dev - name: Install dependencies run: npm install - name: Build linux run: npm run build:linux - name: Creating out run: | mkdir out cp dist/linux.AppImage out/ cp dist/linux.deb out/ - name: Upload build uses: actions/upload-artifact@master with: name: linux path: out
Die Schritte von Jobs: Dies ist die ganze Arbeit, Build-Linux: Dies ist die Arbeit mit dem Namen Build-Linux, läuft weiter: Ubuntu-neueste sagt, dass Sie alles unter dem neuesten Ubuntu ausführen müssen
Und dann die interessantesten Schritte: und alles, was darunter liegt, ist das, was unsere Arbeit tun wird
Erstens - verwendet: ations / checkout @ v1 klont das Repository, damit wir es verwenden können. Der nächste Schritt Bluetooth installieren installiert Bluetooth, da das Projekt es verwendet. Als nächstes werden Abhängigkeiten hergestellt und ein Build erfolgt. Da nach dem Erstellen des dist-Ordners nicht nur Binärdateien, sondern auch unnötiger Müll vorhanden sind, müssen Sie im nächsten Schritt einen weiteren Ordner erstellen, in dem sich nur Binärdateien befinden, und diese dann in Artefakte laden.
Fast das gleiche für den Sieg mit Macos
build-mac: runs-on: macOS-latest steps: - uses: actions/checkout@v1 - uses: actions/setup-node@v1 with: node-version: '8.x' - name: Install dependencies run: npm install - name: Build mac run: npm run build:mac - name: Creating out run: | mkdir out cp dist/mac.pkg out/ - name: Upload build uses: actions/upload-artifact@master with: name: mac path: out build-win: runs-on: windows-latest steps: - uses: actions/checkout@v1 - uses: actions/setup-node@v1 with: node-version: '8.x' - name: Install dependencies run: npm install - name: Build win run: npm run build:win - name: Creating out run: | mkdir out copy dist\win.exe out\ - name: Upload build uses: actions/upload-artifact@master with: name: win path: out
Es sind jedoch einige Unterschiede zu beachten. Erstens müssen Sie Bluetooth nicht installieren, es ist bereits installiert, Sie müssen jedoch nodejs installieren, verwenden Sie Actions / Setup-Node. Außerdem verwendet Windows in der Phase "Erstellen" andere Befehle.
Und in der letzten Phase werden natürlich Dateien in die Version hochgeladen
upload: runs-on: ubuntu-latest needs: [build-linux, build-mac, build-win] steps: - uses: actions/checkout@v1 - name: Download linux artifact uses: actions/download-artifact@master with: name: linux - name: Download mac artifact uses: actions/download-artifact@master with: name: mac - name: Download win artifact uses: actions/download-artifact@master with: name: win - name: Upload to Release deb uses: JasonEtco/upload-to-release@v0.1.1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: args: linux/linux.deb application/vnd.debian.binary-package - name: Upload to Release AppImage uses: JasonEtco/upload-to-release@v0.1.1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: args: linux/linux.AppImage application/x-executable - name: Upload to Release pkg uses: JasonEtco/upload-to-release@v0.31.1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: args: mac/mac.pkg application/x-xar - name: Upload to Release exe uses: JasonEtco/upload-to-release@v0.1.1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: args: win/win.exe application/octet-stream
Der sehr wichtige Teil ist, dass diese Zeile besagt, dass Sie erst nach allen Builds mit der Arbeit beginnen müssen (wenn die Builds parallel verlaufen). Dann laden wir zuerst die Artefakte herunter und fügen dann die Binärdateien von ihnen zur Version hinzu
Referenzen
Resultierende workflow.yml-Datei
Repository
Mehr über Github-Aktionen
Vielen Dank für Ihre Aufmerksamkeit!