diff --git a/shellscripts/api-imlciserver.sh b/shellscripts/api-imlciserver.sh index 099e7ff339160fff9028115bc2cfdf484cb1c9f2..7b1932e586ce574ebe77ceaf50c1e464e9d40cdc 100755 --- a/shellscripts/api-imlciserver.sh +++ b/shellscripts/api-imlciserver.sh @@ -7,6 +7,7 @@ # 2020-07-23 v1.0 <axel.hahn@iml.unibe.ch> first lines # 2020-07-29 v1.1 <axel.hahn@iml.unibe.ch> check "/" in branch; check http status 200 # 2021-03-29 v1.2 <axel.hahn@iml.unibe.ch> support slashes in branch names +# 2025-02-19 v1.3 <axel.hahn@iml.unibe.ch> shell fixes; long cli parameters # ====================================================================== # ---------------------------------------------------------------------- @@ -22,30 +23,35 @@ line="----------------------------------------------------------------------" # FUNCTIONS # ---------------------------------------------------------------------- +# Show help with parameters function showhelp(){ + local _self; _self="$( basename "$0" )" echo " SYNTAX: - -a ACTION set name of an action - -b BRANCH set custom branch to access, i.e. origin/feature-123 - -p PROJECT project name in the ci server; overrides env variable IMLCI_PROJECT - -s SECRET API secret for the given project; overrides env variable IMLCI_API_SECRET - -u URL URL of iml ci server without trailing /; overrides env variable IMLCI_URL - -ACTION: - ... without given project and secret - projects show projects - - ... with project and secret - buildinfo [branch] - show infos about what happens on build - build [branch] - execute build - phases show status of phases + -a, --action ACTION + set name of an action + ... without given project and secret + projects show projects + + ... with project and secret + buildinfo BRANCH + show infos about what happens on build + build BRANCH + execute build + phases show status of phases + -b, --branch BRANCH + set custom branch to access, i.e. origin/feature-123 + -p, --project PROJECT + project name in the ci server; overrides env variable IMLCI_PROJECT + -s, --secret SECRET + API secret for the given project; overrides env variable IMLCI_API_SECRET + -u. --url URL + URL of iml ci server without trailing /; overrides env variable IMLCI_URL EXAMPLES: - `basename $0` -u https://ci.example.com -a projects - `basename $0` -u https://ci.example.com -p myproject -s 12345678 -a buildinfo - `basename $0` -u https://ci.example.com -p myproject -s 12345678 -a build + $_self -u https://ci.example.com -a projects + $_self -u https://ci.example.com -p myproject -s 12345678 -a buildinfo + $_self -u https://ci.example.com -p myproject -s 12345678 -a build " } @@ -59,7 +65,7 @@ function makeRequest(){ local outfile=$( mktemp ) echo $line - echo $apiMethod ${apiHost}${apiRequest} + echo "$apiMethod ${IMLCI_URL}${apiRequest}" echo $line if [ ! -z "$secret" ]; then @@ -67,7 +73,7 @@ function makeRequest(){ # --- date in http format LANG=en_EN # export TZ=GMT - apiTS=`date "+%a, %d %b %Y %H:%M:%S %Z"` + apiTS=$( date "+%a, %d %b %Y %H:%M:%S %Z" ) # --- generate data to hash: method + uri + timestamp; delimited with line break @@ -77,30 +83,32 @@ ${apiTS} " # generate hash - split in 2 commands (piping "cut" sends additional line break) - myHash=`echo -n "$data" | openssl sha1 -hmac "${secret}" | cut -f 2 -d" "` - myHash=`echo -n "$myHash" | base64` + myHash=$( echo -n "$data" | openssl sha1 -hmac "${secret}" | cut -f 2 -d" ") + myHash=$( echo -n "$myHash" | base64 ) curl -i \ -H "Accept: application/json" -H "Content-Type: application/json" \ -H "Date: ${apiTS}" \ -H "Authorization: demo-bash-client:${myHash}" \ - -X $apiMethod \ - ${IMLCI_URL}${apiRequest} | tee -a $outfile + -X "$apiMethod" \ + -s \ + "${IMLCI_URL}${apiRequest}" | tee -a "$outfile" else curl -i \ -H "Accept: application/json" -H "Content-Type: application/json" \ - -X $apiMethod \ - ${IMLCI_URL}${apiRequest} | tee -a $outfile + -X "$apiMethod" \ + -s \ + "${IMLCI_URL}${apiRequest}" | tee -a "$outfile" fi - grep "^HTTP/" $outfile | head -1 | grep " 200 " >/dev/null + grep "^HTTP/" "$outfile" | head -1 | grep " 200 " >/dev/null local rccurl=$? - rm -f $outfile + rm -f "$outfile" if [ $rccurl -ne 0 ]; then echo echo "ERROR: API request failed. CURL request did not get respond status code 200." - exit 4 + exit 5 fi } @@ -110,38 +118,34 @@ ${apiTS} # ---------------------------------------------------------------------- echo -echo ===== API CALL TO IML CI SERVER :: `date` ===== +echo "===== API CALL TO IML CI SERVER :: $( date ) =====" echo -if [ $# -lt 1 ]; then +if [ $# -eq 0 ]; then showhelp exit 1 fi -while getopts "a:b:u:p:s:" option; do -case ${option} in - a) - apiAction=$OPTARG - ;; - b) - branch=$OPTARG - ;; - u) - export IMLCI_URL=$OPTARG - ;; - p) - export IMLCI_PROJECT=$OPTARG - ;; - s) - export IMLCI_API_SECRET=$OPTARG - ;; - *) - echo ERROR: invalid option [${option}] - exit 2 -esac -done +while [[ "$#" -gt 0 ]]; do case $1 in + -a|--action) apiAction="$2";shift; shift;; + -b|--branch) branch="$2";shift; shift;; + -h|--help) showhelp; exit 0;; + -u|--url) IMLCI_URL="$2";shift; shift;; + -p|--project) IMLCI_PROJECT="$2";shift; shift;; + -s|--secret) IMLCI_API_SECRET="$2";shift; shift;; + *) if grep "^-" <<< "$1" >/dev/null ; then + echo; echo "ERROR: Unknown parameter: $1"; echo; showhelp; exit 2 + fi + break; + ;; +esac; done +if [ $# -gt 0 ]; then + showhelp + exit 3 +fi + -echo Params: $* +echo "Params: $*" echo "IMLCI_URL = $IMLCI_URL" echo "IMLCI_PROJECT = $IMLCI_PROJECT" echo "IMLCI_API_SECRET = $IMLCI_API_SECRET" @@ -151,7 +155,7 @@ echo # echo $branch | grep '/.*/.*' >/dev/null && ( echo "WARNING: Do NOT use a branch containing a slash [/] in the name"; echo ) -echo ACTION: $apiAction +echo "ACTION: $apiAction" case $apiAction in # --- projects is an access without autorization @@ -161,17 +165,17 @@ case $apiAction in # --- access WITH autorization only "build") - makeRequest POST /api/v1/project/$IMLCI_PROJECT/build/$branch "$IMLCI_API_SECRET" + makeRequest POST "/api/v1/project/$IMLCI_PROJECT/build/$branch" "$IMLCI_API_SECRET" ;; "buildinfo") - makeRequest GET /api/v1/project/$IMLCI_PROJECT/build/$branch "$IMLCI_API_SECRET" + makeRequest GET "/api/v1/project/$IMLCI_PROJECT/build/$branch" "$IMLCI_API_SECRET" ;; "phases") - makeRequest GET /api/v1/project/$IMLCI_PROJECT/phases "$IMLCI_API_SECRET" + makeRequest GET "/api/v1/project/$IMLCI_PROJECT/phases" "$IMLCI_API_SECRET" ;; *) echo "ERROR: unknown action [$apiAction]" - exit 3 + exit 4 esac rc=$?