Skip to content

Commit 68af943

Browse files
authored
chore(test): optimize integ test maven gradle setup (#8794)
* use latest stable maven version * skip install if pre-installed versions meet minimums. * whindows
1 parent 39001e1 commit 68af943

1 file changed

Lines changed: 51 additions & 41 deletions

File tree

tests/install-maven-gradle.sh

Lines changed: 51 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,65 @@
11
#!/bin/bash
2-
# Install Maven 3.9.13 and Gradle 9.3.1 for SAM CLI integration tests.
3-
# Supports both Linux and Windows (Git Bash on GitHub Actions).
2+
# Install latest stable Maven 3.x and Gradle for SAM CLI integration tests.
3+
# Auto-detects latest versions from official APIs.
4+
# Skips install if pre-installed versions meet minimums.
45
set -euo pipefail
56

6-
MAVEN_VERSION="3.9.13"
7-
GRADLE_VERSION="9.3.1"
7+
MIN_MAVEN="3.9.12"
8+
MIN_GRADLE="9.2.0"
89

9-
# Check if correct versions are already installed
10-
MAVEN_INSTALLED=$(mvn --version 2>/dev/null | head -1 | grep -o "${MAVEN_VERSION}" || true)
11-
GRADLE_INSTALLED=$(gradle --version 2>/dev/null | grep "Gradle ${GRADLE_VERSION}" || true)
10+
version_gte() { printf '%s\n%s' "$2" "$1" | sort -V -C; }
11+
get_maven_ver() { mvn --version 2>/dev/null | head -1 | sed -n 's/.*Maven \([0-9.]*\).*/\1/p' || true; }
12+
get_gradle_ver() { gradle --version 2>/dev/null | sed -n 's/.*Gradle \([0-9.]*\).*/\1/p' || true; }
1213

13-
if [[ -n "$MAVEN_INSTALLED" && -n "$GRADLE_INSTALLED" ]]; then
14-
echo "Maven ${MAVEN_VERSION} and Gradle ${GRADLE_VERSION} are already installed, skipping."
15-
mvn --version
16-
gradle --version
14+
MVN_VER=$(get_maven_ver)
15+
GRADLE_VER=$(get_gradle_ver)
16+
echo "=== Current: Maven=${MVN_VER:-none} Gradle=${GRADLE_VER:-none} ==="
17+
18+
NEED_MAVEN=true; NEED_GRADLE=true
19+
[[ -n "$MVN_VER" ]] && version_gte "$MVN_VER" "$MIN_MAVEN" && NEED_MAVEN=false
20+
[[ -n "$GRADLE_VER" ]] && version_gte "$GRADLE_VER" "$MIN_GRADLE" && NEED_GRADLE=false
21+
22+
if ! $NEED_MAVEN && ! $NEED_GRADLE; then
23+
echo "Versions sufficient, skipping install."
1724
exit 0
1825
fi
1926

20-
if [[ "${RUNNER_OS:-}" == "Windows" ]]; then
21-
echo "=== Installing Maven ${MAVEN_VERSION} and Gradle ${GRADLE_VERSION} on Windows via choco ==="
22-
[[ -z "$MAVEN_INSTALLED" ]] && choco install maven --version="${MAVEN_VERSION}" -y --allow-downgrade
23-
[[ -z "$GRADLE_INSTALLED" ]] && choco install gradle --version="${GRADLE_VERSION}" -y --allow-downgrade
24-
25-
# Chocolatey updates the system PATH in the registry but the current bash session
26-
# doesn't see it. Explicitly add the known install paths so mvn/gradle are available
27-
# in this session and in subsequent workflow steps.
28-
CHOCO_MAVEN_BIN="C:/ProgramData/chocolatey/lib/maven/apache-maven-${MAVEN_VERSION}/bin"
29-
CHOCO_GRADLE_BIN="C:/ProgramData/chocolatey/lib/gradle/gradle-${GRADLE_VERSION}/bin"
30-
export PATH="${CHOCO_MAVEN_BIN}:${CHOCO_GRADLE_BIN}:${PATH}"
31-
echo "${CHOCO_MAVEN_BIN}" >> "$GITHUB_PATH"
32-
echo "${CHOCO_GRADLE_BIN}" >> "$GITHUB_PATH"
33-
else
34-
echo "=== Installing Maven ${MAVEN_VERSION} and Gradle ${GRADLE_VERSION} on Linux ==="
35-
sudo apt-get remove -y maven || true
27+
resolve_maven_version() {
28+
curl -sfL "https://repo1.maven.org/maven2/org/apache/maven/apache-maven/maven-metadata.xml" \
29+
| sed -n 's/.*<version>3\.9\.\([0-9]*\)<.*/\1/p' | sort -n | tail -1 | xargs -I{} echo "3.9.{}"
30+
}
3631

37-
wget -q "https://dlcdn.apache.org/maven/maven-3/${MAVEN_VERSION}/binaries/apache-maven-${MAVEN_VERSION}-bin.zip" -P /tmp
38-
sudo unzip -o -q /tmp/apache-maven-*.zip -d /opt/mvn
32+
resolve_gradle_version() {
33+
curl -sfL "https://services.gradle.org/versions/current" | sed -n 's/.*"version"\s*:\s*"\([^"]*\)".*/\1/p'
34+
}
3935

40-
wget -q "https://services.gradle.org/distributions/gradle-${GRADLE_VERSION}-bin.zip" -P /tmp
41-
sudo unzip -o -q /tmp/gradle-*.zip -d /opt/gradle
42-
43-
sudo ln -sf "/opt/mvn/apache-maven-${MAVEN_VERSION}/bin/mvn" /usr/local/bin/mvn
44-
sudo ln -sf "/opt/gradle/gradle-${GRADLE_VERSION}/bin/gradle" /usr/local/bin/gradle
36+
if [[ "${RUNNER_OS:-}" == "Windows" ]]; then
37+
$NEED_MAVEN && choco install maven -y
38+
$NEED_GRADLE && choco install gradle -y
39+
CHOCO_BASE="C:/ProgramData/chocolatey/lib"
40+
MVN_BIN=$(find "$CHOCO_BASE/maven" -name "mvn.cmd" -print -quit 2>/dev/null | xargs dirname || true)
41+
GRADLE_BIN=$(find "$CHOCO_BASE/gradle" -name "gradle.bat" -print -quit 2>/dev/null | xargs dirname || true)
42+
[[ -n "$MVN_BIN" ]] && { export PATH="$MVN_BIN:$PATH"; echo "$MVN_BIN" >> "$GITHUB_PATH"; }
43+
[[ -n "$GRADLE_BIN" ]] && { export PATH="$GRADLE_BIN:$PATH"; echo "$GRADLE_BIN" >> "$GITHUB_PATH"; }
44+
else
45+
sudo apt-get remove -y maven 2>/dev/null || true
4546

46-
echo "/opt/mvn/apache-maven-${MAVEN_VERSION}/bin" >> "$GITHUB_PATH"
47-
echo "/opt/gradle/gradle-${GRADLE_VERSION}/bin" >> "$GITHUB_PATH"
48-
echo "MAVEN_HOME=/opt/mvn/apache-maven-${MAVEN_VERSION}" >> "$GITHUB_ENV"
47+
if $NEED_MAVEN; then
48+
MAVEN_VERSION=$(resolve_maven_version)
49+
echo "Installing Maven ${MAVEN_VERSION}..."
50+
wget -q "https://dlcdn.apache.org/maven/maven-3/${MAVEN_VERSION}/binaries/apache-maven-${MAVEN_VERSION}-bin.tar.gz" -O /tmp/maven.tar.gz
51+
sudo tar -xzf /tmp/maven.tar.gz -C /opt
52+
sudo ln -sf "/opt/apache-maven-${MAVEN_VERSION}/bin/mvn" /usr/local/bin/mvn
53+
echo "MAVEN_HOME=/opt/apache-maven-${MAVEN_VERSION}" >> "$GITHUB_ENV"
54+
fi
4955

50-
export PATH="/opt/mvn/apache-maven-${MAVEN_VERSION}/bin:/opt/gradle/gradle-${GRADLE_VERSION}/bin:$PATH"
56+
if $NEED_GRADLE; then
57+
GRADLE_VERSION=$(resolve_gradle_version)
58+
echo "Installing Gradle ${GRADLE_VERSION}..."
59+
wget -q "https://services.gradle.org/distributions/gradle-${GRADLE_VERSION}-bin.zip" -O /tmp/gradle.zip
60+
sudo unzip -o -q /tmp/gradle.zip -d /opt
61+
sudo ln -sf "/opt/gradle-${GRADLE_VERSION}/bin/gradle" /usr/local/bin/gradle
62+
fi
5163
fi
5264

53-
mvn --version || echo "WARNING: mvn --version failed"
54-
gradle --version || echo "WARNING: gradle --version failed"
55-
echo "=== Maven and Gradle installation complete ==="
65+
echo "=== Installed: Maven=$(get_maven_ver) Gradle=$(get_gradle_ver) ==="

0 commit comments

Comments
 (0)