From 580c3a24ec8fcaa41ee2fce85c96068db77a8139 Mon Sep 17 00:00:00 2001 From: Lorenz Leutgeb Date: Mon, 20 Dec 2021 07:55:35 +0100 Subject: [PATCH] cli: Add Native Image build --- .github/workflows/build.yml | 21 +++++++++++++++++++ alpha-cli-app/build.gradle.kts | 19 +++++++++++++++++ .../native-image/resource-config.json | 11 ++++++++++ 3 files changed, 51 insertions(+) create mode 100644 alpha-cli-app/src/main/resources/META-INF/native-image/resource-config.json diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1902bcbfe..684195f89 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -58,3 +58,24 @@ jobs: - uses: codecov/codecov-action@v1 if: matrix.os == env.MAIN_OS && matrix.java == env.MAIN_JAVA continue-on-error: true + native-image: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + with: + submodules: recursive + fetch-depth: 0 + - name: Set up Graal + run: | + mkdir graalvm + wget -qO- 'https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-21.3.0/graalvm-ce-java17-linux-amd64-21.3.0.tar.gz' | tar xzf - --strip-components=1 -C graalvm + echo "${PWD}/graalvm/bin" >> $GITHUB_PATH + echo "JAVA_HOME=${PWD}/graalvm" >> $GITHUB_ENV + - run: sudo apt-get install -y build-essential libz-dev zlib1g-dev + - run: | + echo $LD_LIBRARY_PATH + sudo ldconfig + - run: gu install native-image + - uses: gradle/gradle-build-action@v2 + with: + arguments: build --stacktrace alpha-cli-app:nativeImage -x test diff --git a/alpha-cli-app/build.gradle.kts b/alpha-cli-app/build.gradle.kts index a62227309..5fb1950d3 100644 --- a/alpha-cli-app/build.gradle.kts +++ b/alpha-cli-app/build.gradle.kts @@ -1,5 +1,7 @@ plugins { id("alpha.java-application-conventions") + id("com.github.johnrengelman.shadow") version "7.1.1" + id("org.mikeneck.graalvm-native-image") version "1.4.1" } dependencies { @@ -71,3 +73,20 @@ tasks.create("bundledJar") { tasks.test { useJUnitPlatform() } + +tasks.shadowJar { + archiveClassifier.set("shadow") +} + +tasks.nativeImage { + mainClass = main + //mainClass.set(main) + executableName = "alpha" + arguments( + "--no-fallback", + "-H:Log=registerResource", + "-H:+ReportExceptionStackTraces", + //"-H:ResourceConfigurationFiles=src/main/resources/native-image/resource-config.json", + "--report-unsupported-elements-at-runtime" + ) +} diff --git a/alpha-cli-app/src/main/resources/META-INF/native-image/resource-config.json b/alpha-cli-app/src/main/resources/META-INF/native-image/resource-config.json new file mode 100644 index 000000000..78ea7d079 --- /dev/null +++ b/alpha-cli-app/src/main/resources/META-INF/native-image/resource-config.json @@ -0,0 +1,11 @@ +{ + "resources": { + "includes": [ + { + "pattern": "alpha-core:/stringtemplates/aggregate-encodings.stg", + "pattern": ".*" + } + ] + }, + "bundles": [] +}