GitHub Action for GraalVM
This GitHub action sets up GraalVM Community Edition (CE) or Enterprise Edition (EE) as well as GraalVM components such as Native Image and Truffle languages.
Key Features
This action:
- supports GraalVM Community Edition (CE) releases, dev builds, GraalVM Enterprise Edition (EE) releases (set
gds-token
) 22.1.0 and later, and Mandrel (see options) - has built-in support for GraalVM components and the GraalVM Updater
- exports a
$GRAALVM_HOME
environment variable - adds
$GRAALVM_HOME/bin
to the$PATH
environment variable
(Truffle languages and tools can be invoked directly) - sets
$JAVA_HOME
to$GRAALVM_HOME
by default
(can be disabled viaset-java-home: 'false'
, see options) - supports
amd64
andaarch64
(selected automatically,aarch64
requires a self-hosted runner) - sets up Windows environments with build tools using vcvarsall.bat
- supports dependency caching for Apache Maven, Gradle, and sbt (see
cache
option)
Templates
Quickstart Template
name: GraalVM Community Edition build
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: graalvm/setup-graalvm@v1
with:
version: 'latest'
java-version: '17'
components: 'native-image'
github-token: ${{ secrets.GITHUB_TOKEN }}
- name: Example step
run: |
echo "GRAALVM_HOME: $GRAALVM_HOME"
echo "JAVA_HOME: $JAVA_HOME"
java --version
gu --version
native-image --version
Building a HelloWorld with GraalVM Native Image on Different Platforms
name: GraalVM Native Image builds
on: [push, pull_request]
jobs:
build:
name: HelloWorld on ${{ matrix.os }}
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [macos-latest, windows-latest, ubuntu-latest]
steps:
- uses: actions/checkout@v3
- uses: graalvm/setup-graalvm@v1
with:
version: '22.3.0'
java-version: '17'
components: 'native-image'
github-token: ${{ secrets.GITHUB_TOKEN }}
native-image-job-reports: 'true'
- name: Build and run HelloWorld.java
run: |
echo 'public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World!"); } }' > HelloWorld.java
javac HelloWorld.java
native-image HelloWorld
./helloworld
- name: Upload binary
uses: actions/upload-artifact@v2
with:
name: helloworld-${{ matrix.os }}
path: helloworld*
Basic GraalVM Enterprise Edition Template
Prerequisites
- Download the version of GraalVM Enterprise Edition (EE) you want to run on GitHub Actions.
- Use the GraalVM Updater to install the GraalVM components you need on GitHub Actions and accept the corresponding licenses.
- Run
$GRAALVM_HOME/bin/gu --show-ee-token
to display your token for the GraalVM Download Service. - Store this token as a GitHub Action secret. For this template, we use the name
GDS_TOKEN
.
name: GraalVM Enterprise Edition build
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: graalvm/setup-graalvm@v1
with:
version: '22.3.0'
gds-token: ${{ secrets.GDS_TOKEN }}
java-version: '17'
components: 'native-image'
github-token: ${{ secrets.GITHUB_TOKEN }}
- name: Example step
run: |
java --version
native-image --version
Options
Name | Default | Description |
---|---|---|
version (required) |
n/a | X.Y.Z (e.g., 22.3.0 ) for a specific GraalVM releaselatest for latest stable release,dev for latest dev build,mandrel-X.Y.Z (e.g., mandrel-21.3.0.0-Final ) for a specific Mandrel release,mandrel-latest for latest Mandrel stable release. |
gds-token |
'' |
Download token for the GraalVM Download Service. If a non-empty token is provided, the action will set up GraalVM Enterprise Edition (see GraalVM EE template). |
java-version (required) |
n/a | '17' or '19' for a specific Java version, 'dev' for the highest Java version available (requires version: 'dev' ).( '8' , '11' , '16' are supported for older GraalVM releases.) |
components |
'' |
Comma-spearated list of GraalVM components (e.g., native-image or ruby,nodejs ) that will be installed by the GraalVM Updater. |
github-token |
'${{ github.token }}' |
Token for communication with the GitHub API. Please set to ${{ secrets.GITHUB_TOKEN }} (see templates) to allow the action to authenticate with the GitHub API, which helps to reduce rate limiting issues. |
set-java-home |
'true' |
If set to 'true' , instructs the action to set $JAVA_HOME to the path of the GraalVM installation. Overrides any previous action or command that sets $JAVA_HOME . |
cache |
'' |
Name of the build platform to cache dependencies. It can be 'maven' , 'gradle' , or 'sbt' and works the same way as described in actions/setup-java. |
check-for-updates |
'true' |
Annotate jobs with update notifications, for example, when a new GraalVM release is available. |
native-image-musl |
'false' |
If set to 'true' , sets up musl to build static binaries with GraalVM Native Image (Linux only). Example usage (be sure to replace uses: ./ with uses: graalvm/setup-graalvm@v1 ). |
native-image-job-reports *) |
'false' |
If set to 'true' , post a job summary containing a Native Image build report. |
native-image-pr-reports *) |
'false' |
If set to 'true' , post a comment containing a Native Image build report on pull requests. Requires write permissions for the pull-requests scope. |
*) Make sure that Native Image is used only once per build job. Otherwise, the report is only generated for the last Native Image build.
Contributing
We welcome code contributions. To get started, you will need to sign the Oracle Contributor Agreement (OCA).
Only pull requests from committers that can be verified as having signed the OCA can be accepted.