Skip to content
Closed
Show file tree
Hide file tree
Changes from 25 commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
93e5329
Fill Java CI gaps for Maven Central publication
paul-aiyedun Jul 27, 2026
ecf8bde
TEMPORARY: commit for testing CI
paul-aiyedun Jul 27, 2026
e7d81cd
TEMPORARY: commit for testing CI (simulate release)
paul-aiyedun Jul 28, 2026
27b5602
Revert "TEMPORARY: commit for testing CI (simulate release)"
paul-aiyedun Jul 28, 2026
59a982e
Revert "TEMPORARY: commit for testing CI"
paul-aiyedun Jul 28, 2026
d8507da
Add java-publish job
paul-aiyedun Jul 28, 2026
a57548e
TEMPORARY: commit for testing CI (simulate maven release staging)
paul-aiyedun Jul 28, 2026
c3ddf15
Merge branch 'release/26.08' into paul/fix_maven_publication_gaps
paul-aiyedun Jul 29, 2026
bdb4da6
TEMPORARY: add temporary suppression to enable CI run
paul-aiyedun Jul 29, 2026
4bfd057
TEMPORARY: use the shared-workflows PR commit sha
paul-aiyedun Jul 29, 2026
279c4b3
TEMPORARY: empty commit for CI test
paul-aiyedun Jul 29, 2026
b202563
TEMPORARY: Update referenced shared-workflows branch
paul-aiyedun Jul 29, 2026
91b532a
TEMPORARY: empty commit for CI test
paul-aiyedun Jul 30, 2026
50ddf52
TEMPORARY: Update referenced shared-workflows commit
paul-aiyedun Jul 30, 2026
4fb8a71
TEMPORARY: Update referenced shared-workflows commit
paul-aiyedun Jul 31, 2026
f10ee95
Remove references to artifactory secrets
paul-aiyedun Jul 31, 2026
b85c60a
Remove MAVEN_DEPLOY_USERNAME secret
paul-aiyedun Jul 31, 2026
cd3f51b
TEMPORARY: Update referenced shared-workflows commit
paul-aiyedun Jul 31, 2026
14b7677
TEMPORARY: Update referenced shared-workflows commit
paul-aiyedun Jul 31, 2026
33507a8
Merge branch 'release/26.08' into paul/fix_maven_publication_gaps
paul-aiyedun Aug 3, 2026
55e6366
Clean up temporary changes
paul-aiyedun Aug 4, 2026
c047a47
TEMPORARY: end-to-end workflow validation
paul-aiyedun Aug 4, 2026
f04d57d
TEMPORARY: Add suppression for test
paul-aiyedun Aug 4, 2026
e2dbf8d
Revert "TEMPORARY: Add suppression for test"
paul-aiyedun Aug 4, 2026
4b2b800
Revert "TEMPORARY: end-to-end workflow validation"
paul-aiyedun Aug 4, 2026
a0ce3bd
Address CodeRabbit comments
paul-aiyedun Aug 4, 2026
2eb18cb
Merge branch 'release/26.08' into paul/fix_maven_publication_gaps
paul-aiyedun Aug 5, 2026
879beab
Merge branch 'release/26.08' into paul/fix_maven_publication_gaps
paul-aiyedun Aug 5, 2026
69bc5ef
TEMPORARY: manual Maven Central deployment for the 26.08.00 release
paul-aiyedun Aug 5, 2026
79be8de
TEMPORARY: Apply same patch as spark-rapids-jni for nvcomp workaround
paul-aiyedun Aug 6, 2026
45175e2
TEMPORARY: Apply patch to address libspdlog error
paul-aiyedun Aug 7, 2026
2f41ae5
TEMPORARY: Drop old deployment
paul-aiyedun Aug 7, 2026
404d68d
Undo temporary pr.yaml related changes
paul-aiyedun Aug 17, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions .github/workflows/build.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -541,3 +541,23 @@ jobs:
name: cudf_java_maven_repo
path: ${{ runner.temp }}/maven-repo
if-no-files-found: error

