blob: 9e170ed1787df082bfc17c10a5a156a233e3a31a [file]
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#
# Runs the Java SDK reviewer checklist ("Verifying a release" in
# java-sdk/README.md) automatically, minus the GPG signature (only the release
# manager's key can satisfy that).
#
# * on a pull request touching java-sdk/ -> verify HEAD can produce a source
# release that is self-contained and builds from scratch.
# * on a `java-sdk/**` tag push -> the same check against the tagged commit
# (release readiness gate).
# * on manual dispatch -> verify the ACTUAL staged artifacts: the source
# package in dist/dev and the closed Nexus staging repo. Run this after
# staging, before sending the [VOTE] email.
#
# The environment setup intentionally mirror what a human verifying the release
# would do. An (unpinned) latest Gradle is downloaded to create the Gradle
# wrapper from, and a more modern JDK is used to run things.
---
name: Java SDK release verification
on: # yamllint disable-line rule:truthy
pull_request:
paths:
- "java-sdk/**"
- ".github/workflows/java-sdk-release-verify.yml"
push:
tags:
- "java-sdk/**"
workflow_dispatch:
inputs:
tag:
description: "Java SDK release tag (starts with 'java-sdk/') to verify"
required: true
type: string
nexus_repo_id:
description: "Nexus staging repo id (the NNNN in orgapacheairflow-NNNN)"
required: true
type: string
permissions:
contents: read
concurrency:
group: java-sdk-release-verify-${{ github.event_name }}-${{ github.ref }}-${{ inputs.tag }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
env:
JAVA_VERSION: "21"
jobs:
source-release:
name: Source release builds cleanly
if: github.event_name != 'workflow_dispatch'
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
ref: ${{ github.event_name == 'push' && github.ref || github.sha }}
fetch-depth: 0
persist-credentials: false
- name: Set up JDK ${{ env.JAVA_VERSION }}
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5.7.0
with:
distribution: temurin
java-version: ${{ env.JAVA_VERSION }}
- name: Use an isolated Gradle home
run: echo "GRADLE_USER_HOME=${RUNNER_TEMP}/gradle-home" >> "$GITHUB_ENV"
- name: Resolve the ref to build the source release from
run: |
set -euo pipefail
if [ "${{ github.event_name }}" = "push" ]; then
echo "RELEASE_REF=${GITHUB_REF_NAME}" >> "$GITHUB_ENV"
else # A PR HEAD.
echo "RELEASE_REF=$(git rev-parse HEAD)" >> "$GITHUB_ENV"
fi
- name: Build the source tarball from the ref (project's wrapper)
working-directory: java-sdk
run: ./gradlew --no-daemon sourceTarball checksumSourceTarball -PgitRef="${RELEASE_REF}"
- name: Install the latest Gradle to bootstrap a new wrapper for the source extracted from the tarball
run: |
set -euo pipefail
meta=$(curl -fsSL https://services.gradle.org/versions/current)
ver=$(echo "$meta" | jq -r .version)
url=$(echo "$meta" | jq -r .downloadUrl)
sum=$(curl -fsSL "$(echo "$meta" | jq -r .checksumUrl)")
curl -fsSL -o /tmp/gradle.zip "$url"
echo "${sum} /tmp/gradle.zip" | sha256sum -c -
unzip -q -d "$HOME/gradle" /tmp/gradle.zip
echo "$HOME/gradle/gradle-${ver}/bin" >> "$GITHUB_PATH"
- name: Verify the source tarball
run: |
set -euo pipefail
tarball=$(ls java-sdk/build/distributions/apache-airflow-java-sdk-*-src.tar.gz)
java-sdk/scripts/ci/verify-source-release.sh \
--tarball "${tarball}" \
--sha512 "${tarball}.sha512" \
--tag "${RELEASE_REF}"
artifact:
name: Staged artifacts pass the reviewer checklist
if: github.event_name == 'workflow_dispatch'
runs-on: ubuntu-latest
steps:
- name: Checkout tag
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
ref: ${{ inputs.tag }}
fetch-depth: 0
persist-credentials: false
- name: Set up JDK ${{ env.JAVA_VERSION }}
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5.7.0
with:
distribution: temurin
java-version: ${{ env.JAVA_VERSION }}
- name: Use an isolated Gradle home
run: echo "GRADLE_USER_HOME=${RUNNER_TEMP}/gradle-home" >> "$GITHUB_ENV"
- name: Download the staged source package from dist/dev
env:
TAG: ${{ inputs.tag }}
run: |
set -euo pipefail
rcdir="${TAG#java-sdk/}" # <version>-rc<N>
version="${rcdir%-rc*}" # <version>
base="https://dist.apache.org/repos/dist/dev/airflow/java-sdk/${rcdir}"
file="apache-airflow-java-sdk-${version}-src.tar.gz"
mkdir -p staged
curl -fsSL -o "staged/${file}" "${base}/${file}"
curl -fsSL -o "staged/${file}.sha512" "${base}/${file}.sha512"
- name: Install the latest Gradle to bootstrap a new wrapper for the source extracted from the tarball
run: |
set -euo pipefail
meta=$(curl -fsSL https://services.gradle.org/versions/current)
ver=$(echo "$meta" | jq -r .version)
url=$(echo "$meta" | jq -r .downloadUrl)
sum=$(curl -fsSL "$(echo "$meta" | jq -r .checksumUrl)")
curl -fsSL -o /tmp/gradle.zip "$url"
echo "${sum} /tmp/gradle.zip" | sha256sum -c -
unzip -q -d "$HOME/gradle" /tmp/gradle.zip
echo "$HOME/gradle/gradle-${ver}/bin" >> "$GITHUB_PATH"
- name: Verify the staged source package
env:
TAG: ${{ inputs.tag }}
run: |
set -euo pipefail
rcdir="${TAG#java-sdk/}"; version="${rcdir%-rc*}"
file="apache-airflow-java-sdk-${version}-src.tar.gz"
java-sdk/scripts/ci/verify-source-release.sh \
--tarball "staged/${file}" \
--sha512 "staged/${file}.sha512" \
--tag "${TAG}"
- name: Smoke-test the staged convenience binaries
env:
TAG: ${{ inputs.tag }}
NEXUS_REPO_ID: ${{ inputs.nexus_repo_id }}
run: |
set -euo pipefail
rcdir="${TAG#java-sdk/}"; version="${rcdir%-rc*}"
java-sdk/scripts/ci/smoke-test-staged-binaries.sh \
--nexus-repo-id "${NEXUS_REPO_ID}" \
--version "${version}"