#!/bin/bash if [[ -n "${DRONE_WORKSPACE}" ]]; then # ensure the unprivileged drone user can write # to the workspace. This is required because # the workspace is a docker volume and is owned # by root. # sudo mkdir -p ${DRONE_WORKSPACE} # sudo chown drone:drone ${DRONE_WORKSPACE} # ensure the workspace is the current working # directory. This should already be the case, # but we cd just to be safe. cd "${DRONE_WORKSPACE}" || exit 1 fi # force the home directory path. # if [ "$HOME" != "/home/drone" ]; then # echo "[DEBUG] setting default home directory" # export HOME=/home/drone # fi # if the netrc enviornment variables exist, write # the netrc file. if [[ -n "${DRONE_NETRC_MACHINE}" ]]; then cat < "${HOME}/.netrc" machine ${DRONE_NETRC_MACHINE} login ${DRONE_NETRC_USERNAME} password ${DRONE_NETRC_PASSWORD} EOF fi # if the ssh_key environment variable exists, write # the ssh key and add the netrc machine to the # known hosts file. if [[ -n "${DRONE_SSH_KEY}" ]]; then mkdir "${HOME}/.ssh" echo -n "${DRONE_SSH_KEY}" > "${HOME}/.ssh/id_rsa" chmod 600 "${HOME}/.ssh/id_rsa" touch "${HOME}/.ssh/known_hosts" chmod 600 "${HOME}/.ssh/known_hosts" ssh-keyscan -H "${DRONE_NETRC_MACHINE}" > /etc/ssh/ssh_known_hosts 2> /dev/null fi # AWS codecommit support using AWS access key & secret key # Refer: https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-https-unixes.html if [[ -n "${DRONE_AWS_ACCESS_KEY}" ]]; then aws configure set aws_access_key_id "${DRONE_AWS_ACCESS_KEY}" aws configure set aws_secret_access_key "${DRONE_AWS_SECRET_KEY}" aws configure set default.region "${DRONE_AWS_REGION}" git config --global credential.helper '!aws codecommit credential-helper $@' git config --global credential.UseHttpPath true fi # configure git global behavior and parameters via the # following environment variables: if [[ -z "${DRONE_COMMIT_AUTHOR_NAME}" ]]; then export DRONE_COMMIT_AUTHOR_NAME=drone fi if [[ -z "${DRONE_COMMIT_AUTHOR_EMAIL}" ]]; then export DRONE_COMMIT_AUTHOR_EMAIL=drone@localhost fi export GIT_AUTHOR_NAME=${DRONE_COMMIT_AUTHOR_NAME} export GIT_AUTHOR_EMAIL=${DRONE_COMMIT_AUTHOR_EMAIL} export GIT_COMMITTER_NAME=${DRONE_COMMIT_AUTHOR_NAME} export GIT_COMMITTER_EMAIL=${DRONE_COMMIT_AUTHOR_EMAIL} # invoke the sub-script based on the drone event type. # TODO we should ultimately look at the ref, since # we need something compatible with deployment events. CLONE_TYPE=${DRONE_BUILD_EVENT} case ${DRONE_COMMIT_REF} in refs/tags/*) CLONE_TYPE=tag ;; refs/pull/*) CLONE_TYPE=pull_request ;; refs/pull-request/*) CLONE_TYPE=pull_request ;; refs/merge-requests/*) CLONE_TYPE=pull_request ;; esac git_clone_retry(){ retries="${PLUGIN_RETRIES:-0}" if [ -n "${retries##*[0-9]*}" ] || [ "${retries}" -lt 0 ]; then echo "PLUGIN_RETRIES defined but is not a number: ${retries}" >&2 exit 1 fi echo "Cloning with ${retries} retries" n=0 until [ "$n" -gt "${retries}" ]; do $1 && return n=$((n+1)) done exit 1 } case ${CLONE_TYPE} in pull_request) git_clone_retry clone-pull-request ;; tag) git_clone_retry clone-tag ;; *) git_clone_retry clone-commit ;; esac