Skip to content

Commit b309689

Browse files
committed
v1.4.2
1 parent dc4dea7 commit b309689

File tree

1 file changed

+181
-59
lines changed

1 file changed

+181
-59
lines changed

.github/workflows/build-and-release.yml

Lines changed: 181 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,13 @@ on:
88
required: true
99
type: string
1010

11+
permissions:
12+
contents: write
13+
1114
jobs:
15+
# ====================================================
16+
# Job 1: 核心构建 (只在 Ubuntu 上运行一次,节省资源)
17+
# ====================================================
1218
build:
1319
runs-on: ubuntu-latest
1420
env:
@@ -22,7 +28,7 @@ jobs:
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
@@ -65,7 +71,7 @@ jobs:
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

Comments
 (0)