actions / setup-java

Set up your GitHub Actions workflow with a specific version of Java
MIT License
1.53k stars 734 forks source link

Add Support for JetBrains Runtime #637

Open gmitch215 opened 3 months ago

gmitch215 commented 3 months ago

Current Workaround

- name: Setup JBR 21
  uses: gmitch215/setup-java@cba808d047291bcc112e7af979a7622d2cd18ff0
  with:
    distribution: 'jetbrains'
    java-version: 21
    cache: 'gradle'
  # For GitHub API (use if you believe you'd run into rate limits)
  env:
    GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

Description: This PR adds support for the JetBrains Runtime, which is required in dependencies like jewel and useful for Compose Multiplatform.

The PR uses the binaries listed in Binaries for Developers , using the JBRSDK with JCEF flavor as shown in the releases page. It uses the GitHub API to find and parse versions, then calculates the URL using cache-redirector.jetbrains.com with the parsed SemVer, OS, Arch, and build number, which all output a .tar.gz file. Left a few comments in there for maintainability.

Since this uses the GitHub API, you can optionally specify a GITHUB_TOKEN environmental variable to increase your rate limit.

Related issue:

Check list:

Notes Tested using jetbrains-installer.test.ts. Most of the tests were copied from other installers, but some I couldn't figure out how to bring over, so additional work may be required. I also copied downloadTool from the Temurin installer.

I also executed npm run build for dist/setup/index.js. I think something else was also thrown because I was on TypeScript 5.3, so I'm not sure how that will affect ncc.

Goooler commented 3 months ago

I'm using your branch as a workaround

  # TODO: replace this once https://github.com/actions/setup-java/pull/637 gets merged.
  - uses: gmitch215/setup-java@07ea605e4b1f0f8b0621155fb1722d6094c3e183
    with:
      distribution: 'jetbrains'
      java-version: 17

with an error:

Installed distributions
  Error: No supported distribution was found for input jetbrains

is there anything I can do?

See:

gmitch215 commented 3 months ago

Hmm, I'll debug and get back here later.

gmitch215 commented 3 months ago

Seems I just forgot to add it to the map of recognized runtimes to their IDs. Update your commit hash and it should succeed.

My project passed with the following configuration:

      - name: Setup JBR 17
        uses: gmitch215/setup-java@7f3ab2648f3d20faa20c4fe6e52a455757e0f38a
        with:
          distribution: 'jetbrains'
          java-version: 17
          cache: 'gradle'

Output: image

Goooler commented 3 months ago

It could be picked correctly now!

But seems some libs are missing in this JDK installed.

Execution failed for task ':checkRuntime'.
You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.
> Failed to check JDK distribution: 'jlink', 'jpackage' are missing

  JDK distribution path: /Users/runner/hostedtoolcache/Java_JetBrains_jdk/17.0.11-1312.2/arm64/Contents/Home

See https://github.com/Goooler/kotlin-explorer/actions/runs/9575738587/job/26401058613.

Goooler commented 3 months ago

The JDK installed by Gradle toolchain worked fine.

Invalid Java installation found at '/Users/runner/.gradle/jdks/jetbrains_s_r_o_-17-aarch64-os_x/jbrsdk_jcef-17.0.11-osx-aarch64-b1207.24/Contents/Home' (Auto-provisioned by Gradle). It will be re-checked in the next build. This might have performance impact if it keeps failing. Run the 'javaToolchains' task for more details.

Seems we need Binaries for developers instead of Binaries for launching IntelliJ IDEA, which is installed by your action. Check https://github.com/JetBrains/JetBrainsRuntime/releases/tag/jbr-release-17.0.11b1312.2.

gmitch215 commented 3 months ago

I switched the URL to the ones listed in the Binaries for Developers section, still getting the same errors. Going to do some more research.

gmitch215 commented 3 months ago

I guessed correctly! :checkRuntime seems to pass.

      - name: Setup JBR 17
        uses: gmitch215/setup-java@99fc2135f7f7b08068e180cb5f29340f9de70720
        with:
          distribution: 'jetbrains'
          java-version: 17
          cache: 'gradle'

(This action failed due to below)

image

Note: Running on windows-latest seems to fail, so I'll fix that too.

Goooler commented 3 months ago

99fc2135f7f7b08068e180cb5f29340f9de70720 works for me now, someone who needs this can ref https://github.com/romainguy/kotlin-explorer/pull/62.

