/github-actions

Reusable Workflow For Organization

Primary LanguageJavaScriptMIT LicenseMIT

node-modules/github-actions

为开源项目提供常见的可复用的 GitHub Actions Workflow

功能列表

  • 单元测试
  • 自动发包
  • 自动初始化仓库配置

单元测试

自动跑 Lint 和 Cov 单测

参考示例:https://github.com/artus-cli/examples/actions

  • 配置 npm scripts
{
  "name": "your-project",
  "scripts": {
    "lint": "eslint .",
    "test": "mocha",
    "ci": "c8 npm test"
  }
}
  • 创建 .github/workflows/ci.yml
name: CI

on:
  push:
    branches: [ master, main ]
  pull_request:
    branches: [ master, main, next, beta, '*.x' ]

jobs:
  Job:
    name: Node.js
    uses: node-modules/github-actions/.github/workflows/node-test.yml@master
    # 支持以下自定义配置,一般用默认值即可
    # with:
    #   os: 'ubuntu-latest, macos-latest, windows-latest'
    #   version: '16, 18, 20, 22'
    # secrets:
    #   CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}

开启 MySQL 和 Redis 服务依赖

name: CI

on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

jobs:
  Job:
    name: Node.js
    uses: node-modules/github-actions/.github/workflows/node-test-mysql.yml@master
    with:
      os: 'ubuntu-latest'
    # secrets:
    #   CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}

发布 NPM 包

使用 semantic-release 自动发布 NPM 包。

功能详情

  • 根据 Git 日志自动计算版本号
  • 自动生成 ChangeLog 文件
  • 自动创建 GitHub Release 说明
  • 自动打 Tag 标签
  • 自动发布到 Registry,支持 NPM 和 GitHub
  • 自动触发 CNPM 同步

支持合并到主干分支后自动发布,也支持手动发布。

手动发布方式:访问仓库的 Actions 页面,左侧选择 Release Workflow,点击右侧的 Run Workflow 即可。

版本号规则

根据 Commit Message 自动计算下一个版本号:

  • major 大版本:BREAKING CHANGE:,必须加到 commit body 里面而不是第一行标题,否则不生效
perf(pencil): remove graphiteWidth option

BREAKING CHANGE: The graphiteWidth option has been removed.
The default graphite width of 10mm is always used for performance reason.
feat: support WebStream

BREAKING CHANGE: Drop Node.js < 18 support

注意:

  • 不支持发布 0.x 版本,master 首次发布将是 1.0.0 版本
  • 如果你不期望直接发布,请在 beta 分支提交代码运行,将发布 1.0.0-beta.1 版本
  • 多版本发布实践参见 semantic-release 文档

配置方式

  • 创建 NPM Token

    • NPM Registry 需创建 Automation Token,参见文档
    • GitHub Package 无需创建,默认支持
  • 创建 GitHub Token

    • 因为生成的 CHANGELOG.md 和 package.json 需回写 GitHub,而默认的 GITHUB_TOKEN 没有该权限
    • 因此需要创建一个新的 Token,参见文档
  • 配置 Token

    • 在项目或组织维度配置 2 个 secretsNPM_TOKENGIT_TOKEN
    • 参见文档
  • 创建 .github/workflows/release.yml

name: Release
on:
  # 合并后自动发布
  push:
    branches: [ master, main, next, beta, '*.x' ]
  # 手动发布
  workflow_dispatch: {}

jobs:
  release:
    name: Node.js
    uses: node-modules/github-actions/.github/workflows/node-release.yml@master
    secrets:
      NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
      GIT_TOKEN: ${{ secrets.GIT_TOKEN }}
    # with:
      # checkTest: false
      # dryRun: true

发布到 GitHub Package

修改 release.yml 的 secrets:

secrets:
  NPM_TOKEN: ${{ secrets.GITHUB_TOKEN }}

修改 package.json

{
  "publishConfig": {
    "access": "public",
    "registry": "https://npm.pkg.github.com"
  },
}