
Salut, Habr. Cet article explique comment automatiser votre projet avec des actions github.
L'automatisation sera divisée en:
- CI - des tests seront effectués sur chaque commit
- Publier - à la sortie, nous publions la version en npm
Ci
Dans notre référentiel (comment nous y sommes arrivés peut être lu ici ) car il y a les scripts suivants:
npm run build
- Construirenpm test
- Testsnpm run codestyle
- Vérification du style de code
Nous exécuterons la construction et les tests sur 3 versions de nœuds (8, 10, 12) et la vérification du style de code en même temps
Le .github/workflows/CI.yml
sera responsable de ce workflow:
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
Analysons son contenu
name: Node CI
chaîne name: Node CI
contenant le nom du flux de travail
on: push
nous allons exécuter le workflow sur la push
jobs:
c'est la tâche à accomplir
buildAndTest
travail:
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
Vous pouvez remarquer une construction intéressante ${{ something }}
que j'appelle cet appel de contexte. Où something
une expression, dans notre cas matrix.node-version
, c'est matrix.node-version
dire que nous obtenons une valeur dans l'objet de matrix
appelée node-version
. matrix
stocke la valeur des variables spécifiées dans l'exécution en cours, dans notre cas, avec trois démarrages, les valeurs 8.x
, 10.x
, 12.x
resteront
Travail 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
Eh bien, ici, tout est similaire au premier
Publier
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 ##
De l'intérêt ici, ${{ secrets.SOMETHING }}
est un appel à l'élément SOMETHING
dans l'objet SOMETHING
Ici, je me réfère à deux significations secrètes:
npm
- jeton NPMACCESS_TOKEN
- Accès aux pages gh (jeton github)
Les secrets peuvent être créés dans les paramètres du projet
Et les lignes non moins intéressantes sont
if: github.event.prerelease == true if: github.event.prerelease == false
Si vous permet de dire à github les étapes à suivre et celles qui ne le sont pas.
Pour ce faire, nous prenons la valeur github.event.prerelease
, github.event
contient l'objet json reçu dans la version du webhook, et si c'est true
nous publions la version bêta,
si false
nous publions stable et dock
C'est aussi simple que tout automatiser avec des actions github
Les références
Dépôt final
Bibliothèque NPM
Exemple de documentation
Documentation des actions Github
Travailler avec le contexte
Travailler avec des valeurs secrètes
Description de la version du webhook