diff --git a/.github/workflows/validation-native.yaml b/.github/workflows/validation-native.yaml
new file mode 100644
index 00000000..193b981a
--- /dev/null
+++ b/.github/workflows/validation-native.yaml
@@ -0,0 +1,83 @@
+name: Quarkus Hilla Native Validation
+on:
+ pull_request_target:
+ types: [opened, synchronize, reopened, edited]
+permissions:
+ contents: read
+ issues: read
+ checks: write
+ pull-requests: write
+concurrency:
+ group: validation-native-${{ github.head_ref || github.ref_name }}
+ cancel-in-progress: true
+jobs:
+ check-permissions:
+ name: Check User Permissions
+ runs-on: ubuntu-latest
+ steps:
+ - run: echo "Concurrency Group = ${{ github.head_ref || github.ref_name }}"
+ - uses: actions-cool/check-user-permission@main
+ id: checkUser
+ with:
+ username: ${{github.triggering_actor}}
+ require: 'write'
+ - name: Fail on workflow triggered by external contributor
+ if: ${{ steps.checkUser.outputs.require-result != 'true' && github.actor != 'dependabot[bot]' && github.actor != 'quarkus-hilla-bot[bot]' }}
+ run: |
+ echo "🚫 **${{ github.actor }}** is an external contributor, a **${{ github.repository }}** team member has to review this changes and re-run this build" \
+ | tee -a $GITHUB_STEP_SUMMARY && exit 1
+ changes:
+ name: Compute changes
+ needs: [check-permissions]
+ runs-on: ubuntu-latest
+ outputs:
+ validation-required: ${{ steps.filter.outputs.validate }}
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+ with:
+ ref: ${{ github.event.pull_request.head.sha }}
+ - uses: dorny/paths-filter@v3
+ id: filter
+ with:
+ filters: |
+ validate:
+ - '!(README.md|LICENSE|.gitignore|etc/**)'
+ build-and-test-native:
+ name: Native tests
+ needs: [changes]
+ if: ${{ needs.changes.outputs.validation-required == 'true' }}
+ timeout-minutes: 90
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+ with:
+ ref: ${{ github.event.pull_request.head.sha }}
+ - name: Set up Java
+ uses: actions/setup-java@v4
+ with:
+ java-version: 23
+ distribution: 'graalvm'
+ cache: maven
+ - uses: browser-actions/setup-chrome@latest
+ id: setup-chrome
+ if: ${{ !vars.QH_DISABLE_CHROME_INSTALL }}
+ with:
+ chrome-version: stable
+ - name: Build
+ run: |
+ set -x -e -o pipefail
+ mvn -V -e -B -ntp -DskipTests -Dmaven.javadoc.skip=false install
+ - name: Native Test
+ run: |
+ set -x -e -o pipefail
+ mvn -V -e -B -ntp verify -Dmaven.javadoc.skip=false -DtrimStackTrace=false -Dselenide.browserBinary=${{ steps.setup-chrome.outputs.chrome-path }} -Pit-tests,production -Dnative
+ - name: Package test output files
+ if: ${{ failure() || success() }}
+ run: find . -name surefire-reports -o -name failsafe-reports -o -name selenide-reports -o -name quarkus.log | tar -czf tests-report-native.tgz -T -
+ - uses: actions/upload-artifact@v4
+ if: ${{ failure() || success() }}
+ with:
+ name: tests-output-it-native
+ path: tests-report-*.tgz
diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml
index 8e5afea1..fabee6e3 100644
--- a/integration-tests/pom.xml
+++ b/integration-tests/pom.xml
@@ -229,6 +229,26 @@
false
native
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+ true
+
+
+
+ org.apache.maven.plugins
+ maven-failsafe-plugin
+
+
+ **/*NativeIT.java
+
+
+
+
+