5

我有一个 C# 项目,并想为其添加语义版本控制。因此,每当我推送到main分支时,我都想创建一个新版本并根据提交类型自动生成一个新版本号。我认为语义释放可以很好地完成这项工作,因为我已经将commitlinthusky一起使用。

对于复制:

.

name: Release

on:
  push:
    branches:
      - `main`

jobs:
  release:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2

      - name: Setup Node
        uses: actions/setup-node@v2
        with:
          node-version: 14.x

      - name: Install dependencies
        run: npm install

      - name: Release
        env:
          GITHUB_TOKEN: ${{ secrets.SEMANTIC_RELEASE }}
        run: npx semantic-release
  • 推送后,工作流应失败并显示以下错误消息

[2:51:48 PM] [semantic-release] › ✔ 插件“@semantic-release/github”的完成步骤“失败”一个 npm 令牌(https://github.com/semantic-release/npm/blob/ master/README.md#npm-registry-authentication)必须在 CI 环境的 NPM_TOKEN 环境变量中创建和设置。

请确保创建一个 npm 令牌 ( https://docs.npmjs.com/getting-started/working_with_tokens#how-to-create-new-tokens ) 并将其设置在 CI 环境的 NPM_TOKEN 环境变量中。令牌必须允许发布到注册表 https://registry.npmjs.org/

AggregateError:SemanticReleaseError:未指定 npm 令牌。在 module.exports 的 module.exports (/home/runner/.npm/_npx/1561/lib/node_modules/semantic-release/node_modules/@semantic-release/npm/lib/get-error.js:6:10) (/home/runner/.npm/_npx/1561/lib/node_modules/semantic-release/node_modules/@semantic-release/npm/lib/set-npmrc-auth.js:45:31) 在 module.exports (/ home/runner/.npm/_npx/1561/lib/node_modules/semantic-release/node_modules/@semantic-release/npm/lib/verify-auth.js:17:9) 在 verifyConditions (/home/runner/.npm /_npx/1561/lib/node_modules/semantic-release/node_modules/@semantic-release/npm/index.js:36:13)在异步验证器(/home/runner/.npm/_npx/1561/lib/node_modules/语义发布/lib/plugins/normalize.js:34:24) 在异步 /home/runner/.npm/_npx/1561/lib/node_modules/semantic-release/lib/plugins/pipeline.js:37:34 在异步承诺。所有(索引 0)在异步下一个(/home/runner/.npm/_npx/1561/lib/node_modules/semantic-release/node_modules/p-reduce/index.js:16:18)在/home/runner/。 npm/_npx/1561/lib/node_modules/semantic-release/lib/plugins/pipeline.js:54:11 在异步 Object.pluginsConf。[as verifyConditions] (/home/runner/.npm/_npx/1561/lib/node_modules/semantic-release/lib/plugins/index.js:80:11) 在异步运行 (/home/runner/.npm/_npx /1561/lib/node_modules/semantic-release/index.js:95:3) 在 async module.exports (/home/runner/.npm/_npx/1561/lib/node_modules/semantic-release/index.js:260 :22) 在 async module.exports (/home/runner/.npm/_npx/1561/lib/node_modules/semantic-release/cli.js:55:5) 错误:进程完成,退出代码为 1。npm/_npx/1561/lib/node_modules/semantic-release/lib/plugins/pipeline.js:54:11 在异步 Object.pluginsConf。[as verifyConditions] (/home/runner/.npm/_npx/1561/lib/node_modules/semantic-release/lib/plugins/index.js:80:11) 在异步运行 (/home/runner/.npm/_npx /1561/lib/node_modules/semantic-release/index.js:95:3) 在 async module.exports (/home/runner/.npm/_npx/1561/lib/node_modules/semantic-release/index.js:260 :22) 在 async module.exports (/home/runner/.npm/_npx/1561/lib/node_modules/semantic-release/cli.js:55:5) 错误:进程完成,退出代码为 1。npm/_npx/1561/lib/node_modules/semantic-release/lib/plugins/pipeline.js:54:11 在异步 Object.pluginsConf。[as verifyConditions] (/home/runner/.npm/_npx/1561/lib/node_modules/semantic-release/lib/plugins/index.js:80:11) 在异步运行 (/home/runner/.npm/_npx /1561/lib/node_modules/semantic-release/index.js:95:3) 在 async module.exports (/home/runner/.npm/_npx/1561/lib/node_modules/semantic-release/index.js:260 :22) 在 async module.exports (/home/runner/.npm/_npx/1561/lib/node_modules/semantic-release/cli.js:55:5) 错误:进程完成,退出代码为 1。

我不想发布到 npm 注册表,它应该只是创建一个新的发布版本。

我是否遗漏了某些东西,或者为我的项目语义发布了错误的工具?

4

3 回答 3

4

您不必发布到 npm 注册表。您可以在.releaserc.

{
  "plugins": [
    ["@semantic-release/npm", {
      "npmPublish": false,
    }],
  ]
}
于 2021-06-16T12:35:01.300 回答
0

我意识到这是一个老问题,但也许有人会发现我的解决方案很有用。我改编自Sohrab Hosseini的这篇博文

\\ .gitlab-ci.yml
cut-version:
  image: node:16-alpine3.13
  stage: publish
    - npm i -g semantic-release @semantic-release/gitlab
  artifacts:
    reports:
      dotenv: vars.env
  script:
    - |-
      cat > .releaserc <<RELEASERC
      {
        "plugins": [
          "@semantic-release/commit-analyzer",
          "@semantic-release/release-notes-generator",
          "@semantic-release/gitlab",
          [
            "@semantic-release/exec", {
              "successCmd": "echo \"VERSION=\${nextRelease.version}\" >> vars.env"
            }
          ]
        ]
      }
      RELEASERC
    - semantic-release
  only:
    - main

publish-build:
  stage: publish
  needs:
    - job: cut-version
  script:
    - echo "$VERSION"
于 2021-08-31T13:13:35.223 回答
0

我可以推荐使用一种名为atomic-release的语义释放替代方案,而不是使用 hack 来实现您想要的用途。它是一个用于创建原子发布的 SDK,可确保发布期间的失败回滚之前采取的任何操作。

您可以创建自己的发布策略并利用gitSemanticRelease

免责声明:我是 atomic-release 的作者。

于 2021-11-06T07:30:20.267 回答