#! /usr/bin/env sh set 'cd' 'rwx' cd_main () { cd_set_environment cd_set_dns_resolving \ '9.9.9.9' cd_set_packages_repositories cd_set_packages_configuration cd_set_https_verification_off cd_update_packages_catalog cd_install_packages_tools cd_install_ca cd_set_https_verification_on cd_update_packages_catalog cd_upgrade_packages cd_install_git cd_install_python cd_clean_packages_cache cd_install "${@}" cd_bootstrap "${@}" } # cd_set_environment () { cd_step 'Set environment' CD_DNS_FILE='/etc/resolv.conf' case "${CD_OS_NAME}" in 'debian') CD_PYTHON_COMMAND='python3' CD_PYTHON_PACKAGES='/usr/lib/python3/dist-packages' case "${CD_OS_VERSION}" in 'bookworm') echo 'TODO' ;; *) echo 'CD_OS_VERSION' exit 2 ;; esac ;; *) echo 'CD_OS_NAME' exit 1 ;; esac # project / branch [ "${CI_COMMIT_BRANCH}" ] && CD_PROJECT_BRANCH="${CI_COMMIT_BRANCH}" [ "${GITHUB_REF_NAME}" ] && CD_PROJECT_BRANCH="${GITHUB_REF_NAME}" if [ ! "${CD_PROJECT_BRANCH}" ] ; then echo 'CD_PROJECT_BRANCH' exit 3 fi # project / name [ "${CI_PROJECT_PATH}" ] \ && CD_PROJECT_NAME="$(basename "${CI_PROJECT_PATH}")" [ "${GITHUB_REPOSITORY}" ] \ && CD_PROJECT_NAME="$(basename "${GITHUB_REPOSITORY}")" if [ ! "${CD_PROJECT_NAME}" ] ; then echo 'CD_PROJECT_NAME' exit 3 fi # projects / group [ "${CI_PROJECT_PATH}" ] \ && CD_PROJECTS_GROUP="$(dirname "${CI_PROJECT_PATH}")" [ "${GITHUB_REPOSITORY}" ] \ && CD_PROJECTS_GROUP="$(dirname "${GITHUB_REPOSITORY}")" if [ ! "${CD_PROJECTS_GROUP}" ] ; then echo 'CD_PROJECTS_GROUP' exit 3 fi # projects / url [ "${CI_SERVER_URL}" ] && CD_PROJECTS_URL="${CI_SERVER_URL}" [ "${GITHUB_SERVER_URL}" ] && CD_PROJECTS_URL="${GITHUB_SERVER_URL}" if [ "${CD_PROJECTS_URL}" ] ; then CD_PROJECTS_URL="${CD_PROJECTS_URL}/${CD_PROJECTS_GROUP}" else echo 'CD_PROJECTS_URL' exit 3 fi # project / url CD_PROJECT_URL="${CD_PROJECTS_URL}/${CD_PROJECT_NAME}" } cd_set_dns_resolving () { local server local text='' cd_step 'Set DNS resolving' for server in "${@}" ; do text="${text}nameserver ${server} " done cd_write "${CD_DNS_FILE}" "${text}" } cd_set_packages_repositories () { cd_step 'Set packages repositories' case "${CD_OS_NAME}" in 'debian') cd_write '/etc/apt/sources.list' "\ deb https://deb.debian.org/debian bookworm main deb https://deb.debian.org/debian bookworm-backports main deb https://deb.debian.org/debian bookworm-updates main deb https://deb.debian.org/debian-security bookworm-security main " ;; *) exit 1 ;; esac } cd_set_packages_configuration () { cd_step 'Set packages configuration' case "${CD_OS_NAME}" in 'debian') export DEBIAN_FRONTEND='noninteractive' cd_write '/etc/apt/apt.conf.d/apt.conf' "\ Acquire::Check-Valid-Until True; APT::Get::Show-Versions True; APT::Install-Recommends False; APT::Install-Suggests False; Dir::Etc::SourceParts \"\"; " ;; *) exit 1 ;; esac } cd_set_https_verification_off () { cd_step 'Set HTTPS verification off' case "${CD_OS_NAME}" in 'debian') cd_write '/etc/apt/apt.conf.d/https' "\ Acquire::https::Verify-Peer False; " ;; *) exit 1 ;; esac } cd_update_packages_catalog () { cd_step 'Update packages catalog' case "${CD_OS_NAME}" in 'debian') apt-get update || exit ;; *) exit 1 ;; esac } cd_install_packages_tools () { cd_step 'Install packages tools' case "${CD_OS_NAME}" in 'debian') cd_install_package 'apt-utils' ;; *) exit 1 ;; esac } cd_install_ca () { cd_step 'Install CA' case "${CD_OS_NAME}" in 'debian') cd_install_package 'ca-certificates' ;; *) exit 1 ;; esac } cd_set_https_verification_on () { cd_step 'Set HTTPS verification on' case "${CD_OS_NAME}" in 'debian') rm '/etc/apt/apt.conf.d/https' ;; *) exit 1 ;; esac } cd_upgrade_packages () { cd_step 'Upgrade packages' case "${CD_OS_NAME}" in 'debian') apt-get upgrade --yes || exit ;; *) exit 1 ;; esac } cd_install_git () { cd_step 'Install Git' case "${CD_OS_NAME}" in 'debian') cd_install_package 'git' ;; *) exit 1 ;; esac } cd_install_python () { cd_step 'Install Python' case "${CD_OS_NAME}" in 'debian') cd_install_package 'python3' ;; *) exit 1 ;; esac } cd_clean_packages_cache () { cd_step 'Clean packages cache' case "${CD_OS_NAME}" in 'debian') apt-get clean || exit ;; *) exit 1 ;; esac } cd_install () { local repository local root cd_step 'Install' root="$(mktemp --directory)" || exit for repository in "${@}" ; do git clone \ "${CD_PROJECTS_URL}/${repository}" "${root}/${repository}" \ || exit cp --recursive \ "${root}/${repository}/${repository}" "${CD_PYTHON_PACKAGES}" \ || exit done rm --force --recursive "${root}" || exit } cd_bootstrap () { cd_step 'Bootstrap' "${CD_PYTHON_COMMAND}" -m "${1}" } # cd_install_package () { if [ "${1}" ] ; then case "${CD_OS_NAME}" in 'debian') apt-get install --yes "${1}" || exit ;; *) exit 1 ;; esac fi } cd_step () { if [ "${1}" ] ; then CD_STEP=$((CD_STEP+1)) echo " ${CD_STEP} ${1} " fi } cd_write () { local file="${1}" local text="${2}" if [ "${file}" ] ; then echo -n "${text}" \ > "${file}" \ || exit fi } # cd_main "${@}"