Improve Go download when building source code

patch by Ling Mao; reviewed by Stefan Miklosovic, Michael Semb Wever for CASSANDRA-20422

Co-authored-by: Stefan Miklosovic <smiklosovic@apache.org>
This commit is contained in:
maoling 2025-03-09 23:56:00 +08:00 committed by Stefan Miklosovic
parent c925228a4d
commit e16f30c587
No known key found for this signature in database
GPG Key ID: 32F35CB2F546D93E
3 changed files with 79 additions and 18 deletions

View File

@ -221,7 +221,7 @@ def tasks() {
// Disable splits for all but proper stages
!(axis['split'] > 1 && !stepsMap.findAll { entry -> entry.value.splits >= axis['split'] }.keySet().contains(axis['step'])) &&
// run only the build types on non-amd64
!(axis['arch'] != 'amd64' && stepsMap.findAll { entry -> 'build' == entry.value.type }.keySet().contains(axis['step']))
!(axis['arch'] != 'amd64' && !stepsMap.findAll { entry -> 'build' == entry.value.type }.keySet().contains(axis['step']))
}
def Map tasks = [
@ -337,7 +337,7 @@ def build(command, cell) {
test -f .jenkins/Jenkinsfile || { echo "Invalid git fork/branch"; exit 1; }
grep -q "Jenkins CI declaration" .jenkins/Jenkinsfile || { echo "Only Cassandra 5.0+ supported"; exit 1; }
"""
fetchDockerImages(['almalinux-build', 'bullseye-build', 'centos7-build'])
fetchDockerImages(['almalinux-build', 'bullseye-build'])
def cell_suffix = "_jdk${cell.jdk}_${cell.arch}"
def logfile = "stage-logs/${JOB_NAME}_${BUILD_NUMBER}_${cell.step}${cell_suffix}_attempt${attempt}.log.xz"
def script_vars = "#!/bin/bash \n set -o pipefail ; " // pipe to tee needs pipefail

View File

@ -468,13 +468,13 @@
</target>
<target name="gen-asciidoc" description="Generate dynamic asciidoc pages" depends="jar" unless="ant.gen-doc.skip">
<exec executable="make" osfamily="unix" dir="${doc.dir}">
<exec executable="make" osfamily="unix" dir="${doc.dir}" failonerror="true">
<arg value="gen-asciidoc"/>
</exec>
</target>
<target name="gen-doc" description="Generate documentation" depends="gen-asciidoc,generate-cql-html" unless="ant.gen-doc.skip">
<exec executable="make" osfamily="unix" dir="${doc.dir}">
<exec executable="make" osfamily="unix" dir="${doc.dir}" failonerror="true">
<arg value="html"/>
</exec>
</target>
@ -548,7 +548,7 @@
<copy todir="${basedir}/conf" file="${build.classes.main}/META-INF/hotspot_compiler"/>
</target>
<target name="check" depends="_main-jar,build-test" description="Verifies the source code and dependencies. This task is intended to run on pre-commit and locally. It should verify mostly modified files compared to the upstream base branch." unless="check.skip">
<target name="check" depends="_main-jar,build-test,gen-doc" description="Verifies the source code and dependencies. This task is intended to run on pre-commit and locally. It should verify mostly modified files compared to the upstream base branch." unless="check.skip">
<antcall target="rat-check" inheritrefs="true"/>
<antcall target="checkstyle" inheritrefs="true"/>
<antcall target="checkstyle-test" inheritrefs="true"/>
@ -909,7 +909,7 @@
</target>
<!-- creates release tarballs -->
<target name="artifacts" depends="_artifacts-init,check,gen-doc,sources-jar"
<target name="artifacts" depends="_artifacts-init,check,sources-jar"
description="Create Cassandra tarball and maven artifacts">
<tar compression="gzip" longfile="gnu"
destfile="${build.dir}/${final.name}-bin.tar.gz">

View File

@ -20,33 +20,94 @@
# Variables
GO_VERSION="1.23.1"
GO_TAR="go${GO_VERSION}.linux-amd64.tar.gz"
GO_OS=linux
if [ $(uname) = "Darwin" ]; then
GO_OS=darwin
fi
GO_PLATFORM=amd64
if [ $(uname -m) = "aarch64" ]; then
GO_PLATFORM=arm64
fi
GO_TAR="go${GO_VERSION}.${GO_OS}-${GO_PLATFORM}.tar.gz"
TMPDIR="${TMPDIR:-/tmp}"
# Step 0: Download and install Go
echo "Downloading Go $GO_VERSION..."
wget -q "https://golang.org/dl/$GO_TAR" -O "$TMPDIR/$GO_TAR"
check_go_version() {
if command -v go &>/dev/null; then
local installed_version=$(go version | awk '{print $3}' | sed 's/go//')
echo "Installing Go..."
tar -C "$TMPDIR" -xzf "$TMPDIR/$GO_TAR"
rm "$TMPDIR/$GO_TAR"
if [ "$(printf '%s\n' "$GO_VERSION" "$installed_version" | sort -V | head -n1)" = "$GO_VERSION" ]; then
echo "Detected Go $installed_version (>= $GO_VERSION), skipping installation."
return 0
else
if [ -z $installed_version ]; then
echo "No Go installation detected, proceeding with installation."
else
echo "Detected Go $installed_version (< $GO_VERSION), proceeding with installation."
fi
return 1
fi
else
echo "Go env not found in your system, proceeding with installation."
return 1
fi
}
# Set Go environment variables
export PATH="$PATH:$TMPDIR/go/bin"
export GOPATH="$TMPDIR/go"
if ! check_go_version; then
if ls $TMPDIR/go$GO_VERSION > /dev/null 2>&1; then
echo "Reusing cached installation in $TMPDIR/go$GO_VERSION"
export PATH="$PATH:$TMPDIR/go$GO_VERSION/go/bin"
export GOPATH="$TMPDIR/go$GO_VERSION/go/bin"
export GOROOT="$TMPDIR/go$GO_VERSION/go"
else
if ! ls $TMPDIR/$GO_TAR > /dev/null 2>&1; then
echo "Downloading Go $GO_VERSION..."
curl -L --fail --silent --retry 2 --retry-delay 5 --max-time 30 https://golang.org/dl/$GO_TAR -o $TMPDIR/$GO_TAR
if [ $? != "0" ]; then
echo "Network error. Specify '-Dant.gen-doc.skip=true' to skip if offline."
exit 1
fi
fi
echo "Installing Go $GO_VERSION..."
mkdir -p $TMPDIR/go$GO_VERSION
tar -C "$TMPDIR/go$GO_VERSION" -xzf "$TMPDIR/$GO_TAR"
# Set Go environment variables
export PATH="$PATH:$TMPDIR/go$GO_VERSION/go/bin"
export GOPATH="$TMPDIR/go$GO_VERSION/go/bin"
export GOROOT="$TMPDIR/go$GO_VERSION/go"
fi
else
echo "Using system-installed Go."
fi
# Step 1: Building the parser
echo "Building the cqlprotodoc..."
DIR="$(pwd)"
cd "${TMPDIR}"
rm -rf "${TMPDIR}/cassandra-website"
git clone -n --depth=1 --filter=tree:0 https://github.com/apache/cassandra-website
if [ $? != "0" ]; then
echo "Error occured while cloning https://github.com/apache/cassandra-website"
exit 1
fi
cd "${TMPDIR}/cassandra-website"
git sparse-checkout set --no-cone /cqlprotodoc
git checkout
cd "${TMPDIR}/cassandra-website/cqlprotodoc"
go build -o "$TMPDIR"/cqlprotodoc
rm -rf "${TMPDIR}/cqlprotodoc"
$TMPDIR/go$GO_VERSION/go/bin/go build -o "$TMPDIR"/cqlprotodoc
# Step 2: Process the spec files using the parser
echo "Processing the .spec files..."
@ -121,6 +182,6 @@ echo " </script>" >> "$summary_file"
# Step 3: Cleanup - Remove the Cassandra and parser directories
echo "Cleaning up..."
cd "${DIR}"
rm -rf "${TMPDIR}/go" "${TMPDIR}/cassandra-website" "${TMPDIR}/cqlprotodoc" 2>/dev/null
rm -rf "${TMPDIR}/cassandra-website" "${TMPDIR}/cqlprotodoc" 2>/dev/null
echo "Script completed successfully."