Skip to content

Commit bd94e04

Browse files
committed
v1.4.3
1 parent fcce599 commit bd94e04

1 file changed

Lines changed: 103 additions & 132 deletions

File tree

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

Lines changed: 103 additions & 132 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ permissions:
1313

1414
jobs:
1515
# ====================================================
16-
# Job 1: 核心构建 (只在 Ubuntu 上运行一次,节省资源)
16+
# Job 1: 核心构建
1717
# ====================================================
1818
build:
1919
runs-on: ubuntu-latest
@@ -23,7 +23,7 @@ jobs:
2323
PNPM_VERSION: '9.13.2'
2424

2525
steps:
26-
- name: Checkout Backend Code
26+
- name: Checkout Code
2727
uses: actions/checkout@v3
2828
with:
2929
repository: Java-Chains/chains
@@ -57,28 +57,19 @@ jobs:
5757
bash mvn_install.sh
5858
cd ..
5959
60-
- name: Build and Install java-echo-generator
60+
- name: Build and Install Generators
6161
run: |
6262
git clone https://${{ secrets.DEPENDENCY_REPO_TOKEN }}@github.com/Java-Chains/java-echo-generator.git java-echo-generator
63-
cd java-echo-generator
64-
mvn clean install -DskipTests
65-
cd ..
66-
67-
- name: Build and Install java-memshell-generator
68-
run: |
63+
cd java-echo-generator && mvn clean install -DskipTests && cd ..
6964
git clone https://${{ secrets.DEPENDENCY_REPO_TOKEN }}@github.com/Java-Chains/java-memshell-generator.git java-memshell-generator
70-
cd java-memshell-generator
71-
mvn clean install -DskipTests
72-
cd ..
65+
cd java-memshell-generator && mvn clean install -DskipTests && cd ..
7366
74-
# 前端构建
75-
- name: Set up Node.js ${{ env.NODE_VERSION }}
67+
- name: Set up Node.js & pnpm
7668
uses: actions/setup-node@v3
7769
with:
7870
node-version: ${{ env.NODE_VERSION }}
7971

80-
- name: Setup pnpm
81-
uses: pnpm/action-setup@v2
72+
- uses: pnpm/action-setup@v2
8273
with:
8374
version: ${{ env.PNPM_VERSION }}
8475

