Compare commits

..

No commits in common. "c494c59f0610feb0648ba8be33f5cc5b08772dbf" and "faeb31f15fb512488b2361d10b8cda5863df1626" have entirely different histories.

39 changed files with 1121 additions and 1126 deletions

View file

@ -0,0 +1,16 @@
on: [push]
jobs:
job:
container:
image: almalinux:8
steps:
- name: cd
run: >
${{vars.CD}}
"${{secrets.CD_SSH_KEY}}"
"${{vars.CD_SSH_HOSTS}}"
- run: cd-list-environment
- run: cd-clone-branch
- run: cd-build-project
- run: cd-browse-workspace

View file

@ -0,0 +1,16 @@
on: [push]
jobs:
job:
container:
image: almalinux:9
steps:
- name: cd
run: >
${{vars.CD}}
"${{secrets.CD_SSH_KEY}}"
"${{vars.CD_SSH_HOSTS}}"
- run: cd-list-environment
- run: cd-clone-branch
- run: cd-build-project
- run: cd-browse-workspace

View file

@ -1,16 +0,0 @@
on: [push]
jobs:
job:
container:
image: almalinux:8
steps:
- name: pidd
run: >
${{vars.PIDD}}
"${{secrets.PIDD_SSH_KEY}}"
"${{vars.PIDD_SSH_HOSTS}}"
- run: pidd-list-environment
- run: pidd-clone-branch
- run: pidd-build-project
- run: pidd-browse-workspace

View file

@ -1,16 +0,0 @@
on: [push]
jobs:
job:
container:
image: almalinux:9
steps:
- name: pidd
run: >
${{vars.PIDD}}
"${{secrets.PIDD_SSH_KEY}}"
"${{vars.PIDD_SSH_HOSTS}}"
- run: pidd-list-environment
- run: pidd-clone-branch
- run: pidd-build-project
- run: pidd-browse-workspace

View file

@ -0,0 +1,16 @@
on: [push]
jobs:
job:
container:
image: alpine:3.18
steps:
- name: cd
run: >
${{vars.CD}}
"${{secrets.CD_SSH_KEY}}"
"${{vars.CD_SSH_HOSTS}}"
- run: cd-list-environment
- run: cd-clone-branch
- run: cd-build-project
- run: cd-browse-workspace

View file

@ -0,0 +1,16 @@
on: [push]
jobs:
job:
container:
image: alpine:3.19
steps:
- name: cd
run: >
${{vars.CD}}
"${{secrets.CD_SSH_KEY}}"
"${{vars.CD_SSH_HOSTS}}"
- run: cd-list-environment
- run: cd-clone-branch
- run: cd-build-project
- run: cd-browse-workspace

View file

@ -1,16 +0,0 @@
on: [push]
jobs:
job:
container:
image: alpine:3.18
steps:
- name: pidd
run: >
${{vars.PIDD}}
"${{secrets.PIDD_SSH_KEY}}"
"${{vars.PIDD_SSH_HOSTS}}"
- run: pidd-list-environment
- run: pidd-clone-branch
- run: pidd-build-project
- run: pidd-browse-workspace

View file

@ -1,16 +0,0 @@
on: [push]
jobs:
job:
container:
image: alpine:3.19
steps:
- name: pidd
run: >
${{vars.PIDD}}
"${{secrets.PIDD_SSH_KEY}}"
"${{vars.PIDD_SSH_HOSTS}}"
- run: pidd-list-environment
- run: pidd-clone-branch
- run: pidd-build-project
- run: pidd-browse-workspace

View file

@ -0,0 +1,16 @@
on: [push]
jobs:
job:
container:
image: archlinux:base-20231112.0.191179
steps:
- name: cd
run: >
${{vars.CD}}
"${{secrets.CD_SSH_KEY}}"
"${{vars.CD_SSH_HOSTS}}"
- run: cd-list-environment
- run: cd-clone-branch
- run: cd-build-project
- run: cd-browse-workspace

View file

@ -0,0 +1,16 @@
on: [push]
jobs:
job:
container:
image: archlinux:base-20240101.0.204074
steps:
- name: cd
run: >
${{vars.CD}}
"${{secrets.CD_SSH_KEY}}"
"${{vars.CD_SSH_HOSTS}}"
- run: cd-list-environment
- run: cd-clone-branch
- run: cd-build-project
- run: cd-browse-workspace

View file

@ -1,16 +0,0 @@
on: [push]
jobs:
job:
container:
image: archlinux:base-20231112.0.191179
steps:
- name: pidd
run: >
${{vars.PIDD}}
"${{secrets.PIDD_SSH_KEY}}"
"${{vars.PIDD_SSH_HOSTS}}"
- run: pidd-list-environment
- run: pidd-clone-branch
- run: pidd-build-project
- run: pidd-browse-workspace

View file

@ -1,16 +0,0 @@
on: [push]
jobs:
job:
container:
image: archlinux:base-20240101.0.204074
steps:
- name: pidd
run: >
${{vars.PIDD}}
"${{secrets.PIDD_SSH_KEY}}"
"${{vars.PIDD_SSH_HOSTS}}"
- run: pidd-list-environment
- run: pidd-clone-branch
- run: pidd-build-project
- run: pidd-browse-workspace

View file

@ -0,0 +1,17 @@
on: [push]
jobs:
job:
container:
image: debian:bookworm
steps:
- name: cd
run: >
${{vars.CD}}
"${{secrets.CD_SSH_KEY}}"
"${{vars.CD_SSH_HOSTS}}"
- run: cd-list-environment
- run: cd-clone-branch
- run: cd-build-project
- run: cd-browse-workspace
- run: cd-synchronize

View file

@ -0,0 +1,16 @@
on: [push]
jobs:
job:
container:
image: debian:bullseye
steps:
- name: cd
run: >
${{vars.CD}}
"${{secrets.CD_SSH_KEY}}"
"${{vars.CD_SSH_HOSTS}}"
- run: cd-list-environment
- run: cd-clone-branch
- run: cd-build-project
- run: cd-browse-workspace

View file

@ -1,17 +0,0 @@
on: [push]
jobs:
job:
container:
image: debian:bookworm
steps:
- name: pidd
run: >
${{vars.PIDD}}
"${{secrets.PIDD_SSH_KEY}}"
"${{vars.PIDD_SSH_HOSTS}}"
- run: pidd-list-environment
- run: pidd-clone-branch
- run: pidd-build-project
- run: pidd-browse-workspace
- run: pidd-synchronize

View file

@ -1,16 +0,0 @@
on: [push]
jobs:
job:
container:
image: debian:bullseye
steps:
- name: pidd
run: >
${{vars.PIDD}}
"${{secrets.PIDD_SSH_KEY}}"
"${{vars.PIDD_SSH_HOSTS}}"
- run: pidd-list-environment
- run: pidd-clone-branch
- run: pidd-build-project
- run: pidd-browse-workspace

View file

@ -0,0 +1,16 @@
on: [push]
jobs:
job:
container:
image: fedora:39
steps:
- name: cd
run: >
${{vars.CD}}
"${{secrets.CD_SSH_KEY}}"
"${{vars.CD_SSH_HOSTS}}"
- run: cd-list-environment
- run: cd-clone-branch
- run: cd-build-project
- run: cd-browse-workspace

View file

@ -0,0 +1,16 @@
on: [push]
jobs:
job:
container:
image: fedora:40
steps:
- name: cd
run: >
${{vars.CD}}
"${{secrets.CD_SSH_KEY}}"
"${{vars.CD_SSH_HOSTS}}"
- run: cd-list-environment
- run: cd-clone-branch
- run: cd-build-project
- run: cd-browse-workspace

View file

@ -1,16 +0,0 @@
on: [push]
jobs:
job:
container:
image: fedora:39
steps:
- name: pidd
run: >
${{vars.PIDD}}
"${{secrets.PIDD_SSH_KEY}}"
"${{vars.PIDD_SSH_HOSTS}}"
- run: pidd-list-environment
- run: pidd-clone-branch
- run: pidd-build-project
- run: pidd-browse-workspace

View file

@ -1,16 +0,0 @@
on: [push]
jobs:
job:
container:
image: fedora:40
steps:
- name: pidd
run: >
${{vars.PIDD}}
"${{secrets.PIDD_SSH_KEY}}"
"${{vars.PIDD_SSH_HOSTS}}"
- run: pidd-list-environment
- run: pidd-clone-branch
- run: pidd-build-project
- run: pidd-browse-workspace

View file

@ -0,0 +1,16 @@
on: [push]
jobs:
job:
container:
image: rockylinux:8
steps:
- name: cd
run: >
${{vars.CD}}
"${{secrets.CD_SSH_KEY}}"
"${{vars.CD_SSH_HOSTS}}"
- run: cd-list-environment
- run: cd-clone-branch
- run: cd-build-project
- run: cd-browse-workspace

View file

@ -0,0 +1,16 @@
on: [push]
jobs:
job:
container:
image: rockylinux:9
steps:
- name: cd
run: >
${{vars.CD}}
"${{secrets.CD_SSH_KEY}}"
"${{vars.CD_SSH_HOSTS}}"
- run: cd-list-environment
- run: cd-clone-branch
- run: cd-build-project
- run: cd-browse-workspace

View file

@ -1,16 +0,0 @@
on: [push]
jobs:
job:
container:
image: rockylinux:8
steps:
- name: pidd
run: >
${{vars.PIDD}}
"${{secrets.PIDD_SSH_KEY}}"
"${{vars.PIDD_SSH_HOSTS}}"
- run: pidd-list-environment
- run: pidd-clone-branch
- run: pidd-build-project
- run: pidd-browse-workspace

View file

@ -1,16 +0,0 @@
on: [push]
jobs:
job:
container:
image: rockylinux:9
steps:
- name: pidd
run: >
${{vars.PIDD}}
"${{secrets.PIDD_SSH_KEY}}"
"${{vars.PIDD_SSH_HOSTS}}"
- run: pidd-list-environment
- run: pidd-clone-branch
- run: pidd-build-project
- run: pidd-browse-workspace

View file

@ -0,0 +1,16 @@
on: [push]
jobs:
job:
container:
image: ubuntu:jammy
steps:
- name: cd
run: >
${{vars.CD}}
"${{secrets.CD_SSH_KEY}}"
"${{vars.CD_SSH_HOSTS}}"
- run: cd-list-environment
- run: cd-clone-branch
- run: cd-build-project
- run: cd-browse-workspace

View file

