
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
- Buildnpm test
- Testsnpm 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-TokenACCESS_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