Skip to content

Build and Release

Build and Release #3

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