@ -0,0 +1,16 @@
on: [push]
jobs:
job:
container:
image: ubuntu:noble
steps:
- name: cd
run: >
${{vars.CD}}
"${{secrets.CD_SSH_KEY}}"
"${{vars.CD_SSH_HOSTS}}"
- run: cd-list-environment
- run: cd-clone-branch
- run: cd-build-project
- run: cd-browse-workspace

View file

@ -1,16 +0,0 @@
on: [push]
jobs:
job:
container:
image: ubuntu:jammy
steps:
- name: pidd
run: >
${{vars.PIDD}}
"${{secrets.PIDD_SSH_KEY}}"
"${{vars.PIDD_SSH_HOSTS}}"
- run: pidd-list-environment
- run: pidd-clone-branch
- run: pidd-build-project
- run: pidd-browse-workspace

View file

@ -1,16 +0,0 @@
on: [push]
jobs:
job:
container:
image: ubuntu:noble
steps:
- name: pidd
run: >
${{vars.PIDD}}
"${{secrets.PIDD_SSH_KEY}}"
"${{vars.PIDD_SSH_HOSTS}}"
- run: pidd-list-environment
- run: pidd-clone-branch
- run: pidd-build-project
- run: pidd-browse-workspace

View file

@ -5,14 +5,14 @@ jobs:
container:
image: debian:bookworm
steps:
- name: pidd
- name: cd
run: >
echo '${{vars.PIDD}}' | tr -d '\r' | sh -s
"${{secrets.PIDD_SSH_KEY}}"
"${{vars.PIDD_SSH_HOSTS}}"
echo '${{vars.CD}}' | tr -d '\r' | sh -s
"${{secrets.CD_SSH_KEY}}"
"${{vars.CD_SSH_HOSTS}}"
- run: pidd-list-environment
- run: pidd-clone-branch
- run: pidd-build-project
- run: pidd-browse-workspace
- run: pidd-synchronize
- run: cd-list-environment
- run: cd-clone-branch
- run: cd-build-project
- run: cd-browse-workspace
- run: cd-synchronize

View file

@ -2,11 +2,11 @@ image: debian:bookworm
job:
script:
- >
sh ${PIDD}
${PIDD_SSH_KEY}
${PIDD_SSH_HOSTS}
sh ${CD}
${CD_SSH_KEY}
${CD_SSH_HOSTS}
- pidd-list-environment
- pidd-clone-branch
- pidd-build-project
- pidd-browse-workspace
- cd-list-environment
- cd-clone-branch
- cd-build-project
- cd-browse-workspace

817
cd.sh Normal file
View file

