From d513846d8b331c81147490690ff7b283bd6457bb Mon Sep 17 00:00:00 2001 From: Daniel Widdis Date: Wed, 8 Jan 2025 14:43:40 -0800 Subject: [PATCH] Switch publication to shadow JAR and add build script Signed-off-by: Daniel Widdis --- .github/workflows/publish-snapshots.yml | 2 +- aos-client/build.gradle | 11 ++++ build.gradle | 24 +++++++-- ddb-client/build.gradle | 15 ++++++ remote-client/build.gradle | 7 +++ scripts/build.sh | 71 +++++++++++++++++++++++++ 6 files changed, 125 insertions(+), 5 deletions(-) create mode 100755 scripts/build.sh diff --git a/.github/workflows/publish-snapshots.yml b/.github/workflows/publish-snapshots.yml index 356a866..9764fd7 100644 --- a/.github/workflows/publish-snapshots.yml +++ b/.github/workflows/publish-snapshots.yml @@ -34,4 +34,4 @@ jobs: export SONATYPE_PASSWORD=$(aws secretsmanager get-secret-value --secret-id maven-snapshots-password --query SecretString --output text) echo "::add-mask::$SONATYPE_USERNAME" echo "::add-mask::$SONATYPE_PASSWORD" - ./gradlew publishMavenJavaPublicationToSnapshotsRepository + ./gradlew publishShadowPublicationToSnapshotsRepository diff --git a/aos-client/build.gradle b/aos-client/build.gradle index 3ba9fe0..8105af3 100644 --- a/aos-client/build.gradle +++ b/aos-client/build.gradle @@ -32,3 +32,14 @@ dependencies { implementation("software.amazon.awssdk:url-connection-client") implementation("software.amazon.awssdk:utils") } + +shadowJar { + dependsOn(':opensearch-remote-metadata-sdk-core:shadowJar', + ':opensearch-remote-metadata-sdk-remote-client:shadowJar') + from(project(':opensearch-remote-metadata-sdk-core').shadowJar.outputs.files) { + into 'META-INF/lib' + } + from(project(':opensearch-remote-metadata-sdk-remote-client').shadowJar.outputs.files) { + into 'META-INF/lib' + } +} diff --git a/build.gradle b/build.gradle index fbc2140..4ce1495 100644 --- a/build.gradle +++ b/build.gradle @@ -76,6 +76,7 @@ allprojects { subprojects { apply plugin: 'java-library' + apply plugin: 'com.github.johnrengelman.shadow' dependencies { // Common dependencies for all subprojects @@ -98,6 +99,8 @@ subprojects { configurations { testImplementation.extendsFrom testFixtures + implementation.extendsFrom shadowImplementation + runtimeOnly.extendsFrom shadowRuntimeOnly } test { @@ -136,6 +139,11 @@ subprojects { withJavadocJar() } + shadowJar { + archiveClassifier.set(null) + from sourceSets.main.output + } + checkstyle { toolVersion = "10.21.1" } @@ -147,18 +155,26 @@ subprojects { publishing { publications { - mavenJava(MavenPublication) { + shadow(MavenPublication) { from components.java - // These are for unpublished test classes - suppressPomMetadataWarningsFor('testFixturesApiElements') - suppressPomMetadataWarningsFor('testFixturesRuntimeElements') + project.shadow.component(it) // Customize artifact ID for core project if (project.name == 'opensearch-remote-metadata-sdk-core') { artifactId = 'opensearch-remote-metadata-sdk' } + artifacts.clear() + + artifact shadowJar + artifact sourcesJar + artifact javadocJar + + // These are for unpublished test classes + suppressPomMetadataWarningsFor('testFixturesApiElements') + suppressPomMetadataWarningsFor('testFixturesRuntimeElements') + pom { name = project.name == 'opensearch-remote-metadata-sdk-core' ? "OpenSearch Remote Metadata SDK for Java" diff --git a/ddb-client/build.gradle b/ddb-client/build.gradle index b0e66cb..83ce291 100644 --- a/ddb-client/build.gradle +++ b/ddb-client/build.gradle @@ -12,3 +12,18 @@ dependencies { implementation(platform("software.amazon.awssdk:bom:${aws_sdk_version}")) implementation "software.amazon.awssdk:dynamodb" } + +shadowJar { + dependsOn(':opensearch-remote-metadata-sdk-core:shadowJar', + ':opensearch-remote-metadata-sdk-remote-client:shadowJar', + ':opensearch-remote-metadata-sdk-aos-client:shadowJar') + from(project(':opensearch-remote-metadata-sdk-core').shadowJar.outputs.files) { + into 'META-INF/lib' + } + from(project(':opensearch-remote-metadata-sdk-remote-client').shadowJar.outputs.files) { + into 'META-INF/lib' + } + from(project(':opensearch-remote-metadata-sdk-aos-client').shadowJar.outputs.files) { + into 'META-INF/lib' + } +} diff --git a/remote-client/build.gradle b/remote-client/build.gradle index 8864786..a0502ab 100644 --- a/remote-client/build.gradle +++ b/remote-client/build.gradle @@ -9,3 +9,10 @@ dependencies { implementation "org.opensearch.client:opensearch-java:${opensearch_java_version}" } + +shadowJar { + dependsOn(':opensearch-remote-metadata-sdk-core:shadowJar') + from(project(':opensearch-remote-metadata-sdk-core').shadowJar.outputs.files) { + into 'META-INF/lib' + } +} diff --git a/scripts/build.sh b/scripts/build.sh new file mode 100755 index 0000000..e0495d4 --- /dev/null +++ b/scripts/build.sh @@ -0,0 +1,71 @@ +#!/bin/bash + +# Copyright OpenSearch Contributors. +# SPDX-License-Identifier: Apache-2.0 + +set -ex + +function usage() { + echo "Usage: $0 [args]" + echo "" + echo "Arguments:" + echo -e "-v VERSION\t[Required] OpenSearch version." + echo -e "-q QUALIFIER\t[Optional] Version qualifier." + echo -e "-s SNAPSHOT\t[Optional] Build a snapshot, default is 'false'." + echo -e "-p PLATFORM\t[Optional] Platform, ignored." + echo -e "-a ARCHITECTURE\t[Optional] Build architecture, ignored." + echo -e "-o OUTPUT\t[Optional] Output path, default is 'artifacts'." + echo -e "-h help" +} + +while getopts ":h:v:q:s:o:p:a:" arg; do + case $arg in + h) + usage + exit 1 + ;; + v) + VERSION=$OPTARG + ;; + q) + QUALIFIER=$OPTARG + ;; + s) + SNAPSHOT=$OPTARG + ;; + o) + OUTPUT=$OPTARG + ;; + p) + PLATFORM=$OPTARG + ;; + a) + ARCHITECTURE=$OPTARG + ;; + :) + echo "Error: -${OPTARG} requires an argument" + usage + exit 1 + ;; + ?) + echo "Invalid option: -${arg}" + exit 1 + ;; + esac +done + +if [ -z "$VERSION" ]; then + echo "Error: You must specify the OpenSearch version" + usage + exit 1 +fi + +[[ ! -z "$QUALIFIER" ]] && VERSION=$VERSION-$QUALIFIER +[[ "$SNAPSHOT" == "true" ]] && VERSION=$VERSION-SNAPSHOT +[ -z "$OUTPUT" ] && OUTPUT=artifacts + +./gradlew build -x test -Dopensearch.version=$VERSION -Dbuild.snapshot=$SNAPSHOT -Dbuild.version_qualifier=$QUALIFIER +./gradlew publishShadowPublicationToMavenLocal -Dopensearch.version=$VERSION -Dbuild.snapshot=$SNAPSHOT -Dbuild.version_qualifier=$QUALIFIER +./gradlew publishShadowPublicationToStagingRepository -Dopensearch.version=$VERSION -Dbuild.snapshot=$SNAPSHOT -Dbuild.version_qualifier=$QUALIFIER +mkdir -p $OUTPUT/maven/org/opensearch +cp -r ./build/local-staging-repo/org/opensearch/. $OUTPUT/maven/org/opensearch