Kami menerapkan tindakan github untuk CI dan publikasi otomatis pada npm

Tindakan Github


Hai, Habr. Artikel ini adalah tentang cara mengotomatisasi proyek Anda dengan tindakan github.
Otomasi akan dibagi menjadi:


  • CI - tes akan dilakukan pada setiap komit
  • Terbit - pada rilis kami menerbitkan versi dalam npm

Ci


Dalam repositori kami (bagaimana kami dapat ini dapat dibaca di sini ) karena ada skrip berikut:


  • npm run build - Build
  • npm test - Tes
  • npm run codestyle - Pemeriksaan gaya kode
    Kami akan menjalankan build dan menguji pada 3 versi node (8, 10, 12) dan memeriksa gaya kode secara bersamaan
    File .github/workflows/CI.yml akan bertanggung jawab atas alur kerja ini:

 name: Node CI on: push jobs: buildAndTest: runs-on: ubuntu-latest strategy: matrix: node-version: [8.x, 10.x, 12.x] steps: - uses: actions/checkout@v1 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v1 with: node-version: ${{ matrix.node-version }} - name: Install, build, test run: | npm install npm run build npm test env: CI: true checkCodestyle: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v1 with: node-version: '8.x' - name: Install and check codestyle run: | npm install npm run codestyle env: CI: true 

Mari kita menganalisis isinya
name: Node CI string yang berisi nama alur kerja
on: push kita akan menjalankan alur kerja pada push
jobs: ini adalah tugas yang harus diselesaikan


Pekerjaan buildAndTest :


 buildAndTest: #  runs-on: ubuntu-latest #     strategy: #    matrix: #       node-version: [8.x, 10.x, 12.x] #   steps: #   - uses: actions/checkout@v1 - name: Use Node.js ${{ matrix.node-version }} #   uses: actions/setup-node@v1 with: node-version: ${{ matrix.node-version }} - name: Install, build, test #    run: | npm install npm run build npm test env: #    CI   CI: true 

Anda dapat melihat konstruksi yang menarik ${{ something }} Saya sebut panggilan konteks ini. Di mana ada something berekspresi, dalam case matrix.node-version kami, artinya, kami mendapatkan nilai dalam objek matrix disebut node-version . matrix menyimpan nilai variabel yang ditentukan dalam menjalankan saat ini, dalam kasus kami, dengan tiga mulai, nilai-nilai 8.x , 10.x , 12.x akan terletak di sana


Pekerjaan CheckCodestyle


 checkCodestyle: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v1 with: node-version: '8.x' - name: Install and check codestyle run: | npm install npm run codestyle env: CI: true 

Nah, di sini semuanya mirip dengan yang pertama


Terbitkan


 name: Publish #  workflow on: release #   ( ) jobs: #  test: # ,    runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - uses: actions/setup-node@v1 with: node-version: 12 - run: npm ci - run: npm run build - run: npm test - run: npm run codestyle publish: #  needs: test #       runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - uses: actions/setup-node@v1 with: node-version: 12 #   12  registry-url: https://registry.npmjs.org/ - run: npm run build #   - name: Publish beta #   if: github.event.prerelease == true #        run: npm publish --tag beta env: NODE_AUTH_TOKEN: ${{secrets.npm}} - name: Publish stable #    if: github.event.prerelease == false #     run: npm publish --tag beta env: NODE_AUTH_TOKEN: ${{secrets.npm}} - name: Build and Deploy ds #   uses: JamesIves/github-pages-deploy-action@master if: github.event.prerelease == false env: ACCESS_TOKEN: ${{ secrets.ACCESS_TOKEN }} BRANCH: gh-pages FOLDER: docs BUILD_SCRIPT: npm install && npm run typedoc ##     

Yang menarik di sini, ${{ secrets.SOMETHING }} adalah panggilan ke elemen SOMETHING di objek SOMETHING
Di sini saya merujuk pada dua makna rahasia:


  • npm - token NPM
  • ACCESS_TOKEN - Akses ke halaman gh (token github)

Rahasia dapat dibuat di pengaturan proyek


Dan garis yang tidak kalah menarik adalah


 if: github.event.prerelease == true if: github.event.prerelease == false 

Jika memungkinkan Anda memberi tahu github langkah mana yang harus diambil dan mana yang tidak.
Untuk melakukan ini, kita mengambil nilai github.event.prerelease , github.event berisi objek json yang diterima dalam rilis webhook, dan jika itu true maka kami menerbitkan beta,
jika false maka kami menerbitkan stabil dan berlabuh


Begitulah sederhananya untuk mengotomatisasi semuanya dengan tindakan github


Referensi


Repositori terakhir
Perpustakaan NPM
Contoh Dokumentasi


Dokumentasi tindakan Github
Bekerja dengan konteks
Bekerja dengan nilai-nilai rahasia
Deskripsi rilis webhook

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


All Articles