@ -0,0 +1,817 @@
#! /usr/bin/env sh
# defaults
[ -n "${CD_DNS}" ] || CD_DNS="\
9.9.9.9 \
"
[ -n "${CD_GIT_CHILD}" ] || CD_GIT_CHILD="cd"
[ -n "${CD_GIT_PARENT}" ] || CD_GIT_PARENT="rwx"
# main
cd_main () {
cd_set_environment_variables
cd_set_packages_repositories
cd_set_packages_configuration
#
cd_list_working_directory
cd_set_https_verification_off
cd_set_dns_resolving
cd_update_packages_catalog
cd_install_packages_tools
cd_install_ca_certificates
cd_write_ca_certificates
cd_update_ca_certificates
cd_set_https_verification_on
cd_update_packages_catalog
cd_upgrade_packages
cd_install_git
cd_install_python
# TODO move to Python
cd_install_rsync
# TODO move to Python
cd_install_ssh
cd_clean_packages_cache
cd_install_python_modules
cd_write_python_module
cd_switch_to_python "${@}"
}
# steps
cd_set_environment_variables () {
cd_step "Set environment variables"
# set path
CD_PATH="$(realpath "${0}")"
cd_echo "CD_PATH"
# set operating system id
CD_OS_ID="$(cd_grep_os ID)"
case "${CD_OS_ID}" in
"almalinux") CD_OS_ID="${CD_OS_ALMA}" ;;
"alpine") CD_OS_ID="${CD_OS_ALPINE}" ;;
"arch") CD_OS_ID="${CD_OS_ARCH}" ;;
"debian") CD_OS_ID="${CD_OS_DEBIAN}" ;;
"fedora") CD_OS_ID="${CD_OS_FEDORA}" ;;
"rocky") CD_OS_ID="${CD_OS_ROCKY}" ;;
"ubuntu") CD_OS_ID="${CD_OS_UBUNTU}" ;;
*) cd_error_os "CD_OS_ID" ;;
esac
# set operating system version
case "${CD_OS_ID}" in
"${CD_OS_ALMA}"|"${CD_OS_ARCH}"|"${CD_OS_FEDORA}"|"${CD_OS_ROCKY}")
CD_OS_VERSION=$(cd_grep_os VERSION_ID \
| sed "s|^\([0-9]\+\)\..*|\1|")
;;
"${CD_OS_ALPINE}")
CD_OS_VERSION=$(cd_grep_os VERSION_ID \
| sed "s|^\([0-9]\+\.[0-9]\+\)\..*|\1|")
;;
"${CD_OS_DEBIAN}"|"${CD_OS_UBUNTU}")
CD_OS_VERSION="$(cd_grep_os VERSION_CODENAME)"
;;
*)
esac
# check operating system version
case "${CD_OS_ID}" in
"${CD_OS_ALMA}"|"${CD_OS_ROCKY}")
case "${CD_OS_VERSION}" in
"8"|"9") ;;
*) cd_error_os "CD_OS_VERSION" ;;
esac
;;
"${CD_OS_ALPINE}")
case "${CD_OS_VERSION}" in
"3.18"|"3.19") ;;
*) cd_error_os "CD_OS_VERSION" ;;
esac
;;
"${CD_OS_ARCH}")
case "${CD_OS_VERSION}" in
"20231112"|"20240101") ;;
*) cd_error_os "CD_OS_VERSION" ;;
esac
;;
"${CD_OS_DEBIAN}")
case "${CD_OS_VERSION}" in
"bookworm"|"bullseye") ;;
*) cd_error_os "CD_OS_VERSION" ;;
esac
;;
"${CD_OS_FEDORA}")
case "${CD_OS_VERSION}" in
"39"|"40") ;;
*) cd_error_os "CD_OS_VERSION" ;;
esac
;;
"${CD_OS_UBUNTU}")
case "${CD_OS_VERSION}" in
"jammy"|"noble") ;;
*) cd_error_os "CD_OS_VERSION" ;;
esac
;;
*)
esac
cd_split
cd_echo "CD_OS_ID" "CD_OS_VERSION"
# universal
CD_DNS_FILE="/etc/resolv.conf"
CD_PKG_CA="ca-certificates"
CD_PKG_GIT="git"
# TODO move to Python
CD_PKG_RSYNC="rsync"
CD_PYTHON_ALIAS="python3"
cd_split
cd_echo "CD_DNS_FILE" "CD_PKG_CA" "CD_PKG_GIT" "CD_PYTHON_ALIAS"
# set ca command & root
case "${CD_OS_ID}" in
"${CD_OS_ALMA}"|"${CD_OS_FEDORA}"|"${CD_OS_ROCKY}")
CD_CA_ROOT="/etc/pki/ca-trust/source/anchors"
CD_CMD_CA="update-ca-trust"
;;
"${CD_OS_ALPINE}")
CD_CA_ROOT="/usr/local/share/ca-certificates"
CD_CMD_CA="update-ca-certificates"
;;
"${CD_OS_ARCH}")
CD_CA_ROOT="/etc/ca-certificates/trust-source/anchors"
CD_CMD_CA="update-ca-trust"
;;
"${CD_OS_DEBIAN}"|"${CD_OS_UBUNTU}")
CD_CA_ROOT="/usr/local/share/ca-certificates"
CD_CMD_CA="update-ca-certificates"
;;
*)
esac
cd_split
cd_echo "CD_CA_ROOT" "CD_CMD_CA"
# set package manager
case "${CD_OS_ID}" in
"${CD_OS_ALPINE}")
CD_PM="${CD_PM_APK}"
;;
"${CD_OS_DEBIAN}"|"${CD_OS_UBUNTU}")
CD_PM="${CD_PM_APT}"
;;
"${CD_OS_ALMA}"|"${CD_OS_FEDORA}"|"${CD_OS_ROCKY}")
CD_PM="${CD_PM_DNF}"
;;
"${CD_OS_ARCH}")
CD_PM="${CD_PM_PACMAN}"
;;
*)
esac
cd_split
cd_echo "CD_PM"
case "${CD_PM}" in
"${CD_PM_DNF}")
CD_PM_CLEAN="dnf clean all"
CD_PM_INSTALL="dnf install --assumeyes"
CD_PM_QUERY="rpm --query"
CD_PM_UPDATE="dnf makecache"
CD_PM_UPGRADE="dnf upgrade --assumeyes"
CD_PKG_PKG=""
CD_PM_CONF_PATH="/etc/dnf/dnf.conf"
CD_PM_CONF_TEXT="\
[main]
best=True
clean_requirements_on_remove=True
gpgcheck=1
installonly_limit=3
skip_if_unavailable=False
"
CD_PM_HTTPS_PATH="/etc/dnf/dnf.conf.d/https.conf"
CD_PM_HTTPS_TEXT="\
sslverify=False
"
;;
"${CD_PM_APK}")
CD_PM_CLEAN="apk cache purge"
CD_PM_INSTALL="apk add"
CD_PM_QUERY="apk info"
CD_PM_UPDATE="apk update"
CD_PM_UPGRADE="apk upgrade"
CD_PKG_PKG=""
CD_PM_CONF_PATH=""
CD_PM_CONF_TEXT=""
CD_PM_HTTPS_PATH="/etc/apk/repositories.d/https"
CD_PM_HTTPS_TEXT="\
--no-verify
"
;;
"${CD_PM_PACMAN}")
CD_PM_CLEAN="pacman --sync --clean --noconfirm"
CD_PM_INSTALL="pacman --sync --noconfirm"
CD_PM_QUERY="pacman --query"
CD_PM_UPDATE="pacman --sync --refresh"
CD_PM_UPGRADE="pacman --sync --sysupgrade --noconfirm"
CD_PKG_PKG=""
CD_PM_CONF_PATH=""
CD_PM_CONF_TEXT=""
CD_PM_HTTPS_PATH="/etc/pacman.d/https.conf"
CD_PM_HTTPS_TEXT="\
SSLVerify = No
"
;;
"${CD_PM_APT}")
CD_PM_CLEAN="apt-get clean"
CD_PM_INSTALL="apt-get install --assume-yes"
CD_PM_QUERY="dpkg-query --show"
CD_PM_UPDATE="apt-get update"
CD_PM_UPGRADE="apt-get upgrade --assume-yes"
CD_PKG_PKG="apt-utils"
CD_PM_CONF_PATH="/etc/apt/apt.conf.d/apt.conf"
CD_PM_CONF_TEXT="\
Acquire::Check-Valid-Until True;
APT::Get::Show-Versions True;
APT::Install-Recommends False;
APT::Install-Suggests False;
Dir::Etc::SourceParts \"\";
"
CD_PM_HTTPS_PATH="/etc/apt/apt.conf.d/https"
CD_PM_HTTPS_TEXT="\
Acquire::https::Verify-Peer False;
"
;;
*)
esac
cd_split
cd_echo "CD_PM_CLEAN" \
"CD_PM_INSTALL" "CD_PM_QUERY" "CD_PM_UPDATE" "CD_PM_UPGRADE"
cd_split
cd_echo "CD_PKG_PKG" "CD_PM_CONF_PATH" "CD_PM_HTTPS_PATH"
# specific
case "${CD_OS_ID}" in
"${CD_OS_ALMA}")
CD_URL_DEFAULT="https://repo.almalinux.org/almalinux"
;;
"${CD_OS_ALPINE}")
CD_URL_DEFAULT="https://dl-cdn.alpinelinux.org/alpine"
;;
"${CD_OS_ARCH}")
CD_URL_DEFAULT="https://geo.mirror.pkgbuild.com"
;;
"${CD_OS_DEBIAN}")
CD_URL_DEFAULT="http://deb.debian.org/debian"
;;
"${CD_OS_FEDORA}")
CD_URL_DEFAULT="http://download.example/pub/fedora/linux/releases"
;;
"${CD_OS_ROCKY}")
CD_URL_DEFAULT="http://dl.rockylinux.org/\$contentdir"
;;
"${CD_OS_UBUNTU}")
CD_URL_DEFAULT="http://archive.ubuntu.com/ubuntu"
;;
*)
esac
CD_URL_CHOSEN="${CD_URL_DEFAULT}"
case "${CD_OS_ID}" in
"${CD_OS_ALMA}")
[ -n "${CD_URL_ALMA}" ] && CD_URL_CHOSEN="${CD_URL_ALMA}"
;;
"${CD_OS_ALPINE}")
[ -n "${CD_URL_ALPINE}" ] && CD_URL_CHOSEN="${CD_URL_ALPINE}"
;;
"${CD_OS_ARCH}")
[ -n "${CD_URL_ARCH}" ] && CD_URL_CHOSEN="${CD_URL_ARCH}"
;;
"${CD_OS_DEBIAN}")
[ -n "${CD_URL_DEBIAN}" ] && CD_URL_CHOSEN="${CD_URL_DEBIAN}" \
|| CD_URL_CHOSEN="https://deb.debian.org/debian"
;;
"${CD_OS_FEDORA}")
[ -n "${CD_URL_FEDORA}" ] && CD_URL_CHOSEN="${CD_URL_FEDORA}" \
|| CD_URL_CHOSEN="https://rpmfind.net/linux/fedora/linux/releases"
;;
"${CD_OS_ROCKY}")
[ -n "${CD_URL_ROCKY}" ] && CD_URL_CHOSEN="${CD_URL_ROCKY}" \
|| CD_URL_CHOSEN="https://dl.rockylinux.org/\$contentdir"
;;
"${CD_OS_UBUNTU}")
[ -n "${CD_URL_UBUNTU}" ] && CD_URL_CHOSEN="${CD_URL_UBUNTU}" \
|| CD_URL_CHOSEN="https://ubuntu.mirrors.ovh.net/ubuntu"
;;
*)
esac
cd_split
cd_echo "CD_URL_DEFAULT" "CD_URL_CHOSEN"
# set python command & package
case "${CD_OS_ID}" in
"${CD_OS_ALMA}"|"${CD_OS_ROCKY}")
CD_PYTHON_COMMAND="python3.11"
CD_PYTHON_PACKAGE="python3.11"
;;
"${CD_OS_ALPINE}")
CD_PYTHON_COMMAND="python3.11"
CD_PYTHON_PACKAGE="python3"
;;
"${CD_OS_ARCH}")
CD_PYTHON_COMMAND="python3.12"
CD_PYTHON_PACKAGE="python"
;;
"${CD_OS_DEBIAN}")
case "${CD_OS_VERSION}" in
"bookworm") CD_PYTHON_COMMAND="python3.11" ;;
"bullseye") CD_PYTHON_COMMAND="python3.9" ;;
*)
esac
CD_PYTHON_PACKAGE="python3"
;;
"${CD_OS_FEDORA}")
CD_PYTHON_COMMAND="python3.12"
CD_PYTHON_PACKAGE="python3"
;;
"${CD_OS_UBUNTU}")
case "${CD_OS_VERSION}" in
"noble") CD_PYTHON_COMMAND="python3.12" ;;
"jammy") CD_PYTHON_COMMAND="python3.10" ;;
*)
esac
CD_PYTHON_PACKAGE="python3"
;;
*)
esac
# set python packages
case "${CD_OS_ID}" in
"${CD_OS_ALMA}"|"${CD_OS_FEDORA}"|"${CD_OS_ROCKY}")
CD_PYTHON_PACKAGES="/usr/lib64/${CD_PYTHON_COMMAND}/site-packages"
;;
"${CD_OS_ALPINE}"|"${CD_OS_ARCH}")
CD_PYTHON_PACKAGES="/usr/lib/${CD_PYTHON_COMMAND}/site-packages"
;;
"${CD_OS_DEBIAN}"|"${CD_OS_UBUNTU}")
CD_PYTHON_PACKAGES="/usr/lib/${CD_PYTHON_ALIAS}/dist-packages"
;;
*)
esac
cd_split
cd_echo "CD_PYTHON_COMMAND" "CD_PYTHON_PACKAGE" "CD_PYTHON_PACKAGES"
# variables
[ -n "${CD_CA_1}" ] && CD_CA=true
# continuous integration platform
if [ -n "${GITHUB_ACTIONS}" ] ; then
# github → gitea → forgejo
if [ -n "${GITHUB_SERVER_URL}" ] ; then
CD_SERVER_URL="${GITHUB_SERVER_URL}"
else
cd_error_ci "GITHUB_SERVER_URL"
fi
if [ -n "${GITHUB_REPOSITORY}" ] ; then
CD_PROJECTS_GROUP="$(dirname "${GITHUB_REPOSITORY}")"
CD_PROJECT_NAME="$(basename "${GITHUB_REPOSITORY}")"
else
cd_error_ci "GITHUB_REPOSITORY"
fi
if [ -n "${GITHUB_REF_NAME}" ] ; then
CD_PROJECT_BRANCH="${GITHUB_REF_NAME}"
else
cd_error_ci "GITHUB_REF_NAME"
fi
elif [ -n "${GITLAB_CI}" ] ; then
# gitlab
if [ -n "${CI_SERVER_URL}" ] ; then
CD_SERVER_URL="${CI_SERVER_URL}"
else
cd_error_ci "CI_SERVER_URL"
fi
if [ -n "${CI_PROJECT_PATH}" ] ; then
CD_PROJECTS_GROUP="$(dirname "${CI_PROJECT_PATH}")"
CD_PROJECT_NAME="$(basename "${CI_PROJECT_PATH}")"
else
cd_error_ci "CI_PROJECT_PATH"
fi
if [ -n "${CI_COMMIT_BRANCH}" ] ; then
CD_PROJECT_BRANCH="${CI_COMMIT_BRANCH}"
else
cd_error_ci "CI_COMMIT_BRANCH"
fi
else
# unsupported
cd_error_ci "ø"
fi
[ -n "${CD_SERVER_URL}" ] || cd_error_ci "CD_SERVER_URL"
[ -n "${CD_PROJECTS_GROUP}" ] || cd_error_ci "CD_PROJECTS_GROUP"
[ -n "${CD_PROJECT_NAME}" ] || cd_error_ci "CD_PROJECT_NAME"
[ -n "${CD_PROJECT_BRANCH}" ] || cd_error_ci "CD_PROJECT_BRANCH"
#
CD_PROJECTS_URL="${CD_SERVER_URL}/${CD_PROJECTS_GROUP}"
#
cd_split
cd_echo "CD_CA"
cd_split
cd_echo "CD_SERVER_URL" \
"CD_PROJECTS_GROUP" "CD_PROJECT_NAME" "CD_PROJECT_BRANCH"
cd_split
cd_echo "CD_PROJECTS_URL"
# TODO move to Python
case "${CD_PM}" in
"${CD_PM_APK}"|"${CD_PM_APT}") CD_PKG_SSH="openssh-client" ;;
"${CD_PM_DNF}") CD_PKG_SSH="openssh-clients" ;;
"${CD_PM_PACMAN}") CD_PKG_SSH="openssh" ;;
*)
esac
}
cd_set_packages_repositories () {
cd_step "Set packages repositories"
case "${CD_OS_ID}" in
"${CD_OS_ALMA}")
case "${CD_OS_VERSION}" in
"8") \
cd_set_packages_repositories__file="/etc/yum.repos.d/almalinux.repo" ;;
"9") \
cd_set_packages_repositories__file="/etc/yum.repos.d/almalinux-baseos.repo" ;;
*)
esac
cd_sed "${cd_set_packages_repositories__file}" \
"|^mirrorlist|# mirrorlist|" \
"|${CD_URL_DEFAULT}|${CD_URL_CHOSEN}|" \
"|^# baseurl|baseurl|"
;;
"${CD_OS_ALPINE}")
cd_set_packages_repositories__file="/etc/apk/repositories"
cd_write "${cd_set_packages_repositories__file}" "\
${CD_URL_CHOSEN}/v${CD_OS_VERSION}/main
${CD_URL_CHOSEN}/v${CD_OS_VERSION}/community
"
;;
"${CD_OS_DEBIAN}")
cd_set_packages_repositories__file="/etc/apt/sources.list"
cd_write "${cd_set_packages_repositories__file}" "\
deb ${CD_URL_CHOSEN} ${CD_OS_VERSION} main
deb ${CD_URL_CHOSEN} ${CD_OS_VERSION}-backports main
deb ${CD_URL_CHOSEN} ${CD_OS_VERSION}-updates main
deb ${CD_URL_CHOSEN}-security ${CD_OS_VERSION}-security main
"
;;
"${CD_OS_ROCKY}")
case "${CD_OS_VERSION}" in
"8") \
cd_set_packages_repositories__file="/etc/yum.repos.d/Rocky-BaseOS.repo" ;;
"9") \
cd_set_packages_repositories__file="/etc/yum.repos.d/rocky.repo" ;;
*)
esac
cd_sed "${cd_set_packages_repositories__file}" \
"|^mirrorlist|# mirrorlist|" \
"|${CD_URL_DEFAULT}|${CD_URL_CHOSEN}|" \
"|^#baseurl|baseurl|"
;;
"${CD_OS_UBUNTU}")
cd_set_packages_repositories__file="/etc/apt/sources.list"
cd_write "${cd_set_packages_repositories__file}" "\
deb ${CD_URL_CHOSEN} ${CD_OS_VERSION} main
deb ${CD_URL_CHOSEN} ${CD_OS_VERSION}-backports main
deb ${CD_URL_CHOSEN} ${CD_OS_VERSION}-updates main
deb ${CD_URL_CHOSEN} ${CD_OS_VERSION}-security main
"
;;
*)
esac
}
cd_set_packages_configuration () {
cd_step "Set packages configuration"
cd_write "${CD_PM_CONF_PATH}" "${CD_PM_CONF_TEXT}"
case "${CD_OS_ID}" in
"${CD_OS_DEBIAN}"|"${CD_OS_UBUNTU}")
export DEBIAN_FRONTEND="noninteractive"
;;
*)
esac
}
# agnostic steps
cd_list_working_directory () {
cd_step "List working directory"
cd_list_working_directory__path="$(realpath .)"
cd_ls "${cd_list_working_directory__path}"
}
cd_set_https_verification_off () {
if [ -n "${CD_CA}" ] || [ "${CD_PM}" = "${CD_PM_APT}" ] ; then
cd_step "Set HTTPS verification off"
cd_mkdir "$(dirname "${CD_PM_HTTPS_PATH}")"
cd_write "${CD_PM_HTTPS_PATH}" "${CD_PM_HTTPS_TEXT}"
fi
}
cd_set_dns_resolving () {
cd_step "Set DNS resolving"
for cd_set_dns_resolving__server in ${CD_DNS} ; do
cd_set_dns_resolving__text="${cd_set_dns_resolving__text}\
nameserver ${cd_set_dns_resolving__server}
"
done
cd_write "${CD_DNS_FILE}" "${cd_set_dns_resolving__text}"
}
cd_update_packages_catalog () {
cd_step "Update packages catalog"
${CD_PM_UPDATE} || exit
}
cd_install_packages_tools () {
cd_step "Install packages tools"
cd_install_package "${CD_PKG_PKG}"
}
cd_install_ca_certificates () {
cd_step "Install CA"
cd_install_package "${CD_PKG_CA}"
}
cd_write_ca_certificates () {
cd_step "Write CA certificates"
cd_mkdir "${CD_CA_ROOT}"
cd_write_ca_certificates__index=1
eval "cd_write_ca_certificates__text=\
\"\${CD_CA_${cd_write_ca_certificates__index}}\""
while [ -n "${cd_write_ca_certificates__text}" ] ; do
cd_write_ca_certificates__path="\
${CD_CA_ROOT}/${cd_write_ca_certificates__index}.crt"
cd_split
cd_write \
"${cd_write_ca_certificates__path}" \
"${cd_write_ca_certificates__text}"
cd_openssl "${cd_write_ca_certificates__path}"
cd_write_ca_certificates__index=$((cd_write_ca_certificates__index+1))
eval "cd_write_ca_certificates__text=\
\"\${CD_CA_${cd_write_ca_certificates__index}}\""
done
}
cd_update_ca_certificates () {
cd_step "Update CA certificates"
${CD_CMD_CA} || exit
}
cd_set_https_verification_on () {
cd_step "Set HTTPS verification on"
cd_rm "${CD_PM_HTTPS_PATH}"
}
cd_upgrade_packages () {
cd_step "Upgrade packages"
${CD_PM_UPGRADE} || exit
}
cd_install_git () {
cd_step "Install Git"
cd_install_package "${CD_PKG_GIT}"
}
cd_install_python () {
cd_step "Install Python"
cd_install_package "${CD_PYTHON_PACKAGE}"
cd_split
cd_ln_python "${CD_PYTHON_COMMAND}"
}
# TODO move to Python
cd_install_rsync () {
cd_step "Install Rsync"
cd_install_package "${CD_PKG_RSYNC}"
}
# TODO move to Python
cd_install_ssh () {
cd_step "Install SSH"
cd_install_package "${CD_PKG_SSH}"
}
cd_clean_packages_cache () {
cd_step "Clean packages cache"
${CD_PM_CLEAN} || exit
}
cd_install_python_modules () {
cd_step "Install Python modules"
cd_install_python_modules__root="$(mktemp --directory)" || exit
echo "${cd_install_python_modules__root}"
for cd_install_python_modules__repository \
in "${CD_GIT_CHILD}" "${CD_GIT_PARENT}" ; do
cd_split
cd_install_python_modules__url="\
${CD_PROJECTS_URL}/${cd_install_python_modules__repository}"
echo "\
${cd_install_python_modules__url}
"
git clone \
"${cd_install_python_modules__url}" \
"${cd_install_python_modules__root}\
/${cd_install_python_modules__repository}" \
|| exit
cd_install_python_modules__path="\
${cd_install_python_modules__root}\
/${cd_install_python_modules__repository}\
/${cd_install_python_modules__repository}"
echo "\
${cd_install_python_modules__path}
${CD_PYTHON_PACKAGES}"
cp --recursive \
"${cd_install_python_modules__path}" "${CD_PYTHON_PACKAGES}" \
|| exit
done
cd_split
cd_ls "${CD_PYTHON_PACKAGES}"
cd_split
cd_rm "${cd_install_python_modules__root}"
}
cd_write_python_module () {
cd_step "Write Python module"
for cd_write_python_module__variable \
in OPEN DOWN VERT SPLT __UP SHUT OS_ID OS_VERSION ; do
cd_write_python_module__value="\
$(cd_echo "CD_${cd_write_python_module__variable}")"
cd_write_python_module__text="${cd_write_python_module__text}\
${cd_write_python_module__value}
"
done
cd_write "${CD_PYTHON_PACKAGES}/env.py" "${cd_write_python_module__text}\
CD_STEP = $((CD_STEP+1))
"
}
cd_switch_to_python () {
cd_step "Switch to Python"
echo "\
${CD_PATH}
${CD_PYTHON_PACKAGES}/${CD_GIT_CHILD}"
"${CD_PYTHON_ALIAS}" -m "${CD_GIT_CHILD}" "${@}"
}
# functions
cd_cat () {
cd_cat__file="${1}"
if [ -n "${cd_cat__file}" ] ; then
cd_open "${cd_cat__file}"
cat "${cd_cat__file}" || exit
cd_shut "${cd_cat__file}"
fi
}
cd_echo () {
if [ -n "${1}" ] ; then
for cd_echo__name in "${@}" ; do
eval "cd_echo__text=\"\${${cd_echo__name}}\""
echo "${cd_echo__name} = \"${cd_echo__text}\""
done
fi
}
cd_error_ci () {
echo "× CI: ${*}"
exit "${CD_ERROR_CI}"
}
cd_error_os () {
cd_error_os__variable="${1}"
printf "× OS: "
cd_echo "${cd_error_os__variable}"
exit "${CD_ERROR_OS}"
}
cd_grep_os () {
cd_grep_os__variable="${1}"
if [ -n "${cd_grep_os__variable}" ] ; then
grep "^${cd_grep_os__variable}=" "/etc/os-release" \
| sed "s|^${cd_grep_os__variable}=||" \
| sed "s|^\"\(.*\)\"$|\1|"
fi
}
cd_install_package () {
cd_install_package__name="${1}"
if [ -n "${cd_install_package__name}" ] ; then
${CD_PM_INSTALL} "${cd_install_package__name}" || exit
fi
}
cd_ln_python () {
cd_ln_python__command="${1}"
if [ -n "${cd_ln_python__command}" ] ; then
echo "${CD_PYTHON_ALIAS}${cd_ln_python__command}"
ln -f -s "${cd_ln_python__command}" "/usr/bin/${CD_PYTHON_ALIAS}" \
|| exit
fi
}
cd_ls () {
cd_ls__path="${1}"
if [ -n "${cd_ls__path}" ] ; then
cd_open "${cd_ls__path}"
ls -a -l "${cd_ls__path}" || exit
cd_shut "${cd_ls__path}"
fi
}
cd_mkdir () {
cd_mkdir__path="${1}"
if [ -n "${cd_mkdir__path}" ] ; then
echo "${cd_mkdir__path}"
mkdir --parents "${cd_mkdir__path}" || exit
fi
}
cd_open () {
echo "${CD_OPEN}${*}"
}
cd_openssl () {
cd_openssl__file="${1}"
if [ -f "${cd_openssl__file}" ] ; then
openssl x509 \
-in "${cd_openssl__file}" \
-noout -text \
|| exit
fi
}
cd_rm () {
cd_rm__path="${1}"
if [ -e "${cd_rm__path}" ] ; then
echo "${cd_rm__path}"
rm -r "${cd_rm__path}" || exit
fi
}
cd_sed () {
cd_sed__file="${1}"
shift
if [ -f "${cd_sed__file}" ] ; then
cd_cat "${cd_sed__file}"
for cd_sed__regex in "${@}" ; do
sed --in-place "s${cd_sed__regex}g" "${cd_sed__file}" \
&& cd_cat "${cd_sed__file}" \
|| exit
done
fi
}
cd_shut () {
echo "${CD_SHUT}${*}"
}
cd_split () {
echo "${CD_SPLT}"
}
cd_step () {
CD_STEP=$((CD_STEP+1))
echo "\
${CD_DOWN}
${CD_VERT} ${CD_STEP} ${*}
${CD___UP}"
}
cd_write () {
cd_write__file="${1}"
cd_write__text="${2}"
if [ -n "${cd_write__file}" ] ; then
[ -f "${cd_write__file}" ] && cd_cat "${cd_write__file}"
echo "${cd_write__file}"
printf "%s" "${cd_write__text}" > "${cd_write__file}" || exit
cd_cat "${cd_write__file}"
fi
}
# constants
CD_BOX_DOWN="╭"
CD_BOX_LEFT="╴"
CD_BOX_RIGHT="╶"
CD_BOX_UP="╰"
CD_BOX_VERTICAL="│"
CD_ERROR_CI=2
CD_ERROR_OS=1
CD_OS_ALMA="alma"
CD_OS_ALPINE="alpine"
CD_OS_ARCH="arch"
CD_OS_DEBIAN="debian"
CD_OS_FEDORA="fedora"
CD_OS_ROCKY="rocky"
CD_OS_UBUNTU="ubuntu"
CD_PM_APK="apk"
CD_PM_APT="apt"
CD_PM_DNF="dnf"
CD_PM_PACMAN="pacman"
CD_HORIZONTAL="────╌╌╌╌┄┄┄┄┈┈┈┈"
CD_OPEN="${CD_BOX_DOWN}${CD_BOX_LEFT}"
CD_DOWN="${CD_BOX_DOWN}${CD_HORIZONTAL}"
CD_VERT="${CD_BOX_VERTICAL}"
CD_SPLT="${CD_BOX_RIGHT}${CD_HORIZONTAL}"
CD___UP="${CD_BOX_UP}${CD_HORIZONTAL}"
CD_SHUT="${CD_BOX_UP}${CD_BOX_LEFT}"
# run
cd_main "${@}"

View file

@ -1,30 +1,28 @@
"""Python Integration, Delivery & Deployment."""
"""Continuous Deployment."""
__version__ = "0.0.1"
import os
import sys
from pathlib import Path
import env
from rwx import fs, ps
from rwx.log import stream as log
import pidd
from pidd.project import Project
from pidd.projects import Projects
from cd.project import Project
from cd.projects import Projects
COMMANDS_PREFIX = "pidd-"
COMMANDS_PREFIX = "cd-"
projects = Projects()
project = Project(projects)
def pidd_browse_workspace() -> None:
def cd_browse_workspace() -> None:
browse(project.root)
def pidd_build_project() -> None:
def cd_build_project() -> None:
for extension in ["py", "sh"]:
path = Path(project.root) / f"build.{extension}"
if path.exists():
@ -34,15 +32,19 @@ def pidd_build_project() -> None:
pass
def pidd_clone_branch() -> None:
def cd_clone_branch() -> None:
log.info(projects)
split()
log.info(project)
split()
log.info(f"""\
log.info(
f"""\
{project.url}
""")
""",
end="",
flush=True,
)
ps.run(
"git",
"clone",
@ -54,12 +56,12 @@ def pidd_clone_branch() -> None:
)
def pidd_list_environment() -> None:
def cd_list_environment() -> None:
for variable, value in sorted(projects.environment.items()):
log.info(f"{variable} = {value}")
def pidd_synchronize() -> None:
def cd_synchronize() -> None:
host = "rwx.work"
source = "out"
user = "cd"
@ -111,17 +113,6 @@ def install_commands(path: str) -> None:
(user / f"{COMMANDS_PREFIX}{command}").symlink_to(path)
def main(main: str) -> None:
path, *arguments = sys.argv
name = Path(path).name
if name == "__main__.py":
pidd.set_ssh(*arguments)
pidd.install_commands(main)
else:
function = getattr(pidd, name.replace("-", "_"))
function(*arguments)
def set_ssh(*arguments: str) -> None:
step("Set SSH")
#
@ -150,19 +141,19 @@ def set_ssh(*arguments: str) -> None:
def frame(text: str) -> None:
log.info(f"{env.PIDD_OPEN}{text}")
log.info(f"{env.CD_OPEN}{text}")
def shut(text: str) -> None:
log.info(f"{env.PIDD_SHUT}{text}")
log.info(f"{env.CD_SHUT}{text}")
def split() -> None:
log.info(env.PIDD_SPLT)
log.info(env.CD_SPLT)
def step(text: str) -> None:
env.PIDD_STEP += 1
log.info(env.PIDD_DOWN)
log.info(f"{env.PIDD_VERT} {env.PIDD_STEP} {text}")
log.info(env.PIDD___UP)
env.CD_STEP += 1
log.info(env.CD_DOWN)
log.info(f"{env.CD_VERT} {env.CD_STEP} {text}")
log.info(env.CD___UP)