@@ -89,22 +80,47 @@ jobs:
8980
pnpm install
9081
pnpm build:prod
9182
cd ..
92-
93-
- name: Copy Frontend Assets to Backend
94-
run: |
9583
mkdir -p java-chains/src/main/resources/static
9684
rm -rf java-chains/src/main/resources/static/*
9785
cp -r java-chains-front/dist/* java-chains/src/main/resources/static/
9886
99-
- name: Build Backend
100-
run: mvn clean package -DskipTests
87+
- name: Build Backend (Server & CLI)
88+
run: |
89+
mvn clean install -DskipTests -Dmaven.compiler.source=1.8 -Dmaven.compiler.target=1.8
10190
10291
- name: Prepare Base Artifacts
10392
run: |
10493
mkdir release_base
105-
cp java-chains-*.jar release_base/java-chains.jar
10694
107-
# 克隆配置并在 artifacts 阶段就准备好,避免后续重复克隆
95+
# 1. 复制主程序
96+
echo "Looking for java-chains Jar in ROOT directory..."
97+
SERVER_JAR=$(find . -maxdepth 1 -name "java-chains-*.jar" ! -name "*-sources.jar" ! -name "*-javadoc.jar" ! -name "*.original" | head -n 1)
98+
99+
if [ -f "$SERVER_JAR" ]; then
100+
echo "✅ Found Server Jar at ROOT: $SERVER_JAR"
101+
cp "$SERVER_JAR" release_base/java-chains.jar
102+
else
103+
echo "❌ Error: java-chains jar not found in root directory!"
104+
ls -la
105+
exit 1
106+
fi
107+
108+
# 2. 复制 CLI 工具 (依然需要复制出来,供 Job 4 单独打包,或备用)
109+
CLI_JAR=$(find cli-chains/target -name "cli-chains-*-jar-with-dependencies.jar" | head -n 1)
110+
if [ -z "$CLI_JAR" ]; then
111+
CLI_JAR=$(find . -maxdepth 1 -name "cli-chains-*-jar-with-dependencies.jar" | head -n 1)
112+
fi
113+
114+
if [ -f "$CLI_JAR" ]; then
115+
echo "✅ Found CLI Jar: $CLI_JAR"
116+
cp "$CLI_JAR" release_base/cli-chains.jar
117+
else
118+
echo "❌ Error: cli-chains jar not found!"
119+
ls -R cli-chains/target/
120+
exit 1
121+
fi
122+
123+
# 3. 复制配置
108124
git clone https://${{ secrets.DEPENDENCY_REPO_TOKEN }}@github.com/Java-Chains/chains-config.git release_base/chains-config
109125
rm -rf release_base/chains-config/.git
110126
@@ -115,15 +131,13 @@ jobs:
115131
path: release_base/
116132

117133
# ====================================================
118-
# Job 2: 创建 Release (作为后续上传的目标)
134+
# Job 2: Create Release
119135
# ====================================================
120136
create_release:
121137
needs: build
122138
runs-on: ubuntu-latest
123139
steps:
124-
- name: Checkout (Only for GH CLI context)
125-
uses: actions/checkout@v3
126-
140+
- uses: actions/checkout@v3
127141
- name: Create Draft Release
128142
env:
129143
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -135,7 +149,7 @@ jobs:
135149
--notes "Auto-generated release for version ${{ inputs.version }}"
136150
137151
# ====================================================
138-
# Job 3: 矩阵打包 (并行处理5种架构 + JDK集成)
152+
# Job 3: 矩阵打包 (主程序不包含 CLI)
139153
# ====================================================
140154
bundle_assets:
141155
needs: [ build, create_release ]
@@ -144,200 +158,157 @@ jobs:
144158
fail-fast: false
145159
matrix:
146160
include:
147-
# AMD Linux
148161
- os_api: linux
149162
arch_api: x64
150163
suffix: linux-amd64
151164
ext: tar.gz
152-
# ARM Linux
153165
- os_api: linux
154166
arch_api: aarch64
155167
suffix: linux-aarch64
156168
ext: tar.gz
157-
# Windows x64
158169
- os_api: windows
159170
arch_api: x64
160171
suffix: windows-amd64
161172
ext: zip
162-
# Intel MacOS
173+
- os_api: windows
174+
arch_api: arm64
175+
suffix: windows-arm64
176+
ext: zip
163177
- os_api: mac
164178
arch_api: x64
165179
suffix: macos-amd64
166180
ext: tar.gz
167-
# Apple Silicon (M1/M2/M3)
168181
- os_api: mac
169182
arch_api: aarch64
170183
suffix: macos-aarch64
171184
ext: tar.gz
172185

173186
steps:
174-
- name: Download Base Artifacts
175-
uses: actions/download-artifact@v4
187+
- uses: actions/download-artifact@v4
176188
with:
177189
name: base-artifacts
178190
path: base
179191

180-
- name: Download JDK 8 (${{ matrix.suffix }})
192+
- name: Download JDK 8
181193
run: |
182-
# 默认使用 Adoptium API
183194
API_URL="https://api.adoptium.net/v3/binary/latest/8/ga/${{ matrix.os_api }}/${{ matrix.arch_api }}/jdk/hotspot/normal/eclipse"
184195
185-
# 特殊处理:如果遇到 macOS aarch64,改用 Azul Zulu 下载链接
186-
if [ "${{ matrix.os_api }}" == "mac" ] && [ "${{ matrix.arch_api }}" == "aarch64" ]; then
187-
echo "Detected macOS aarch64 (Apple Silicon). Adoptium does not provide JDK 8 for this arch."
188-
echo "Switching to Azul Zulu OpenJDK 8..."
189-
# Azul Zulu JDK 8 for macOS ARM64 (这是直接下载链接,版本可能会变,建议使用 latest API 或固定版本)
190-
# 为了稳定性,这里使用 Azul 的 API 获取最新 JDK 8 LTS
191-
API_URL="https://api.azul.com/zulu/download/community/v1.0/bundles/latest/binary/?jdk_version=8&os=macos&arch=arm64&bundle_type=jdk&ext=tar.gz"
196+
USE_AZUL="false"
197+
if [ "${{ matrix.os_api }}" == "mac" ] && [ "${{ matrix.arch_api }}" == "aarch64" ]; then USE_AZUL="true"; fi
198+
if [ "${{ matrix.os_api }}" == "windows" ] && [ "${{ matrix.arch_api }}" == "arm64" ]; then
199+
API_URL="https://api.adoptium.net/v3/binary/latest/8/ga/windows/x64/jdk/hotspot/normal/eclipse"
200+
USE_AZUL="false"
201+
fi
202+
203+
if [ "$USE_AZUL" == "true" ]; then
204+
AZUL_OS="${{ matrix.os_api }}"
205+
if [ "$AZUL_OS" == "mac" ]; then AZUL_OS="macos"; fi
206+
API_URL="https://api.azul.com/zulu/download/community/v1.0/bundles/latest/binary/?jdk_version=8&os=$AZUL_OS&arch=${{ matrix.arch_api }}&bundle_type=jdk&ext=${{ matrix.ext }}"
192207
fi
193-
194-
echo "Fetching JDK from: $API_URL"
195208
196209
if [ "${{ matrix.ext }}" == "zip" ]; then
197-
# Windows
198-
curl -L "$API_URL" -o jdk_bundle.zip
199-
unzip -q jdk_bundle.zip -d jdk_extracted
210+
curl -L "$API_URL" -o jdk_bundle.zip && unzip -q jdk_bundle.zip -d jdk_extracted
200211
else
201-
# Linux / Mac
202-
curl -L "$API_URL" -o jdk_bundle.tar.gz
203-
mkdir jdk_extracted
204-
tar -xzf jdk_bundle.tar.gz -C jdk_extracted
212+
curl -L "$API_URL" -o jdk_bundle.tar.gz && mkdir jdk_extracted && tar -xzf jdk_bundle.tar.gz -C jdk_extracted
205213
fi
206214
207-
# 重命名提取出的 JDK 目录为统一名称 'jdk'
208-
# 注意:Azul 和 Adoptium 解压后的目录结构可能略有不同,需要通配符处理
209-
# Azul 通常解压后是 zulu8.xx.xx-ca-jdk8.0.xx-macosx_aarch64
210-
# Adoptium 解压后是 jdk8uXXX-bXX
211-
212-
# 找到 jdk_extracted 下唯一的子目录并移动内容
213215
SUBDIR=$(ls jdk_extracted | head -n 1)
214216
mv "jdk_extracted/$SUBDIR" jdk_final
215-
216-
# macOS 特殊处理:macOS 的 JDK 结构通常是 /Contents/Home 才是真正的 JAVA_HOME
217-
if [ "${{ matrix.os_api }}" == "mac" ]; then
218-
if [ -d "jdk_final/Contents/Home" ]; then
219-
echo "Detected macOS bundle structure. Adjusting root..."
220-
mv jdk_final/Contents/Home jdk_real
221-
rm -rf jdk_final
222-
mv jdk_real jdk_final
223-
fi
217+
if [ "${{ matrix.os_api }}" == "mac" ] && [ -d "jdk_final/Contents/Home" ]; then
218+
mv jdk_final/Contents/Home jdk_real && rm -rf jdk_final && mv jdk_real jdk_final
224219
fi
225220
226221
- name: Create Distribution Structure
227222
run: |
228223
DIST_DIR="java-chains-${{ inputs.version }}-${{ matrix.suffix }}"
229224
mkdir -p "$DIST_DIR"
230225
231-
# 复制 JAR
226+
# ✅ 仅复制主程序和配置
232227
cp base/java-chains.jar "$DIST_DIR/"
233-
234-
# 复制 Config
235228
cp -r base/chains-config "$DIST_DIR/"
236-
237-
# 移动 JDK
238229
mv jdk_final "$DIST_DIR/jdk"
239230
240231
echo "DIST_DIR=$DIST_DIR" >> $GITHUB_ENV
241232
242-
- name: Generate Start Scripts (Linux/Mac)
243-
if: matrix.os_api != 'windows'
244-
run: |
245-
cd ${{ env.DIST_DIR }}
246-
cat <<EOF > start.sh
247-
#!/bin/bash
248-
BASE_DIR=\$(cd "\$(dirname "\$0")" && pwd)
249-
"\$BASE_DIR/jdk/bin/java" -jar "\$BASE_DIR/java-chains.jar"
250-
EOF
251-
chmod +x start.sh
252-
253-
- name: Generate Start Scripts (Windows)
254-
if: matrix.os_api == 'windows'
233+
- name: Generate Start Scripts
255234
run: |
256235
cd ${{ env.DIST_DIR }}
257-
# 创建 Windows 启动脚本
258-
cat <<EOF > start.bat
259-
@echo off
260-
set "BASE_DIR=%~dp0"
261-
"%BASE_DIR%jdk\bin\java.exe" -jar "%BASE_DIR%java-chains.jar"
262-
pause
263-
EOF
236+
# ✅ 只生成主程序的启动脚本
237+
if [ "${{ matrix.os_api }}" != "windows" ]; then
238+
echo '#!/bin/bash' > start.sh
239+
echo 'BASE_DIR=$(cd "$(dirname "$0")" && pwd)' >> start.sh
240+
echo '"$BASE_DIR/jdk/bin/java" -jar "$BASE_DIR/java-chains.jar"' >> start.sh
241+
chmod +x start.sh
242+
else
243+
echo '@echo off' > start.bat
244+
echo 'set "BASE_DIR=%~dp0"' >> start.bat
245+
echo '"%BASE_DIR%jdk\bin\java.exe" -jar "%BASE_DIR%java-chains.jar"' >> start.bat
246+
echo 'pause' >> start.bat
247+
fi
264248
265-
- name: Compress Asset
249+
- name: Compress and Upload
250+
env:
251+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
266252
run: |
267253
ASSET_NAME="${{ env.DIST_DIR }}.${{ matrix.ext }}"
268254
if [ "${{ matrix.ext }}" == "zip" ]; then
269255
zip -r -q "$ASSET_NAME" "${{ env.DIST_DIR }}"
270256
else
271257
tar -czf "$ASSET_NAME" "${{ env.DIST_DIR }}"
272258
fi
273-
echo "ASSET_NAME=$ASSET_NAME" >> $GITHUB_ENV
274-
275-
- name: Upload Asset to Release
276-
env:
277-
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
278-
run: |
279-
gh release upload "${{ inputs.version }}" "${{ env.ASSET_NAME }}" --repo "$GITHUB_REPOSITORY"
259+
gh release upload "${{ inputs.version }}" "$ASSET_NAME" --repo "$GITHUB_REPOSITORY"
280260
281261
# ====================================================
282-
# Job 4: 上传标准包 (不带 JDK 的通用包)
262+
# Job 4: 上传通用包 & CLI 独立包
283263
# ====================================================
284264
upload_standard_assets:
285265
needs: [ build, create_release ]
286266
runs-on: ubuntu-latest
287267
steps:
288-
- name: Download Base Artifacts
289-
uses: actions/download-artifact@v4
268+
- uses: actions/download-artifact@v4
290269
with:
291270
name: base-artifacts
292271
path: base
293272

294-
295-
- name: Create and Upload Universal Tarball (No JDK)
273+
- name: Create and Upload Assets
296274
env:
297275
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
298276
run: |
299277
cd base
300-
# 创建不含 JDK 的纯净版 tar.gz
278+
# 1. 通用包
301279
tar -czvf java-chains-${{ inputs.version }}.tar.gz java-chains.jar chains-config
302-
303-
gh release upload "${{ inputs.version }}" \
304-
"java-chains-${{ inputs.version }}.tar.gz" \
305-
--repo "$GITHUB_REPOSITORY"
280+
gh release upload "${{ inputs.version }}" "java-chains-${{ inputs.version }}.tar.gz" --repo "$GITHUB_REPOSITORY"
281+
282+
# 2. CLI 独立包 (保持不变,单独发布供需要的人下载)
283+
mkdir cli_dist
284+
cp cli-chains.jar cli_dist/
285+
cp -r chains-config cli_dist/
286+
tar -czvf cli-chains-${{ inputs.version }}.tar.gz -C cli_dist .
287+
gh release upload "${{ inputs.version }}" "cli-chains-${{ inputs.version }}.tar.gz" --repo "$GITHUB_REPOSITORY"
306288
307289
# ====================================================
308-
# Job 5: 构建并推送 Docker 镜像 (直接使用构建产物)
290+
# Job 5: Docker Build
309291
# ====================================================
310292
docker_build:
311-
needs: build # 依赖 build 任务完成
293+
needs: build
312294
runs-on: ubuntu-latest
313295
steps:
314-
- name: Checkout Dockerfile
315-
uses: actions/checkout@v4
316-
317-
# 直接下载 Job 1 生成的临时产物,不需要去 Release 下载
318-
- name: Download Base Artifacts
319-
uses: actions/download-artifact@v4
296+
- uses: actions/checkout@v4
297+
- uses: actions/download-artifact@v4
320298
with:
321299
name: base-artifacts
322300
path: .
323301

324-
# 此时当前目录下有 java-chains.jar 和 chains-config 目录
325-
# 正好符合 Dockerfile 的 COPY 需求 (假设你的 Dockerfile 是 COPY 这些文件)
326-
327-
- name: Set up QEMU
328-
uses: docker/setup-qemu-action@v3
302+
- name: Clean up CLI for Docker context
303+
run: rm -f cli-chains.jar
329304

330-
- name: Set up Docker Buildx
331-
uses: docker/setup-buildx-action@v3
332-
333-
- name: Log in to the Docker hub
334-
uses: docker/login-action@v3
305+
- uses: docker/setup-qemu-action@v3
306+
- uses: docker/setup-buildx-action@v3
307+
- uses: docker/login-action@v3
335308
with:
336309
username: ${{ secrets.DOCKER_HUB_USERNAME }}
337310
password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
338-
339-
- name: Build and push image to Docker Hub
340-
uses: docker/build-push-action@v6
311+
- uses: docker/build-push-action@v6
341312
with:
342313
file: Dockerfile
343314
context: .

0 commit comments

Comments
 (0)