Skip to content

build(deps): bump the maven group across 11 directories with 1 update #513

build(deps): bump the maven group across 11 directories with 1 update

build(deps): bump the maven group across 11 directories with 1 update #513

name: "CI: Native Image"
on:
# `-am` in the install step transitively compiles modules/ai + modules/wasync,
# so a doclint / compile break in those modules fails Native Image even
# though they are not direct `-pl` targets. Trigger on them too.
push:
branches: [ main ]
paths:
- 'modules/cpr/**'
- 'modules/ai/**'
- 'modules/wasync/**'
- 'modules/spring-boot-starter/**'
- 'modules/quarkus-extension/**'
- 'samples/spring-boot-chat/**'
- 'samples/quarkus-chat/**'
- '.mvn/**'
- 'pom.xml'
- '.github/workflows/native-image-ci.yml'
pull_request:
branches: [ main ]
paths:
- 'modules/cpr/**'
- 'modules/ai/**'
- 'modules/wasync/**'
- 'modules/spring-boot-starter/**'
- 'modules/quarkus-extension/**'
- 'samples/spring-boot-chat/**'
- 'samples/quarkus-chat/**'
- '.mvn/**'
- 'pom.xml'
- '.github/workflows/native-image-ci.yml'
workflow_dispatch:
jobs:
spring-boot-native:
name: Spring Boot Native Image
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Set up GraalVM 25
uses: graalvm/setup-graalvm@v1
with:
java-version: '25'
distribution: 'graalvm'
cache: 'maven'
- name: Install Atmosphere Modules
run: ./mvnw -B install -DskipTests -Dgpg.skip=true -pl modules/cpr,modules/spring-boot-starter,modules/wasync -am
- name: Build Spring Boot Native Image
run: ./mvnw -B -Pnative package -DskipTests -Dgpg.skip=true -pl samples/spring-boot-chat
timeout-minutes: 20
- name: Verify Native Binary Exists
run: |
BINARY=$(find samples/spring-boot-chat/target -maxdepth 1 -name 'atmosphere-spring-boot-chat*' -not -name '*.jar' -not -name '*.jar.original' -not -name '*.txt' -type f -executable | head -1)
if [ -z "$BINARY" ]; then
echo "Native binary not found. Contents of target/:"
ls -lh samples/spring-boot-chat/target/
exit 1
fi
echo "NATIVE_BINARY=$BINARY" >> "$GITHUB_ENV"
ls -lh "$BINARY"
file "$BINARY"
- name: Smoke Test Native Binary
run: |
"$NATIVE_BINARY" &
PID=$!
# Wait for startup (native images start fast)
for i in $(seq 1 30); do
if curl -sf http://localhost:8080/actuator/health > /dev/null 2>&1; then
echo "Application started successfully"
kill $PID
exit 0
fi
sleep 1
done
echo "Application failed to start within 30 seconds"
kill $PID 2>/dev/null || true
exit 1
- name: Upload Native Binary
if: failure()
uses: actions/upload-artifact@v7
with:
name: spring-boot-native-artifacts
path: samples/spring-boot-chat/target/
quarkus-native:
name: Quarkus Native Image
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Set up JDK 21
uses: actions/setup-java@v5
with:
java-version: '21'
distribution: 'temurin'
cache: 'maven'
- name: Install Atmosphere Modules
run: ./mvnw -B install -DskipTests -Dgpg.skip=true
- name: Build Quarkus Native Image (container build)
run: ./mvnw -B -Dnative -Dquarkus.native.container-build=true -Dquarkus.native.builder-image=quay.io/quarkus/ubi9-quarkus-mandrel-builder-image:jdk-21 package -DskipTests -Dgpg.skip=true -pl samples/quarkus-chat
timeout-minutes: 20
- name: Verify Native Binary Exists
run: |
ls -lh samples/quarkus-chat/target/*-runner
file samples/quarkus-chat/target/*-runner
- name: Smoke Test Native Binary
run: |
samples/quarkus-chat/target/*-runner &
PID=$!
for i in $(seq 1 30); do
if curl -sf http://localhost:8080/ > /dev/null 2>&1; then
echo "Application started successfully"
kill $PID
exit 0
fi
sleep 1
done
echo "Application failed to start within 30 seconds"
kill $PID 2>/dev/null || true
exit 1
- name: Upload Native Binary
if: failure()
uses: actions/upload-artifact@v7
with:
name: quarkus-native-artifacts
path: samples/quarkus-chat/target/