# Publish tagged release candidates to Maven Central via the Sonatype
# Central Publisher Portal.
java-publish:
needs: [java-gather]
if: ${{ github.ref_type == 'tag' && (inputs.build_type || 'branch') == 'branch' }}
permissions:
actions: read
contents: read
uses: rapidsai/shared-workflows/.github/workflows/maven-publish.yaml@release/26.08
secrets:
GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }}
GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }}
MAVEN_DEPLOY_TOKEN: ${{ secrets.MAVEN_DEPLOY_TOKEN }}
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Resolved
with:
publication-type: 'rc'
artifact-name: cudf_java_maven_repo
source-git-sha: ${{ inputs.sha || github.sha }}
# false = validate + drop (safe). true = stage PENDING for manual publish.
stage-for-maven-central-publish: true
31 changes: 27 additions & 4 deletions java/ci/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,12 +34,15 @@ so plain `rm -rf` works.
### Step 2 - Package the cuDF Java JAR for one classifier

```bash
./java/ci/build_cudf_java_jar.sh \
GITHUB_REF=refs/heads/my-branch ./java/ci/build_cudf_java_jar.sh \
--libcudf-dir /tmp/libcudf-cuda12 \
--output-dir /tmp/jars \
--cuda-version 12.9
```

`GITHUB_REF` is required and selects release-tag vs SNAPSHOT versioning. See
the versioning section below.

This compiles the JNI layer against the static libcudf from Step 1 and emits
the classifier JAR (e.g. `cudf-26.08.0-SNAPSHOT-cuda12.jar`), a
classifier-independent sources jar and javadoc jar, and the POM into a
Expand Down Expand Up @@ -72,12 +75,14 @@ inside the container.

This walks every subdirectory of `--jars-dir` (each subdir name IS the
classifier), gathers the per-classifier JAR, one shared sources jar, one
shared javadoc jar, and the shared POM, derives the artifact version from
the JAR filenames (requiring a single unique version across subdirs), and
shared javadoc jar, the shared POM, and seeds an unclassified primary JAR
as a copy of the `cuda12` classifier. Derives the artifact version from
the JAR filenames (requiring a single unique version across subdirs) and
lays them out as:

