Skip to content

Commit

Permalink
Add maven publish for 1.3.x release
Browse files Browse the repository at this point in the history
Signed-off-by: Prudhvi Godithi <[email protected]>
  • Loading branch information
prudhvigodithi committed May 12, 2023
1 parent 1add5ea commit cb4f929
Show file tree
Hide file tree
Showing 3 changed files with 239 additions and 3 deletions.
8 changes: 5 additions & 3 deletions .codecov.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,11 @@ codecov:
require_ci_to_pass: yes

coverage:
precision: 2
round: down
range: '80...100'
status:
project:
default:
target: 80% # the required coverage value
threshold: 2% # the leniency in hitting the target

ignore:
- '**/tests/*.py'
Expand Down
93 changes: 93 additions & 0 deletions jenkins/opensearch/maven-publish-1.3.x.jenkinsfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
lib = library(identifier: '[email protected]', retriever: modernSCM([
$class: 'GitSCMSource',
remote: 'https://github.com/opensearch-project/opensearch-build-libraries.git',
]))

pipeline {
options {
timeout(time: 2, unit: 'HOURS')
}
agent none
environment {
AGENT_X64 = 'Jenkins-Agent-AL2-X64-C54xlarge-Docker-Host'
}
triggers {
parameterizedCron '''
H/60 * * * * %INPUT_MANIFEST=1.3.10/opensearch-1.3.10.yml
'''
}
parameters {
string(
name: 'COMPONENT_NAME',
description: 'If this field contains one or more component names (e.g. OpenSearch common-utils ...), will build with "--component <COMPONENT_NAME> ...", else build everything in the INPUT_MANIFEST.',
trim: true
)
string(
name: 'INPUT_MANIFEST',
description: 'Input manifest under the manifests folder, e.g. 2.0.0/opensearch-2.0.0.yml.',
trim: true
)
}
stages {
stage('dockerAgent-setup') {
agent {
docker {
label AGENT_X64
image 'docker/library/alpine:3'
registryUrl 'https://public.ecr.aws/'
alwaysPull true
}
}
steps {
script {
echo("Detect Docker Images and Related Parameters")
dockerAgent = detectDockerAgent()
currentBuild.description = INPUT_MANIFEST
}
}
}
stage('publish-maven-snaphots') {
environment {
SNAPSHOT_REPO_URL = "https://aws.oss.sonatype.org/content/repositories/snapshots/"
}
agent {
docker {
label AGENT_X64
image dockerAgent.image
args dockerAgent.args
alwaysPull true
}
}
steps {
script {
buildManifest(
componentName: "${COMPONENT_NAME}",
inputManifest: "manifests/${INPUT_MANIFEST}",
platform: 'linux',
architecture: 'x64',
distribution: 'tar',
snapshot: true
)

String mavenPath = "$WORKSPACE/tar/builds/opensearch/maven"

if (fileExists(mavenPath)) {
withCredentials([
string(credentialsId: 'maven-snapshots-username', variable: 'SONATYPE_USERNAME'),
string(credentialsId: 'maven-snapshots-password', variable: 'SONATYPE_PASSWORD')
]) {
sh("$WORKSPACE/publish/publish-snapshot.sh ${mavenPath}")
}
} else {
echo "Skipping publishing snapshots, ${mavenPath} does not exist."
}
}
}
post {
always {
postCleanup()
}
}
}
}
}
141 changes: 141 additions & 0 deletions publish/publish-snapshot.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
#!/bin/bash

# Copyright OpenSearch Contributors
###### Information ############################################################################
# SPDX-License-Identifier: Apache-2.0
#
# The OpenSearch Contributors require contributions made to
# this file be licensed under the Apache-2.0 license or a
# compatible open source license.
#
# Name: publish-snapshot.sh
# Language: Shell
#
# About: Deploy opensearch artifacts to a sonatype snapshot repository.
# This script will search POM files under the passed in directory and publish artifacts to
# a snapshot repository using the mvn deploy plugin.
#
# Usage: ./publish-snapshot.sh <directory>
#
###############################################################################################
set -e

[ -z "${1:-}" ] && {
usage
}

usage() {
echo "usage: $0 [-h] [dir]"
echo " dir parent directory of artifacts to be published to org/opensearch namespace."
echo " example: dir = ~/.m2/repository/org/opensearch where dir contains artifacts of a path:"
echo " /maven/reindex-client/1.0.0-SNAPSHOT/reindex-client-1.0.0-SNAPSHOT.jar"
echo " -h display help"
echo "Required environment variables:"
echo "SONATYPE_USERNAME - username with publish rights to a sonatype repository"
echo "SONATYPE_PASSWORD - password for sonatype"
echo "SNAPSHOT_REPO_URL - repository URL ex. http://localhost:8081/nexus/content/repositories/snapshots/"
exit 1
}

while getopts ":h" option; do
case $option in
h)
usage
;;
\?)
echo "Invalid option -$OPTARG" >&2
usage
;;
esac
done

[ -z "${SONATYPE_USERNAME}" ] && {
echo "SONATYPE_USERNAME is required"
exit 1
}

[ -z "${SONATYPE_PASSWORD}" ] && {
echo "SONATYPE_PASSWORD is required"
exit 1
}

[ -z "${SNAPSHOT_REPO_URL}" ] && {
echo "REPO_URL is required"
exit 1
}

if [ ! -d "$1" ]; then
echo "Invalid directory $1 does not exist"
usage
fi

create_maven_settings() {
# Create a settings.xml file with the user+password for maven
mvn_settings="${workdir}/mvn-settings.xml"
cat >${mvn_settings} <<-EOF
<?xml version="1.0" encoding="UTF-8" ?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
http://maven.apache.org/xsd/settings-1.0.0.xsd">
<servers>
<server>
<id>nexus</id>
<username>${SONATYPE_USERNAME}</username>
<password>${SONATYPE_PASSWORD}</password>
</server>
</servers>
</settings>
EOF
}

url="${SNAPSHOT_REPO_URL}"
workdir=$(mktemp -d)

function cleanup() {
rm -rf "${workdir}"
}

trap cleanup TERM INT EXIT

create_maven_settings

cd "$1"

echo "searching for poms under $PWD"

pomFiles="$(find "." -name '*.pom')"
if [ -z "${pomFiles}" ]; then
echo "No artifacts found under $PWD"
exit 1
fi

for pom in ${pomFiles}; do
pom_dir="$(dirname "${pom}")"
for FILE in "${pom_dir}"/*; do
# The POM is deployed with the artifact in a single deploy-file command, we can skip over it
if [[ $FILE != $pom ]] &&
[[ $FILE != *"test-fixtures"* ]] && # This is a hack to ensure the OpenSearch build-tools test fixture jar is not uploaded instead of the actual build-tools jar.
[[ $FILE != *"javadoc"* ]] &&
[[ $FILE != *"sources"* ]]; then
extension="${FILE##*.}"
case $extension in jar | war | zip)
echo "Uploading: ${FILE} with ${pom} to ${url}"
mvn --settings="${mvn_settings}" deploy:deploy-file \
-DgeneratePom=false \
-DrepositoryId=nexus \
-Durl="${SNAPSHOT_REPO_URL}" \
-DpomFile="${pom}" \
-Dfile="${FILE}" || echo "Failed to upload ${FILE}"
;;
*) echo "Skipping upload for ${FILE}" ;;
esac
fi
done

echo "Finished uploading ${pom_dir}"
done

echo "==========================================="
echo "Done."
echo "==========================================="

0 comments on commit cb4f929

Please sign in to comment.