Wir wenden Github-Aktionen für CI und die automatische Veröffentlichung auf npm an

Github-Aktionen


Hallo Habr. In diesem Artikel erfahren Sie, wie Sie Ihr Projekt mit Github-Aktionen automatisieren.
Die Automatisierung wird unterteilt in:


  • CI - Tests werden bei jedem Commit durchgeführt
  • Veröffentlichen - Bei Veröffentlichung veröffentlichen wir die Version in npm

Ci


In unserem Repository (wie wir dazu gekommen sind, können Sie hier lesen) gibt es die folgenden Skripte:


  • npm run build - Build
  • npm test - Tests
  • npm run codestyle - Überprüfung des npm run codestyle
    Wir werden den Build und die Tests auf 3 Versionen des Knotens (8, 10, 12) ausführen und gleichzeitig den Codestil überprüfen
    Die Datei .github/workflows/CI.yml ist für diesen Workflow verantwortlich:

 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 

Lassen Sie uns den Inhalt analysieren
name: Node CI Zeichenfolge, die den Namen des Workflows enthält
on: push Wir führen den Workflow auf dem Push aus
jobs: Dies ist die zu erledigende Aufgabe


Job 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 

Sie können ein interessantes Konstrukt ${{ something }} bemerken, das ich diesen Kontextaufruf nenne. Wenn something ein Ausdruck ist, in unserem Fall matrix.node-version , erhalten wir einen Wert im matrix.node-version namens node-version . matrix speichert den Wert der im aktuellen Lauf angegebenen Variablen. In unserem Fall liegen bei drei Starts die Werte 8.x , 10.x , 12.x dort


CheckCodestyle Job


 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 

Nun, hier ist alles ähnlich wie beim ersten


Veröffentlichen


 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 ##     

Von Interesse ist hier ${{ secrets.SOMETHING }} ein Aufruf des SOMETHING Elements im SOMETHING Objekt
Hier beziehe ich mich auf zwei geheime Bedeutungen:


  • npm - NPM-Token
  • ACCESS_TOKEN - Zugriff auf Gh-Seiten (Github-Token)

Geheimnisse können in den Projekteinstellungen erstellt werden


Und nicht weniger interessante Zeilen sind


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

Wenn Sie Github mitteilen können, welche Schritte zu unternehmen sind und welche nicht.
Dazu nehmen wir den Wert github.event.prerelease , github.event enthält das in der Webhook-Version empfangene json-Objekt, und wenn es true ist, veröffentlichen wir die Beta,
Wenn false , veröffentlichen wir Stable und docken an


So einfach ist es, alles mit Github-Aktionen zu automatisieren


Referenzen


Endgültiges Repository
Npm Bibliothek
Dokumentationsbeispiel


Dokumentation zu Github-Aktionen
Arbeite mit dem Kontext
Arbeite mit geheimen Werten
Beschreibung der Webhook-Version

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


All Articles