{"id":21593690,"url":"https://github.com/yyz945947732/gzteacher-workflow","last_synced_at":"2026-03-14T09:39:53.951Z","repository":{"id":192003069,"uuid":"685437965","full_name":"yyz945947732/gzteacher-workflow","owner":"yyz945947732","description":"版本发布相关自动化工作流脚本","archived":false,"fork":false,"pushed_at":"2025-03-05T08:59:09.000Z","size":109,"stargazers_count":2,"open_issues_count":2,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-05T09:40:19.415Z","etag":null,"topics":["autotag","autotag-script","cli","git","git-tag","gzteacher","tag","wechat","workflow"],"latest_commit_sha":null,"homepage":"https://www.npmjs.com/package/@gzteacher/workflow","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/yyz945947732.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-08-31T08:23:13.000Z","updated_at":"2025-03-05T08:59:07.000Z","dependencies_parsed_at":"2023-09-23T13:40:10.680Z","dependency_job_id":"9f6faca1-62bb-4db7-8b3a-fa6751e58b9c","html_url":"https://github.com/yyz945947732/gzteacher-workflow","commit_stats":null,"previous_names":["yyz945947732/gzteacher-workflow"],"tags_count":9,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yyz945947732%2Fgzteacher-workflow","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yyz945947732%2Fgzteacher-workflow/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yyz945947732%2Fgzteacher-workflow/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yyz945947732%2Fgzteacher-workflow/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yyz945947732","download_url":"https://codeload.github.com/yyz945947732/gzteacher-workflow/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244206679,"owners_count":20416086,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["autotag","autotag-script","cli","git","git-tag","gzteacher","tag","wechat","workflow"],"created_at":"2024-11-24T17:14:03.051Z","updated_at":"2026-03-14T09:39:53.914Z","avatar_url":"https://github.com/yyz945947732.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# @gzteacher/workflow\n\n\u003cp\u003e\n  \u003ca href=\"https://www.npmjs.com/package/@gzteacher/workflow\"\u003e\n    \u003cimg src=\"https://img.shields.io/npm/v/@gzteacher/workflow.svg\" alt=\"Version\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/yyz945947732/gzteacher-workflow/pulls\"\u003e\n    \u003cimg\n      src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\"\n      alt=\"PRs Welcome\"\n    /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"/LICENSE.md\"\u003e\n    \u003cimg\n      src=\"https://img.shields.io/badge/license-MIT-blue.svg\"\n      alt=\"GitHub license\"\n    /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n🚀 版本发布相关自动化工作流脚本:\n\n- 更新版本文件\n- 推送新版本文件\n- 创建新 TAG\n- 推送新 TAG\n- 企业微信消息通知\n\n\u003cimg src=\"https://s1.imagehub.cc/images/2023/09/03/workflow.png\" alt=\"workflow.png\" border=\"0\" /\u003e\n\n## Quick start\n\n本地安装\n\n```sh\nnpm install -D @gzteacher/workflow\n```\n\n`package.json` 文件添加以下命令:\n\n```json\n\"scripts\": {\n  \"tag\": \"autoTag\"\n}\n```\n\n执行以下命令，输出版本号即安装成功。\n\n```bash\nnpm run tag -- -v\n```\n\n现在，你可以执行命令发布新版本了。\n\n```bash\nnpm run tag\n```\n\n## Configuration\n\n### 配置文件\n\n在项目根目录创建 `workflow.config.js` 文件，其中的配置将覆盖默认配置。\n\n以下是一个快速的简单配置:\n\n```javascript\nmodule.exports = {\n  tag: {\n    getEnv: ({ branchName }) =\u003e {\n      if (branchName === 'master') {\n        return 'prod';\n      }\n      return 'dev';\n    },\n    getVersionFileName: ({ branchName }) =\u003e {\n      if (branchName !== 'master') {\n        return 'VERSION.DEV';\n      }\n      return 'VERSION';\n    },\n    allowBranchs: ['master', 'dev'],\n  }\n};\n```\n\n详细配置可以查看[配置项](#配置项)。\n\n完整配置案例可以查看[配置案例](https://github.com/yyz945947732/gzteacher-workflow/blob/master/example/workflow.config.js)。\n\n#### 类型提示\n\n为了获取良好的类型提示，推荐导入类型并使用 JSDOC 语法获取类型提示支持：\n\n```js\n/**\n * @typedef {import(\"@gzteahcer/workflow/types\").WorkFlowConfig} WorkFlowConfig\n */\n\n/**\n * @type {WorkFlowConfig}\n */\nconst config = {\n // ...\n}\nmodule.exports = config;\n```\n\n### 配置项\n\n#### tag\n\n发布 tag 行为相关配置。\n\n##### tag.getVersion\n\n- 类型：`(ctx: Context) =\u003e string`\n- 默认值：`({ preVersion }) =\u003e preVersion`\n\n配置新标签获取 tag 格式 `{version}-{env}-{order}` 中 `version` 值的方法。默认取上一个标签中 `version` 的值。\n\n##### tag.getEnv\n\n- 类型：`(ctx: Context) =\u003e string`\n- 默认值：`({ preEnv }) =\u003e preEnv`\n\n配置新标签获取 tag 格式 `{version}-{env}-{order}` 中 `env` 值的方法。默认取上一个标签中 `env` 的值。\n\n##### tag.getOrder\n\n- 类型：`(ctx: Context) =\u003e string`\n- 默认值：`({ preOrder }) =\u003e ${Number(preOrder) + 1}`\n\n配置新标签获取 tag 格式 `{version}-{env}-{order}`中 `order` 值的方法。默认取上一个标签中 `order` 的值加 1。\n\n##### tag.getTagName\n\n- 类型：`(ctx: Context) =\u003e string`\n- 默认值：`undefined`\n\n配置新标签获取 `tagName` 的方法。结果将替换原 `{version}-{env}-{order}` 格式的组装。\n\n你可以用它来配置自定义的 tag 格式或用它来更灵活的创建新标签名。\n\n```javascript\nimport semver from 'semver'\nconst config = {\n  tag: {\n    //...\n    getTagName: ({ branchName, preVersion, preEnv, preOrder }) =\u003e {\n      let version = preVersion;\n      let env = preEnv;\n      let order = preOrder;\n      if (branchName === 'master') {\n        version = semver.inc(version, 'prerelease');\n        env = 'prod'\n        order = 1\n        return `${version}-${env}-${order}`;\n      }\n      order = Number(order) + 1\n      return `${version}-${env}-${order}`;\n    };\n  }\n}\n```\n\n##### tag.getMsg\n\n- 类型：`(ctx: Context) =\u003e string`\n- 默认值：`({ tagName }) =\u003e chore: release ${tagName}`\n\n配置获取 commit 内容的方法。\n\n##### tag.getVersionFileName\n\n- 类型：`((ctx: Context) =\u003e string) | false`\n- 默认值：`VERSION`\n\n配置获取版本号文件名的方法，`false` 时关闭更新版本号文件的行为。\n\n##### tag.getFirstTagName\n\n- 类型：`(ctx: Context) =\u003e string`\n- 默认值：`undefined`\n\n配置获取第一个 tag 名的方法，将在仓库还没有 tag 记录时使用。`undefined` 时不自动提交第一个 tag。\n\n##### tag.allowBranchs\n\n- 类型：`string[]`\n- 默认值：`undefined`\n\n允许触发 tag 流程的分支名。`undefined` 时不限制分支名。\n\n#### notify\n\n企业微信消息通知相关配置，`undefined` 时关闭消息通知行为\n\n##### notify.getWebhookUrl\n\n- 类型：`(ctx: Context) =\u003e string`\n- 默认值：`undefined`\n\n配置获取消息机器人 webhook 地址的方法。`undefined` 时不发送消息。你可以将 webhook 地址设置为环境变量以防止泄露。配置企业微信机器人可查看[文档](https://developer.work.weixin.qq.com/document/path/91770)。\n\n##### notify.getContent\n\n- 类型：`(ctx: Context) =\u003e string`\n- 默认值：`undefined`\n\n配置获取消息内容的方法。支持 md 格式。`undefined` 时不发送消息。\n\n##### notify.allowBranchs\n\n- 类型：`string[]`\n- 默认值：`undefined`\n\n允许触发消息通知流程的分支名。`undefined` 时不限制分支名。\n\n### Context\n\n配置中 `getXXX` 类方法都可以通过参数拿到 `context` 上下文信息，其中包括以下信息：\n\n- `branchName`：当前分支名\n- `username`：当前 git 用户名\n- `preVersion`：上一个标签中的 `version` 部分内容。\n- `preEnv`：上一个标签中的 `env` 部分内容。\n- `preOrder`：上一个标签中的 `order` 部分内容。\n- `preTagName`：上一个 tag 名。\n- `version`：新生成标签中的 `version` 部分内容。\n- `env`：新生成标签中的 `env` 部分内容。\n- `order`：新生成标签中的 `order` 部分内容。\n- `tagName`：新生成的 tag 名。\n\n## 命令行 Cli\n\n全局安装以使用命令行 Cli。\n\n### version\n\n查看版本。\n\n```bash\nautoTag -v\n```\n\n### help\n\n查看帮助。\n\n```bash\nautoTag -h\n```\n\n### silence\n\n发布版本但不发送消息通知。\n\n```bash\nautoTag -s\n```\n\n### debug\n\n执行脚本但不执行任何产生副作用的 git 操作与文件操作，同时开启日志信息，一般用于调试配置。\n\n```bash\nautoTag -d\n```\n\n## 手动执行\n\n你可以在 Node 环境中调用方法执行发布流程。\n\n```javascript\nimport workflow from '@gzteacher/workflow';\n\nconst options = {\n  debug: false,\n  silence: false\n}\n\nworkflow(options);\n```\n\n## VSCode\n\n\n安装 [VERSION](https://marketplace.visualstudio.com/items?itemName=yaoyuanzhang.version-highlight) 插件以支持 `VERSION.***` 文件语法高亮。\n\n## LICENSE\n\n[MIT](https://github.com/yyz945947732/gzteacher-workflow/blob/master/LICENSE.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyyz945947732%2Fgzteacher-workflow","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyyz945947732%2Fgzteacher-workflow","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyyz945947732%2Fgzteacher-workflow/lists"}