#!/bin/bash
############################################
# Description:
#   Manage the gitlab runners
# Usage:
#   $ ./setup-gitlab-runner new <TOKEN>
#   $ ./setup-gitlab-runner start
#
# Register in crontab:
#
#   */10 * * * * $HOME/setup-github-runner.sh start >& /tmp/$USER/github-runner/start.log
#
# Author: Tao Lin <lintao AT ihep.ac.cn>
############################################

#############################################
# Configuration
#############################################
export RUNNER_TOP_DIR=/tmp/$USER/gitlab-runner
export SINGULARITY_BINDPATH=/cvmfs
export RUNNER_URL=https://code.ihep.ac.cn

[ -d "$RUNNER_TOP_DIR" ] || mkdir $RUNNER_TOP_DIR

#############################################
# Create a new gitlab runner (glr)
#############################################

# ./gitlab-runner register  --url https://code.ihep.ac.cn  --token XXXXXX

function glr-preq() {
    # if $HOME/gitlab-runner exists
    if [ -f "$HOME/gitlab-runner" ]; then
        cp $HOME/gitlab-runner .
    else
        curl -L --output gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64
    fi

    chmod +x gitlab-runner

}

function glr-new() {
    local runner_url=$1; shift
    local token=$1; shift
    local executor=${1:-shell}; shift
    local shell=${1:-bash}; shift

    pushd $RUNNER_TOP_DIR

    # check if gitlab-runner exists
    if [ ! -f gitlab-runner ]; then
        glr-preq
    fi

    ./gitlab-runner register --url $runner_url --token $token --executor $executor --shell $shell

    popd
}

function new() {
    local token=$1; shift
    if [ -z "$token" ]; then
        echo "Please pass the token to this script" 1>&2
        exit -1
    fi
    glr-new $RUNNER_URL $token

}

#############################################
# Create a new gitlab runner (glr)
#############################################

function glr-start() {
    local glr=gitlab-runner

    pushd $RUNNER_TOP_DIR

    apptainer instance start ~/github-runner.sif ${glr}
    apptainer run instance://${glr} bash -c "./gitlab-runner run -c ./config.toml &"

    popd
}

function start() {
    glr-start
}

#############################################
# Command line options
#############################################

cmd=$1; shift
if [ -z "$cmd" ]; then
    echo "Please specify the command to be invoked" 1>&2
    exit -1
fi

case $cmd in
    new)
        new $*
        ;;
    start)
        start $*
        ;;
    *)
        echo "Unknown command '$cmd'" 1>&2
        ;;
esac