Thanks for your quick response!

gmitch215 commented 3 months ago

Got windows-latest to build now. Everything else works fine too.

      - name: Setup JBR 17
        uses: gmitch215/setup-java@e1f4c15facc0cf68c0e764340e374be034e4a859
        with:
          distribution: 'jetbrains'
          java-version: 17
          cache: 'gradle'
eskatos commented 2 months ago

Thank you @gmitch215, I'm using your branch as a workaround too and can confirm it works fine! It would be great if this contribution could be accepted.

eskatos commented 2 months ago

On a relatively complex workflow with a fan-out setup and composite actions that parallelize builds I get rate limit failures from time to time:

Run gmitch215/setup-java@36531813787dd0ff3269feeb1144b35b3d68f927
  with:
    java-version: 21
    java-package: jdk
    distribution: jetbrains
    check-latest: false
    server-id: github
    server-username: GITHUB_ACTOR
    server-password: GITHUB_TOKEN
    overwrite-settings: true
    job-status: success
    token: ***
Installed distributions
  Trying to resolve the latest version from remote
  Error: API rate limit exceeded for 52.159.14[7](https://github.com/eskatos/private-repository/actions/runs/1234567890/job/1234567890#step:3:8).63. (But here's the good news: Authenticated requests get a higher rate limit. Check out the documentation for more details.)

Is there something that can be done in this action's implementation or on my side?

gmitch215 commented 2 months ago

@eskatos The JetBrains cache-redirector server does rate limit by IP. To my knowledge, there isn't a way to change the rate limit. The root URL's info page is internal as well, and only accessible by employees.

Your best bet is to do something that changes the IP (not sure if re-running it manually does this, but worth a shot). Unless someone knows how the runner could provide authentication.

Edit: This error page is about the GitHub API, which is something I need to add. However, the above is still true.

Edit 2: Done.

- name: Setup JBR 21
  uses: gmitch215/setup-java@b4d76a354bef7187244f74eea4e80e674a7b4b55
  with:
    distribution: 'jetbrains'
    java-version: 21
    cache: 'gradle'
eskatos commented 2 months ago

Re-running did make the job pass indeed.

This error page is about the GitHub API, which is something I need to add.

Thank you for fixing this!

eskatos commented 2 months ago

With b4d76a354bef7187244f74eea4e80e674a7b4b55 I'm getting this:

  Trying to resolve the latest version from remote
  Error: Bad credentials
gmitch215 commented 2 months ago

@eskatos I forgot GitHub doesn't automatically inject the GITHUB_TOKEN environment variable on action workflows.

The action should now check if it is provided. Update to this:

- name: Setup JBR 21
  uses: gmitch215/setup-java@6d2c5e1f82f180ae79f799f0ed6e3e5efb4e664d
  with:
    distribution: 'jetbrains'
    java-version: 21
    cache: 'gradle'
  env:
    GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
eskatos commented 2 months ago

Thanks, works for me!

eskatos commented 3 weeks ago

Hi @HarithaVattikuti,

Sorry about this unsollicited direct ping. I noticed that you recently merged several PRs around JDK support in action/setup-java. I would like to bring your attention to this PR that adds support for the JetBrains Runtime JDK.

It is very useful to anyone doing Compose Multiplatform development. Some folks, including me, are already using it with success.

Would it be possible to give this PR some love?

gmitch215 commented 3 weeks ago

+1. Will try to resolve the merge conflicts at some point.

gmitch215 commented 2 weeks ago

Conflicts have been resolved.

@HarithaVattikuti would love to see this PR get merged.

HarithaVattikuti commented 1 week ago

Hello @gmitch215 , We are working to prioritize this feature. We will update you once we have some feedback.

Jonatha1983 commented 2 days ago

Hi, @gmitch215 - thanks for your work!!! Small question: for now, we should keep using

uses: gmitch215/setup-java@6d2c5e1f82f180ae79f799f0ed6e3e5efb4e664d

Till this is merged?

Thanks again

gmitch215 commented 2 days ago

Hi, @gmitch215 - thanks for your work!!!

Small question: for now, we should keep using


uses: gmitch215/setup-java@6d2c5e1f82f180ae79f799f0ed6e3e5efb4e664d

Till this is merged?

Thanks again

Sure. The most recent commit for the workaround is available in the top message of this PR.