1+ name : Build and Release
2+
3+ on :
4+ workflow_dispatch :
5+ inputs :
6+ version :
7+ description : " Release version (e.g. 1.3.1)"
8+ required : true
9+ type : string
10+
11+ jobs :
12+ build :
13+ runs-on : ubuntu-latest
14+ env :
15+ JAVA_VERSION : ' 8'
16+ NODE_VERSION : ' 23.2.0'
17+ PNPM_VERSION : ' 9.13.2'
18+
19+ steps :
20+ - name : Checkout Backend Code
21+ uses : actions/checkout@v3
22+ with :
23+ repository : Java-Chains/chains
24+ token : ${{ secrets.DEPENDENCY_REPO_TOKEN }}
25+ fetch-depth : 0 # Required to fetch all history for tag detection
26+
27+ - name : Set up Temurin JDK ${{ env.JAVA_VERSION }}
28+ uses : actions/setup-java@v4
29+ with :
30+ distribution : ' temurin'
31+ java-version : ${{ env.JAVA_VERSION }}
32+ cache : ' maven'
33+
34+ - name : Set up Maven
35+ uses : stCarolas/setup-maven@v5
36+ with :
37+ maven-version : 3.9.6
38+
39+ - name : Cache Maven dependencies
40+ uses : actions/cache@v3
41+ with :
42+ path : ~/.m2/repository
43+ key : ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
44+ restore-keys : |
45+ ${{ runner.os }}-maven-
46+
47+ - name : Clone and Install Dev Jars
48+ run : |
49+ git clone https://${{ secrets.DEPENDENCY_REPO_TOKEN }}@github.com/Java-Chains/chains-dev-jars.git chains-dev-jars
50+ cd chains-dev-jars
51+ bash mvn_install.sh
52+ cd ..
53+
54+ - name : Build and Install java-echo-generator
55+ run : |
56+ git clone https://${{ secrets.DEPENDENCY_REPO_TOKEN }}@github.com/Java-Chains/java-echo-generator.git java-echo-generator
57+ cd java-echo-generator
58+ mvn clean install -DskipTests
59+ cd ..
60+
61+ - name : Build and Install java-memshell-generator
62+ run : |
63+ git clone https://${{ secrets.DEPENDENCY_REPO_TOKEN }}@github.com/Java-Chains/java-memshell-generator.git java-memshell-generator
64+ cd java-memshell-generator
65+ mvn clean install -DskipTests
66+ cd ..
67+
68+ # 前端
69+ - name : Set up Node.js ${{ env.NODE_VERSION }}
70+ uses : actions/setup-node@v3
71+ with :
72+ node-version : ${{ env.NODE_VERSION }}
73+
74+ - name : Setup pnpm
75+ uses : pnpm/action-setup@v2
76+ with :
77+ version : ${{ env.PNPM_VERSION }}
78+
79+ - name : Build Frontend
80+ run : |
81+ git clone https://${{ secrets.DEPENDENCY_REPO_TOKEN }}@github.com/Java-chains/java-chains-front.git java-chains-front
82+ cd java-chains-front
83+ pnpm install
84+ pnpm build:prod
85+ cd ..
86+
87+ - name : Copy Frontend Assets to Backend
88+ run : |
89+ mkdir -p web-chains/src/main/resources/static
90+ rm -rf web-chains/src/main/resources/static/*
91+ cp -r java-chains-front/dist/* web-chains/src/main/resources/static/
92+
93+ - name : Build Backend
94+ run : mvn clean package -DskipTests
95+
96+ - name : Create Release Directory
97+ run : mkdir release
98+
99+ - name : Copy Web-Chains JAR to Release
100+ run : cp web-chains-*.jar release/web-chains.jar
101+
102+ - name : Copy Chain-All JAR to Release
103+ run : cp chains-all-*.jar release/chains-all.jar
104+
105+ - name : Upload Release Artifact (for non-tag pushes)
106+ uses : actions/upload-artifact@v4
107+ with :
108+ name : release-${{ inputs.version }}
109+ path : release/
110+
111+
112+ release_draft :
113+ needs : build
114+ permissions : write-all
115+ runs-on : ubuntu-latest
116+
117+ steps :
118+ - name : Download Artifact
119+ uses : actions/download-artifact@v4
120+ with :
121+ name : release-${{ inputs.version }}
122+ path : release/
123+
124+ - name : Create Release
125+ id : create_release
126+ uses : actions/create-release@v1
127+ env :
128+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
129+ with :
130+ tag_name : ${{ inputs.version }}
131+ release_name : Release ${{ inputs.version }}
132+ draft : true
133+
134+ - name : Upload Web-Chains Release Asset
135+ id : upload-web-chains-release-asset
136+ uses : actions/upload-release-asset@v1
137+ env :
138+ GITHUB_TOKEN : ${{ secrets.DEPENDENCY_REPO_TOKEN }}
139+ with :
140+ upload_url : ${{ steps.create_release.outputs.upload_url }}
141+ asset_path : release/web-chains.jar
142+ asset_name : web-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
148+ env :
149+ GITHUB_TOKEN : ${{ secrets.DEPENDENCY_REPO_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
157+ run : |
158+ cd release
159+ git clone https://${{ secrets.DEPENDENCY_REPO_TOKEN }}@github.com/Java-Chains/chains-config.git chains-config
160+ tar -czvf web-chains-all.tar.gz web-chains.jar chains-config
161+ cd ..
162+
163+ - name : Upload Release Asset (Tarball)
164+ id : upload-release-asset-tar
165+ uses : actions/upload-release-asset@v1
166+ env :
167+ GITHUB_TOKEN : ${{ secrets.DEPENDENCY_REPO_TOKEN }}
168+ with :
169+ upload_url : ${{ steps.create_release.outputs.upload_url }}
170+ asset_path : release/web-chains-all.tar.gz
171+ asset_name : web-chains-${{ inputs.version }}-all.tar.gz
172+ asset_content_type : application/gzip
0 commit comments