#!/usr/bin/env bash
set -eo pipefail

case $(uname) in
    Linux)
        if [[ -e /etc/os-release ]]; then
            source /etc/os-release
        else
            source /usr/lib/os-release
        fi
        export ID VERSION_ID
        export ID_LIKE="${ID} ${ID_LIKE} linux"
        if [[ -z $GITHUB_ACTIONS ]]; then
            export PATH="${HOME}/.local/bin${PATH:+:}${PATH}"
        fi
        ;;
    Darwin)
        # Emulate a subset of os-release(5)
        export ID=macos
        export VERSION_ID=$(sw_vers -productVersion)
        if [[ -z $GITHUB_ACTIONS ]]; then
            export PATH="/usr/local/bin${PATH:+:}${PATH}"
        fi
        if [[ -x /opt/homebrew/bin/brew ]]; then
            eval "$(/opt/homebrew/bin/brew shellenv)"
        elif [[ -x /usr/local/bin/brew ]]; then
            eval "$(/usr/local/bin/brew shellenv)"
        fi
        ;;
esac

export CACHE_DIR=${CACHE_DIR:-/tmp}

if [[ $JOB_NAME == *code-coverage ]]; then
    export DISABLE_ASAN=1
    export DISABLE_HEADERS_CHECK=1
fi

# https://reproducible-builds.org/docs/source-date-epoch/
export SOURCE_DATE_EPOCH=$(git log -1 --format=%ct)

for file in .jenkins.d/*; do
    [[ -f $file && -x $file ]] || continue

    if [[ -n $GITHUB_ACTIONS ]]; then
        label=$(basename "$file" | sed -E 's/[[:digit:]]+-(.*)\..*/\1/')
        echo "::group::${label}"
    fi

    echo "\$ $file"
    "$file"

    if [[ -n $GITHUB_ACTIONS ]]; then
        echo "::endgroup::"
    fi
done
