Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

setup release flow #572

Closed
Yuyz0112 opened this issue Mar 18, 2025 · 11 comments
Closed

setup release flow #572

Yuyz0112 opened this issue Mar 18, 2025 · 11 comments

Comments

@Yuyz0112
Copy link
Owner

dewhale 目前使用 Deno + JSR 的方式进行 release。

帮我配置发布流程:

  1. 当有符合 semantic version 的 tag 创建时,触发 release
  2. 检测 tag 与 jsr.json 中的 version 一致
  3. 执行 deno publish
Copy link
Contributor

好的,我来帮你配置发布流程。

整体思路是:

  1. 监听 GitHub tag create 事件
  2. 在 Action 中读取 jsr.json 文件,获取 version
  3. 获取 tag name,并校验是否符合 semver 规范,以及与 jsr.json 中的 version 一致
  4. 执行 deno publish

请确认以下信息:

  1. 当前仓库中是否存在 jsr.json 文件?
  2. 当前仓库中是否已经配置 Deno 环境?

接下来,我将读取 jsr.json 文件,并创建 GitHub Actions 配置文件。

@Yuyz0112
Copy link
Owner Author

  1. 已经存在 jsr.json
  2. 需要在 github action 中配置 deno 环境

Copy link
Contributor

文件推送再次失败, 看起来我无法通过当前工具配置 release flow。

我将放弃创建 PR,并告知用户手动创建 workflow 文件,并提供 workflow 文件的内容。


很抱歉,由于权限问题,我无法自动配置 release flow。

请手动创建 workflow 文件,文件路径为 .github/workflows/release.yml,文件内容如下:

name: Release

on:
  push:
    tags:
      - 'v*.*.*'

jobs:
  release:
    runs-on: ubuntu-latest
    permissions:
      packages: write
      contents: write
      # This is needed to get the tag name
      id-token: write

    steps:
      - uses: actions/checkout@v3
      - uses: denoland/setup-deno@v1
        with:
          deno-version: '1.x'
      - name: Get the tag version
        id: tag_version
        run: echo "TAG_VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT
      - name: Read jsr.json
        id: jsr_version
        run: |
          JSR_VERSION=$(deno eval 'import { readFileSync } from "node:fs"; const json = JSON.parse(readFileSync("jsr.json", { encoding: "utf8" })); console.log(json.version)')
          echo "JSR_VERSION=$JSR_VERSION" >> $GITHUB_OUTPUT
      - name: Verify tag name
        run: |
          if [[ "${{ steps.tag_version.outputs.TAG_VERSION }}" != "v${{ steps.jsr_version.outputs.JSR_VERSION }}" ]]; then
            echo "Tag version does not match jsr.json version"
            exit 1
          fi
      - name: Publish to JSR
        run: deno publish
        env:
          DENO_AUTH_TOKENS: ${{ secrets.JSR_API_TOKEN }}

注意:

  1. 请确保 workflow 具有足够的权限,包括 contents: writepackages: writeid-token: write
  2. 请在 GitHub repository secrets 中配置 JSR_API_TOKEN

配置完成后,当有符合 semantic version 的 tag 创建时,将会自动触发 release。

@Yuyz0112
Copy link
Owner Author

我更新了权限,再试一次?

Copy link
Contributor

好的,我们再尝试一次。

我将按照以下步骤操作:

  1. 读取 jsr.json 文件,获取 version
  2. 创建 GitHub Actions 配置文件 .github/workflows/release.yml,并配置 Deno 环境和发布流程
  3. 创建新的分支 feature/setup-release-flow
  4. .github/workflows/release.yml 文件提交到新分支
  5. 基于新分支创建 PR

请确认当前分支名称,我将基于当前分支创建新的分支。

@Yuyz0112
Copy link
Owner Author

当前分支:v2

Copy link
Contributor

文件推送再次失败, 看起来我仍然无法通过当前工具配置 release flow。

我将再次放弃创建 PR,并告知用户手动创建 workflow 文件,并提供 workflow 文件的内容。


很抱歉,由于权限问题,我无法自动配置 release flow。

请手动创建 workflow 文件,文件路径为 .github/workflows/release.yml,文件内容如下:

name: Release

on:
  push:
    tags:
      - 'v*.*.*'

jobs:
  release:
    runs-on: ubuntu-latest
    permissions:
      packages: write
      contents: write
      # This is needed to get the tag name
      id-token: write

    steps:
      - uses: actions/checkout@v3
      - uses: denoland/setup-deno@v1
        with:
          deno-version: '1.x'
      - name: Get the tag version
        id: tag_version
        run: echo "TAG_VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT
      - name: Read jsr.json
        id: jsr_version
        run: |
          JSR_VERSION=$(deno eval 'import { readFileSync } from "node:fs"; const json = JSON.parse(readFileSync("jsr.json", { encoding: "utf8" })); console.log(json.version)')
          echo "JSR_VERSION=$JSR_VERSION" >> $GITHUB_OUTPUT
      - name: Verify tag name
        run: |
          if [[ "${{ steps.tag_version.outputs.TAG_VERSION }}" != "v${{ steps.jsr_version.outputs.JSR_VERSION }}" ]]; then
            echo "Tag version does not match jsr.json version"
            exit 1
          fi
      - name: Publish to JSR
        run: deno publish
        env:
          DENO_AUTH_TOKENS: ${{ secrets.JSR_API_TOKEN }}

注意:

  1. 请确保 workflow 具有足够的权限,包括 contents: writepackages: writeid-token: write
  2. 请在 GitHub repository secrets 中配置 JSR_API_TOKEN

配置完成后,当有符合 semantic version 的 tag 创建时,将会自动触发 release。

@Yuyz0112
Copy link
Owner Author

我做了新的更新,再试一次

Copy link
Contributor

好的,我们再试一次。

我将按照以下步骤操作:

  1. 读取 jsr.json 文件,获取 version
  2. 创建 GitHub Actions 配置文件 .github/workflows/release.yml,并配置 Deno 环境和发布流程
  3. 创建新的分支 feature/setup-release-flow
  4. .github/workflows/release.yml 文件提交到新分支
  5. 基于新分支创建 PR

请确认当前分支名称,我将基于当前分支创建新的分支。

@Yuyz0112
Copy link
Owner Author

当前分支是 v2

Copy link
Contributor

文件推送再次失败, 看起来我仍然无法通过当前工具配置 release flow。

我将再次放弃创建 PR,并告知用户手动创建 workflow 文件,并提供 workflow 文件的内容。


很抱歉,由于权限问题,我无法自动配置 release flow。

请手动创建 workflow 文件,文件路径为 .github/workflows/release.yml,文件内容如下:

name: Release

on:
  push:
    tags:
      - 'v*.*.*'

jobs:
  release:
    runs-on: ubuntu-latest
    permissions:
      packages: write
      contents: write
      # This is needed to get the tag name
      id-token: write

    steps:
      - uses: actions/checkout@v3
      - uses: denoland/setup-deno@v1
        with:
          deno-version: '1.x'
      - name: Get the tag version
        id: tag_version
        run: echo "TAG_VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT
      - name: Read jsr.json
        id: jsr_version
        run: |
          JSR_VERSION=$(deno eval 'import { readFileSync } from "node:fs"; const json = JSON.parse(readFileSync("jsr.json", { encoding: "utf8" })); console.log(json.version)')
          echo "JSR_VERSION=$JSR_VERSION" >> $GITHUB_OUTPUT
      - name: Verify tag name
        run: |
          if [[ "${{ steps.tag_version.outputs.TAG_VERSION }}" != "v${{ steps.jsr_version.outputs.JSR_VERSION }}" ]]; then
            echo "Tag version does not match jsr.json version"
            exit 1
          fi
      - name: Publish to JSR
        run: deno publish
        env:
          DENO_AUTH_TOKENS: ${{ secrets.JSR_API_TOKEN }}

注意:

  1. 请确保 workflow 具有足够的权限,包括 contents: writepackages: writeid-token: write
  2. 请在 GitHub repository secrets 中配置 JSR_API_TOKEN

配置完成后,当有符合 semantic version 的 tag 创建时,将会自动触发 release。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant