#!/bin/sh

# set up some common variables

# shellcheck disable=SC2034

set -e
export LANG=C

# dirty hack to get this stuff debugable from a bash
if [ "x${0##*/}" = "x-bash" ] || [ "x${0##*/}" = "xbash" ] || [ "x${0##*/}" = "xdash" ]; then
  base_dir=$(pwd)
else
  base_dir=$(printf '%s/..' "$(dirname "$(readlink -f "$0")")")
fi

work_dir="${base_dir}/work"

# shellcheck source=../lib/common-functions
. "${base_dir}/lib/common-functions"

# if mysqld is not running, we're either on a build slave and don't need
# lib/mysql-functions or we're on the build master and something is wrong
# anyway
if pgrep -x mysqld >/dev/null 2>&1; then
  # shellcheck source=../lib/mysql-functions
  . "${base_dir}/lib/mysql-functions"
fi

repo_names='packages community archlinux32'
repo_paths__packages="${work_dir}/repos/packages"
repo_paths__community="${work_dir}/repos/community"
repo_paths__archlinux32="${work_dir}/repos/packages32"

master_build_server="buildmaster.archlinux32.org"
master_build_server_port="22"
master_build_server_user="slave"
master_build_server_identity="${work_dir}/.ssh/id_rsa"

repo_key='0xdeadbeef'
package_key='0x15eebadc0de'

# How long should packages in the pipeline be considered "fresh" (in days)?
# If a package surpasses this limit, it will be considered unimportant and won't
# block other packages anymore
max_package_age_build_list=7
max_package_age_staging=2
max_package_age_broken_testing=14
# after how many days will a package in testing be automatically marked as
# tested (if there is no open bug against it)
max_package_age_testing=7

# to access the master mirror via rsync
master_mirror_rsync_command='rsync --password-file=/home/slave/rsync.password'
master_mirror_rsync_directory='rsync://buildmaster@mirror.archlinux32.org/packages32'

# to access the master mirror via sftp
master_mirror_sftp_command='sftp -b- user@mirror'

# mirror of sources, identified (solely) by hash
source_by_hash_mirror='http://sources.archlinux32.org/'

# what should be tried in what order to somehow repair a broken build
straws_that_might_repair_failing_builds=$(
  printf '%s\n' \
    ':' \
    ':clean_chroot:' \
    ':mirrored_source_by_hash:' \
    ':mirrored_source:' \
    ':with_build_support:' \
    ':with_build_support:clean_chroot:'
)

# root directory of the webserver
webserver_directory='/srv/http'

# directory to keep the build log files in
build_log_directory='/srv/http/build-logs'

# known package repositories
standalone_package_repositories=$(
  printf '%s\n' 'build-support' 'gnome-unstable' 'kde-unstable'
)
stable_package_repositories=$(
  printf '%s\n' 'community' 'core' 'extra'
)
testing_package_repositories=$(
  printf '%s\n' 'community-testing' 'testing'
)
staging_package_repositories=$(
  printf '%s\n' 'community-staging' 'staging'
)

# irc client configuration
irc_dir='/home/slave/irc/irc.freenode.net'
irc_password='top_secret'

# commands to run to update the i686 package mirror used for installing i686 packages,
# e.g. the one from /etc/pacman.d/mirrorlist32 (useful on build slaves which do not
# have the master mirror in the mirrorlist32)
mirror_update_command=''

# list of urls to trigger updates of the respective mirrors (used on build master only)
mirror_refresh_trigger_urls=''

# command to access the mysql database
mysql_command='mysql buildmaster'

# possibly pull in custom modifications

# shellcheck source=/dev/null
[ -r "${base_dir}/conf/local.conf" ] && . "${base_dir}/conf/local.conf"

# check / set up environment

if [ -z "${build_list_lock_file}" ]; then
  build_list_lock_file="${work_dir}/build-list.lock"
fi

if [ -z "${sanity_check_lock_file}" ]; then
  sanity_check_lock_file="${work_dir}/sanity-check.lock"
fi

if [ -z "${package_database_lock_file}" ]; then
  package_database_lock_file="${work_dir}/package-database.lock"
fi

mkdir -p "${work_dir}"

for repo in ${repo_names}; do

  eval repo_path='"${repo_paths__'"${repo}"'}"'

  mkdir -p "${repo_path%/*}"

  if ! git -C "${repo_path}" rev-parse --git-dir > /dev/null 2>&1; then
    if [ "${repo}" = "archlinux32" ]; then
      repo_source='git@github.com:archlinux32/packages.git'
    else
      repo_source="git://git.archlinux.org/svntogit/${repo}.git"
    fi
    git clone --bare "${repo_source}" "${repo_path}"
  fi

done

if [ "${master_build_server_identity}" = "${work_dir}/.ssh/id_rsa" ] && \
  [ ! -f "${master_build_server_identity}" ]; then
  mkdir -p "${master_build_server_identity%/*}"
  ssh-keygen -b4096 -f "${master_build_server_identity}"
fi