跳到主内容
文章阅读

Github Action CI 推送标签自动发布 Release 版本

2025/12/16337 次阅读6 分钟

创建 yaml任务文件

image.png

添加代码

主要步骤

  • 拉取代码
  • 下载 jdk
  • 获取版本号
  • 设置 gradle权限
  • 打包插件
  • 读取打包的 zip文件
  • 获取版本更新日志
  • 创建发布版本
  • 上传资产文件
  • 完成

name: 构建发布创建

on:
  push:
    tags:
      - 'v*'  # 当推送以 v 开头的 tag 时触发,如 v1.0.0

jobs:
  build-and-release:
    runs-on: ubuntu-latest
    steps:
      # ------------------- 新增步骤 -------------------
      - name: 从 Tag 中提取分支名
        id: get_branch_from_tag
        run: |
          # GITHUB_REF 的值是 'refs/tags/v6.7.0'
          # 使用 shell 参数扩展移除前缀 'refs/tags/v'
          BRANCH_NAME=${GITHUB_REF#refs/tags/v}
          echo "branch_name=$BRANCH_NAME" >> $GITHUB_OUTPUT
          echo "提取到的分支名是: $BRANCH_NAME"

      - name: Checkout code
        uses: actions/checkout@v5
        with:
          ref: ${{ steps.get_branch_from_tag.outputs.branch_name }}
          fetch-depth: 0  # 获取完整历史记录用于生成变更日志

      - name: 准备JBR21
        uses: actions/setup-java@v4
        with:
          java-version: '21'
          distribution: 'jetbrains'

      - name: 获取标签版本号
        id: get_version
        run: |
          VERSION=${GITHUB_REF#refs/tags/v}
          echo "version=$VERSION" >> $GITHUB_OUTPUT
          echo "tag_name=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT 

      # 这一步是导致错误的元凶之一,已移除 working-directory
      - name: 授予gradlew执行权限
        run: chmod +x gradlew

      # 这一步是导致错误的元凶之二,已移除 working-directory
      - name: 打包插件
        run: |
          ./gradlew buildPlugin --no-daemon --stacktrace
        env:
          GRADLE_OPTS: -Dorg.gradle.jvmargs="-Xmx1548m -XX:MaxMetaspaceSize=512m"

      # 这一步是导致错误的元凶之三,已移除 working-directory
      - name: 获取构建的插件包(文件名和路径)
        id: find_plugin
        run: |
          PLUGIN_FILE=$(find build/distributions -name "*.zip" | head -1)
          if [ -z "$PLUGIN_FILE" ]; then
            echo "No plugin file found!"
            exit 1
          fi
          echo "plugin_file=$PLUGIN_FILE" >> $GITHUB_OUTPUT
          echo "plugin_name=$(basename $PLUGIN_FILE)" >> $GITHUB_OUTPUT
          echo "Found plugin: $PLUGIN_FILE"

      # 这一步是导致错误的元凶之四,已移除 working-directory
      - name: 获取版本更新说明
        id: release_notes
        run: |
          CHANGELOG_CONTENT=$(./gradlew getChangelog --quiet)
          echo -n "$CHANGELOG_CONTENT" > release-notes.md
          echo 'changelog<<EOF' >> $GITHUB_OUTPUT
          echo "$CHANGELOG_CONTENT" >> $GITHUB_OUTPUT
          echo 'EOF' >> $GITHUB_OUTPUT

      - name: 创建发布版本
        uses: softprops/action-gh-release@v1
        with:
          tag_name: ${{ steps.get_version.outputs.tag_name }}
          name: FlutterX  ${{ steps.get_version.outputs.tag_name }}
          # body_path 需要指向正确的位置,现在是项目根目录
          body_path: release-notes.md
          # files 也需要指向正确的位置
          files: |
            ${{ steps.find_plugin.outputs.plugin_file }}
          draft: false
          prerelease: false
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

      - name: 上传资产文件
        uses: actions/upload-artifact@v4
        with:
          name: FlutterX-${{ steps.get_version.outputs.version }}
          # path 也需要指向正确的位置
          path: ${{ steps.find_plugin.outputs.plugin_file }}
          retention-days: 30

      # 这一步的 working-directory 也应该移除
      - name: 插件验证
        run: |
          echo "✅ Plugin built successfully!"
          echo "📁 Plugin file: ${{ steps.find_plugin.outputs.plugin_name }}"
          echo "🏷️ Version: ${{ steps.get_version.outputs.version }}"
          echo "📦 Release created: https://github.com/${{ github.repository }}/releases/tag/${{ steps.get_version.outputs.tag_name }}"

源码

https://github.com/mdddj/dd_flutter_idea_plugin

返回顶部