```
/tmp/maven-repo/ai/rapids/cudf/26.08.0-SNAPSHOT/
cudf-26.08.0-SNAPSHOT.jar
cudf-26.08.0-SNAPSHOT-cuda12.jar
cudf-26.08.0-SNAPSHOT-cuda13.jar
cudf-26.08.0-SNAPSHOT-sources.jar
Expand All @@ -88,7 +93,25 @@ lays them out as:
The set of classifiers is whatever subdirectories are present under
`--jars-dir`. For a local `x86_64`-only run, populate `/tmp/jars/cuda12/`
and `/tmp/jars/cuda13/`. For the full four-way release build, add
`/tmp/jars/cuda12-arm64/` and `/tmp/jars/cuda13-arm64/`.
`/tmp/jars/cuda12-arm64/` and `/tmp/jars/cuda13-arm64/`. The `cuda12`
subdirectory is required because the unclassified primary JAR is copied from
it, so an `aarch64`-only set of subdirectories is not a valid gather input.

### Release Tag vs SNAPSHOT versioning

Release tag CI runs (`GITHUB_REF=refs/tags/vYY.MM.PP`) produce release-versioned
JARs (`cudf-26.08.0-*.jar`). All other runs produce `-SNAPSHOT`. Gated by
[`rapids-is-release-build`](https://github.com/rapidsai/gha-tools/blob/main/tools/rapids-is-release-build).
`GITHUB_REF` is required. `test_java_build_local.sh` defaults it to the current
branch.

To rehearse the release path locally:

GITHUB_REF=refs/tags/vYY.MM.PP ./java/ci/test_java_build_local.sh

Rewrites `java/pom.xml` in place. Restore with `git checkout java/pom.xml`.

### GitHub Actions

In GitHub Actions (`.github/workflows/build.yaml`), the `java-build` matrix job
runs Steps 1-2 per (CUDA x arch) entry and uploads each classifier subdir as a
Expand Down
16 changes: 15 additions & 1 deletion java/ci/assemble_maven_repo.sh
Original file line number Diff line number Diff line change
Expand Up @@ -166,12 +166,26 @@ if [[ -z "${FIRST_VERSION}" ]]; then
exit 1
fi

DEST_DIR="${OUTPUT_DIR}/${GROUP_PATH}/${ARTIFACT_ID}/${FIRST_VERSION}"

# Seed the unclassified primary from cuda12. Maven Central serves this to
# consumers depending on ai.rapids:cudf without a <classifier>.
PRIMARY_SOURCE="${DEST_DIR}/cudf-${FIRST_VERSION}-cuda12.jar"
if [[ ! -f "${PRIMARY_SOURCE}" ]]; then
echo "Error: ${PRIMARY_SOURCE} missing." >&2
exit 1
fi
UNCLASSIFIED="${DEST_DIR}/cudf-${FIRST_VERSION}.jar"
if [[ ! -f "${UNCLASSIFIED}" ]]; then
cp -f "${PRIMARY_SOURCE}" "${UNCLASSIFIED}"
echo " + cudf-${FIRST_VERSION}.jar (unclassified primary, copy of cuda12)"
fi

# Sources and javadoc jars are classifier-independent (pure Java, no arch or
# cuda variation). Every classifier subdir produces byte-equivalent copies;
# pick the lexicographically first subdir's copy as canonical. Fail fast if
# any subdir is missing either file - that indicates -Prelease or
# -Pjavadoc-jdk17 did not activate for that classifier's build.
DEST_DIR="${OUTPUT_DIR}/${GROUP_PATH}/${ARTIFACT_ID}/${FIRST_VERSION}"
FIRST_CLASSIFIER_SUBDIR=""
for subdir in "${JARS_DIR}"/*/; do
if [[ -z ${FIRST_CLASSIFIER_SUBDIR} ]]; then
Expand Down
3 changes: 3 additions & 0 deletions java/ci/build_cudf_java_jar.sh
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,8 @@ require_arg --libcudf-dir "${LIBCUDF_DIR}"
require_arg --output-dir "${OUTPUT_DIR}"
require_arg --cuda-version "${CUDA_VERSION}"

: "${GITHUB_REF:?GITHUB_REF must be set.}"

if [[ ! -d ${LIBCUDF_DIR} ]]; then
echo "Error: --libcudf-dir '${LIBCUDF_DIR}' does not exist."
exit 1
Expand Down Expand Up @@ -194,6 +196,7 @@ DOCKER_ARGS=(
--env PARALLEL_LEVEL="${PARALLEL_LEVEL}"
--env HOST_UID="$(id -u)"
--env HOST_GID="$(id -g)"
--env GITHUB_REF="${GITHUB_REF}"
)

if [[ -n ${CMAKE_CUDA_ARCHITECTURES} ]]; then
Expand Down
8 changes: 8 additions & 0 deletions java/ci/build_cudf_java_jar_in_container.sh
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,14 @@ fi
cd "${REPO_ROOT}/java"

CUDF_VERSION="$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout "${BUILD_ARG[@]}")"

# Release tag builds strip -SNAPSHOT and rewrite the POM so packaged artifacts
# carry the release version. Non-release builds keep -SNAPSHOT.
if rapids-is-release-build; then
CUDF_VERSION="${CUDF_VERSION%-SNAPSHOT}"
mvn versions:set -DnewVersion="${CUDF_VERSION}" -DgenerateBackupPoms=false "${BUILD_ARG[@]}"
fi

rapids-logger "Packaging cuDF Java JAR version ${CUDF_VERSION} (libcudf: ${CUDF_INSTALL_DIR})"

# The `clean` goal is intentionally omitted: /repo/java/target is a
Expand Down
6 changes: 6 additions & 0 deletions java/ci/test_java_build_local.sh
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,12 @@ record_step_end() {

parse_args "$@"

# Mirror GHA's GITHUB_REF locally so the container distinguishes SNAPSHOT from release-tag builds.
if [[ -z "${GITHUB_REF:-}" ]]; then
GITHUB_REF="$(git -C "${SCRIPT_DIR}" symbolic-ref HEAD 2>/dev/null || true)"
fi
export GITHUB_REF
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Resolved

require_arg --work-dir "${WORK_DIR}"

mkdir -p "${WORK_DIR}"
Expand Down
Loading