Skip to content
Snippets Groups Projects
Commit 172cabb6 authored by hahn's avatar hahn
Browse files

add api shell script for gitlab runner; remove proof of concept script

parent b3fc8ffb
No related branches found
No related tags found
No related merge requests found
#!/bin/bash
# ======================================================================
#
# API CLIENT :: proof of concept
#
# This is a demo api client
#
# ----------------------------------------------------------------------
#
# my projects and secrets
# DATA:ci-webgui:cOiScVAElvcJKmJ1eGrKXZvv6ZROlSgZ9VpSVFK1uxZI8J5ITXuZZb8jIYobuoAB
#
# ----------------------------------------------------------------------
# 2020-06-12 first lines <axel.hahn@iml.unibe.ch>
# ======================================================================
# ----------------------------------------------------------------------
# CONFIG
# ----------------------------------------------------------------------
apiHost="http://dev.ci.iml.unibe.ch:8002"
line="----------------------------------------------------------------------"
# ----------------------------------------------------------------------
# FUNCTIONS
# ----------------------------------------------------------------------
function showhelp(){
echo "
SYNTAX
projects show projects
buildinfo [project] [branch]
show infos about what happens on build
build [project] [branch]
execute build
phases [project]
show status of phases
PARAMETERS:
project project id in ci; see output or projects
branch name of branch (optional), i.e. origin/feature-123
"
}
function makeRequest(){
local apiMethod=$1
local apiRequest=$2
local secret=$3
echo $apiMethod ${apiHost}${apiRequest}
echo $line
if [ ! -z "$secret" ]; then
# --- date in http format
LANG=en_EN
# export TZ=GMT
apiTS=`date "+%a, %d %b %Y %H:%M:%S %Z"`
# --- generate data to hash: method + uri + timestamp; delimited with line break
data="${apiMethod}
${apiRequest}
${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`
curl -i \
-H "Accept: application/json" -H "Content-Type: application/json" \
-H "Date: ${apiTS}" \
-H "Authorization: demo-bash-client:${myHash}" \
-X $apiMethod \
${apiHost}${apiRequest}
else
curl -i \
-H "Accept: application/json" -H "Content-Type: application/json" \
-X $apiMethod \
${apiHost}${apiRequest}
fi
}
# ----------------------------------------------------------------------
# MAIN
# ----------------------------------------------------------------------
if [ $# -lt 1 ]; then
showhelp
exit 1
fi
myProject=$2
secret=`grep "^#\ DATA:${myProject}:" $0 | cut -f 3- -d ":"`
case $1 in
# --- projects is an access without autorization
"projects")
makeRequest GET /api/v1/projects
;;
# --- access WITH autorization only
"build")
makeRequest POST /api/v1/project/$myProject/build/$3 "$secret"
;;
"buildinfo")
makeRequest GET /api/v1/project/$myProject/build/$3 "$secret"
;;
"phases")
makeRequest GET /api/v1/project/$myProject/phases "$secret"
;;
*)
echo "ERROR: unknown parameter $1"
exit 2
esac
rc=$?
echo
echo $line
echo rc=$rc
exit $rc
\ No newline at end of file
#!/usr/bin/env bash
# ======================================================================
#
# API CLIENT :: API REQUEST TO IML CI SERVER
#
# ----------------------------------------------------------------------
# 2020-07-23 first lines <axel.hahn@iml.unibe.ch>
# ======================================================================
# ----------------------------------------------------------------------
# CONFIG
# ----------------------------------------------------------------------
line="----------------------------------------------------------------------"
# LOG_FILE=/tmp/`basename $0`-last.log
# exec > >(tee -a ${LOG_FILE} )
# exec 2> >(tee -a ${LOG_FILE} >&2)
# ----------------------------------------------------------------------
# FUNCTIONS
# ----------------------------------------------------------------------
function showhelp(){
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
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
"
}
function makeRequest(){
local apiMethod=$1
local apiRequest=$2
local secret=$3
echo $line
echo $apiMethod ${apiHost}${apiRequest}
echo $line
if [ ! -z "$secret" ]; then
# --- date in http format
LANG=en_EN
# export TZ=GMT
apiTS=`date "+%a, %d %b %Y %H:%M:%S %Z"`
# --- generate data to hash: method + uri + timestamp; delimited with line break
data="${apiMethod}
${apiRequest}
${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`
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}
else
curl -i \
-H "Accept: application/json" -H "Content-Type: application/json" \
-X $apiMethod \
${IMLCI_URL}${apiRequest}
fi
}
# ----------------------------------------------------------------------
# MAIN
# ----------------------------------------------------------------------
echo
echo ===== API CALL TO IML CI SERVER :: `date` =====
echo
if [ $# -lt 1 ]; 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 1
esac
done
echo Params: $*
echo "IMLCI_URL = $IMLCI_URL"
echo "IMLCI_PROJECT = $IMLCI_PROJECT"
echo "IMLCI_API_SECRET = $IMLCI_API_SECRET"
echo
echo ACTION: $apiAction
case $apiAction in
# --- projects is an access without autorization
"projects")
makeRequest GET /api/v1/projects
;;
# --- access WITH autorization only
"build")
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"
;;
"phases")
makeRequest GET /api/v1/project/$IMLCI_PROJECT/phases "$IMLCI_API_SECRET"
;;
*)
echo "ERROR: unknown action [$apiAction]"
exit 2
esac
rc=$?
echo
echo $line
date
echo rc=$rc
exit $rc
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment