mirror of
https://github.com/InsanusMokrassar/KSLog.git
synced 2026-11-02 09:42:56 +00:00
111 lines
3.9 KiB
Bash
111 lines
3.9 KiB
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
root_dir=$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)
|
|
base_commit=${KSLOG_MIGRATION_BASE_COMMIT:-0b9fb30862c7319bb228039ee33eef9a0ddef95c}
|
|
work_dir=$(mktemp -d /tmp/kslog-gradle-verifier.XXXXXX)
|
|
|
|
cleanup() {
|
|
if [[ "${KSLOG_KEEP_VERIFICATION_TEMP:-false}" == "true" ]]; then
|
|
printf 'verification workspace retained at %s\n' "$work_dir"
|
|
else
|
|
rm -rf -- "$work_dir"
|
|
fi
|
|
}
|
|
trap cleanup EXIT
|
|
|
|
for command_name in git tar python3; do
|
|
command -v "$command_name" >/dev/null || {
|
|
printf 'required command is unavailable: %s\n' "$command_name" >&2
|
|
exit 1
|
|
}
|
|
done
|
|
|
|
git -C "$root_dir" cat-file -e "$base_commit^{commit}"
|
|
|
|
baseline_dir="$work_dir/baseline"
|
|
baseline_repo="$work_dir/baseline-m2"
|
|
current_repo="$work_dir/current-m2"
|
|
gradle_home="$work_dir/gradle-home"
|
|
gnupg_home="$work_dir/gnupg"
|
|
archive="$work_dir/baseline.tar"
|
|
mkdir -p "$baseline_dir" "$baseline_repo" "$current_repo" "$gradle_home" "$gnupg_home"
|
|
chmod 700 "$gnupg_home"
|
|
|
|
git -C "$root_dir" archive --format=tar --output="$archive" "$base_commit"
|
|
tar -xf "$archive" -C "$baseline_dir"
|
|
|
|
cache_source=${KSLOG_GRADLE_CACHE_SOURCE:-${GRADLE_USER_HOME:-${HOME}/.gradle}}
|
|
for cache_entry in caches wrapper; do
|
|
if [[ -d "$cache_source/$cache_entry" ]]; then
|
|
ln -s "$cache_source/$cache_entry" "$gradle_home/$cache_entry"
|
|
fi
|
|
done
|
|
|
|
if [[ -e "$gradle_home/gradle.properties" || -e "$gradle_home/init.d" ]]; then
|
|
printf 'isolated Gradle home unexpectedly contains user configuration\n' >&2
|
|
exit 1
|
|
fi
|
|
|
|
run_publication() {
|
|
local project_dir=$1
|
|
local repository_dir=$2
|
|
local log_file=$3
|
|
|
|
(
|
|
cd "$project_dir"
|
|
unset \
|
|
GITHUB_RELEASE_TOKEN GH_TOKEN GITHUB_TOKEN \
|
|
INMONEXUS_USER INMONEXUS_PASSWORD \
|
|
SONATYPE_USER SONATYPE_PASSWORD PUBLISHING_TYPE \
|
|
KOTLIN_TOOLCHAIN_SIGNING_KEY KOTLIN_TOOLCHAIN_SIGNING_KEY_PASSPHRASE \
|
|
GRADLE_OPTS JAVA_TOOL_OPTIONS _JAVA_OPTIONS
|
|
export GRADLE_USER_HOME="$gradle_home"
|
|
export GNUPGHOME="$gnupg_home"
|
|
./gradlew --no-daemon \
|
|
-Dmaven.repo.local="$repository_dir" \
|
|
clean publishToMavenLocal
|
|
) | tee "$log_file"
|
|
|
|
if find "$repository_dir" -type f -name '*.asc' -print -quit | grep -q .; then
|
|
printf 'isolated publication unexpectedly produced signatures: %s\n' "$repository_dir" >&2
|
|
exit 1
|
|
fi
|
|
if grep -Eq '^> Task :sign[A-Z]' "$log_file"; then
|
|
printf 'isolated publication unexpectedly executed a signing task\n' >&2
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
printf 'Publishing untouched baseline %s to an isolated repository\n' "$base_commit"
|
|
run_publication "$baseline_dir" "$baseline_repo" "$work_dir/baseline-publish.log"
|
|
|
|
printf 'Publishing post-move Gradle fallback to an isolated repository\n'
|
|
run_publication "$root_dir" "$current_repo" "$work_dir/current-publish.log"
|
|
|
|
python3 "$root_dir/verification/verify_gradle_publication.py" \
|
|
--project-root "$root_dir" \
|
|
--base-commit "$base_commit" \
|
|
--baseline-repository "$baseline_repo" \
|
|
--current-repository "$current_repo"
|
|
|
|
printf 'Compiling the committed consumer probe against the post-move publication\n'
|
|
(
|
|
unset \
|
|
GITHUB_RELEASE_TOKEN GH_TOKEN GITHUB_TOKEN \
|
|
INMONEXUS_USER INMONEXUS_PASSWORD \
|
|
SONATYPE_USER SONATYPE_PASSWORD PUBLISHING_TYPE \
|
|
KOTLIN_TOOLCHAIN_SIGNING_KEY KOTLIN_TOOLCHAIN_SIGNING_KEY_PASSPHRASE \
|
|
GRADLE_OPTS JAVA_TOOL_OPTIONS _JAVA_OPTIONS
|
|
export GRADLE_USER_HOME="$gradle_home"
|
|
export GNUPGHOME="$gnupg_home"
|
|
export KSLOG_TEST_REPOSITORY="$current_repo"
|
|
export KSLOG_CONSUMER_BUILD_DIR="$work_dir/consumer-build"
|
|
"$root_dir/gradlew" --no-daemon \
|
|
--project-dir "$root_dir/verification/consumer" \
|
|
--project-cache-dir "$work_dir/consumer-project-cache" \
|
|
assemble
|
|
) | tee "$work_dir/consumer.log"
|
|
|
|
printf 'Gradle fallback verification: PASS baseline=%s primaryFiles=46 consumer=PASS\n' "$base_commit"
|