#!/bin/bash set -e GITEA_IMAGE="git.vm-net.in.rs/dasko/ntech" GITHUB_IMAGE="ghcr.io/dalibor31/ntech" VER_FAJL="VERSION" clear echo "╔══════════════════════════════════════╗" echo "║ NTech — Build alat ║" echo "╚══════════════════════════════════════╝" echo "" # 1. Verzija VERZIJA_DEFAULT=$(cat "$VER_FAJL" 2>/dev/null || echo "0.0.0") read -p "1) Verzija [${VERZIJA_DEFAULT}]: " VERZIJA VERZIJA="${VERZIJA:-$VERZIJA_DEFAULT}" if [ "$VERZIJA" != "$VERZIJA_DEFAULT" ]; then echo "$VERZIJA" > "$VER_FAJL" echo " → VERSION ažuriran na: $VERZIJA" # Git tag + GitHub release TAG="v${VERZIJA}" if git rev-parse "$TAG" >/dev/null 2>&1; then echo " ⚠️ Tag $TAG već postoji — preskačem" else read -p " Napraviti git tag $TAG + GitHub release? [D/n]: " TAG_IZBOR TAG_IZBOR="${TAG_IZBOR:-d}" if [[ "$TAG_IZBOR" =~ ^[dDyY] ]]; then git tag -a "$TAG" -m "Release $TAG" git push origin "$TAG" echo " → Tag $TAG push-ovan" GITEA_REPO="dasko/ntech" if command -v gh &>/dev/null && gh auth status &>/dev/null 2>&1; then gh release create "$TAG" --generate-notes echo " → GitHub release napravljen sa changelog-om" else echo " ⚠️ GitHub CLI (gh) nije dostupan — GitHub release nije napravljen" fi if command -v tea &>/dev/null && tea login status 2>/dev/null | grep -q "Logged in"; then tea release create --repo "$GITEA_REPO" --tag "$TAG" --title "$TAG" --note "Release $TAG" --draft echo " → Gitea release draft napravljen (proveri u Web UI)" else echo " ⚠️ Gitea CLI (tea) nije dostupan/ulogovan — Gitea release nije napravljen" fi fi fi fi echo "" # 2. Okruženje echo "2) Okruženje:" echo " 1) Production (podrazumevano)" echo " 2) Development" read -p " Izbor [1/2]: " OKR_IZBOR OKR_IZBOR="${OKR_IZBOR:-1}" echo "" # 3. Platforma echo "3) Platforma:" echo " 1) Linux (podrazumevano)" echo " 2) Windows" echo " 3) Obe" read -p " Izbor [1/2/3]: " PLATFORMA_IZBOR PLATFORMA_IZBOR="${PLATFORMA_IZBOR:-1}" echo "" # 4. UPX read -p "4) Kompresovati UPX-om? [d/N]: " UPX_IZBOR UPX_IZBOR="${UPX_IZBOR:-n}" echo "" # 5. Build read -p "5) Pokrenuti build? [D/n]: " BUILD_IZBOR BUILD_IZBOR="${BUILD_IZBOR:-d}" echo "" # 6. Docker push read -p "6) Push Docker image (Gitea + GitHub)? [d/N]: " DOCKER_IZBOR DOCKER_IZBOR="${DOCKER_IZBOR:-n}" echo "" # 7. Fisk Docker push read -p "7) Push Fisk mock image (ntech-fisk)? [d/N]: " FISK_IZBOR FISK_IZBOR="${FISK_IZBOR:-n}" echo "" # ── Izračunaj vrednosti ────────────────────────── if [ "$OKR_IZBOR" = "2" ]; then OKRUZENJE="development" VERZIJA_BUILD="dev-${VERZIJA}" LDFLAGS="-X main.Verzija=dev-${VERZIJA}" TRIMPATH="" else OKRUZENJE="production" VERZIJA_BUILD="${VERZIJA}" LDFLAGS="-X main.Verzija=${VERZIJA} -s -w" TRIMPATH="-trimpath" fi case "$PLATFORMA_IZBOR" in 2) PLATFORMA_NAZIV="Windows" ;; 3) PLATFORMA_NAZIV="Linux + Windows" ;; *) PLATFORMA_NAZIV="Linux" ;; esac if [[ "$UPX_IZBOR" =~ ^[dDyY] ]]; then UPX_NAZIV="da"; else UPX_NAZIV="ne"; fi if [[ "$BUILD_IZBOR" =~ ^[dDyY] ]]; then BUILD_NAZIV="da"; else BUILD_NAZIV="ne"; fi if [[ "$DOCKER_IZBOR" =~ ^[dDyY] ]]; then DOCKER_NAZIV="da"; else DOCKER_NAZIV="ne"; fi if [[ "$FISK_IZBOR" =~ ^[dDyY] ]]; then FISK_NAZIV="da"; else FISK_NAZIV="ne"; fi # ── Sažetak ────────────────────────────────────── echo "──────────────────────────────────────────" echo " Verzija : ${VERZIJA_BUILD}" echo " Okruženje : ${OKRUZENJE}" echo " Platforma : ${PLATFORMA_NAZIV}" echo " UPX : ${UPX_NAZIV}" echo " Build : ${BUILD_NAZIV}" echo " Docker : ${DOCKER_NAZIV}" echo " Fisk mock : ${FISK_NAZIV}" echo "──────────────────────────────────────────" echo "" read -p "Pokrenuti? [D/n]: " POTVRDA POTVRDA="${POTVRDA:-d}" if [[ ! "$POTVRDA" =~ ^[dDyY] ]]; then echo "Otkazano." exit 0 fi echo "" # ── UPX: instaliraj ako treba ──────────────────── if [[ "$UPX_IZBOR" =~ ^[dDyY] ]] && [[ "$BUILD_IZBOR" =~ ^[dDyY] ]]; then if ! command -v upx &>/dev/null; then echo "→ UPX nije instaliran. Instaliram..." if command -v apt-get &>/dev/null; then sudo apt-get install -y upx elif command -v dnf &>/dev/null; then sudo dnf install -y upx elif command -v pacman &>/dev/null; then sudo pacman -S --noconfirm upx elif command -v brew &>/dev/null; then brew install upx else echo " UPOZORENJE: Ne mogu da instaliram UPX — nepoznat menadžer paketa. Kompresija preskočena." UPX_IZBOR="n" fi echo "" fi fi # ── Build funkcija ─────────────────────────────── build_za() { local GOOS_VAL="$1" local NAZIV="$2" echo "→ Build ${GOOS_VAL}/amd64: ${NAZIV}" CGO_ENABLED=0 GOOS="${GOOS_VAL}" GOARCH=amd64 go build \ -ldflags "${LDFLAGS}" \ ${TRIMPATH} \ -o "${NAZIV}" \ ./cmd/ntech ls -lh "${NAZIV}" if [[ "$UPX_IZBOR" =~ ^[dDyY] ]] && command -v upx &>/dev/null; then echo " Kompresovanje sa UPX..." upx --best "${NAZIV}" ls -lh "${NAZIV}" fi } # ── 5. Build ───────────────────────────────────── if [[ "$BUILD_IZBOR" =~ ^[dDyY] ]]; then echo "=== Build ===" case "$PLATFORMA_IZBOR" in 2) build_za "windows" "ntech.exe" ;; 3) if [[ "$UPX_IZBOR" =~ ^[dDyY] ]]; then build_za "linux" "ntech" build_za "windows" "ntech.exe" else build_za "linux" "ntech" & PID_LINUX=$! build_za "windows" "ntech.exe" & PID_WIN=$! wait $PID_LINUX $PID_WIN fi ;; *) build_za "linux" "ntech" ;; esac echo "" fi # ── 6. Docker push ─────────────────────────────── if [[ "$DOCKER_IZBOR" =~ ^[dDyY] ]]; then echo "=== Docker ===" # Ako Linux binary nije izgrađen u ovom pozivu (build=ne ili platforma=Windows), izgradi ga LINUX_VEC_IZGRADJEN=0 if [[ "$BUILD_IZBOR" =~ ^[dDyY] ]] && [ "$PLATFORMA_IZBOR" != "2" ]; then LINUX_VEC_IZGRADJEN=1 fi if [ "$LINUX_VEC_IZGRADJEN" = "0" ]; then echo "→ Gradim Linux binary za Docker (sa UPX ako je uključen)..." # instaliraj UPX ako treba, a još nije instaliran if [[ "$UPX_IZBOR" =~ ^[dDyY] ]] && ! command -v upx &>/dev/null; then echo "→ UPX nije instaliran. Instaliram..." if command -v apt-get &>/dev/null; then sudo apt-get install -y upx elif command -v dnf &>/dev/null; then sudo dnf install -y upx elif command -v pacman &>/dev/null; then sudo pacman -S --noconfirm upx elif command -v brew &>/dev/null; then brew install upx else echo " UPOZORENJE: Ne mogu da instaliram UPX — kompresija preskočena." UPX_IZBOR="n" fi fi build_za "linux" "ntech" echo "" fi echo "→ Build Docker image..." docker build --build-arg="VERZIJA=${VERZIJA}" \ -t "${GITEA_IMAGE}:${VERZIJA}" \ -t "${GITEA_IMAGE}:latest" \ -t "${GITHUB_IMAGE}:${VERZIJA}" \ -t "${GITHUB_IMAGE}:latest" \ . echo "→ Push na Gitea..." docker push "${GITEA_IMAGE}:${VERZIJA}" docker push "${GITEA_IMAGE}:latest" echo "→ Push na GitHub..." docker push "${GITHUB_IMAGE}:${VERZIJA}" docker push "${GITHUB_IMAGE}:latest" echo "" fi # ── 7. Fisk Docker push ────────────────────────── if [[ "$FISK_IZBOR" =~ ^[dDyY] ]]; then GITEA_FISK="git.vm-net.in.rs/dasko/ntech-fisk" GITHUB_FISK="ghcr.io/dalibor31/ntech-fisk" echo "=== Fisk mock Docker ===" echo "→ Build Docker image..." docker build \ -t "${GITEA_FISK}:${VERZIJA}" \ -t "${GITEA_FISK}:latest" \ -t "${GITHUB_FISK}:${VERZIJA}" \ -t "${GITHUB_FISK}:latest" \ Fisk/ echo "→ Push na Gitea..." docker push "${GITEA_FISK}:${VERZIJA}" docker push "${GITEA_FISK}:latest" echo "→ Push na GitHub..." docker push "${GITHUB_FISK}:${VERZIJA}" docker push "${GITHUB_FISK}:latest" echo "" fi echo "==> Gotovo! NTech v${VERZIJA_BUILD}"