# 把打了 v* 标签的版本发布到 Gitea 的 npm 包仓库。 # # 触发方式: # 1. 推送版本标签(推荐):git tag -a v1.0.1 -m "..." && git push origin v1.0.1 # 2. 仓库 → Actions → 选择本工作流 → Run workflow(手动,发布当前 commit 的版本) # # 需要的权限: # 本工作流用 Gitea 内置的任务令牌 ${{ secrets.GITEA_TOKEN }} 发布,无需额外配置密钥。 # 组织(或仓库)Settings → Actions → General 里的 token 权限不能被限制到读, # 且 packages 需要写权限 —— 工作流里的 permissions: 已经声明,但仍会被管理员配置的上限(clamping)压回。 # 如果实例把默认权限设为 Restricted,请在这里(或组织级)确认 packages 至少为 write。 # # 依赖前提: # - 实例启用了 Actions,且注册了 act_runner(否则工作流只会排队)。 # - runner 需要能拉取 actions/checkout 与 actions/setup-node(默认从 github.com 取)。 # 若 runner 在无外网环境,请在 app.ini 里设 actions.DEFAULT_ACTIONS_URL = self 并把这两个 # action 镜像到自己的实例上。 # - runs-on 的标签要与 runner 配置的标签一致(默认 ubuntu-latest;自建 runner 常用 docker/ubuntu-22.04 等)。 name: publish on: push: tags: - 'v*' workflow_dispatch: # 读取代码用于 checkout,向本组织写包。 permissions: contents: read packages: write jobs: npm: runs-on: ubuntu-latest env: REGISTRY: https://gitea.iwake.top/api/packages/dsh-plugin/npm/ steps: - name: Checkout uses: actions/checkout@v4 - name: Set up Node.js uses: actions/setup-node@v4 with: node-version: '22' registry-url: https://gitea.iwake.top/api/packages/dsh-plugin/npm/ - name: Check the tag against package.json run: | set -eu version="$(node -p "require('./package.json').version")" name="$(node -p "require('./package.json').name")" case "${GITHUB_REF}" in refs/tags/*) tag="${GITHUB_REF_NAME#v}" if [ "$tag" != "$version" ]; then echo "标签 ${GITHUB_REF_NAME} 与 package.json 的版本 ${version} 不一致" >&2 exit 1 fi ;; esac echo "将发布 ${name}@${version}" - name: Pack (preview the published contents) run: npm pack --dry-run - name: Publish env: NODE_AUTH_TOKEN: ${{ secrets.GITEA_TOKEN }} run: | set -eu # 作用域与默认注册表都指向本组织的 npm 仓库;token 由 setup-node 写进 .npmrc。 npm config set @dsh-plugin:registry "${REGISTRY}" npm publish --registry "${REGISTRY}"