117 lines
2.2 KiB
Bash
Executable File
117 lines
2.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
APT_UPDATED=0
|
|
|
|
usage() {
|
|
cat <<'EOF'
|
|
Usage:
|
|
scripts/bootstrap-ubuntu.sh [--no-install]
|
|
|
|
Installs the Ubuntu packages needed to build Ehwrj, then runs the full
|
|
Release verification and Windows x64 publish pipeline.
|
|
|
|
Options:
|
|
--no-install Skip apt installs and only run the verification/publish step.
|
|
EOF
|
|
}
|
|
|
|
NO_INSTALL=0
|
|
while [[ $# -gt 0 ]]; do
|
|
case "$1" in
|
|
--no-install)
|
|
NO_INSTALL=1
|
|
shift
|
|
;;
|
|
-h|--help)
|
|
usage
|
|
exit 0
|
|
;;
|
|
*)
|
|
echo "error: unknown argument: $1" >&2
|
|
usage >&2
|
|
exit 2
|
|
;;
|
|
esac
|
|
done
|
|
|
|
if [[ -r /etc/os-release ]]; then
|
|
# shellcheck disable=SC1091
|
|
. /etc/os-release
|
|
else
|
|
echo "error: /etc/os-release not found; this script expects Ubuntu." >&2
|
|
exit 1
|
|
fi
|
|
|
|
if [[ "${ID:-}" != "ubuntu" ]]; then
|
|
echo "error: this bootstrap script expects Ubuntu, got '${ID:-unknown}'." >&2
|
|
exit 1
|
|
fi
|
|
|
|
run_as_root() {
|
|
if [[ "$(id -u)" -eq 0 ]]; then
|
|
"$@"
|
|
return
|
|
fi
|
|
|
|
if ! command -v sudo >/dev/null 2>&1; then
|
|
echo "error: sudo is required when not running as root." >&2
|
|
exit 1
|
|
fi
|
|
|
|
sudo "$@"
|
|
}
|
|
|
|
apt_install() {
|
|
if [[ "$NO_INSTALL" -eq 1 ]]; then
|
|
return
|
|
fi
|
|
|
|
if [[ "$APT_UPDATED" -eq 0 ]]; then
|
|
run_as_root apt-get update
|
|
APT_UPDATED=1
|
|
fi
|
|
|
|
run_as_root apt-get install -y "$@"
|
|
}
|
|
|
|
has_dotnet_8_sdk() {
|
|
command -v dotnet >/dev/null 2>&1 && dotnet --list-sdks | awk '{print $1}' | grep -q '^8\.'
|
|
}
|
|
|
|
missing=()
|
|
|
|
if ! has_dotnet_8_sdk; then
|
|
missing+=(dotnet-sdk-8.0)
|
|
fi
|
|
|
|
if ! command -v rg >/dev/null 2>&1; then
|
|
missing+=(ripgrep)
|
|
fi
|
|
|
|
if [[ "${#missing[@]}" -gt 0 ]]; then
|
|
if [[ "$NO_INSTALL" -eq 1 ]]; then
|
|
echo "error: missing required tools: ${missing[*]}" >&2
|
|
exit 1
|
|
fi
|
|
|
|
apt_install "${missing[@]}"
|
|
fi
|
|
|
|
if ! has_dotnet_8_sdk; then
|
|
echo "error: dotnet 8 SDK is still unavailable after package installation." >&2
|
|
exit 1
|
|
fi
|
|
|
|
if ! command -v rg >/dev/null 2>&1; then
|
|
echo "error: ripgrep is still unavailable after package installation." >&2
|
|
exit 1
|
|
fi
|
|
|
|
"$ROOT_DIR/scripts/publish-win-x64.sh"
|
|
|
|
echo
|
|
echo "Published Windows build:"
|
|
echo " $ROOT_DIR/src/Ehwrj.App/bin/Release/net8.0/win-x64/publish/Ehwrj.exe"
|