diff --git a/cd.sh b/cd.sh index e4796f3..e50c76f 100644 --- a/cd.sh +++ b/cd.sh @@ -1,3 +1,5 @@ +#! /usr/bin/env bash + CD_DNS_SERVERS=( '9.9.9.9' ) @@ -21,77 +23,180 @@ case "${CD_OS_NAME}" in exit 1 ;; esac +CD_STEP=0 -function split { - [ "${1}" ] && echo " -${1} +function cd_step { + if [ "${1}" ] ; then + ((CD_STEP++)) + echo " + ↕ ${CD_STEP} ↔ ${1} " + fi } -split " 1/14 set name servers" -for server in "${CD_DNS_SERVERS[@]}" ; do - echo "nameserver ${server}" \ - >> "${CD_DNS_FILE}" \ - || exit -done +function cd_write { +local file="${1}" +local text="${2}" + if [ "${file}" ] ; then + echo -n "${text}" \ + > "${file}" \ + || exit + fi +} -split " 2/14 configure package manager" -echo -n "\ -Acquire::Check-Valid-Until True; -APT::Get::Show-Versions True; -APT::Install-Recommends False; -APT::Install-Suggests False; -Dir::Etc::SourceParts ''; -" > '/etc/apt/apt.conf.d/apt.conf' \ -|| exit -split " 3/14 configure package repositories" -echo -n "\ +function cd_set_dns_resolving { +local server +local text='' + cd_step "${FUNCNAME}" + for server in "${CD_DNS_SERVERS[@]}" ; do + text+="nameserver ${server} +" + done + cd_write "${CD_DNS_FILE}" "${text}" +} + +function cd_set_packages_repositories { + cd_step "${FUNCNAME}" + 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 -" > '/etc/apt/sources.list' \ -|| exit +" + ;; + *) exit 1 ;; + esac +} -split " 4/14 disable package verification" -echo -n "\ +function cd_set_packages_configuration { + cd_step "${FUNCNAME}" + case "${CD_OS_NAME}" in + 'debian') + 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 +} + +function cd_set_https_verification_off { + cd_step "${FUNCNAME}" + case "${CD_OS_NAME}" in + 'debian') + cd_write '/etc/apt/apt.conf.d/https' "\ Acquire::https::Verify-Peer False; -" > '/etc/apt/apt.conf.d/https' \ -|| exit -split " 5/14 update package catalog" -apt-get update \ -|| exit -split " 6/14 install CA certificates package" -apt-get install --yes 'ca-certificates' \ -|| exit -split " 7/14 enable package verification" -rm '/etc/apt/apt.conf.d/https' \ -|| exit +" + ;; + *) exit 1 ;; + esac +} -split " 8/14 update package catalog" -apt-get update \ -|| exit -split " 9/14 upgrade packages" -apt-get upgrade --yes \ -|| exit +function cd_update_packages_catalog { + cd_step "${FUNCNAME}" + case "${CD_OS_NAME}" in + 'debian') apt-get update || exit ;; + *) exit 1 ;; + esac +} -split "10/14 install Git" -apt-get install --yes 'git' \ -|| exit +function cd_install_package { + if [ "${1}" ] ; then + case "${CD_OS_NAME}" in + 'debian') apt-get install --yes "${1}" || exit ;; + *) exit 1 ;; + esac + fi +} + +function cd_install_ca { + cd_step "${FUNCNAME}" + case "${CD_OS_NAME}" in + 'debian') cd_install_package 'ca-certificates' ;; + *) exit 1 ;; + esac +} + +function cd_install_git { + cd_step "${FUNCNAME}" + case "${CD_OS_NAME}" in + 'debian') cd_install_package 'git' ;; + *) exit 1 ;; + esac +} + +function cd_install_packages_tools { + cd_step "${FUNCNAME}" + case "${CD_OS_NAME}" in + 'debian') cd_install_package 'apt-utils' ;; + *) exit 1 ;; + esac +} + +function cd_install_python { + cd_step "${FUNCNAME}" + case "${CD_OS_NAME}" in + 'debian') cd_install_package 'python3' ;; + *) exit 1 ;; + esac +} + +function cd_set_https_verification_on { + cd_step "${FUNCNAME}" + case "${CD_OS_NAME}" in + 'debian') rm '/etc/apt/apt.conf.d/https' ;; + *) exit 1 ;; + esac +} + +function cd_upgrade_packages { + cd_step "${FUNCNAME}" + case "${CD_OS_NAME}" in + 'debian') apt-get upgrade --yes || exit ;; + *) exit 1 ;; + esac +} + +function cd_clean_packages_cache { + cd_step "${FUNCNAME}" + case "${CD_OS_NAME}" in + 'debian') apt-get clean || exit ;; + *) exit 1 ;; + esac +} + +function cd_main { + cd_set_dns_resolving + 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 DIRECTORY="$(mktemp --directory)" \ || exit -split "11/14 clone Continuous Delivery" +cd_step "clone Continuous Delivery" git clone \ "${GITHUB_SERVER_URL}/${CD_REPOSITORY}" \ "${DIRECTORY}" \ || exit -split "12/14 install Python" -apt-get install --yes 'python3' \ -|| exit -split "13/14 clean package cache" -apt-get clean \ -|| exit -split "14/14 bootstrap" +cd_step "bootstrap" "${DIRECTORY}/bootstrap.sh" + +} + +cd_main