Tindakan Github dan pembangunan lintas platform

Hai, Habr. Artikel ini adalah tentang cara menyiapkan bangunan di semua platform menggunakan tindakan github.


Latar belakang


Saya menulis aplikasi sederhana pada elektron, saya sendiri menggunakan linux, tetapi teman saya lebih suka makro. Ketika saya mencoba mengkompilasi untuk makro di komputer saya dan menyerahkan pkg ke teman saya - Itu tidak dimulai. Akibatnya, ternyata satu-satunya pilihan untuk mengkompilasi aplikasi untuk makro adalah dengan mengompilasinya di makro. Untuk menyederhanakan tugas sebanyak mungkin, saya membuat tiga skrip: build: linux, build: mac, build: win. Akibatnya, setelah kompilasi, file-file berikut ini diperoleh: linux.deb, linux.AppImage, mac.pkg, win.exe. Tetapi masih ada satu masalah yang perlu dikompilasi pada sistem yang berbeda. Dan kemudian keselamatan dari tindakan gihub.


Bagaimana semuanya harus bekerja


Saya menekan tombol rilis baru pada github dan kemudian keajaiban mulai alur kerja pada tindakan github, itu mengkompilasi pada semua sistem operasi dan menambahkan binari ke rilis


Saya menggunakan https://github.com/JasonEtco/upload-to-releas untuk menambahkan file untuk dirilis, namun ada satu hal yang menarik dengan tindakan ini. Ini adalah tindakan wadah, dan dalam tindakan github, tindakan wadah hanya tersedia di linux. Oleh karena itu, diputuskan untuk menggunakan empat pekerjaan, 3 untuk kompilasi dan 1 untuk memuat. Karena lingkungan tidak disimpan untuk setiap pekerjaan, inilah mengapa artefak digunakan untuk bertukar di antara mereka


Berlatih


Pertama, di folder .github / workflows / workflow.yml dengan konten


name: CI on: release 

Yah, saya pikir sudah jelas bahwa ini adalah alur kerja CI dan akan diluncurkan pada rilis, dan sekarang pekerjaan yang paling penting


 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 

Langkah-langkah pekerjaan: ini semua pekerjaan, build-linux: ini pekerjaan dengan nama build-linux, berjalan-di: ubuntu-latest mengatakan bahwa Anda perlu menjalankan semuanya di bawah ubuntu terbaru


Dan kemudian langkah-langkah yang paling menarik: dan semua yang ada di bawahnya adalah apa yang akan dilakukan oleh pekerjaan kita


Pertama - menggunakan: ations / checkout @ v1 mengklon repositori sehingga kami dapat menggunakannya. Langkah selanjutnya Instal bluetooth menginstal bluetooth karena proyek menggunakannya. Selanjutnya, ketergantungan dibuat dan membangun terjadi. Karena setelah membangun di folder dist tidak hanya ada binari, tetapi juga sampah yang tidak perlu, jadi langkah selanjutnya adalah membuat folder lain di mana hanya binari berada, dan kemudian memuatnya ke dalam artefak.


Hampir sama untuk menang dengan makro


  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 

Namun, perlu dicatat beberapa perbedaan. Pertama, Anda tidak perlu menginstal bluetooth, itu sudah diinstal, namun, Anda perlu menginstal nodejs untuk ini, gunakan tindakan / setup-node. Juga, windows menggunakan perintah lain pada tahap Creating out.


Dan tentu saja tahap terakhir adalah mengunggah file ke rilis


 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 

Bagian yang sangat penting adalah kebutuhan itu, baris ini mengatakan bahwa Anda perlu mulai bekerja hanya setelah semua build (jika build berjalan paralel), maka pertama kita unduh artefak, dan kemudian tambahkan binari dari mereka ke rilis.


Referensi


File workflow.yml yang dihasilkan


Repositori


Lebih lanjut tentang tindakan github


Terima kasih atas perhatian anda!

Source: https://habr.com/ru/post/id466501/


All Articles