Skip to content
Snippets Groups Projects
Commit b6357621 authored by Hahn Axel (hahn)'s avatar Hahn Axel (hahn)
Browse files

api shel script: shell fixes; long cli parameters

parent 6b595fa4
No related branches found
No related tags found
1 merge request!827821 improve api error messages
......@@ -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:
-a, --action ACTION
set name of an action
... without given project and secret
projects show projects
... with project and secret
buildinfo [branch]
buildinfo BRANCH
show infos about what happens on build
build [branch]
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
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;
;;
*)
echo ERROR: invalid option [${option}]
exit 2
esac
done
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=$?
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment