Align CI with the validated Ubuntu support floor
Stop implying that one Ubuntu 3.11 unit lane validates the full Linux support surface Aman documents.\n\nSplit CI into an Ubuntu CPython 3.10/3.11/3.12 unit-package matrix, a portable install plus doctor smoke lane, and a packaging lane gated on both. Add a reproducible ci_portable_smoke.sh helper with fake systemctl coverage, and force the installer onto /usr/bin/python3 so the smoke path uses the distro-provided GI and X11 Python packages it is meant to validate.\n\nUpdate the README, release/distribution docs, and Debian metadata to distinguish the automated Ubuntu CI floor from broader manual GA signoff families, and add the missing AppIndicator introspection package to the Ubuntu/Debian dependency lists.\n\nValidate with python3 -m unittest discover -s tests -p 'test_*.py', python3 -m py_compile src/*.py tests/*.py, and bash -n scripts/ci_portable_smoke.sh. The full xvfb-backed smoke could not be run locally in this sandbox because xvfb-run is unavailable.
This commit is contained in:
parent
4d0081d1d0
commit
dd2813340b
9 changed files with 270 additions and 9 deletions
136
scripts/ci_portable_smoke.sh
Executable file
136
scripts/ci_portable_smoke.sh
Executable file
|
|
@ -0,0 +1,136 @@
|
|||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
ROOT_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)"
|
||||
source "${SCRIPT_DIR}/package_common.sh"
|
||||
|
||||
require_command mktemp
|
||||
require_command tar
|
||||
require_command xvfb-run
|
||||
|
||||
DISTRO_PYTHON="${AMAN_CI_SYSTEM_PYTHON:-/usr/bin/python3}"
|
||||
require_command "${DISTRO_PYTHON}"
|
||||
|
||||
LOG_DIR="${BUILD_DIR}/ci-smoke"
|
||||
RUN_DIR="${LOG_DIR}/run"
|
||||
HOME_DIR="${RUN_DIR}/home"
|
||||
FAKE_BIN_DIR="${RUN_DIR}/fake-bin"
|
||||
EXTRACT_DIR="${RUN_DIR}/bundle"
|
||||
RUNTIME_DIR="${RUN_DIR}/xdg-runtime"
|
||||
COMMAND_LOG="${LOG_DIR}/commands.log"
|
||||
SYSTEMCTL_LOG="${LOG_DIR}/systemctl.log"
|
||||
|
||||
dump_logs() {
|
||||
local path
|
||||
for path in "${COMMAND_LOG}" "${SYSTEMCTL_LOG}" "${LOG_DIR}"/*.stdout.log "${LOG_DIR}"/*.stderr.log; do
|
||||
if [[ -f "${path}" ]]; then
|
||||
echo "=== ${path#${ROOT_DIR}/} ==="
|
||||
cat "${path}"
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
on_exit() {
|
||||
local status="$1"
|
||||
if [[ "${status}" -ne 0 ]]; then
|
||||
dump_logs
|
||||
fi
|
||||
}
|
||||
trap 'on_exit $?' EXIT
|
||||
|
||||
run_logged() {
|
||||
local name="$1"
|
||||
shift
|
||||
local stdout_log="${LOG_DIR}/${name}.stdout.log"
|
||||
local stderr_log="${LOG_DIR}/${name}.stderr.log"
|
||||
{
|
||||
printf "+"
|
||||
printf " %q" "$@"
|
||||
printf "\n"
|
||||
} >>"${COMMAND_LOG}"
|
||||
"$@" >"${stdout_log}" 2>"${stderr_log}"
|
||||
}
|
||||
|
||||
rm -rf "${LOG_DIR}"
|
||||
mkdir -p "${HOME_DIR}" "${FAKE_BIN_DIR}" "${EXTRACT_DIR}" "${RUNTIME_DIR}"
|
||||
: >"${COMMAND_LOG}"
|
||||
: >"${SYSTEMCTL_LOG}"
|
||||
|
||||
cat >"${FAKE_BIN_DIR}/systemctl" <<'EOF'
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
log_path="${SYSTEMCTL_LOG:?}"
|
||||
if [[ "${1:-}" == "--user" ]]; then
|
||||
shift
|
||||
fi
|
||||
printf '%s\n' "$*" >>"${log_path}"
|
||||
|
||||
case "$*" in
|
||||
"daemon-reload")
|
||||
;;
|
||||
"enable --now aman")
|
||||
;;
|
||||
"stop aman")
|
||||
;;
|
||||
"disable --now aman")
|
||||
;;
|
||||
"is-system-running")
|
||||
printf 'running\n'
|
||||
;;
|
||||
"show aman --property=FragmentPath --value")
|
||||
printf '%s\n' "${AMAN_CI_SERVICE_PATH:?}"
|
||||
;;
|
||||
"is-enabled aman")
|
||||
printf 'enabled\n'
|
||||
;;
|
||||
"is-active aman")
|
||||
printf 'active\n'
|
||||
;;
|
||||
*)
|
||||
echo "unexpected systemctl command: $*" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
EOF
|
||||
chmod 0755 "${FAKE_BIN_DIR}/systemctl"
|
||||
|
||||
run_logged package-portable bash "${SCRIPT_DIR}/package_portable.sh"
|
||||
|
||||
VERSION="$(project_version)"
|
||||
PACKAGE_NAME="$(project_name)"
|
||||
PORTABLE_TARBALL="${DIST_DIR}/${PACKAGE_NAME}-x11-linux-${VERSION}.tar.gz"
|
||||
BUNDLE_DIR="${EXTRACT_DIR}/${PACKAGE_NAME}-x11-linux-${VERSION}"
|
||||
|
||||
run_logged extract tar -C "${EXTRACT_DIR}" -xzf "${PORTABLE_TARBALL}"
|
||||
|
||||
export HOME="${HOME_DIR}"
|
||||
export PATH="${FAKE_BIN_DIR}:${HOME_DIR}/.local/bin:${PATH}"
|
||||
export SYSTEMCTL_LOG
|
||||
export AMAN_CI_SERVICE_PATH="${HOME_DIR}/.config/systemd/user/aman.service"
|
||||
|
||||
run_logged distro-python "${DISTRO_PYTHON}" --version
|
||||
|
||||
(
|
||||
cd "${BUNDLE_DIR}"
|
||||
run_logged install env \
|
||||
PATH="${FAKE_BIN_DIR}:${HOME_DIR}/.local/bin:$(dirname "${DISTRO_PYTHON}"):${PATH}" \
|
||||
./install.sh
|
||||
)
|
||||
|
||||
run_logged version "${HOME_DIR}/.local/bin/aman" version
|
||||
run_logged init "${HOME_DIR}/.local/bin/aman" init --config "${HOME_DIR}/.config/aman/config.json"
|
||||
run_logged doctor xvfb-run -a env \
|
||||
HOME="${HOME_DIR}" \
|
||||
PATH="${PATH}" \
|
||||
SYSTEMCTL_LOG="${SYSTEMCTL_LOG}" \
|
||||
AMAN_CI_SERVICE_PATH="${AMAN_CI_SERVICE_PATH}" \
|
||||
XDG_RUNTIME_DIR="${RUNTIME_DIR}" \
|
||||
XDG_SESSION_TYPE="x11" \
|
||||
"${HOME_DIR}/.local/bin/aman" doctor --config "${HOME_DIR}/.config/aman/config.json"
|
||||
run_logged uninstall "${HOME_DIR}/.local/share/aman/current/uninstall.sh" --purge
|
||||
|
||||
echo "portable smoke passed"
|
||||
echo "logs: ${LOG_DIR}"
|
||||
cat "${LOG_DIR}/doctor.stdout.log"
|
||||
Loading…
Add table
Add a link
Reference in a new issue