diff options
| author | Mehmet Samet Duman <yongdohyun@projecttick.org> | 2026-04-04 23:00:30 +0300 |
|---|---|---|
| committer | Mehmet Samet Duman <yongdohyun@projecttick.org> | 2026-04-04 23:00:30 +0300 |
| commit | 71ffb442e5f8072c6e0a974df9ae085bcf0e5d2a (patch) | |
| tree | d336b1d64747aeebb1a80c2e7c4e9b5d24253751 /bootstrap.sh | |
| parent | f96ea38d595162813a460f80f84e20f8d7f241bc (diff) | |
| download | Project-Tick-71ffb442e5f8072c6e0a974df9ae085bcf0e5d2a.tar.gz Project-Tick-71ffb442e5f8072c6e0a974df9ae085bcf0e5d2a.zip | |
NOISSUE update bootstrap script paths in documentation for Linux and Windows
remove unnecessary badges from README
add example environment configuration for Ofborg
create production configuration for Ofborg
correct RabbitMQ host in example configuration
add push event handling in GitHub webhook receiver
implement push filter task for handling push events
extend build job structure to include push event information
enhance build result structure to accommodate push event data
add push event data handling in various message processing tasks
update log message collector to prevent 404 errors on log links
add push filter task to task module
Signed-off-by: Mehmet Samet Duman <yongdohyun@projecttick.org>
Diffstat (limited to 'bootstrap.sh')
| -rwxr-xr-x | bootstrap.sh | 285 |
1 files changed, 285 insertions, 0 deletions
diff --git a/bootstrap.sh b/bootstrap.sh new file mode 100755 index 0000000000..3762deaa2e --- /dev/null +++ b/bootstrap.sh @@ -0,0 +1,285 @@ +#!/usr/bin/env bash +# SPDX-License-Identifier: GPL-3.0-or-later +# SPDX-FileCopyrightText: 2026 Project Tick +# +# MeshMC Bootstrap Script +# Detects distro, installs dependencies, and sets up lefthook. + +set -euo pipefail + +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +CYAN='\033[0;36m' +NC='\033[0m' + +info() { printf "${CYAN}[INFO]${NC} %s\n" "$*"; } +ok() { printf "${GREEN}[ OK ]${NC} %s\n" "$*"; } +warn() { printf "${YELLOW}[WARN]${NC} %s\n" "$*"; } +err() { printf "${RED}[ERR]${NC} %s\n" "$*" >&2; } + +detect_distro() { + case "$(uname -s)" in + Darwin) + DISTRO="macos" + DISTRO_ID="macos" + ok "Detected platform: macOS" + return + ;; + Linux) ;; + *) + err "Unsupported OS: $(uname -s)" + exit 1 + ;; + esac + + if [ -f /etc/os-release ]; then + . /etc/os-release + DISTRO_ID="${ID:-unknown}" + DISTRO_ID_LIKE="${ID_LIKE:-}" + else + err "Cannot detect distribution (/etc/os-release not found)." + exit 1 + fi + + case "$DISTRO_ID" in + debian) DISTRO="debian" ;; + ubuntu|linuxmint|pop) DISTRO="ubuntu" ;; + fedora) DISTRO="fedora" ;; + rhel|centos|rocky|alma) DISTRO="rhel" ;; + opensuse*|sles) DISTRO="suse" ;; + arch|manjaro|endeavouros) DISTRO="arch" ;; + *) + # Fallback: check ID_LIKE + case "$DISTRO_ID_LIKE" in + *debian*|*ubuntu*) DISTRO="ubuntu" ;; + *fedora*|*rhel*) DISTRO="fedora" ;; + *suse*) DISTRO="suse" ;; + *arch*) DISTRO="arch" ;; + *) + err "Unsupported distribution: $DISTRO_ID" + err "Supported: Debian, Ubuntu, Fedora, RHEL, SUSE, Arch, macOS" + exit 1 + ;; + esac + ;; + esac + + ok "Detected distribution: $DISTRO (${DISTRO_ID})" +} + +MISSING_DEPS=() + +check_cmd() { + local name="$1" + local cmd="$2" + if command -v "$cmd" &>/dev/null; then + ok "$name is installed ($(command -v "$cmd"))" + else + warn "$name is NOT installed" + MISSING_DEPS+=("$name") + fi +} + +check_lib() { + local name="$1" + local pkg_name="$2" + if pkg-config --exists "$pkg_name" 2>/dev/null; then + ok "$name found via pkg-config" + else + warn "$name is NOT found" + MISSING_DEPS+=("$name") + fi +} + +check_dependencies() { + info "Checking dependencies..." + echo + + check_cmd "npm" "npm" + check_cmd "Go" "go" + check_cmd "lefthook" "lefthook" + check_cmd "reuse" "reuse" + check_lib "Qt6" "Qt6Core" + check_lib "QuaZip" "quazip1-qt6" + check_lib "zlib" "zlib" + check_lib "ECM" "ECM" + echo +} + +install_debian_ubuntu() { + info "Installing packages via apt..." + sudo apt-get update -qq + sudo apt-get install -y \ + npm \ + golang \ + qt6-base-dev \ + libquazip1-qt6-dev \ + zlib1g-dev \ + extra-cmake-modules \ + pkg-config \ + reuse +} + +install_fedora() { + info "Installing packages via dnf..." + sudo dnf install -y \ + npm \ + golang \ + qt6-qtbase-devel \ + quazip-qt6-devel \ + zlib-devel \ + extra-cmake-modules \ + pkgconf \ + reuse +} + +install_rhel() { + info "Installing packages via dnf..." + sudo dnf install -y epel-release || true + sudo dnf install -y \ + npm \ + golang \ + qt6-qtbase-devel \ + quazip-qt6-devel \ + zlib-devel \ + extra-cmake-modules \ + pkgconf \ + reuse +} + +install_suse() { + info "Installing packages via zypper..." + sudo zypper install -y \ + npm \ + go \ + qt6-base-devel \ + quazip-qt6-devel \ + zlib-devel \ + extra-cmake-modules \ + pkg-config \ + python3-reuse +} + +install_arch() { + info "Installing packages via pacman..." + sudo pacman -Sy --needed --noconfirm \ + npm \ + go \ + qt6-base \ + quazip-qt6 \ + zlib \ + extra-cmake-modules \ + pkgconf \ + reuse +} + +install_macos() { + if ! command -v brew &>/dev/null; then + err "Homebrew is not installed. Install it from https://brew.sh" + exit 1 + fi + + info "Installing packages via Homebrew..." + brew install \ + node \ + go \ + qt@6 \ + quazip \ + zlib \ + extra-cmake-modules \ + reuse \ + lefthook +} + +install_lefthook() { + if command -v lefthook &>/dev/null; then + return + fi + + info "Installing lefthook via Go..." + go install github.com/evilmartians/lefthook@latest + + export PATH="${GOPATH:-$HOME/go}/bin:$PATH" + + if ! command -v lefthook &>/dev/null; then + err "lefthook installation failed. Please install it manually." + exit 1 + fi + ok "lefthook installed successfully" +} + +install_missing() { + if [ ${#MISSING_DEPS[@]} -eq 0 ]; then + ok "All dependencies are already installed!" + return + fi + + info "Missing dependencies: ${MISSING_DEPS[*]}" + echo + + case "$DISTRO" in + debian|ubuntu) install_debian_ubuntu ;; + fedora) install_fedora ;; + rhel) install_rhel ;; + suse) install_suse ;; + arch) install_arch ;; + macos) install_macos ;; + esac + + install_lefthook + + echo + ok "Package installation complete" +} + +setup_lefthook() { + if [ ! -d ".git" ]; then + err "Not a git repository. Please run this script from the project root." + exit 1 + fi + + info "Setting up lefthook..." + lefthook install + ok "Lefthook hooks installed into .git/hooks" +} + +init_submodules() { + if [ ! -d ".git" ]; then + err "Not a git repository. Please run this script from the project root." + exit 1 + fi + + info "Setting up submodules..." + git submodule update --init --recursive + ok "Submodules initialized" +} + +main() { + echo + info "MeshMC Bootstrap" + echo "─────────────────────────────────────────────" + echo + + init_submodules + echo + + detect_distro + echo + + check_dependencies + + install_missing + echo + + setup_lefthook + echo + + echo "─────────────────────────────────────────────" + ok "Bootstrap successful! You're all set." + echo +} + +cd "$(dirname "$(readlink -f "$0")")" + +main "$@" |
