Skip to content

Commit

Permalink
Merge "Fix: Update Gradle publish job"
Browse files Browse the repository at this point in the history
  • Loading branch information
jwagantall authored and Gerrit Code Review committed Jun 5, 2024
2 parents 861a66c + 7b3d35d commit 6b7742e
Show file tree
Hide file tree
Showing 4 changed files with 145 additions and 3 deletions.
5 changes: 5 additions & 0 deletions docs/jjb/lf-gradle-jobs.rst
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,11 @@ Runs a gradle publish command to publish the jar.
:java-version: Version of Java to execute Maven build. (default: openjdk17)
:jenkins-ssh-credential: Credential to use for SSH. (Generally configured in defaults.yaml)
:mvn-settings: Maven settings.xml file containing credentials to use.
:publish-credential: Project credential used for accessing Nexus
:publish-directory: Location of built artifacts
:publish-file-extension: Artifact's file extension
:publish-url: Nexus publishing repo location

:wrapper: Use the gradle wrapper (default: true)

:Optional parameters:
Expand Down
19 changes: 16 additions & 3 deletions jjb/lf-gradle-jobs.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@
git-url: "$GIT_URL/$PROJECT"
github-url: https://github.com
java-version: openjdk17
publish-credential: ""
publish-directory: ""
publish-file-extension: jar
publish-url: ""
stream: master
submodule-recursive: true
submodule-timeout: 10
Expand Down Expand Up @@ -55,7 +59,11 @@
- lf-infra-wrappers:
build-timeout: "{build-timeout}"
jenkins-ssh-credential: "{jenkins-ssh-credential}"

- credentials-binding:
- username-password-separated:
credential-id: "{publish-credential}"
username: NEXUS_USERNAME
password: NEXUS_PASSWORD
publishers:
- lf-infra-publish

Expand Down Expand Up @@ -175,8 +183,13 @@
executable: true
tasks: |
shadowJar
publish
- inject:
properties-content: |
NEXUS_URL={publish-url}
DIRECTORY={publish-directory}
FILE_EXTENSION={publish-file-extension}
- shell: !include-raw-escape:
- ../shell/nexus-upload.sh
scm:
- lf-infra-gerrit-scm:
jenkins-ssh-credential: "{jenkins-ssh-credential}"
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
fixes:
- |
Update Gradle publish job to add flexibility of releasing Nexus artifacts from
a specific directory location.
119 changes: 119 additions & 0 deletions shell/nexus-upload.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
#!/usr/bin/env bash
# SPDX-License-Identifier: Apache-2.0
# Copyright 2024 The LMinux Foundation <matthew.watkins@linuxfoundation.org>
# Uncomment to enable debugging
# set -vx
# Initialise variables
DIRECTORY="."
FILE_EXTENSION=""
# Count file upload successes/failures
SUCCESSES="0"; FAILURES="0"
# Shared functions
show_help() {
# Command usage help
cat << EOF
Usage: ${0##*/} [-h] [-u user] [-p password] [-s upload-url] [-e extensions] [-d folder]
-h display this help and exit
-u username (or export variable NEXUS_USERNAME)
-p password (or export variable NEXUS_PASSWORD)
-s upload URL (or export variable NEXUS_URL)
e.g. https://nexus3.o-ran-sc.org/repository/datasets/
-e file extensions to match, e.g. csv, txt
-d local directory hosting files/content to be uploaded
EOF
}
error_help() {
show_help >&2
exit 1
}
transfer_report() {
echo "Successes: $SUCCESSES Failures: $FAILURES"
if [ "$FAILURES" -gt 0 ]; then
exit 1
else
exit 0
fi
}
curl_upload() {
FILE="$1"
echo "Sending: ${FILE}"
# echo "Running: $CURL --fail [CREDENTIALS] --upload-file $FILE $NEXUS_URL"
if ("$CURL" --fail -u "$CREDENTIALS" --upload-file "$FILE" "$NEXUS_URL"); then #> /dev/null 2>&1
SUCCESSES=$((SUCCESSES+1))
else
FAILURES=$((FAILURES+1))
fi
}
process_files() {
for FILE in "${UPLOAD_FILES_ARRAY[@]}"; do
curl_upload "$FILE"
done
}
# Validate/check arguments and variables
CURL=$(which curl)
if [ ! -x "$CURL" ];then
echo "CURL was not found in your PATH"; exit 1
fi
while getopts hu:p:s:d:e: opt; do
case $opt in
u) NEXUS_USERNAME="$OPTARG"
;;
p) NEXUS_PASSWORD="$OPTARG"
;;
s) NEXUS_URL="$OPTARG"
;;
e) FILE_EXTENSION="$OPTARG"
;;
d) DIRECTORY="$OPTARG"
if [ ! -d "$DIRECTORY" ]; then
echo "Error: specified directory invalid"; exit 1
fi
;;
h|?)
show_help
exit 0
;;
*)
error_help
esac
done
shift "$((OPTIND -1))" # Discard the options
# Gather location of files to upload (in an array)
mapfile -t UPLOAD_FILES_ARRAY < <(find "$DIRECTORY" -name "*$FILE_EXTENSION" -type f -print )
if [ "${#UPLOAD_FILES_ARRAY[@]}" -ne 0 ]; then
echo "Files found to upload: ${#UPLOAD_FILES_ARRAY[@]}"
# echo "Files matching pattern:" # Uncomment for debugging
# echo "${UPLOAD_FILES_ARRAY[@]}" # Uncomment for debugging
else
echo "Error: no files found to process matching pattern"
exit 1
fi
if [ -z "$NEXUS_URL" ]; then
echo "ERROR: Specifying the upload/repository URL is mandatory"; exit 1
else
if [[ ! "$NEXUS_URL" == "http://"* ]] && \
[[ ! "$NEXUS_URL" == "https://"* ]]; then
echo "Error: Nexus server must be specified as a URL"; exit 1
fi
fi
# Prompt for credentials if not specified explicitly or present in the shell environment
if [ -z "$NEXUS_USERNAME" ]; then
echo -n "Enter username: "
read -r NEXUS_USERNAME
if [[ -z "$NEXUS_USERNAME" ]]; then
echo "ERROR: Username cannot be empty"; exit 1
fi
fi
if [ -z "$NEXUS_PASSWORD" ]; then
echo -n "Enter password: "
read -s -r NEXUS_PASSWORD # Does not echo to terminal/console
echo ""
if [[ -z "$NEXUS_PASSWORD" ]]; then
echo "ERROR: Password cannot be empty"; exit 1
fi
fi
CREDENTIALS="$NEXUS_USERNAME:$NEXUS_PASSWORD"
# Main script entry point
echo "Uploading to: $NEXUS_URL"
process_files
transfer_report

0 comments on commit 6b7742e

Please sign in to comment.