Set up your GitHub Actions workflow with a specific version of Java
Find a file
Plamen Totev 249ea4386f Normalize the version before it is looked up in the tool cache
Currently the resolved version is cached. For example something like 8.0.141.
On other hand when a version is looked up in the cache the string provided
by the user is used. This may lead to unexpected behavior. 1.8 will not match
8.0.141. Normalizing the version string before looking up in the tool cache
will solve the problem. The normalized version (8.x) will match the
entry in the cache as expected.

Normalizing the string in the beginning of the flow won't hurt
as it is a valid version specification. What is more it the user can supply
the normalized version directly so the code should be able to work with it.
2020-04-14 21:17:06 +03:00
.github standardize workflow test pattern 2020-02-11 19:38:16 -05:00
__tests__ Normalize the version before it is looked up in the tool cache 2020-04-14 21:17:06 +03:00
dist add retries and error handling 2020-02-11 16:37:51 -05:00
docs Update contributors.md 2019-11-25 11:36:48 -05:00
src Normalize the version before it is looked up in the tool cache 2020-04-14 21:17:06 +03:00
.gitattributes Update gitattributes and remove lib files 2019-11-28 13:35:47 -08:00
.gitignore ignore vscode directory 2019-11-28 13:35:47 -08:00
.prettierrc.json Populate repo 2019-07-10 10:54:25 -04:00
action.yml Update README and action.yml to describe java-version syntax 2020-01-09 00:45:37 -08:00
jest.config.js Populate repo 2019-07-10 10:54:25 -04:00
LICENSE Populate repo 2019-07-10 10:54:25 -04:00
package-lock.json Bump acorn from 5.7.3 to 5.7.4 2020-03-16 11:25:52 +00:00
package.json Update packages to support http_proxy 2020-02-06 15:44:54 -05:00
README.md Merge pull request #41 from foo-actions/master 2020-02-12 09:58:10 -05:00
tsconfig.json Populate repo 2019-07-10 10:54:25 -04:00
yaml-lint-config.yml Create yaml-lint-config.yml 2019-11-25 12:15:12 -05:00

setup-java

GitHub Actions status

This action sets up a java environment for use in actions by:

  • optionally downloading and caching a requested version of java by version and adding to PATH. Default downloads are populated from the Zulu Community distribution of OpenJDK
  • registering problem matchers for error output

Usage

See action.yml

Basic

steps:
- uses: actions/checkout@v2
- uses: actions/setup-java@v1
  with:
    java-version: '9.0.4' # The JDK version to make available on the path.
    java-package: jdk # (jre, jdk, or jdk+fx) - defaults to jdk
    architecture: x64 # (x64 or x86) - defaults to x64
- run: java -cp java HelloWorldApp

Examples of version specifications that the java-version parameter will accept:

  • A major Java version

    e.g. 6, 7, 8, 9, 10, 11, 12, 13, ...

  • A semver Java version specification

    e.g. 8.0.232, 7.0.181, 11.0.4

    e.g. 8.0.x, >11.0.3, >=13.0.1, <8.0.212

  • An early access (EA) Java version

    e.g. 14-ea, 15-ea

    e.g. 14.0.0-ea, 15.0.0-ea

    e.g. 14.0.0-ea.28, 15.0.0-ea.2 (syntax for specifying an EA build number)

    Note that, per semver rules, EA builds will be matched by explicit EA version specifications.

  • 1.x syntax

    e.g. 1.8 (same as 8)

    e.g. 1.8.0.212 (same as 8.0.212)

Local file

steps:
- uses: actions/checkout@v2
- uses: actions/setup-java@v1
  with:
    java-version: '4.0.0'
    architecture: x64
    jdkFile: <path to jdkFile> # Optional - jdkFile to install java from. Useful for versions not found on Zulu Community CDN
- run: java -cp java HelloWorldApp

Matrix Testing

