88 required : true
99 type : string
1010
11+ permissions :
12+ contents : write
13+
1114jobs :
15+ # ====================================================
16+ # Job 1: 核心构建 (只在 Ubuntu 上运行一次,节省资源)
17+ # ====================================================
1218 build :
1319 runs-on : ubuntu-latest
1420 env :
2228 with :
2329 repository : Java-Chains/chains
2430 token : ${{ secrets.DEPENDENCY_REPO_TOKEN }}
25- fetch-depth : 0 # Required to fetch all history for tag detection
31+ fetch-depth : 0
2632
2733 - name : Set up Temurin JDK ${{ env.JAVA_VERSION }}
2834 uses : actions/setup-java@v4
6571 mvn clean install -DskipTests
6672 cd ..
6773
68- # 前端
74+ # 前端构建
6975 - name : Set up Node.js ${{ env.NODE_VERSION }}
7076 uses : actions/setup-node@v3
7177 with :
@@ -93,81 +99,197 @@ jobs:
9399 - name : Build Backend
94100 run : mvn clean package -DskipTests
95101
96- - name : Create Release Directory
97- run : mkdir release
98-
99- - name : Copy Java-Chains JAR to Release
100- run : cp java-chains-*.jar release/java-chains.jar
101-
102- - name : Copy Chain-All JAR to Release
103- run : cp chains-all-*.jar release/chains-all.jar
102+ # 准备基础产物
103+ - name : Prepare Base Artifacts
104+ run : |
105+ mkdir release_base
106+ cp java-chains-*.jar release_base/java-chains.jar
107+ cp chains-all-*.jar release_base/chains-all.jar
108+
109+ # 克隆配置并在 artifacts 阶段就准备好,避免后续重复克隆
110+ git clone https://${{ secrets.DEPENDENCY_REPO_TOKEN }}@github.com/Java-Chains/chains-config.git release_base/chains-config
111+ rm -rf release_base/chains-config/.git
104112
105- - name : Upload Release Artifact (for non-tag pushes)
113+ - name : Upload Base Artifacts
106114 uses : actions/upload-artifact@v4
107115 with :
108- name : release-${{ inputs.version }}
109- path : release/
110-
116+ name : base-artifacts
117+ path : release_base/
111118
112- release_draft :
119+ # ====================================================
120+ # Job 2: 创建 Release (作为后续上传的目标)
121+ # ====================================================
122+ create_release :
113123 needs : build
114- permissions : write-all
115124 runs-on : ubuntu-latest
125+ steps :
126+ - name : Create Draft Release
127+ env :
128+ GITHUB_TOKEN : ${{ secrets.JAVA_CHAINS_RELEASE_TOKEN }}
129+ run : |
130+ gh release create "${{ inputs.version }}" \
131+ --draft \
132+ --title "Release ${{ inputs.version }}" \
133+ --repo "$GITHUB_REPOSITORY" \
134+ --notes "Auto-generated release for version ${{ inputs.version }}"
135+
136+ # ====================================================
137+ # Job 3: 矩阵打包 (并行处理5种架构 + JDK集成)
138+ # ====================================================
139+ bundle_assets :
140+ needs : [build, create_release]
141+ runs-on : ubuntu-latest
142+ strategy :
143+ fail-fast : false
144+ matrix :
145+ include :
146+ # AMD Linux
147+ - os_api : linux
148+ arch_api : x64
149+ suffix : linux-amd64
150+ ext : tar.gz
151+ # ARM Linux
152+ - os_api : linux
153+ arch_api : aarch64
154+ suffix : linux-aarch64
155+ ext : tar.gz
156+ # Windows x64
157+ - os_api : windows
158+ arch_api : x64
159+ suffix : windows-amd64
160+ ext : zip
161+ # Intel MacOS
162+ - os_api : mac
163+ arch_api : x64
164+ suffix : macos-amd64
165+ ext : tar.gz
166+ # Apple Silicon (M1/M2/M3)
167+ - os_api : mac
168+ arch_api : aarch64
169+ suffix : macos-aarch64
170+ ext : tar.gz
116171
117172 steps :
118- - name : Download Artifact
173+ - name : Download Base Artifacts
119174 uses : actions/download-artifact@v4
120175 with :
121- name : release-${{ inputs.version }}
122- path : release/
176+ name : base-artifacts
177+ path : base
123178
124- - name : Create Release
125- id : create_release
126- uses : actions/create-release@v1
127- env :
128- GITHUB_TOKEN : ${{ secrets.JAVA_CHAINS_RELEASE_TOKEN }}
129- with :
130- tag_name : ${{ inputs.version }}
131- release_name : Release ${{ inputs.version }}
132- draft : true
179+ - name : Download Temurin JDK 8 (${{ matrix.suffix }})
180+ run : |
181+ # 使用 Eclipse Adoptium API 获取最新的 JDK 8 下载链接
182+ # 也可以在 URL 中指定 feature_version=8,image_type=jdk
183+
184+ API_URL="https://api.adoptium.net/v3/binary/latest/8/ga/${{ matrix.os_api }}/${{ matrix.arch_api }}/jdk/hotspot/normal/eclipse"
185+
186+ echo "Fetching JDK from: $API_URL"
187+
188+ if [ "${{ matrix.ext }}" == "zip" ]; then
189+ curl -L "$API_URL" -o jdk_bundle.zip
190+ unzip -q jdk_bundle.zip -d jdk_extracted
191+ else
192+ curl -L "$API_URL" -o jdk_bundle.tar.gz
193+ mkdir jdk_extracted
194+ tar -xzf jdk_bundle.tar.gz -C jdk_extracted
195+ fi
196+
197+ # 重命名提取出的 JDK 目录为统一名称 'jdk',方便后续脚本引用
198+ # 提取出的目录通常类似于 'jdk8u432-b06',我们需要找到它并重命名
199+ mv jdk_extracted/* jdk_final
200+
201+ - name : Create Distribution Structure
202+ run : |
203+ DIST_DIR="java-chains-${{ inputs.version }}-${{ matrix.suffix }}"
204+ mkdir -p "$DIST_DIR"
205+
206+ # 复制 JARs
207+ cp base/java-chains.jar "$DIST_DIR/"
208+ cp base/chains-all.jar "$DIST_DIR/"
209+
210+ # 复制 Config
211+ cp -r base/chains-config "$DIST_DIR/"
212+
213+ # 移动 JDK
214+ mv jdk_final "$DIST_DIR/jdk"
215+
216+ echo "DIST_DIR=$DIST_DIR" >> $GITHUB_ENV
133217
134- - name : Upload Java-Chains Release Asset
135- id : upload-java-chains-release-asset
136- uses : actions/upload-release-asset@v1
218+ - name : Generate Start Scripts (Linux/Mac)
219+ if : matrix.os_api != 'windows'
220+ run : |
221+ cd ${{ env.DIST_DIR }}
222+ # 创建启动脚本,强制使用内置 JDK
223+ cat <<EOF > start.sh
224+ #!/bin/bash
225+ BASE_DIR=\$(cd "\$(dirname "\$0")" && pwd)
226+ "\$BASE_DIR/jdk/bin/java" -jar "\$BASE_DIR/java-chains.jar"
227+ EOF
228+ chmod +x start.sh
229+
230+ - name : Generate Start Scripts (Windows)
231+ if : matrix.os_api == 'windows'
232+ run : |
233+ cd ${{ env.DIST_DIR }}
234+ # 创建 Windows 启动脚本
235+ cat <<EOF > start.bat
236+ @echo off
237+ set "BASE_DIR=%~dp0"
238+ "%BASE_DIR%jdk\bin\java.exe" -jar "%BASE_DIR%java-chains.jar"
239+ pause
240+ EOF
241+
242+ - name : Compress Asset
243+ run : |
244+ ASSET_NAME="${{ env.DIST_DIR }}.${{ matrix.ext }}"
245+ if [ "${{ matrix.ext }}" == "zip" ]; then
246+ zip -r -q "$ASSET_NAME" "${{ env.DIST_DIR }}"
247+ else
248+ tar -czf "$ASSET_NAME" "${{ env.DIST_DIR }}"
249+ fi
250+ echo "ASSET_NAME=$ASSET_NAME" >> $GITHUB_ENV
251+
252+ - name : Upload Asset to Release
137253 env :
138254 GITHUB_TOKEN : ${{ secrets.JAVA_CHAINS_RELEASE_TOKEN }}
255+ run : |
256+ gh release upload "${{ inputs.version }}" "${{ env.ASSET_NAME }}" --repo "$GITHUB_REPOSITORY"
257+
258+ # ====================================================
259+ # Job 4: 上传标准包 (不带 JDK 的通用包)
260+ # ====================================================
261+ upload_standard_assets :
262+ needs : [build, create_release]
263+ runs-on : ubuntu-latest
264+ steps :
265+ - name : Download Base Artifacts
266+ uses : actions/download-artifact@v4
139267 with :
140- upload_url : ${{ steps.create_release.outputs.upload_url }}
141- asset_path : release/java-chains.jar
142- asset_name : java-chains-${{ inputs.version }}.jar
143- asset_content_type : application/java-archive
144-
145- - name : Upload Chains-All Release Asset
146- id : upload-chains-all-release-asset
147- uses : actions/upload-release-asset@v1
268+ name : base-artifacts
269+ path : base
270+
271+ - name : Upload Standalone JARs
148272 env :
149273 GITHUB_TOKEN : ${{ secrets.JAVA_CHAINS_RELEASE_TOKEN }}
150- with :
151- upload_url : ${{ steps.create_release.outputs.upload_url }}
152- asset_path : release/chains-all.jar
153- asset_name : chains-all-${{ inputs.version }}.jar
154- asset_content_type : application/java-archive
155-
156- - name : Clone chains-config And Create Distribution Archive
157274 run : |
158- cd release
159- git clone https://${{ secrets.DEPENDENCY_REPO_TOKEN }}@github.com/Java-Chains/chains-config.git chains-config
160- rm -rf chains-config/.git
161- tar -czvf java-chains-all.tar.gz java-chains.jar chains-config
162- cd ..
275+ cd base
276+ # 重命名以包含版本号
277+ cp java-chains.jar java-chains-${{ inputs.version }}.jar
278+ cp chains-all.jar chains-all-${{ inputs.version }}.jar
279+
280+ gh release upload "${{ inputs.version }}" \
281+ "java-chains-${{ inputs.version }}.jar" \
282+ "chains-all-${{ inputs.version }}.jar" \
283+ --repo "$GITHUB_REPOSITORY"
163284
164- - name : Upload Release Asset (Tarball)
165- id : upload-release-asset-tar
166- uses : actions/upload-release-asset@v1
285+ - name : Create and Upload Universal Tarball (No JDK)
167286 env :
168287 GITHUB_TOKEN : ${{ secrets.JAVA_CHAINS_RELEASE_TOKEN }}
169- with :
170- upload_url : ${{ steps.create_release.outputs.upload_url }}
171- asset_path : release/java-chains-all.tar.gz
172- asset_name : java-chains-${{ inputs.version }}-all.tar.gz
173- asset_content_type : application/gzip
288+ run : |
289+ cd base
290+ # 创建不含 JDK 的纯净版 tar.gz
291+ tar -czvf java-chains-${{ inputs.version }}-all.tar.gz java-chains.jar chains-config
292+
293+ gh release upload "${{ inputs.version }}" \
294+ "java-chains-${{ inputs.version }}-all.tar.gz" \
295+ --repo "$GITHUB_REPOSITORY"
0 commit comments