Giter Site home page Giter Site logo

andrzejressel / setup-graalvm Goto Github PK

View Code? Open in Web Editor NEW

This project forked from graalvm/setup-graalvm

0.0 0.0 0.0 1.7 MB

GitHub Action for setting up GraalVM distributions.

Home Page: https://www.graalvm.org

License: Universal Permissive License v1.0

JavaScript 0.20% TypeScript 99.80%

setup-graalvm's Introduction

GitHub Action for GraalVM build-test

This GitHub action sets up Oracle GraalVM, GraalVM Community Edition (CE), Enterprise Edition (EE), or Mandrel, as well as Native Image and GraalVM components such as Truffle languages.

Key Features

This action:

  • supports Oracle GraalVM releases, GraalVM Community Edition (CE) releases, dev builds, GraalVM Enterprise Edition (EE) releases (set gds-token) 22.1.0 and later, and Mandrel (see Options)
  • exports a $GRAALVM_HOME environment variable
  • adds $GRAALVM_HOME/bin to the $PATH environment variable
    (Native Image, Truffle languages, and tools can be invoked directly)
  • sets $JAVA_HOME to $GRAALVM_HOME by default
    (can be disabled via set-java-home: 'false', see Options)
  • supports x64 and aarch64 (selected automatically, aarch64 requires a self-hosted runner)
  • supports dependency caching for Apache Maven, Gradle, and sbt (see cache option)
  • sets up Windows environments with build tools using vcvarsall.bat
  • has built-in support for GraalVM components and the GraalVM Updater

Migrating from GraalVM 22.3 or Earlier to the New GraalVM for JDK 17 and Later

The new GraalVM for JDK 17 and JDK 20 release aligns the GraalVM version scheme with OpenJDK. As a result, this action no longer requires the version option to select a specific GraalVM version. At the same time, it introduces a new distribution option to select a specific GraalVM distribution (graalvm, graalvm-community, or mandrel). Therefore, to migrate your workflow to use the latest GraalVM release, replace the version with the distribution option in the workflow yml config, for example:

# ...
- uses: graalvm/setup-graalvm@v1
  with:
    java-version: '17'
    version: '22.3.2' # Old 'version' option for the GraalVM version
    # ...

can be replaced with:

# ...
- uses: graalvm/setup-graalvm@v1
  with:
    java-version: '17.0.7' # for a specific JDK 17; or '17' for the latest JDK 17
    distribution: 'graalvm' # New 'distribution' option
    # ...

Templates

Quickstart Template

name: GraalVM build
on: [push, pull_request]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: graalvm/setup-graalvm@v1
        with:
          java-version: '17.0.7'
          distribution: 'graalvm' # See 'Options' for all available distributions
          github-token: ${{ secrets.GITHUB_TOKEN }}
      - name: Example step
        run: |
          echo "GRAALVM_HOME: $GRAALVM_HOME"
          echo "JAVA_HOME: $JAVA_HOME"
          java --version
          native-image --version
      - name: Example step using Maven plugin  # https://graalvm.github.io/native-build-tools/latest/maven-plugin.html
        run: mvn -Pnative package
      - name: Example step using Gradle plugin # https://graalvm.github.io/native-build-tools/latest/gradle-plugin.html
        run: gradlew nativeCompile

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:
          java-version: '17.0.7'
          distribution: 'graalvm'
          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*

Template for older GraalVM releases

name: GraalVM 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.2' # GraalVM version
          java-version: '17'
          components: 'native-image'
          github-token: ${{ secrets.GITHUB_TOKEN }}

Template for GraalVM Enterprise Edition

Prerequisites

  1. Download the version of GraalVM Enterprise Edition (EE) you want to run on GitHub Actions.
  2. Use the GraalVM Updater to install the GraalVM components you need on GitHub Actions and accept the corresponding licenses.
  3. Run $GRAALVM_HOME/bin/gu --show-ee-token to display your token for the GraalVM Download Service.
  4. 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
java-version
(required)
n/a '17.0.7' or '20.0.1' for a specific Java version, 'dev' for a dev build with the latest Java version available.
('8', '11', '16', '19' are supported for older GraalVM releases.)
distribution '' GraalVM distribution (graalvm for Oracle GraalVM, graalvm-community for GraalVM Community Edition, mandrel for Mandrel).
github-token '${{ github.token }}' Token for communication with the GitHub API. Please set this to ${{ secrets.GITHUB_TOKEN }} (see templates) to allow the action to authenticate with the GitHub API, which helps 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. Turned off by default (''). It can also 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.
components '' Comma-separated list of GraalVM components (e.g., native-image or ruby,nodejs) that will be installed by the GraalVM Updater.
version '' X.Y.Z (e.g., 22.3.0) for a specific GraalVM release up to 22.3.2
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).

*) 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.

setup-graalvm's People

Contributors

dependabot[bot] avatar fniephaus avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.