67 lines
2.2 KiB
YAML
67 lines
2.2 KiB
YAML
name: Build test native
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- 'master'
|
|
workflow_dispatch:
|
|
|
|
jobs:
|
|
build-and-push:
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Extract project version from pom.xml
|
|
id: project_version # 给步骤一个id以便后续引用
|
|
run: |
|
|
VERSION=$(mvn -q -Dexec.executable=echo -Dexec.args='${project.version}' --non-recursive exec:exec)
|
|
echo "PROJECT_VERSION=$VERSION" >> $GITHUB_ENV
|
|
echo "version=$VERSION" >> "$GITHUB_OUTPUT" # 使用 GITHUB_OUTPUT 在步骤间传递值
|
|
|
|
# ------------------- 阶段二: 使用 GraalVM 构建 Native Image -------------------
|
|
- name: Set up GraalVM for Native Image
|
|
uses: graalvm/setup-graalvm@v1
|
|
with:
|
|
java-version: '24' # GraalVM 24.x 基于 JDK 24
|
|
distribution: 'graalvm'
|
|
version: '24' # 指定使用 GraalVM 24.x
|
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
cache: 'maven' # GraalVM action 也支持缓存 Maven 依赖
|
|
|
|
- name: Build Native Image with Maven
|
|
run: mvn clean package -Pnative -DskipTests
|
|
# -Pnative 激活 pom.xml 中为 native image 定义的 profile
|
|
# native:compile 是 GraalVM 插件提供的编译目标
|
|
|
|
- name: Set up Docker Buildx
|
|
uses: docker/setup-buildx-action@v3
|
|
|
|
- name: Login to Docker Hub
|
|
uses: docker/login-action@v3
|
|
with:
|
|
username: ${{ secrets.DOCKER_USERNAME }}
|
|
password: ${{ secrets.DOCKER_PASSWORD }}
|
|
|
|
- name: Login to GitHub Container Registry
|
|
uses: docker/login-action@v3
|
|
with:
|
|
registry: ghcr.io
|
|
username: ${{ secrets.GHCR_IO_USERNAME }}
|
|
password: ${{ secrets.GHCR_IO_TOKEN }}
|
|
|
|
- name: Build and push Docker image to multiple registries
|
|
uses: docker/build-push-action@v5
|
|
with:
|
|
context: .
|
|
file: ./Dockerfile.native
|
|
push: true
|
|
tags: |
|
|
jmal/jmalcloud:test
|
|
ghcr.io/${{ secrets.GHCR_IO_USERNAME }}/jmalcloud:test
|
|
platforms: linux/amd64,linux/arm64
|
|
build-args: |
|
|
VERSION=${{ env.PROJECT_VERSION }}
|