Skip to content

Commit 0dfc6a6

Browse files
committed
Build: use gradle-jvm-wrapper for ease of development
1 parent 1e83e6e commit 0dfc6a6

File tree

7 files changed

+189
-11
lines changed

7 files changed

+189
-11
lines changed

.github/workflows/main.yml

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,16 @@ jobs:
1818
image: [macos-12, ubuntu-22.04, windows-2022]
1919
fail-fast: false
2020
steps:
21-
- uses: actions/checkout@v4
21+
- name: "Check out the sources"
22+
uses: actions/checkout@v4
2223

23-
- name: Setup Java
24-
uses: actions/setup-java@v4
24+
- name: Cache downloaded JDK
25+
uses: actions/cache@v4
2526
with:
26-
distribution: 'corretto'
27-
java-version: '17'
27+
path: |
28+
~/.local/share/gradle-jvm
29+
~/AppData/Local/gradle-jvm
30+
key: ${{ runner.os }}-${{ hashFiles('gradlew*') }}
2831

2932
- name: "Validate Gradle wrapper"
3033
uses: gradle/actions/wrapper-validation@v3

.github/workflows/release.yml

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,17 @@ jobs:
2020
shell: pwsh
2121
run: echo "version=$(if ($env:GITHUB_REF.StartsWith('refs/tags/v')) { $env:GITHUB_REF -replace '^refs/tags/v', '' } else { 'next' })" >> $env:GITHUB_OUTPUT
2222

23-
- name: Checkout
23+
- name: "Check out the sources"
2424
uses: actions/checkout@v4
2525

26+
- name: Cache downloaded JDK
27+
uses: actions/cache@v4
28+
with:
29+
path: |
30+
~/.local/share/gradle-jvm
31+
~/AppData/Local/gradle-jvm
32+
key: ${{ runner.os }}-${{ hashFiles('gradlew*') }}
33+
2634
- name: Read the changelog
2735
uses: ForNeVeR/ChangelogAutomation.action@v1
2836
with:

CONTRIBUTING.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@ Keep an eye on the following issue labels:
1414

1515
Development Prerequisites
1616
-------------------------
17-
To develop the plugin, JDK 17 should be installed. For example, get [Amazon Corretto 17][downloads.corretto].
17+
JDK 17 is required to develop the plugin.
18+
19+
If you use the default Gradle wrapper (`gradlew` or `gradlew.bat`), it will be auto-downloaded on wrapper start. Otherwise (say, to open the project in an IDE), you should get a JDK17-compatible installation. For example, install [Amazon Corretto 17][downloads.corretto].
1820

1921
Build and Test
2022
--------------

