Skip to content

Commit 02a06a2

Browse files
authored
Merge pull request #86 from mdddj/6.0.0
6.0.0
2 parents 4f0bf48 + 5289422 commit 02a06a2

File tree

131 files changed

+10088
-1248
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

131 files changed

+10088
-1248
lines changed

.github/workflows/README.md

Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
1+
# GitHub Actions CI/CD 工作流说明
2+
3+
本项目包含两个主要的 GitHub Actions 工作流,用于自动化构建和发布 FlutterX IntelliJ IDEA 插件。
4+
5+
## 工作流概述
6+
7+
### 1. 发布工作流 (`release.yml`)
8+
9+
**触发条件**: 当推送以 `v` 开头的 tag 时自动触发(如 `v5.7.0``v1.2.3`
10+
11+
**主要功能**:
12+
- ✅ 自动更新插件版本号
13+
- ✅ 自动更新 CHANGELOG.md
14+
- ✅ 编译构建插件
15+
- ✅ 创建 GitHub Release
16+
- ✅ 上传插件文件到 Release
17+
- ✅ 提交版本变更到主分支
18+
19+
### 2. 测试构建工作流 (`build-test.yml`)
20+
21+
**触发条件**: 推送到主分支或创建 Pull Request 时触发
22+
23+
**主要功能**:
24+
- ✅ 验证代码可以正常编译
25+
- ✅ 运行测试用例
26+
- ✅ 插件验证
27+
- ✅ 上传构建产物
28+
29+
## 使用方法
30+
31+
### 发布新版本
32+
33+
1. **确保代码已准备就绪**
34+
```bash
35+
git add .
36+
git commit -m "feat: 新功能描述"
37+
git push origin main
38+
```
39+
40+
2. **创建并推送 tag**
41+
```bash
42+
# 创建 tag(版本号格式:v主版本.次版本.修订版本)
43+
git tag v5.8.0
44+
45+
# 推送 tag 到远程仓库
46+
git push origin v5.8.0
47+
```
48+
49+
3. **等待 CI 自动执行**
50+
- 工作流会自动触发
51+
- 在 GitHub 的 Actions 页面可以查看进度
52+
- 完成后会自动创建 Release
53+
54+
### 版本号规范
55+
56+
推荐使用 [语义化版本控制](https://semver.org/lang/zh-CN/)
57+
58+
- `v1.0.0` - 主要版本(重大功能变更)
59+
- `v1.1.0` - 次要版本(新功能添加)
60+
- `v1.1.1` - 修订版本(bug 修复)
61+
62+
### CHANGELOG 格式
63+
64+
工作流会自动更新 `CHANGELOG.md` 文件。请确保在发布前手动更新 `## Unreleased` 部分的内容:
65+
66+
```markdown
67+
## Unreleased
68+
69+
### Added
70+
- 新增功能描述
71+
72+
### Fixed
73+
- 修复的 bug 描述
74+
75+
### Changed
76+
- 变更的功能描述
77+
```
78+
79+
## 工作流详细步骤
80+
81+
### 发布工作流步骤:
82+
83+
1. **检出代码** - 获取完整的 git 历史记录
84+
2. **设置 Java 21** - 配置构建环境
85+
3. **缓存 Gradle** - 提高构建速度
86+
4. **解析版本号** - 从 tag 中提取版本信息
87+
5. **更新版本** - 修改 `gradle.properties` 中的版本号
88+
6. **更新变更日志** - 将 Unreleased 部分标记为当前版本
89+
7. **构建插件** - 执行 `./gradlew buildPlugin`
90+
8. **生成发布说明** - 从 CHANGELOG 提取当前版本的变更
91+
9. **提交变更** - 将版本和变更日志的修改提交到主分支
92+
10. **创建 Release** - 在 GitHub 上创建正式发布
93+
11. **上传产物** - 将插件 zip 文件作为附件上传
94+
95+
## 故障排除
96+
97+
### 常见问题
98+
99+
1. **构建失败**
100+
- 检查 Java 版本是否正确
101+
- 查看 Gradle 构建日志
102+
- 确认依赖项是否正确
103+
104+
2. **Tag 推送失败**
105+
- 确保 tag 格式正确(以 `v` 开头)
106+
- 检查是否有重复的 tag
107+
108+
3. **Release 创建失败**
109+
- 检查 GitHub Token 权限
110+
- 确认仓库设置允许创建 Release
111+
112+
### 查看构建日志
113+
114+
1. 访问 GitHub 仓库页面
115+
2. 点击 "Actions" 标签
116+
3. 选择对应的工作流运行记录
117+
4. 查看详细的构建日志
118+
119+
## 环境变量配置
120+
121+
当前工作流使用以下环境变量:
122+
123+
- `GITHUB_TOKEN` - GitHub 自动提供,用于创建 Release
124+
- 其他敏感信息(如插件签名证书)需要在仓库 Settings > Secrets 中配置
125+
126+
## 本地测试
127+
128+
在推送 tag 之前,可以本地测试构建:
129+
130+
```bash
131+
cd dd_flutter_idea_plugin
132+
./gradlew buildPlugin
133+
```
134+
135+
构建成功后,插件文件会在 `build/distributions/` 目录中生成。
136+
137+
## 注意事项
138+
139+
- 确保 `CHANGELOG.md` 格式正确
140+
- Tag 一旦推送就会触发发布,请谨慎操作
141+
- 发布后的版本无法轻易撤回,请充分测试后再发布
142+
- CI 工作流会自动提交版本变更,确保本地代码与远程同步

.github/workflows/build-test.yml

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
name: Build Test
2+
3+
on:
4+
push:
5+
branches: [ main, master, develop ]
6+
pull_request:
7+
branches: [ main, master, develop ]
8+
9+
jobs:
10+
build-test:
11+
runs-on: ubuntu-latest
12+
13+
steps:
14+
- name: Checkout code
15+
uses: actions/checkout@v4
16+
17+
- name: Set up JDK 21
18+
uses: actions/setup-java@v4
19+
with:
20+
java-version: '21'
21+
distribution: 'temurin'
22+
23+
- name: Cache Gradle packages
24+
uses: actions/cache@v4
25+
with:
26+
path: |
27+
~/.gradle/caches
28+
~/.gradle/wrapper
29+
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
30+
restore-keys: |
31+
${{ runner.os }}-gradle-
32+
33+
- name: Make gradlew executable
34+
run: chmod +x gradlew
35+
working-directory: dd_flutter_idea_plugin
36+
37+
- name: Build plugin
38+
run: |
39+
./gradlew buildPlugin --no-daemon --stacktrace
40+
working-directory: dd_flutter_idea_plugin
41+
env:
42+
GRADLE_OPTS: -Dorg.gradle.jvmargs="-Xmx2048m -XX:MaxMetaspaceSize=512m"
43+
44+
- name: Run tests
45+
run: |
46+
./gradlew test --no-daemon --stacktrace
47+
working-directory: dd_flutter_idea_plugin
48+
continue-on-error: true
49+
50+
- name: Verify plugin
51+
run: |
52+
./gradlew verifyPlugin --no-daemon --stacktrace
53+
working-directory: dd_flutter_idea_plugin
54+
continue-on-error: true
55+
56+
- name: Upload build artifacts
57+
uses: actions/upload-artifact@v4
58+
if: always()
59+
with:
60+
name: build-artifacts-${{ github.sha }}
61+
path: |
62+
dd_flutter_idea_plugin/build/distributions/*.zip
63+
dd_flutter_idea_plugin/build/reports/
64+
retention-days: 7
65+
66+
- name: Build summary
67+
run: |
68+
echo "## Build Summary" >> $GITHUB_STEP_SUMMARY
69+
echo "- ✅ Plugin built successfully" >> $GITHUB_STEP_SUMMARY
70+
echo "- 📁 Artifacts uploaded" >> $GITHUB_STEP_SUMMARY
71+
echo "- 🔗 Commit: ${{ github.sha }}" >> $GITHUB_STEP_SUMMARY

.github/workflows/release.yml

Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
name: Build and Release Plugin
2+
3+
on:
4+
push:
5+
tags:
6+
- 'v*' # 当推送以 v 开头的 tag 时触发,如 v1.0.0
7+
8+
jobs:
9+
build-and-release:
10+
runs-on: ubuntu-latest
11+
12+
steps:
13+
- name: Checkout code
14+
uses: actions/checkout@v4
15+
with:
16+
fetch-depth: 0 # 获取完整历史记录用于生成变更日志
17+
18+
- name: Set up JDK 21
19+
uses: actions/setup-java@v4
20+
with:
21+
java-version: '21'
22+
distribution: 'temurin'
23+
24+
- name: Cache Gradle packages
25+
uses: actions/cache@v4
26+
with:
27+
path: |
28+
~/.gradle/caches
29+
~/.gradle/wrapper
30+
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
31+
restore-keys: |
32+
${{ runner.os }}-gradle-
33+
34+
- name: Get tag version
35+
id: get_version
36+
run: |
37+
VERSION=${GITHUB_REF#refs/tags/v}
38+
echo "version=$VERSION" >> $GITHUB_OUTPUT
39+
echo "tag_name=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT
40+
41+
- name: Update plugin version in gradle.properties
42+
run: |
43+
sed -i "s/pluginVersion=.*/pluginVersion=${{ steps.get_version.outputs.version }}./" gradle.properties
44+
cat gradle.properties
45+
working-directory: dd_flutter_idea_plugin
46+
47+
- name: Update CHANGELOG.md
48+
run: |
49+
python3 scripts/update-changelog.py update ${{ steps.get_version.outputs.version }}
50+
echo "Updated CHANGELOG.md:"
51+
head -10 CHANGELOG.md
52+
working-directory: dd_flutter_idea_plugin
53+
54+
- name: Make gradlew executable
55+
run: chmod +x gradlew
56+
working-directory: dd_flutter_idea_plugin
57+
58+
- name: Build plugin
59+
run: |
60+
./gradlew buildPlugin --no-daemon --stacktrace
61+
working-directory: dd_flutter_idea_plugin
62+
env:
63+
GRADLE_OPTS: -Dorg.gradle.jvmargs="-Xmx2048m -XX:MaxMetaspaceSize=512m"
64+
65+
- name: Find built plugin
66+
id: find_plugin
67+
run: |
68+
PLUGIN_FILE=$(find build/distributions -name "*.zip" | head -1)
69+
if [ -z "$PLUGIN_FILE" ]; then
70+
echo "No plugin file found!"
71+
exit 1
72+
fi
73+
echo "plugin_file=$PLUGIN_FILE" >> $GITHUB_OUTPUT
74+
echo "plugin_name=$(basename $PLUGIN_FILE)" >> $GITHUB_OUTPUT
75+
echo "Found plugin: $PLUGIN_FILE"
76+
working-directory: dd_flutter_idea_plugin
77+
78+
- name: Generate release notes
79+
id: release_notes
80+
run: |
81+
# 创建发布说明
82+
cat > release_notes.md << 'EOF'
83+
## FlutterX Plugin Release ${{ steps.get_version.outputs.tag_name }}
84+
85+
### Installation
86+
Download the plugin zip file and install it manually in IntelliJ IDEA/Android Studio
87+
1. Go to File -> Settings -> Plugins
88+
2. Click the gear icon and select Install Plugin from Disk
89+
3. Choose the downloaded zip file
90+
91+
### Changelog
92+
EOF
93+
94+
# 提取当前版本的变更日志
95+
python3 scripts/update-changelog.py extract ${{ steps.get_version.outputs.version }} --output release_notes.md
96+
97+
echo "Generated release notes:"
98+
cat release_notes.md
99+
working-directory: dd_flutter_idea_plugin
100+
101+
- name: Commit and push changelog
102+
run: |
103+
git config --local user.email "action@github.com"
104+
git config --local user.name "GitHub Action"
105+
git add CHANGELOG.md gradle.properties
106+
git commit -m "chore: update changelog and version for release ${{ steps.get_version.outputs.tag_name }}" || echo "No changes to commit"
107+
git push origin HEAD:main || echo "Nothing to push"
108+
working-directory: dd_flutter_idea_plugin
109+
110+
- name: Create GitHub Release
111+
uses: softprops/action-gh-release@v1
112+
with:
113+
tag_name: ${{ steps.get_version.outputs.tag_name }}
114+
name: FlutterX Plugin ${{ steps.get_version.outputs.tag_name }}
115+
body_path: dd_flutter_idea_plugin/release_notes.md
116+
files: |
117+
dd_flutter_idea_plugin/${{ steps.find_plugin.outputs.plugin_file }}
118+
draft: false
119+
prerelease: false
120+
env:
121+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
122+
123+
- name: Upload to Release Assets
124+
uses: actions/upload-artifact@v4
125+
with:
126+
name: flutterx-plugin-${{ steps.get_version.outputs.version }}
127+
path: dd_flutter_idea_plugin/${{ steps.find_plugin.outputs.plugin_file }}
128+
retention-days: 30
129+
130+
- name: Plugin Verification
131+
run: |
132+
echo "✅ Plugin built successfully!"
133+
echo "📁 Plugin file: ${{ steps.find_plugin.outputs.plugin_name }}"
134+
echo "🏷️ Version: ${{ steps.get_version.outputs.version }}"
135+
echo "📦 Release created: https://github.com/${{ github.repository }}/releases/tag/${{ steps.get_version.outputs.tag_name }}"
136+
working-directory: dd_flutter_idea_plugin

0 commit comments

Comments
 (0)