
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
- Buildnpm test
- Tesnpm 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 NPMACCESS_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