18
cd/__main__.py Executable file
View file

@ -0,0 +1,18 @@
#! /usr/bin/env python3
"""Entry point to either bootstrap or command."""
import sys
from pathlib import Path
import cd
if __name__ == "__main__":
path, *arguments = sys.argv
name = Path(path).name
if name == "__main__.py":
cd.set_ssh(*arguments)
cd.install_commands(__file__)
else:
function = getattr(cd, name.replace("-", "_"))
function(*arguments)

View file

@ -7,7 +7,7 @@ from typing import TYPE_CHECKING
from urllib.parse import urljoin
if TYPE_CHECKING:
from pidd.projects import Projects
from cd.projects import Projects
BRANCH = [
"GITHUB_REF_NAME",

823
pidd.sh
View file

@ -1,823 +0,0 @@
#! /usr/bin/env sh
# defaults
[ -n "${PIDD_DNS}" ] || PIDD_DNS="\
9.9.9.9 \
"
[ -n "${PIDD_GIT_CHILD}" ] || PIDD_GIT_CHILD="pidd"
[ -n "${PIDD_GIT_PARENT}" ] || PIDD_GIT_PARENT="rwx"
# main
pidd_main () {
pidd_set_environment_variables
pidd_set_packages_repositories
pidd_set_packages_configuration
#
pidd_list_environment_variables
pidd_list_working_directory
pidd_set_https_verification_off
pidd_set_dns_resolving
pidd_update_packages_catalog
pidd_install_packages_tools
pidd_install_ca_certificates
pidd_write_ca_certificates
pidd_update_ca_certificates
pidd_set_https_verification_on
pidd_update_packages_catalog
pidd_upgrade_packages
pidd_install_git
pidd_install_python
# TODO move to Python
pidd_install_rsync
# TODO move to Python
pidd_install_ssh
pidd_clean_packages_cache
pidd_install_python_modules
pidd_write_python_module
pidd_switch_to_python "${@}"
}
# steps
pidd_set_environment_variables () {
pidd_step "Set environment variables"
# set path
PIDD_PATH="$(realpath "${0}")"
pidd_echo "PIDD_PATH"
# set operating system id
PIDD_OS_ID="$(pidd_grep_os ID)"
case "${PIDD_OS_ID}" in
"almalinux") PIDD_OS_ID="${PIDD_OS_ALMA}" ;;
"alpine") PIDD_OS_ID="${PIDD_OS_ALPINE}" ;;
"arch") PIDD_OS_ID="${PIDD_OS_ARCH}" ;;
"debian") PIDD_OS_ID="${PIDD_OS_DEBIAN}" ;;
"fedora") PIDD_OS_ID="${PIDD_OS_FEDORA}" ;;
"rocky") PIDD_OS_ID="${PIDD_OS_ROCKY}" ;;
"ubuntu") PIDD_OS_ID="${PIDD_OS_UBUNTU}" ;;
*) pidd_error_os "PIDD_OS_ID" ;;
esac
# set operating system version
case "${PIDD_OS_ID}" in
"${PIDD_OS_ALMA}"|"${PIDD_OS_ARCH}"|"${PIDD_OS_FEDORA}"|"${PIDD_OS_ROCKY}")
PIDD_OS_VERSION=$(pidd_grep_os VERSION_ID \
| sed "s|^\([0-9]\+\)\..*|\1|")
;;
"${PIDD_OS_ALPINE}")
PIDD_OS_VERSION=$(pidd_grep_os VERSION_ID \
| sed "s|^\([0-9]\+\.[0-9]\+\)\..*|\1|")
;;
"${PIDD_OS_DEBIAN}"|"${PIDD_OS_UBUNTU}")
PIDD_OS_VERSION="$(pidd_grep_os VERSION_CODENAME)"
;;
*)
esac
# check operating system version
case "${PIDD_OS_ID}" in
"${PIDD_OS_ALMA}"|"${PIDD_OS_ROCKY}")
case "${PIDD_OS_VERSION}" in
"8"|"9") ;;
*) pidd_error_os "PIDD_OS_VERSION" ;;
esac
;;
"${PIDD_OS_ALPINE}")
case "${PIDD_OS_VERSION}" in
"3.18"|"3.19") ;;
*) pidd_error_os "PIDD_OS_VERSION" ;;
esac
;;
"${PIDD_OS_ARCH}")
case "${PIDD_OS_VERSION}" in
"20231112"|"20240101") ;;
*) pidd_error_os "PIDD_OS_VERSION" ;;
esac
;;
"${PIDD_OS_DEBIAN}")
case "${PIDD_OS_VERSION}" in
"bookworm"|"bullseye") ;;
*) pidd_error_os "PIDD_OS_VERSION" ;;
esac
;;
"${PIDD_OS_FEDORA}")
case "${PIDD_OS_VERSION}" in
"39"|"40") ;;
*) pidd_error_os "PIDD_OS_VERSION" ;;
esac
;;
"${PIDD_OS_UBUNTU}")
case "${PIDD_OS_VERSION}" in
"jammy"|"noble") ;;
*) pidd_error_os "PIDD_OS_VERSION" ;;
esac
;;
*)
esac
pidd_split
pidd_echo "PIDD_OS_ID" "PIDD_OS_VERSION"
# universal
PIDD_DNS_FILE="/etc/resolv.conf"
PIDD_PKG_CA="ca-certificates"
PIDD_PKG_GIT="git"
# TODO move to Python
PIDD_PKG_RSYNC="rsync"
PIDD_PYTHON_ALIAS="python3"
pidd_split
pidd_echo "PIDD_DNS_FILE" "PIDD_PKG_CA" "PIDD_PKG_GIT" "PIDD_PYTHON_ALIAS"
# set ca command & root
case "${PIDD_OS_ID}" in
"${PIDD_OS_ALMA}"|"${PIDD_OS_FEDORA}"|"${PIDD_OS_ROCKY}")
PIDD_CA_ROOT="/etc/pki/ca-trust/source/anchors"
PIDD_CMD_CA="update-ca-trust"
;;
"${PIDD_OS_ALPINE}")
PIDD_CA_ROOT="/usr/local/share/ca-certificates"
PIDD_CMD_CA="update-ca-certificates"
;;
"${PIDD_OS_ARCH}")
PIDD_CA_ROOT="/etc/ca-certificates/trust-source/anchors"
PIDD_CMD_CA="update-ca-trust"
;;
"${PIDD_OS_DEBIAN}"|"${PIDD_OS_UBUNTU}")
PIDD_CA_ROOT="/usr/local/share/ca-certificates"
PIDD_CMD_CA="update-ca-certificates"
;;
*)
esac
pidd_split
pidd_echo "PIDD_CA_ROOT" "PIDD_CMD_CA"
# set package manager
case "${PIDD_OS_ID}" in
"${PIDD_OS_ALPINE}")
PIDD_PM="${PIDD_PM_APK}"
;;
"${PIDD_OS_DEBIAN}"|"${PIDD_OS_UBUNTU}")
PIDD_PM="${PIDD_PM_APT}"
;;
"${PIDD_OS_ALMA}"|"${PIDD_OS_FEDORA}"|"${PIDD_OS_ROCKY}")
PIDD_PM="${PIDD_PM_DNF}"
;;
"${PIDD_OS_ARCH}")
PIDD_PM="${PIDD_PM_PACMAN}"
;;
*)
esac
pidd_split
pidd_echo "PIDD_PM"
case "${PIDD_PM}" in
"${PIDD_PM_DNF}")
PIDD_PM_CLEAN="dnf clean all"
PIDD_PM_INSTALL="dnf install --assumeyes"
PIDD_PM_QUERY="rpm --query"
PIDD_PM_UPDATE="dnf makecache"
PIDD_PM_UPGRADE="dnf upgrade --assumeyes"
PIDD_PKG_PKG=""
PIDD_PM_CONF_PATH="/etc/dnf/dnf.conf"
PIDD_PM_CONF_TEXT="\
[main]
best=True
clean_requirements_on_remove=True
gpgcheck=1
installonly_limit=3
skip_if_unavailable=False
"
PIDD_PM_HTTPS_PATH="/etc/dnf/dnf.conf.d/https.conf"
PIDD_PM_HTTPS_TEXT="\
sslverify=False
"
;;
"${PIDD_PM_APK}")
PIDD_PM_CLEAN="apk cache purge"
PIDD_PM_INSTALL="apk add"
PIDD_PM_QUERY="apk info"
PIDD_PM_UPDATE="apk update"
PIDD_PM_UPGRADE="apk upgrade"
PIDD_PKG_PKG=""
PIDD_PM_CONF_PATH=""
PIDD_PM_CONF_TEXT=""
PIDD_PM_HTTPS_PATH="/etc/apk/repositories.d/https"
PIDD_PM_HTTPS_TEXT="\
--no-verify
"
;;
"${PIDD_PM_PACMAN}")
PIDD_PM_CLEAN="pacman --sync --clean --noconfirm"
PIDD_PM_INSTALL="pacman --sync --noconfirm"
PIDD_PM_QUERY="pacman --query"
PIDD_PM_UPDATE="pacman --sync --refresh"
PIDD_PM_UPGRADE="pacman --sync --sysupgrade --noconfirm"
PIDD_PKG_PKG=""
PIDD_PM_CONF_PATH=""
PIDD_PM_CONF_TEXT=""
PIDD_PM_HTTPS_PATH="/etc/pacman.d/https.conf"
PIDD_PM_HTTPS_TEXT="\
SSLVerify = No
"
;;
"${PIDD_PM_APT}")
PIDD_PM_CLEAN="apt-get clean"
PIDD_PM_INSTALL="apt-get install --assume-yes"
PIDD_PM_QUERY="dpkg-query --show"
PIDD_PM_UPDATE="apt-get update"
PIDD_PM_UPGRADE="apt-get upgrade --assume-yes"
PIDD_PKG_PKG="apt-utils"
PIDD_PM_CONF_PATH="/etc/apt/apt.conf.d/apt.conf"
PIDD_PM_CONF_TEXT="\
Acquire::Check-Valid-Until True;
APT::Get::Show-Versions True;
APT::Install-Recommends False;
APT::Install-Suggests False;
Dir::Etc::SourceParts \"\";
"
PIDD_PM_HTTPS_PATH="/etc/apt/apt.conf.d/https"
PIDD_PM_HTTPS_TEXT="\
Acquire::https::Verify-Peer False;
"
;;
*)
esac
pidd_split
pidd_echo "PIDD_PM_CLEAN" \
"PIDD_PM_INSTALL" "PIDD_PM_QUERY" "PIDD_PM_UPDATE" "PIDD_PM_UPGRADE"
pidd_split
pidd_echo "PIDD_PKG_PKG" "PIDD_PM_CONF_PATH" "PIDD_PM_HTTPS_PATH"
# specific
case "${PIDD_OS_ID}" in
"${PIDD_OS_ALMA}")
PIDD_URL_DEFAULT="https://repo.almalinux.org/almalinux"
;;
"${PIDD_OS_ALPINE}")
PIDD_URL_DEFAULT="https://dl-cdn.alpinelinux.org/alpine"
;;
"${PIDD_OS_ARCH}")
PIDD_URL_DEFAULT="https://geo.mirror.pkgbuild.com"
;;
"${PIDD_OS_DEBIAN}")
PIDD_URL_DEFAULT="http://deb.debian.org/debian"
;;
"${PIDD_OS_FEDORA}")
PIDD_URL_DEFAULT="http://download.example/pub/fedora/linux/releases"
;;
"${PIDD_OS_ROCKY}")
PIDD_URL_DEFAULT="http://dl.rockylinux.org/\$contentdir"
;;
"${PIDD_OS_UBUNTU}")
PIDD_URL_DEFAULT="http://archive.ubuntu.com/ubuntu"
;;
*)
esac
PIDD_URL_CHOSEN="${PIDD_URL_DEFAULT}"
case "${PIDD_OS_ID}" in
"${PIDD_OS_ALMA}")
[ -n "${PIDD_URL_ALMA}" ] && PIDD_URL_CHOSEN="${PIDD_URL_ALMA}"
;;
"${PIDD_OS_ALPINE}")
[ -n "${PIDD_URL_ALPINE}" ] && PIDD_URL_CHOSEN="${PIDD_URL_ALPINE}"
;;
"${PIDD_OS_ARCH}")
[ -n "${PIDD_URL_ARCH}" ] && PIDD_URL_CHOSEN="${PIDD_URL_ARCH}"
;;
"${PIDD_OS_DEBIAN}")
[ -n "${PIDD_URL_DEBIAN}" ] && PIDD_URL_CHOSEN="${PIDD_URL_DEBIAN}" \
|| PIDD_URL_CHOSEN="https://deb.debian.org/debian"
;;
"${PIDD_OS_FEDORA}")
[ -n "${PIDD_URL_FEDORA}" ] && PIDD_URL_CHOSEN="${PIDD_URL_FEDORA}" \
|| PIDD_URL_CHOSEN="https://rpmfind.net/linux/fedora/linux/releases"
;;
"${PIDD_OS_ROCKY}")
[ -n "${PIDD_URL_ROCKY}" ] && PIDD_URL_CHOSEN="${PIDD_URL_ROCKY}" \
|| PIDD_URL_CHOSEN="https://dl.rockylinux.org/\$contentdir"
;;
"${PIDD_OS_UBUNTU}")
[ -n "${PIDD_URL_UBUNTU}" ] && PIDD_URL_CHOSEN="${PIDD_URL_UBUNTU}" \
|| PIDD_URL_CHOSEN="https://ubuntu.mirrors.ovh.net/ubuntu"
;;
*)
esac
pidd_split
pidd_echo "PIDD_URL_DEFAULT" "PIDD_URL_CHOSEN"
# set python command & package
case "${PIDD_OS_ID}" in
"${PIDD_OS_ALMA}"|"${PIDD_OS_ROCKY}")
PIDD_PYTHON_COMMAND="python3.11"
PIDD_PYTHON_PACKAGE="python3.11"
;;
"${PIDD_OS_ALPINE}")
PIDD_PYTHON_COMMAND="python3.11"
PIDD_PYTHON_PACKAGE="python3"
;;
"${PIDD_OS_ARCH}")
PIDD_PYTHON_COMMAND="python3.12"
PIDD_PYTHON_PACKAGE="python"
;;
"${PIDD_OS_DEBIAN}")
case "${PIDD_OS_VERSION}" in
"bookworm") PIDD_PYTHON_COMMAND="python3.11" ;;
"bullseye") PIDD_PYTHON_COMMAND="python3.9" ;;
*)
esac
PIDD_PYTHON_PACKAGE="python3"
;;
"${PIDD_OS_FEDORA}")
PIDD_PYTHON_COMMAND="python3.12"
PIDD_PYTHON_PACKAGE="python3"
;;
"${PIDD_OS_UBUNTU}")
case "${PIDD_OS_VERSION}" in
"noble") PIDD_PYTHON_COMMAND="python3.12" ;;
"jammy") PIDD_PYTHON_COMMAND="python3.10" ;;
*)
esac
PIDD_PYTHON_PACKAGE="python3"
;;
*)
esac
# set python packages
case "${PIDD_OS_ID}" in
"${PIDD_OS_ALMA}"|"${PIDD_OS_FEDORA}"|"${PIDD_OS_ROCKY}")
PIDD_PYTHON_PACKAGES="/usr/lib64/${PIDD_PYTHON_COMMAND}/site-packages"
;;
"${PIDD_OS_ALPINE}"|"${PIDD_OS_ARCH}")
PIDD_PYTHON_PACKAGES="/usr/lib/${PIDD_PYTHON_COMMAND}/site-packages"
;;
"${PIDD_OS_DEBIAN}"|"${PIDD_OS_UBUNTU}")
PIDD_PYTHON_PACKAGES="/usr/lib/${PIDD_PYTHON_ALIAS}/dist-packages"
;;
*)
esac
pidd_split
pidd_echo "PIDD_PYTHON_COMMAND" "PIDD_PYTHON_PACKAGE" "PIDD_PYTHON_PACKAGES"
# variables
[ -n "${PIDD_CA_1}" ] && PIDD_CA=true
# continuous integration platform
if [ -n "${GITHUB_ACTIONS}" ] ; then
# github → gitea → forgejo
if [ -n "${GITHUB_SERVER_URL}" ] ; then
PIDD_SERVER_URL="${GITHUB_SERVER_URL}"
else
pidd_error_ci "GITHUB_SERVER_URL"
fi
if [ -n "${GITHUB_REPOSITORY}" ] ; then
PIDD_PROJECTS_GROUP="$(dirname "${GITHUB_REPOSITORY}")"
PIDD_PROJECT_NAME="$(basename "${GITHUB_REPOSITORY}")"
else
pidd_error_ci "GITHUB_REPOSITORY"
fi
if [ -n "${GITHUB_REF_NAME}" ] ; then
PIDD_PROJECT_BRANCH="${GITHUB_REF_NAME}"
else
pidd_error_ci "GITHUB_REF_NAME"
fi
elif [ -n "${GITLAB_CI}" ] ; then
# gitlab
if [ -n "${CI_SERVER_URL}" ] ; then
PIDD_SERVER_URL="${CI_SERVER_URL}"
else
pidd_error_ci "CI_SERVER_URL"
fi
if [ -n "${CI_PROJECT_PATH}" ] ; then
PIDD_PROJECTS_GROUP="$(dirname "${CI_PROJECT_PATH}")"
PIDD_PROJECT_NAME="$(basename "${CI_PROJECT_PATH}")"
else
pidd_error_ci "CI_PROJECT_PATH"
fi
if [ -n "${CI_COMMIT_BRANCH}" ] ; then
PIDD_PROJECT_BRANCH="${CI_COMMIT_BRANCH}"
else
pidd_error_ci "CI_COMMIT_BRANCH"
fi
else
# unsupported
pidd_error_ci "ø"
fi
[ -n "${PIDD_SERVER_URL}" ] || pidd_error_ci "PIDD_SERVER_URL"
[ -n "${PIDD_PROJECTS_GROUP}" ] || pidd_error_ci "PIDD_PROJECTS_GROUP"
[ -n "${PIDD_PROJECT_NAME}" ] || pidd_error_ci "PIDD_PROJECT_NAME"
[ -n "${PIDD_PROJECT_BRANCH}" ] || pidd_error_ci "PIDD_PROJECT_BRANCH"
#
PIDD_PROJECTS_URL="${PIDD_SERVER_URL}/${PIDD_PROJECTS_GROUP}"
#
pidd_split
pidd_echo "PIDD_CA"
pidd_split
pidd_echo "PIDD_SERVER_URL" \
"PIDD_PROJECTS_GROUP" "PIDD_PROJECT_NAME" "PIDD_PROJECT_BRANCH"
pidd_split
pidd_echo "PIDD_PROJECTS_URL"
# TODO move to Python
case "${PIDD_PM}" in
"${PIDD_PM_APK}"|"${PIDD_PM_APT}") PIDD_PKG_SSH="openssh-client" ;;
"${PIDD_PM_DNF}") PIDD_PKG_SSH="openssh-clients" ;;
"${PIDD_PM_PACMAN}") PIDD_PKG_SSH="openssh" ;;
*)
esac
}
pidd_set_packages_repositories () {
pidd_step "Set packages repositories"
case "${PIDD_OS_ID}" in
"${PIDD_OS_ALMA}")
case "${PIDD_OS_VERSION}" in
"8") \
pidd_set_packages_repositories__file="/etc/yum.repos.d/almalinux.repo" ;;
"9") \
pidd_set_packages_repositories__file="/etc/yum.repos.d/almalinux-baseos.repo" ;;
*)
esac
pidd_sed "${pidd_set_packages_repositories__file}" \
"|^mirrorlist|# mirrorlist|" \
"|${PIDD_URL_DEFAULT}|${PIDD_URL_CHOSEN}|" \
"|^# baseurl|baseurl|"
;;
"${PIDD_OS_ALPINE}")
pidd_set_packages_repositories__file="/etc/apk/repositories"
pidd_write "${pidd_set_packages_repositories__file}" "\
${PIDD_URL_CHOSEN}/v${PIDD_OS_VERSION}/main
${PIDD_URL_CHOSEN}/v${PIDD_OS_VERSION}/community
"
;;
"${PIDD_OS_DEBIAN}")
pidd_set_packages_repositories__file="/etc/apt/sources.list"
pidd_write "${pidd_set_packages_repositories__file}" "\
deb ${PIDD_URL_CHOSEN} ${PIDD_OS_VERSION} main
deb ${PIDD_URL_CHOSEN} ${PIDD_OS_VERSION}-backports main
deb ${PIDD_URL_CHOSEN} ${PIDD_OS_VERSION}-updates main
deb ${PIDD_URL_CHOSEN}-security ${PIDD_OS_VERSION}-security main
"
;;
"${PIDD_OS_ROCKY}")
case "${PIDD_OS_VERSION}" in
"8") \
pidd_set_packages_repositories__file="/etc/yum.repos.d/Rocky-BaseOS.repo" ;;
"9") \
pidd_set_packages_repositories__file="/etc/yum.repos.d/rocky.repo" ;;
*)
esac
pidd_sed "${pidd_set_packages_repositories__file}" \
"|^mirrorlist|# mirrorlist|" \
"|${PIDD_URL_DEFAULT}|${PIDD_URL_CHOSEN}|" \
"|^#baseurl|baseurl|"
;;
"${PIDD_OS_UBUNTU}")
pidd_set_packages_repositories__file="/etc/apt/sources.list"
pidd_write "${pidd_set_packages_repositories__file}" "\
deb ${PIDD_URL_CHOSEN} ${PIDD_OS_VERSION} main
deb ${PIDD_URL_CHOSEN} ${PIDD_OS_VERSION}-backports main
deb ${PIDD_URL_CHOSEN} ${PIDD_OS_VERSION}-updates main
deb ${PIDD_URL_CHOSEN} ${PIDD_OS_VERSION}-security main
"
;;
*)
esac
}
pidd_set_packages_configuration () {
pidd_step "Set packages configuration"
pidd_write "${PIDD_PM_CONF_PATH}" "${PIDD_PM_CONF_TEXT}"
case "${PIDD_OS_ID}" in
"${PIDD_OS_DEBIAN}"|"${PIDD_OS_UBUNTU}")
export DEBIAN_FRONTEND="noninteractive"
;;
*)
esac
}
# agnostic steps
pidd_list_environment_variables () {
pidd_step "List environment variables"
env | sort
}
pidd_list_working_directory () {
pidd_step "List working directory"
pidd_list_working_directory__path="$(realpath .)"
pidd_ls "${pidd_list_working_directory__path}"
}
pidd_set_https_verification_off () {
if [ -n "${PIDD_CA}" ] || [ "${PIDD_PM}" = "${PIDD_PM_APT}" ] ; then
pidd_step "Set HTTPS verification off"
pidd_mkdir "$(dirname "${PIDD_PM_HTTPS_PATH}")"
pidd_write "${PIDD_PM_HTTPS_PATH}" "${PIDD_PM_HTTPS_TEXT}"
fi
}
pidd_set_dns_resolving () {
pidd_step "Set DNS resolving"
for pidd_set_dns_resolving__server in ${PIDD_DNS} ; do
pidd_set_dns_resolving__text="${pidd_set_dns_resolving__text}\
nameserver ${pidd_set_dns_resolving__server}
"
done
pidd_write "${PIDD_DNS_FILE}" "${pidd_set_dns_resolving__text}"
}
pidd_update_packages_catalog () {
pidd_step "Update packages catalog"
${PIDD_PM_UPDATE} || exit
}
pidd_install_packages_tools () {
pidd_step "Install packages tools"
pidd_install_package "${PIDD_PKG_PKG}"
}
pidd_install_ca_certificates () {
pidd_step "Install CA"
pidd_install_package "${PIDD_PKG_CA}"
}
pidd_write_ca_certificates () {
pidd_step "Write CA certificates"
pidd_mkdir "${PIDD_CA_ROOT}"
pidd_write_ca_certificates__index=1
eval "pidd_write_ca_certificates__text=\
\"\${PIDD_CA_${pidd_write_ca_certificates__index}}\""
while [ -n "${pidd_write_ca_certificates__text}" ] ; do
pidd_write_ca_certificates__path="\
${PIDD_CA_ROOT}/${pidd_write_ca_certificates__index}.crt"
pidd_split
pidd_write \
"${pidd_write_ca_certificates__path}" \
"${pidd_write_ca_certificates__text}"
pidd_openssl "${pidd_write_ca_certificates__path}"
pidd_write_ca_certificates__index=$((pidd_write_ca_certificates__index+1))
eval "pidd_write_ca_certificates__text=\
\"\${PIDD_CA_${pidd_write_ca_certificates__index}}\""
done
}
pidd_update_ca_certificates () {
pidd_step "Update CA certificates"
${PIDD_CMD_CA} || exit
}
pidd_set_https_verification_on () {
pidd_step "Set HTTPS verification on"
pidd_rm "${PIDD_PM_HTTPS_PATH}"
}
pidd_upgrade_packages () {
pidd_step "Upgrade packages"
${PIDD_PM_UPGRADE} || exit
}
pidd_install_git () {
pidd_step "Install Git"
pidd_install_package "${PIDD_PKG_GIT}"
}
pidd_install_python () {
pidd_step "Install Python"
pidd_install_package "${PIDD_PYTHON_PACKAGE}"
pidd_split
pidd_ln_python "${PIDD_PYTHON_COMMAND}"
}
# TODO move to Python
pidd_install_rsync () {
pidd_step "Install Rsync"
pidd_install_package "${PIDD_PKG_RSYNC}"
}
# TODO move to Python
pidd_install_ssh () {
pidd_step "Install SSH"
pidd_install_package "${PIDD_PKG_SSH}"
}
pidd_clean_packages_cache () {
pidd_step "Clean packages cache"
${PIDD_PM_CLEAN} || exit
}
pidd_install_python_modules () {
pidd_step "Install Python modules"
pidd_install_python_modules__root="$(mktemp --directory)" || exit
echo "${pidd_install_python_modules__root}"
for pidd_install_python_modules__repository \
in "${PIDD_GIT_CHILD}" "${PIDD_GIT_PARENT}" ; do
pidd_split
pidd_install_python_modules__url="\
${PIDD_PROJECTS_URL}/${pidd_install_python_modules__repository}"
echo "\
${pidd_install_python_modules__url}
"
git clone \
"${pidd_install_python_modules__url}" \
"${pidd_install_python_modules__root}\
/${pidd_install_python_modules__repository}" \
|| exit
pidd_install_python_modules__path="\
${pidd_install_python_modules__root}\
/${pidd_install_python_modules__repository}\
/${pidd_install_python_modules__repository}"
echo "\
${pidd_install_python_modules__path}
${PIDD_PYTHON_PACKAGES}"
cp --recursive \
"${pidd_install_python_modules__path}" "${PIDD_PYTHON_PACKAGES}" \
|| exit
done
pidd_split
pidd_ls "${PIDD_PYTHON_PACKAGES}"
pidd_split
pidd_rm "${pidd_install_python_modules__root}"
}
pidd_write_python_module () {
pidd_step "Write Python module"
for pidd_write_python_module__variable \
in OPEN DOWN VERT SPLT __UP SHUT OS_ID OS_VERSION ; do
pidd_write_python_module__value="\
$(pidd_echo "PIDD_${pidd_write_python_module__variable}")"
pidd_write_python_module__text="${pidd_write_python_module__text}\
${pidd_write_python_module__value}
"
done
pidd_write "${PIDD_PYTHON_PACKAGES}/env.py" "${pidd_write_python_module__text}\
PIDD_STEP = $((PIDD_STEP+1))
"
}
pidd_switch_to_python () {
pidd_step "Switch to Python"
echo "\
${PIDD_PATH}
${PIDD_PYTHON_PACKAGES}/${PIDD_GIT_CHILD}"
"${PIDD_PYTHON_ALIAS}" -m "${PIDD_GIT_CHILD}" "${@}"
}
# functions
pidd_cat () {
pidd_cat__file="${1}"
if [ -n "${pidd_cat__file}" ] ; then
pidd_open "${pidd_cat__file}"
cat "${pidd_cat__file}" || exit
pidd_shut "${pidd_cat__file}"
fi
}
pidd_echo () {
if [ -n "${1}" ] ; then
for pidd_echo__name in "${@}" ; do
eval "pidd_echo__text=\"\${${pidd_echo__name}}\""
echo "${pidd_echo__name} = \"${pidd_echo__text}\""
done
fi
}
pidd_error_ci () {
echo "× CI: ${*}"
exit "${PIDD_ERROR_CI}"
}
pidd_error_os () {
pidd_error_os__variable="${1}"
printf "× OS: "
pidd_echo "${pidd_error_os__variable}"
exit "${PIDD_ERROR_OS}"
}
pidd_grep_os () {
pidd_grep_os__variable="${1}"
if [ -n "${pidd_grep_os__variable}" ] ; then
grep "^${pidd_grep_os__variable}=" "/etc/os-release" \
| sed "s|^${pidd_grep_os__variable}=||" \
| sed "s|^\"\(.*\)\"$|\1|"
fi
}
pidd_install_package () {
pidd_install_package__name="${1}"
if [ -n "${pidd_install_package__name}" ] ; then
${PIDD_PM_INSTALL} "${pidd_install_package__name}" || exit
fi
}
pidd_ln_python () {
pidd_ln_python__command="${1}"
if [ -n "${pidd_ln_python__command}" ] ; then
echo "${PIDD_PYTHON_ALIAS}${pidd_ln_python__command}"
ln -f -s "${pidd_ln_python__command}" "/usr/bin/${PIDD_PYTHON_ALIAS}" \
|| exit
fi
}
pidd_ls () {
pidd_ls__path="${1}"
if [ -n "${pidd_ls__path}" ] ; then
pidd_open "${pidd_ls__path}"
ls -a -l "${pidd_ls__path}" || exit
pidd_shut "${pidd_ls__path}"
fi
}
pidd_mkdir () {
pidd_mkdir__path="${1}"
if [ -n "${pidd_mkdir__path}" ] ; then
echo "${pidd_mkdir__path}"
mkdir --parents "${pidd_mkdir__path}" || exit
fi
}
pidd_open () {
echo "${PIDD_OPEN}${*}"
}
pidd_openssl () {
pidd_openssl__file="${1}"
if [ -f "${pidd_openssl__file}" ] ; then
openssl x509 \
-in "${pidd_openssl__file}" \
-noout -text \
|| exit
fi
}
pidd_rm () {
pidd_rm__path="${1}"
if [ -e "${pidd_rm__path}" ] ; then
echo "${pidd_rm__path}"
rm -r "${pidd_rm__path}" || exit
fi
}
pidd_sed () {
pidd_sed__file="${1}"
shift
if [ -f "${pidd_sed__file}" ] ; then
pidd_cat "${pidd_sed__file}"
for pidd_sed__regex in "${@}" ; do
sed --in-place "s${pidd_sed__regex}g" "${pidd_sed__file}" \
&& pidd_cat "${pidd_sed__file}" \
|| exit
done
fi
}
pidd_shut () {
echo "${PIDD_SHUT}${*}"
}
pidd_split () {
echo "${PIDD_SPLT}"
}
pidd_step () {
PIDD_STEP=$((PIDD_STEP+1))
echo "\
${PIDD_DOWN}
${PIDD_VERT} ${PIDD_STEP} ${*}
${PIDD___UP}"
}
pidd_write () {
pidd_write__file="${1}"
pidd_write__text="${2}"
if [ -n "${pidd_write__file}" ] ; then
[ -f "${pidd_write__file}" ] && pidd_cat "${pidd_write__file}"
echo "${pidd_write__file}"
printf "%s" "${pidd_write__text}" > "${pidd_write__file}" || exit
pidd_cat "${pidd_write__file}"
fi
}
# constants
PIDD_BOX_DOWN="╭"
PIDD_BOX_LEFT="╴"
PIDD_BOX_RIGHT="╶"
PIDD_BOX_UP="╰"
PIDD_BOX_VERTICAL="│"
PIDD_ERROR_CI=2
PIDD_ERROR_OS=1
PIDD_OS_ALMA="alma"
PIDD_OS_ALPINE="alpine"
PIDD_OS_ARCH="arch"
PIDD_OS_DEBIAN="debian"
PIDD_OS_FEDORA="fedora"
PIDD_OS_ROCKY="rocky"
PIDD_OS_UBUNTU="ubuntu"
PIDD_PM_APK="apk"
PIDD_PM_APT="apt"
PIDD_PM_DNF="dnf"
PIDD_PM_PACMAN="pacman"
PIDD_HORIZONTAL="────╌╌╌╌┄┄┄┄┈┈┈┈"
PIDD_OPEN="${PIDD_BOX_DOWN}${PIDD_BOX_LEFT}"
PIDD_DOWN="${PIDD_BOX_DOWN}${PIDD_HORIZONTAL}"
PIDD_VERT="${PIDD_BOX_VERTICAL}"
PIDD_SPLT="${PIDD_BOX_RIGHT}${PIDD_HORIZONTAL}"
PIDD___UP="${PIDD_BOX_UP}${PIDD_HORIZONTAL}"
PIDD_SHUT="${PIDD_BOX_UP}${PIDD_BOX_LEFT}"
# run
pidd_main "${@}"

