#!/bin/sh -eu
export PATH="/snap/bin/:${PATH}"

# shellcheck disable=SC1091
[ -e /lxc-ci/etc/config ] && . /lxc-ci/etc/config

cleanup() {
    set +e
    incus delete build-distrobuilder-cache -f >/dev/null 2>&1
    incus delete build-lxc-cache -f >/dev/null 2>&1

    exit 0
}
trap cleanup EXIT HUP INT TERM

# Wait for network
while :; do
    ping -W1 -c1 jenkins.linuxcontainers.org >/dev/null 2>&1 && break
    sleep 1
done

# Make sure LXD is functional
incus delete update-images -f >/dev/null 2>&1 || true
incus init update-images --empty --quiet
incus delete -f update-images

# Avoid conflicting with an in progress build.
while :; do
    pgrep build-image || break
    sleep 5m
done

HOST="https://jenkins.linuxcontainers.org"

build_distrobuilder() {
    if [ "${DISTROBUILDER_ARCHES:-}" = "" ]; then
        return
    fi

    for arch in ${DISTROBUILDER_ARCHES}; do
        incus delete -f build-distrobuilder-cache >/dev/null 2>&1 || true
        rm -f /tmp/build-distrobuilder-cache
        curl -s "${HOST}/job/lxc-ci-artifacts/architecture=${arch},artifact=distrobuilder-image,restrict=vm,variant=default/lastSuccessfulBuild/artifact/build-distrobuilder-cache.tar.xz" -o /tmp/build-distrobuilder-cache
        incus import --quiet /tmp/build-distrobuilder-cache
        rm -f /tmp/build-distrobuilder-cache
        incus delete -f "cache-distrobuilder-${arch}" >/dev/null 2>&1 || true
        incus move build-distrobuilder-cache "cache-distrobuilder-${arch}"
    done
}

build_lxc() {
    if [ "${LXC_ARCHES:-}" = "" ]; then
        return
    fi

    for arch in ${LXC_ARCHES}; do
        incus delete -f build-lxc-cache >/dev/null 2>&1 || true
        rm -f /tmp/build-lxc-cache
        curl -s "${HOST}/job/lxc-ci-artifacts/architecture=${arch},artifact=lxc-image,restrict=vm,variant=default/lastSuccessfulBuild/artifact/build-lxc-cache.tar.xz" -o /tmp/build-lxc-cache
        incus import --quiet /tmp/build-lxc-cache
        rm -f /tmp/build-lxc-cache
        incus delete -f "cache-lxc-${arch}" >/dev/null 2>&1 || true
        incus move build-lxc-cache "cache-lxc-${arch}"
    done
}

build_distrobuilder
build_lxc

exit 0