jobs:
  build:
    runs-on: ubuntu-16.04
    strategy:
      matrix:
        # test against latest update of each major Java version, as well as specific updates of LTS versions:
        java: [ 1.6, 6.0.83, 7, 7.0.181, 8, 8.0.192, 9.0.x, 10, 11.0.x, 11.0.3, 12, 13 ]
    name: Java ${{ matrix.java }} sample
    steps:
      - uses: actions/checkout@v2
      - name: Setup java
        uses: actions/setup-java@v1
        with:
          java-version: ${{ matrix.java }}
      - run: java -cp java HelloWorldApp

Publishing using Apache Maven

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: Set up JDK 1.8
      uses: actions/setup-java@v1
      with:
        java-version: 1.8

    - name: Build with Maven
      run: mvn -B package --file pom.xml

    - name: Publish to GitHub Packages Apache Maven
      run: mvn deploy
      env:
        GITHUB_TOKEN: ${{ github.token }} # GITHUB_TOKEN is the default env for the password

    - name: Set up Apache Maven Central
      uses: actions/setup-java@v1
      with: # running setup-java again overwrites the settings.xml
        java-version: 1.8
        server-id: maven # Value of the distributionManagement/repository/id field of the pom.xml
        server-username: MAVEN_USERNAME # env variable for username in deploy
        server-password: MAVEN_CENTRAL_TOKEN # env variable for token in deploy

    - name: Publish to Apache Maven Central
      run: mvn deploy 
      env:
        MAVEN_USERNAME: maven_username123
        MAVEN_CENTRAL_TOKEN: ${{ secrets.MAVEN_CENTRAL_TOKEN }}

The two settings.xml files created from the above example look like the following.

settings.xml file created for the first deploy to GitHub Packages

<servers>
    <server>
      <id>github</id>
      <username>${env.GITHUB_ACTOR}</username>
      <password>${env.GITHUB_TOKEN}</password>
    </server>
</servers>

settings.xml file created for the second deploy to Apache Maven Central

<servers>
    <server>
      <id>maven</id>
      <username>${env.MAVEN_USERNAME}</username>
      <password>${env.MAVEN_CENTRAL_TOKEN}</password>
    </server>
</servers>

NOTE: The settings.xml file is created in the Actions $HOME directory. If you have an existing settings.xml file at that location, it will be overwritten. See below for using the settings-path to change your settings.xml file location.

See the help docs on Publishing a Package for more information on the pom.xml file.

Publishing using Gradle

jobs:

  build:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2

    - name: Set up JDK 1.8
      uses: actions/setup-java@v1

    - name: Build with Gradle
      run: gradle build

    - name: Publish to GitHub Packages
      run: gradle publish
      env:
        USERNAME: ${{ github.actor }}
        PASSWORD: ${{ secrets.GITHUB_TOKEN }}

NOTE: The USERNAME and PASSWORD need to correspond to the credentials environment variables used in the publishing section of your build.gradle.

See the help docs on Publishing a Package with Gradle for more information on the build.gradle configuration file.

Apache Maven with a settings path

When using an Actions self-hosted runner with multiple shared runners the default $HOME directory can be shared by a number runners at the same time which could overwrite existing settings file. Setting the settings-path variable allows you to choose a unique location for your settings file.

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: Set up JDK 1.8 for Shared Runner
      uses: actions/setup-java@v1
      with:
        java-version: 1.8
        server-id: github # Value of the distributionManagement/repository/id field of the pom.xml
        settings-path: ${{ github.workspace }} # location for the settings.xml file

    - name: Build with Maven
      run: mvn -B package --file pom.xml

    - name: Publish to GitHub Packages Apache Maven
      run: mvn deploy -s $GITHUB_WORKSPACE/settings.xml
      env:
        GITHUB_TOKEN: ${{ github.token }}

License

The scripts and documentation in this project are released under the MIT License

Contributions

Contributions are welcome! See Contributor's Guide