我们将github action用于CI和在npm上自动发布

Github动作


哈Ha 本文是关于如何使用github操作自动化您的项目。
自动化将分为:


  • CI-将在每次提交时执行测试
  • 发布-在发布时,我们在npm中发布版本

CI


在我们的存储库中 (可以在此处阅读如何了解),其中包含以下脚本:


  • npm run build构建
  • npm test -测试
  • npm run codestyle代码样式检查
    我们将同时在3个版本的节点(8、10、12)上运行构建和测试,并同时检查代码样式
    .github/workflows/CI.yml文件将负责此工作流程:

 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 

让我们分析一下它的内容
name: Node CI包含工作流名称的name: Node CI字符串
on: push我们将在推送上运行工作流程
jobs:这是要完成的任务


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 

您会注意到一个有趣的构造${{ something }}我称之为上下文调用,在某些情况下something某些表达式,在我们的例子中是matrix.node-version ,也就是说,我们在matrix对象中获得了一个名为node-versionmatrix存储当前运行中指定的变量的值,在我们的例子中,以三个开始,值8.x10.x12.x将位于此处


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 

好吧,这里的一切都类似于第一个


发布


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

这里有趣的是, ${{ secrets.SOMETHING }}是对SOMETHING对象中SOMETHING元素的调用
在这里,我提到了两个秘密含义:


  • npm -NPM令牌
  • ACCESS_TOKEN访问gh页(github令牌)

可以在项目设置中创建秘密


同样有趣的是


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

如果允许您告诉github采取哪些步骤,哪些不采取。
为此,我们取值github.event.prereleasegithub.event包含在webhook版本中收到的json对象,如果为true则发布beta,
如果为false则发布稳定并停靠


这就是使用github操作自动化一切的简单程度


参考文献


最终仓库
Npm库
文件范例


Github动作文档
处理上下文
使用秘密价值
Webhook发布的描述

Source: https://habr.com/ru/post/zh-CN468729/


All Articles