View file

@ -1,8 +0,0 @@
#! /usr/bin/env python3
"""Entry point."""
import pidd
if __name__ == "__main__":
pidd.main(__file__)

View file

@ -15,11 +15,11 @@ classifiers = [
"Operating System :: OS Independent",
]
dependencies = ["rwx"]
description = "Python Integration, Delivery & Deployment"
description = "Continuous Deployment"
dynamic = ["version"]
keywords = []
license-files = { paths = ["license.md"] }
name = "pidd"
name = "cd"
readme = "readme.md"
requires-python = ">= 3.10"
@ -29,7 +29,7 @@ requires-python = ">= 3.10"
[project.urls]
[tool.hatch.version]
path = "pidd/__init__.py"
path = "cd/__init__.py"
[tool.ruff]
line-length = 80

View file

@ -1,6 +1,6 @@
# Python Integration, Delivery & Deployment
# Continuous Deployment
Get a common set of Python CI & CD commands \
Get a common set of Python CI/CD commands \
from various contexts of CA, CI and OCI / OS.
## Features
@ -21,10 +21,10 @@ from various contexts of CA, CI and OCI / OS.
* [X] Alpine → Python 3.11
* [X] 3.18
* [X] 3.19
* [ ] Arch → Python 3.12
* [X] Arch → Python 3.12
* [ ] 20231112
* [X] 20240101
* [ ] Debian
* [X] Debian
* [ ] Bullseye (11) → Python 3.9
* [X] Bookworm (12) → Python 3.11
* [X] Fedora → Python 3.12
@ -39,21 +39,21 @@ from various contexts of CA, CI and OCI / OS.
## How
| Variable | Description | Default |
|:----------------|:------------------------|:--------------------------------|
| PIDD_CA_n | Numbered CA certificate | |
| PIDD_DNS | Space separated servers | 9.9.9.9 |
| PIDD_GIT_CHILD | Child Git repository | pidd |
| PIDD_GIT_PARENT | Parent Git repository | rwx |
| PIDD_SSH_HOSTS | domain.tld ssh-type pub | |
| PIDD_SSH_KEY | SSH private key | |
| PIDD_URL_ALMA | Alma repository URL | https://repo.almalinux.org |
| PIDD_URL_ALPINE | Alpine repository URL | https://dl-cdn.alpinelinux.org |
| PIDD_URL_ARCH | Arch repository URL | https://geo.mirror.pkgbuild.com |
| PIDD_URL_DEBIAN | Debian repository URL | https://deb.debian.org |
| PIDD_URL_FEDORA | Fedora repository URL | https://rpmfind.net |
| PIDD_URL_ROCKY | Rocky repository URL | https://dl.rockylinux.org |
| PIDD_URL_UBUNTU | Ubuntu repository URL | https://ubuntu.mirrors.ovh.net |
| Variable | Description | Default |
|:--------------|:------------------------|:--------------------------------|
| CD_CA_n | Numbered CA certificate | |
| CD_DNS | Space separated servers | 9.9.9.9 |
| CD_GIT_CHILD | Child Git repository | cd |
| CD_GIT_PARENT | Parent Git repository | rwx |
| CD_SSH_HOSTS | domain.tld ssh-type pub | |
| CD_SSH_KEY | SSH private key | |
| CD_URL_ALMA | Alma repository URL | https://repo.almalinux.org |
| CD_URL_ALPINE | Alpine repository URL | https://dl-cdn.alpinelinux.org |
| CD_URL_ARCH | Arch repository URL | https://geo.mirror.pkgbuild.com |
| CD_URL_DEBIAN | Debian repository URL | https://deb.debian.org |
| CD_URL_FEDORA | Fedora repository URL | https://rpmfind.net |
| CD_URL_ROCKY | Rocky repository URL | https://dl.rockylinux.org |
| CD_URL_UBUNTU | Ubuntu repository URL | https://ubuntu.mirrors.ovh.net |
## HTTPS & Python