diff --git a/bin/download b/bin/download index cf710e9fb907c8e4b0c5e667299475f93081bad9..a0ad846a047976589117f5fd5d8838fabb56d7d6 100755 --- a/bin/download +++ b/bin/download @@ -2,8 +2,8 @@ case "$1" in - db) mode=CollectDatabase;; - files) mode=CollectFiles;; + db) task=CollectDatabase;; + files) task=CollectFiles;; *) echo "Provide either db or files as a first argument!" exit 1;; esac @@ -11,168 +11,26 @@ branch=$(git rev-parse --abbrev-ref HEAD) if [[ "x$2" != "x" ]]; then branch=$2 fi +rm -rf /tmp/${task}/ -export DEBUG=no - -function gitlab() { - EXPECTED=$1 - METHOD=$2 - REQUEST=$3 - shift 3 - if [[ "${DEBUG}" == "yes" ]]; then - echo curl --write-out "\nHTTP-Code:%{http_code}" -X "$METHOD" -s -H "Private-Token: ${GITLAB_PRIVATE_TOKEN}" "${GITLAB_URL}"/api/v4/"$REQUEST" "$@" - fi - output="$(curl --write-out "\nHTTP-Code:%{http_code}" -X "$METHOD" -s -H "Private-Token: ${GITLAB_PRIVATE_TOKEN}" "${GITLAB_URL}"/api/v4/"$REQUEST" "$@")" - if [[ "${DEBUG}" == "yes" ]]; then - echo $output - fi - result="$(echo "$output" | grep "{")" - code="$(echo "$output" | grep -m 1 "HTTP-Code:" | cut -d: -f2)" - if [[ $code -eq $EXPECTED ]]; then - return - fi - if [[ "${DEBUG}" == "no" ]]; then - echo $output +echo "Trigger pipeline ..." +glab ci run -b ${branch} --variables-env TRIGGERMODE:manual,TRIGGERTASK:${task},TRIGGER_INPUT:${branch} +echo "Waiting for pipeline to finish ..." +glab ci status -b ${branch} --live --compact +echo "Download artifact ..." +glab ci artifact ${branch} ${task}Manual --path="/tmp/${task}/" + +if [[ -d /tmp/${task}/ ]]; then + if [[ "$task" == "CollectDatabase" ]]; then + echo "Copy DB dump into PHP container ..." + docker compose cp /tmp/${task}/drupal.sql php:/tmp + echo "Import DB ..." + drush -y sql:drop + drush -y sql:query --file=/tmp/drupal.sql fi - echo "$METHOD request to $REQUEST did not succeed! Responds with code $code instead of $EXPECTED" - exit 99 -} - -function isNumeric() { - re='^[0-9]+$' - if [[ $1 =~ $re ]]; then - return 0 + if [[ "$task" == "CollectFiles" ]]; then + echo "Please move the files from /tmp/${task}/ into your file directories manually." fi - return 1 -} - -function parseUrl() { - # extract the protocol - proto="$(echo "$1" | grep :// | sed -e's,^\(.*://\).*,\1,g')" - # remove the protocol - url="${1/$proto/}" - # extract the user (if any) - user="$(echo "$url" | grep @ | cut -d@ -f1)" - # extract the host and port - hostport="$(echo "${url/$user@/}" | cut -d/ -f1)" - # by request host without port - # shellcheck disable=SC2001 - host="$(echo "$hostport" | sed -e 's,:.*,,g')" - # by request - try to extract the port - port="$(echo "$hostport" | sed -e 's,^.*:,:,g' -e 's,.*:\([0-9]*\).*,\1,g' -e 's,[^0-9],,g')" - # extract the path (if any) - path="$(echo "$url" | sed -e 's,:,/,g' | grep / | cut -d/ -f2-)" -} - -if [[ -n ${CI_SERVER_HOST} ]]; then - GITLAB_URL=https://$CI_SERVER_HOST -fi -if [[ "x${GITLAB_URL}" == "x" ]]; then - echo "Missing GITLAB_URL environment variable, should be set to e.g. https://gitlab.lakedrops.com" - exit 3 -fi -if [[ "x${GITLAB_PRIVATE_TOKEN}" == "x" ]]; then - echo "Missing GITLAB_PRIVATE_TOKEN environment variable" - exit 4 -fi -parseUrl "$GITLAB_URL" -host1=$host -parseUrl "$(git config remote.origin.url)" -host2=$host -if [[ "$host1" != "$host2" ]]; then - echo "This repository doesn't match the provided GitLab instance" - exit 5 -fi - -if [[ -n ${CI_PROJECT_ID} ]]; then - PRJID=$CI_PROJECT_ID else - echo "Find project ID from remote URL ..." - # shellcheck disable=SC2001 - path="$(echo "$path" | sed -e 's,\..*,,g')" - gitlab 200 GET "projects?archived=0&search_namespaces=1&search=$path" - i=0 - while true - do - NAMESPACE=$(echo "$result" | jq -r .[$i]."path_with_namespace") - if [[ "$NAMESPACE" == "$path" ]]; then - PRJID=$(echo "$result" | jq -r .[$i]."id") - if [[ "a${PRJID}a" == "aa" ]]; then - echo "No project found" - exit 6 - fi - if [[ $(isNumeric "$PRJID") -eq 1 ]]; then - echo "Can not find project ID" - exit 6 - fi - break - fi - if [[ "a${NAMESPACE}a" == "aa" ]]; then - echo "No project found" - exit 6 - fi - ((i=i+1)) - done -fi - -echo "Find pipeline trigger token ..." -gitlab 200 GET projects/"$PRJID"/triggers -TRIGGERTOKEN=none -i=0 -while [ $i -ge 0 ] -do - TOKEN=$(echo "$result" | jq -r .[$i]."token") - if [[ "$TOKEN" == "null" ]]; then - i=-1 - elif [[ ${#TOKEN} -eq 4 ]]; then - ((i=i+1)) - else - TRIGGERTOKEN=$TOKEN - i=-1 - fi -done -if [[ "$TRIGGERTOKEN" == "none" ]] || [[ "a${TRIGGERTOKEN}a" == "aa" ]]; then - echo "No token found, creating one ..." - gitlab 201 POST projects/"$PRJID"/triggers --data "description=Created by L3D" - TRIGGERTOKEN=$(echo "$result" | jq -r ."token") - if [[ "$TRIGGERTOKEN" == "none" ]] || [[ "a${TRIGGERTOKEN}a" == "aa" ]]; then - echo "No trigger token found and can not create one" - exit 7 - fi -fi - -echo "Trigger pipeline ..." -gitlab 201 POST projects/"$PRJID"/trigger/pipeline --data "token=$TRIGGERTOKEN" --data "ref=${branch}" --data "variables[TRIGGERTASK]=$mode" --data "variables[TRIGGER_INPUT]=$branch" -PIPELINEID=$(echo "$result" | jq -r ."id") -PIPELINESTATUS=$(echo "$result" | jq -r ."status") - -while [ $PIPELINESTATUS != "success" ] -do - sleep 3 - gitlab 200 GET /projects/"$PRJID"/pipelines/"$PIPELINEID" - PIPELINESTATUS=$(echo "$result" | jq -r ."status") - echo " $PIPELINESTATUS ..." - case "${PIPELINESTATUS}" - in - created) ;; - pending) ;; - running) ;; - success) ;; - *) exit 8;; - esac -done -gitlab 200 GET /projects/"$PRJID"/pipelines/"$PIPELINEID"/jobs -JOBID=$(echo "$result" | jq -r .[0]."id") -gitlab 200 GET /projects/"$PRJID"/jobs/"$JOBID"/artifacts --output /tmp/artifacts.zip -echo "Extract archive ..." -unzip -o /tmp/artifacts.zip -d /tmp -if [[ "$mode" == "CollectDatabase" ]]; then - echo "Copy DB dump into PHP container ..." - docker compose cp /tmp/drupal.sql php:/tmp - echo "Import DB ..." - drush -y sql:drop - drush -y sql:query --file=/tmp/drupal.sql -fi -if [[ "$mode" == "CollectFiles" ]]; then - echo "Please move the files from /tmp into your file directories manually." + echo "Something went wrong" fi