build.gradle.kts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ plugins {
99
id("java")
1010
alias(libs.plugins.changelog)
1111
alias(libs.plugins.download)
12+
alias(libs.plugins.gradleJvmWrapper)
1213
alias(libs.plugins.grammarkit)
1314
alias(libs.plugins.intellij)
1415
alias(libs.plugins.kotlin)
@@ -60,10 +61,6 @@ configurations {
6061
}
6162

6263
tasks {
63-
wrapper {
64-
gradleVersion = "8.3"
65-
}
66-
6764
val resources = file("src/main/resources")
6865

6966
generateLexer {

gradle/libs.versions.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ junixsocket = ["junixsocket-common", "junixsocket-native-common"]
1414
[plugins]
1515
changelog = { id = "org.jetbrains.changelog", version = "2.2.0" }
1616
download = { id = "de.undercouch.download", version = "5.6.0" }
17+
gradleJvmWrapper = "me.filippov.gradle.jvm.wrapper:0.14.0"
1718
grammarkit = { id = "org.jetbrains.grammarkit", version = "2022.3.2.2" }
1819
intellij = { id = "org.jetbrains.intellij", version = "1.17.3" }
1920
kotlin = { id = "org.jetbrains.kotlin.jvm", version = "1.9.24" }

gradlew

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,97 @@ esac
115115
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
116116

117117

118+
# GRADLE JVM WRAPPER START MARKER
119+
BUILD_DIR="${HOME}/.local/share/gradle-jvm"
120+
JVM_ARCH=$(uname -m)
121+
JVM_TEMP_FILE=$BUILD_DIR/gradle-jvm-temp.tar.gz
122+
if [ "$darwin" = "true" ]; then
123+
case $JVM_ARCH in
124+
x86_64)
125+
JVM_URL=https://download.oracle.com/java/17/archive/jdk-17.0.3.1_macos-x64_bin.tar.gz
126+
JVM_TARGET_DIR=$BUILD_DIR/jdk-17.0.3.1_macos-x64_bin-1bcf03
127+
;;
128+
arm64)
129+
JVM_URL=https://download.oracle.com/java/17/archive/jdk-17.0.3.1_macos-aarch64_bin.tar.gz
130+
JVM_TARGET_DIR=$BUILD_DIR/jdk-17.0.3.1_macos-aarch64_bin-297fa2
131+
;;
132+
*)
133+
die "Unknown architecture $JVM_ARCH"
134+
;;
135+
esac
136+
elif [ "$cygwin" = "true" ] || [ "$msys" = "true" ]; then
137+
JVM_URL=https://download.oracle.com/java/17/archive/jdk-17.0.3.1_windows-x64_bin.zip
138+
JVM_TARGET_DIR=$BUILD_DIR/jdk-17.0.3.1_windows-x64_bin-d6ede5
139+
else
140+
JVM_ARCH=$(linux$(getconf LONG_BIT) uname -m)
141+
case $JVM_ARCH in
142+
x86_64)
143+
JVM_URL=https://download.oracle.com/java/17/archive/jdk-17.0.3.1_linux-x64_bin.tar.gz
144+
JVM_TARGET_DIR=$BUILD_DIR/jdk-17.0.3.1_linux-x64_bin-9324ae
145+
;;
146+
aarch64)
147+
JVM_URL=https://download.oracle.com/java/17/archive/jdk-17.0.3.1_linux-aarch64_bin.tar.gz
148+
JVM_TARGET_DIR=$BUILD_DIR/jdk-17.0.3.1_linux-aarch64_bin-319da6
149+
;;
150+
*)
151+
die "Unknown architecture $JVM_ARCH"
152+
;;
153+
esac
154+
fi
155+
156+
set -e
157+
158+
if [ -e "$JVM_TARGET_DIR/.flag" ] && [ -n "$(ls "$JVM_TARGET_DIR")" ] && [ "x$(cat "$JVM_TARGET_DIR/.flag")" = "x${JVM_URL}" ]; then
159+
# Everything is up-to-date in $JVM_TARGET_DIR, do nothing
160+
true
161+
else
162+
echo "Downloading $JVM_URL to $JVM_TEMP_FILE"
163+
164+
rm -f "$JVM_TEMP_FILE"
165+
mkdir -p "$BUILD_DIR"
166+
if command -v curl >/dev/null 2>&1; then
167+
if [ -t 1 ]; then CURL_PROGRESS="--progress-bar"; else CURL_PROGRESS="--silent --show-error"; fi
168+
# shellcheck disable=SC2086
169+
curl $CURL_PROGRESS -L --output "${JVM_TEMP_FILE}" "$JVM_URL" 2>&1
170+
elif command -v wget >/dev/null 2>&1; then
171+
if [ -t 1 ]; then WGET_PROGRESS=""; else WGET_PROGRESS="-nv"; fi
172+
wget $WGET_PROGRESS -O "${JVM_TEMP_FILE}" "$JVM_URL" 2>&1
173+
else
174+
die "ERROR: Please install wget or curl"
175+
fi
176+
177+
echo "Extracting $JVM_TEMP_FILE to $JVM_TARGET_DIR"
178+
rm -rf "$JVM_TARGET_DIR"
179+
mkdir -p "$JVM_TARGET_DIR"
180+
181+
case "$JVM_URL" in
182+
*".zip") unzip "$JVM_TEMP_FILE" -d "$JVM_TARGET_DIR" ;;
183+
*) tar -x -f "$JVM_TEMP_FILE" -C "$JVM_TARGET_DIR" ;;
184+
esac
185+
186+
rm -f "$JVM_TEMP_FILE"
187+
188+
echo "$JVM_URL" >"$JVM_TARGET_DIR/.flag"
189+
fi
190+
191+
JAVA_HOME=
192+
for d in "$JVM_TARGET_DIR" "$JVM_TARGET_DIR"/* "$JVM_TARGET_DIR"/Contents/Home "$JVM_TARGET_DIR"/*/Contents/Home; do
193+
if [ -e "$d/bin/java" ]; then
194+
JAVA_HOME="$d"
195+
fi
196+
done
197+
198+
if [ '!' -e "$JAVA_HOME/bin/java" ]; then
199+
die "Unable to find bin/java under $JVM_TARGET_DIR"
200+
fi
201+
202+
# Make it available for child processes
203+
export JAVA_HOME
204+
205+
set +e
206+
207+
# GRADLE JVM WRAPPER END MARKER
208+
118209
# Determine the Java command to use to start the JVM.
119210
if [ -n "$JAVA_HOME" ] ; then
120211
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then

