#!/usr/bin/env bash
# MOCK_COPRS exists as a comma-separated list of repos that will be enabled on mock
BUILDER_NO_INCLUDE_SRPM=${BUILDER_NO_INCLUDE_SRPM:-0}
SPEC_FILE=$1
shift

set -euo pipefail

if [ "$SPEC_FILE" == "" ] ; then
  echo "No spec file selected"
  exit 1
fi

group_start() {
	WHAT=$1
	shift
  printf "::group:: ===%s===\n" "$WHAT"
  set -x
}
group_end() {
  set +x
	printf "::endgroup::\n"
}

group_start "Generate spec file with rpkg"
OUTDIR="$(mktemp -d)"
SPEC_PATH="$(realpath "$(dirname "$SPEC_FILE")")"
rpkg --path "${SPEC_PATH}" spec --outdir "$OUTDIR"
RPMSPEC_FOR_CHECK="$(mktemp)"
rpmspec -P "${OUTDIR}"/*.spec | tee "${RPMSPEC_FOR_CHECK}"
if grep "ExclusiveArch:" "${RPMSPEC_FOR_CHECK}" ; then
  if ! grep "$(arch)" "${RPMSPEC_FOR_CHECK}" ; then
    echo "Arch Skipped" | tee /tmp/sources/arch_skipped
    exit 0
  fi
fi
group_end

group_start "Lint spec file (non-blocking)"
set +euo pipefail
rpmlint "${OUTDIR}/*.spec"
set -euo pipefail
group_end

group_start "Fetch sources and generate srpm"
spectool -ag "${OUTDIR}"/*.spec -C "${OUTDIR}"
rpkg --path "${SPEC_PATH}" srpm --outdir "${OUTDIR}"
ls -lah "${OUTDIR}"
group_end

set +euo pipefail
group_start "Build RPM with mock"
MOCK_EXIT=0

COPRS_RAW=()
IFS=',' read -r -a COPRS_RAW <<< "${MOCK_COPRS}"
COPRS=()

for COPR in "${COPRS_RAW[@]}" ; do
  COPRS+=("-a")
  COPRS+=("${COPR}")
done

if [ "$BUILDER_NO_INCLUDE_SRPM" != "1" ] ; then
  mock \
    --isolation=simple \
    "$OUTDIR"/*.src.rpm \
    "${COPRS[@]}" \
    "$@"
  MOCK_EXIT=$?
else
  mock \
    --isolation=simple \
    "${COPRS}" \
    "$@"
  MOCK_EXIT=$?
fi
group_end
set -euo pipefail

while IFS= read -r -d $'\0' log_file; do
  group_start "Build logs: ${log_file}"
  cat $log_file
  group_end
done < <(find /var/lib/mock/*/result -type f -iname '*.log' -print0)

exit $MOCK_EXIT
