Build and Release #3
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Build and Release | |
on: | |
workflow_dispatch: | |
inputs: | |
version: | |
description: "Release version (e.g. 1.3.1)" | |
required: true | |
type: string | |
jobs: | |
build: | |
runs-on: ubuntu-latest | |
env: | |
JAVA_VERSION: '8' | |
NODE_VERSION: '23.2.0' | |
PNPM_VERSION: '9.13.2' | |
steps: | |
- name: Checkout Backend Code | |
uses: actions/checkout@v3 | |
with: | |
repository: Java-Chains/chains | |
token: ${{ secrets.DEPENDENCY_REPO_TOKEN }} | |
fetch-depth: 0 # Required to fetch all history for tag detection | |
- name: Set up Temurin JDK ${{ env.JAVA_VERSION }} | |
uses: actions/setup-java@v4 | |
with: | |
distribution: 'temurin' | |
java-version: ${{ env.JAVA_VERSION }} | |
cache: 'maven' | |
- name: Set up Maven | |
uses: stCarolas/setup-maven@v5 | |
with: | |
maven-version: 3.9.6 | |
- name: Cache Maven dependencies | |
uses: actions/cache@v3 | |
with: | |
path: ~/.m2/repository | |
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} | |
restore-keys: | | |
${{ runner.os }}-maven- | |
- name: Clone and Install Dev Jars | |
run: | | |
git clone https://${{ secrets.DEPENDENCY_REPO_TOKEN }}@github.com/Java-Chains/chains-dev-jars.git chains-dev-jars | |
cd chains-dev-jars | |
bash mvn_install.sh | |
cd .. | |
- name: Build and Install java-echo-generator | |
run: | | |
git clone https://${{ secrets.DEPENDENCY_REPO_TOKEN }}@github.com/Java-Chains/java-echo-generator.git java-echo-generator | |
cd java-echo-generator | |
mvn clean install -DskipTests | |
cd .. | |
- name: Build and Install java-memshell-generator | |
run: | | |
git clone https://${{ secrets.DEPENDENCY_REPO_TOKEN }}@github.com/Java-Chains/java-memshell-generator.git java-memshell-generator | |
cd java-memshell-generator | |
mvn clean install -DskipTests | |
cd .. | |
# 前端 | |
- name: Set up Node.js ${{ env.NODE_VERSION }} | |
uses: actions/setup-node@v3 | |
with: | |
node-version: ${{ env.NODE_VERSION }} | |
- name: Setup pnpm | |
uses: pnpm/action-setup@v2 | |
with: | |
version: ${{ env.PNPM_VERSION }} | |
- name: Build Frontend | |
run: | | |
git clone https://${{ secrets.DEPENDENCY_REPO_TOKEN }}@github.com/Java-chains/java-chains-front.git java-chains-front | |
cd java-chains-front | |
pnpm install | |
pnpm build:prod | |
cd .. | |
- name: Copy Frontend Assets to Backend | |
run: | | |
mkdir -p web-chains/src/main/resources/static | |
rm -rf web-chains/src/main/resources/static/* | |
cp -r java-chains-front/dist/* web-chains/src/main/resources/static/ | |
- name: Build Backend | |
run: mvn clean package -DskipTests | |
- name: Create Release Directory | |
run: mkdir release | |
- name: Copy Web-Chains JAR to Release | |
run: cp web-chains-*.jar release/web-chains.jar | |
- name: Copy Chain-All JAR to Release | |
run: cp chains-all-*.jar release/chains-all.jar | |
- name: Upload Release Artifact (for non-tag pushes) | |
uses: actions/upload-artifact@v4 | |
with: | |
name: release-${{ inputs.version }} | |
path: release/ | |
release_draft: | |
needs: build | |
permissions: write-all | |
runs-on: ubuntu-latest | |
steps: | |
- name: Download Artifact | |
uses: actions/download-artifact@v4 | |
with: | |
name: release-${{ inputs.version }} | |
path: release/ | |
- name: Create Release | |
id: create_release | |
uses: actions/create-release@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
tag_name: ${{ inputs.version }} | |
release_name: Release ${{ inputs.version }} | |
draft: true | |
- name: Upload Web-Chains Release Asset | |
id: upload-web-chains-release-asset | |
uses: actions/upload-release-asset@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.DEPENDENCY_REPO_TOKEN }} | |
with: | |
upload_url: ${{ steps.create_release.outputs.upload_url }} | |
asset_path: release/web-chains.jar | |
asset_name: web-chains-${{ inputs.version }}.jar | |
asset_content_type: application/java-archive | |
- name: Upload Chains-All Release Asset | |
id: upload-chains-all-release-asset | |
uses: actions/upload-release-asset@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.DEPENDENCY_REPO_TOKEN }} | |
with: | |
upload_url: ${{ steps.create_release.outputs.upload_url }} | |
asset_path: release/chains-all.jar | |
asset_name: chains-all-${{ inputs.version }}.jar | |
asset_content_type: application/java-archive | |
- name: Clone chains-config And Create Distribution Archive | |
run: | | |
cd release | |
git clone https://${{ secrets.DEPENDENCY_REPO_TOKEN }}@github.com/Java-Chains/chains-config.git chains-config | |
tar -czvf web-chains-all.tar.gz web-chains.jar chains-config | |
cd .. | |
- name: Upload Release Asset (Tarball) | |
id: upload-release-asset-tar | |
uses: actions/upload-release-asset@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.DEPENDENCY_REPO_TOKEN }} | |
with: | |
upload_url: ${{ steps.create_release.outputs.upload_url }} | |
asset_path: release/web-chains-all.tar.gz | |
asset_name: web-chains-${{ inputs.version }}-all.tar.gz | |
asset_content_type: application/gzip |