gradlew.bat

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,82 @@ for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
3636
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
3737
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
3838

39+
@rem GRADLE JVM WRAPPER START MARKER
40+
41+
setlocal
42+
set BUILD_DIR=%LOCALAPPDATA%\gradle-jvm
43+
set JVM_TARGET_DIR=%BUILD_DIR%\jdk-17.0.3.1_windows-x64_bin-d6ede5\
44+
45+
set JVM_URL=https://download.oracle.com/java/17/archive/jdk-17.0.3.1_windows-x64_bin.zip
46+
47+
set IS_TAR_GZ=0
48+
set JVM_TEMP_FILE=gradle-jvm.zip
49+
50+
if /I "%JVM_URL:~-7%"==".tar.gz" (
51+
set IS_TAR_GZ=1
52+
set JVM_TEMP_FILE=gradle-jvm.tar.gz
53+
)
54+
55+
set POWERSHELL=%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe
56+
57+
if not exist "%JVM_TARGET_DIR%" MD "%JVM_TARGET_DIR%"
58+
59+
if not exist "%JVM_TARGET_DIR%.flag" goto downloadAndExtractJvm
60+
61+
set /p CURRENT_FLAG=<"%JVM_TARGET_DIR%.flag"
62+
if "%CURRENT_FLAG%" == "%JVM_URL%" goto continueWithJvm
63+
64+
:downloadAndExtractJvm
65+
66+
PUSHD "%BUILD_DIR%"
67+
if errorlevel 1 goto fail
68+
69+
echo Downloading %JVM_URL% to %BUILD_DIR%\%JVM_TEMP_FILE%
70+
if exist "%JVM_TEMP_FILE%" DEL /F "%JVM_TEMP_FILE%"
71+
"%POWERSHELL%" -nologo -noprofile -Command "Set-StrictMode -Version 3.0; $ErrorActionPreference = \"Stop\"; (New-Object Net.WebClient).DownloadFile('%JVM_URL%', '%JVM_TEMP_FILE%')"
72+
if errorlevel 1 goto fail
73+
74+
POPD
75+
76+
RMDIR /S /Q "%JVM_TARGET_DIR%"
77+
if errorlevel 1 goto fail
78+
79+
MKDIR "%JVM_TARGET_DIR%"
80+
if errorlevel 1 goto fail
81+
82+
PUSHD "%JVM_TARGET_DIR%"
83+
if errorlevel 1 goto fail
84+
85+
echo Extracting %BUILD_DIR%\%JVM_TEMP_FILE% to %JVM_TARGET_DIR%
86+
87+
if "%IS_TAR_GZ%"=="1" (
88+
tar xf "..\\%JVM_TEMP_FILE%"
89+
) else (
90+
"%POWERSHELL%" -nologo -noprofile -command "Set-StrictMode -Version 3.0; $ErrorActionPreference = \"Stop\"; Add-Type -A 'System.IO.Compression.FileSystem'; [IO.Compression.ZipFile]::ExtractToDirectory('..\\%JVM_TEMP_FILE%', '.');"
91+
)
92+
if errorlevel 1 goto fail
93+
94+
DEL /F "..\%JVM_TEMP_FILE%"
95+
if errorlevel 1 goto fail
96+
97+
POPD
98+
99+
echo %JVM_URL%>"%JVM_TARGET_DIR%.flag"
100+
if errorlevel 1 goto fail
101+
102+
:continueWithJvm
103+
104+
set JAVA_HOME=
105+
for /d %%d in ("%JVM_TARGET_DIR%"*) do if exist "%%d\bin\java.exe" set JAVA_HOME=%%d
106+
if not exist "%JAVA_HOME%\bin\java.exe" (
107+
echo Unable to find java.exe under %JVM_TARGET_DIR%
108+
goto fail
109+
)
110+
111+
endlocal & set JAVA_HOME=%JAVA_HOME%
112+
113+
@rem GRADLE JVM WRAPPER END MARKER
114+
39115
@rem Find java.exe
40116
if defined JAVA_HOME goto findJavaFromJavaHome
41117

0 commit comments

Comments
 (0)