SUBDIRS = src # =========================== # Configurações de Git # =========================== GIT_USER ?= "neo.webmaster.2@gmail.com" GIT_EMAIL ?= "neo.webmaster.2@gmail.com" GIT_REMOTE ?= "origin" GIT_BRANCH ?= "main" COMMIT_MSG ?= "Auto-commit via make git" GIT_VER := $(shell git describe --tags --always --abbrev=7 2>/dev/null || echo "0.1-dev") NEUROTRON_DIR ?= $(top_srcdir)/src/_nfdos/kernel/neurotron NEUROTRON_REMOTE ?= origin NEUROTRON_BRANCH ?= main # =========================== # Caminhos e artefactos # =========================== DIST_DIR ?= $(top_builddir)/dist BUILD_DIR ?= $(top_builddir)/build ISO_DIR ?= $(DIST_DIR)/iso/boot/grub ISO_FILE ?= $(DIST_DIR)/nfdos-$(GIT_VER).iso SRC_TAR ?= $(DIST_DIR)/nfdos-$(GIT_VER)-src.tar.gz KERNEL = $(top_builddir)/src/_nfdos/kernel/linux/arch/x86/boot/bzImage INITRAMFS = $(top_builddir)/src/_nfdos/initramfs.cpio.gz WIKI_SRC = $(top_srcdir)/src/docs/wiki WIKI_REPO = ssh://git@gitea.neoricalex.com:2222/neo/nfdos.wiki.git WIKI_TMP = $(top_srcdir)/src/tmp/nfdos-wiki-sync .PHONY: iso qemu tarball git release clean-local check-remote # =========================== # Criação da ISO # =========================== iso: $(ISO_FILE) $(ISO_FILE): @echo "[ISO] Criando estrutura de diretórios..." mkdir -p $(DIST_DIR)/iso/boot mkdir -p $(ISO_DIR) @echo "[ISO] Copiando Kernel e Initramfs..." cp $(KERNEL) $(DIST_DIR)/iso/boot/ cp $(INITRAMFS) $(DIST_DIR)/iso/boot/ @echo "[ISO] Gerando grub.cfg..." @printf "set timeout=3\nset default=0\n\nmenuentry 'NFDOS Linux' {\n\tlinux /boot/bzImage console=tty0 console=ttyS0 root=/dev/ram0 loglevel=8\n\tinitrd /boot/initramfs.cpio.gz\n}\n" > $(ISO_DIR)/grub.cfg @echo "[ISO] Gerando imagem ISO..." grub-mkrescue -o $(ISO_FILE) $(DIST_DIR)/iso --compress=xz -V NFDOS @echo "[✔] ISO criada em $(ISO_FILE)" # =========================== # Teste no QEMU # =========================== qemu: $(ISO_FILE) @echo "[QEMU] Iniciando NFDOS ISO..." qemu-system-x86_64 -cdrom $(ISO_FILE) -m 1024 -serial mon:stdio -no-reboot # =========================== # Empacotamento do código-fonte # =========================== tarball: $(SRC_TAR) $(SRC_TAR): @echo "[TAR] Empacotando código-fonte..." mkdir -p $(DIST_DIR) cd $(top_srcdir) && tar \ --exclude="$(notdir $(SRC_TAR))" \ --exclude="$(DIST_DIR)" \ --exclude="$(BUILD_DIR)" \ --exclude='*/__pycache__' \ --exclude='*/.venv' \ --exclude='*/venv' \ --exclude='*.pyc' \ --exclude='*.pyo' \ --exclude='*.o' \ --exclude='*.a' \ --exclude='*.so' \ --exclude='*.iso' \ --exclude='*.img' \ --exclude='*.cpio*' \ --exclude='*/linux' \ --exclude='*/busybox' \ --exclude='*/cpython' \ -czf $(SRC_TAR) . @echo "[✔] Tarball gerado em $(SRC_TAR)" # =========================== # Git (commit + push) # =========================== git: check-remote @echo "📦 Commit automático → Gitea (NFDOS)" @git config user.name $(GIT_USER) @git config user.email $(GIT_EMAIL) @git rev-parse --abbrev-ref HEAD >/dev/null 2>&1 || true @git add -A @git commit -m "$$(echo '$(COMMIT_MSG)')" || echo "Nenhuma modificação para commitar." @git push $(GIT_REMOTE) $(GIT_BRANCH) $(MAKE) sync-neurotron @$(MAKE) wiki # =========================== # Git Remote (HTTPS → SSH Auto-Fix) # =========================== check-remote: @REMOTE_URL=$$(git remote get-url $(GIT_REMOTE)); \ if echo $$REMOTE_URL | grep -q '^https://gitea\.neoricalex\.com'; then \ echo "⚠️ Repositório configurado com HTTPS:"; \ echo " $$REMOTE_URL"; \ echo "🔄 Convertendo para SSH (porta 2222)..."; \ SSH_URL=$$(echo $$REMOTE_URL | sed -E 's|https://gitea\.neoricalex\.com[:/]+|ssh://git@gitea.neoricalex.com:2222/|'); \ git remote set-url $(GIT_REMOTE) $$SSH_URL; \ echo "✅ Remote atualizado para:"; \ git remote -v; \ else \ echo "✅ Remote SSH já configurado:"; \ git remote -v | grep $(GIT_REMOTE); \ fi; \ echo "🔍 Testando conectividade SSH com Gitea..."; \ if ssh -T git@gitea.neoricalex.com -p 2222 2>&1 | grep -q "successfully authenticated"; then \ echo "✅ Conexão SSH funcional com Gitea."; \ else \ echo "❌ Falha na autenticação SSH com Gitea."; \ echo " Verifique a chave em ~/.ssh/id_ed25519.pub e nas SSH Keys do Gitea."; \ exit 1; \ fi # =========================== # Sincronizar Neurotron (SSH auto-fix + push) # =========================== sync-neurotron: @echo "" @echo "🧠 Sincronizando Neurotron…" @if [ ! -d "$(NEUROTRON_DIR)/.git" ]; then \ echo "⚠️ Neurotron não é um repositório git — ignorado."; \ exit 0; \ fi @cd $(NEUROTRON_DIR) && \ REMOTE_URL=$$(git remote get-url $(NEUROTRON_REMOTE)); \ echo "🔍 Remote atual do Neurotron: $$REMOTE_URL"; \ \ if echo $$REMOTE_URL | grep -q '^https://gitea\.neoricalex\.com'; then \ echo "⚠️ Neurotron ainda está em HTTPS. Convertendo para SSH:2222…"; \ SSH_URL=$$(echo $$REMOTE_URL | sed -E 's|https://gitea\.neoricalex\.com[:/]+|ssh://git@gitea.neoricalex.com:2222/|'); \ git remote set-url $(NEUROTRON_REMOTE) $$SSH_URL; \ echo "✅ Remote atualizado: $$SSH_URL"; \ fi; \ \ if echo $$REMOTE_URL | grep -q '^ssh://git@gitea\.neoricalex\.com/'; then \ echo "⚠️ SSH sem porta detectado. Ajustando porta 2222…"; \ SSH_URL=$$(echo $$REMOTE_URL | sed -E 's|ssh://git@gitea.neoricalex.com/|ssh://git@gitea.neoricalex.com:2222/|'); \ git remote set-url $(NEUROTRON_REMOTE) $$SSH_URL; \ echo "✅ Remote atualizado: $$SSH_URL"; \ fi @if ssh -T git@gitea.neoricalex.com -p 2222 2>&1 | grep -q "successfully authenticated"; then \ echo "🔐 SSH OK para Neurotron."; \ else \ echo "❌ Falha de autenticação SSH para Neurotron."; \ exit 1; \ fi @cd $(NEUROTRON_DIR) && \ git add -A && \ git commit -m "Auto-commit via make git (triggered by NFDOS)" || echo "Nenhuma modificação no Neurotron."; \ git push $(NEUROTRON_REMOTE) $(NEUROTRON_BRANCH); \ echo "✔ Neurotron sincronizado." # =========================== # Sync Wiki (Markdown → Gitea Wiki) # =========================== wiki: @echo "📚 Sincronizando Wiki…" @if [ ! -d "$(WIKI_SRC)" ]; then \ echo "⚠️ Nenhuma documentação encontrada em $(WIKI_SRC)"; \ exit 0; \ fi @if [ ! -d "$(WIKI_TMP)/.git" ]; then \ echo "🔄 Clonando wiki…"; \ rm -rf "$(WIKI_TMP)"; \ git clone "$(WIKI_REPO)" "$(WIKI_TMP)"; \ else \ echo "🔄 Atualizando wiki…"; \ cd "$(WIKI_TMP)" && git pull; \ fi @echo "📁 Atualizando páginas…" @rsync -av --delete --exclude='.git' "$(WIKI_SRC)/" "$(WIKI_TMP)/" @echo "📤 Enviando alterações para o repositório da wiki…" @cd "$(WIKI_TMP)" && \ git add -A && \ git commit -m "Auto-update wiki via make" || echo "Nenhuma modificação." && \ git push @echo "✅ Wiki sincronizada!" # =========================== # Release (ISO + Tarball) # =========================== release: iso tarball @# --- Proteção: evitar builds "dirty" --- @if ! git diff --quiet || ! git diff --cached --quiet; then \ echo "❌ Existem alterações não commitadas. Faça commit antes de gerar a release."; \ git status -s; \ exit 1; \ fi @echo "🚀 Publicando build em dist/releases (versão: $(GIT_VER))" @mkdir -p $(DIST_DIR)/releases @if ls $(DIST_DIR)/nfdos-*.iso >/dev/null 2>&1; then \ cp $(DIST_DIR)/nfdos-*.iso $(DIST_DIR)/releases/; \ else \ echo "⚠️ Nenhuma ISO encontrada. Execute 'make iso' primeiro."; \ fi @if ls $(DIST_DIR)/nfdos-*.tar.gz >/dev/null 2>&1; then \ cp $(DIST_DIR)/nfdos-*.tar.gz $(DIST_DIR)/releases/; \ else \ echo "⚠️ Nenhum tarball encontrado. Execute 'make tarball' primeiro."; \ fi @git add $(DIST_DIR)/releases/ @git commit -m "Build automático: release $(GIT_VER)" || echo "Nenhum ficheiro novo para commitar." @git push origin main # =========================== # Limpeza # =========================== clean-local: @echo "[CLEAN] Removendo diretórios temporários..." rm -rf $(BUILD_DIR) find $(DIST_DIR) -type f ! -path "$(DIST_DIR)/releases/*" -delete @echo "[CLEAN] Limpando build interno do Neurotron..." @if [ -d "$(top_srcdir)/src/_nfdos/kernel/neurotron" ]; then \ $(MAKE) -C $(top_srcdir)/src/_nfdos/kernel/neurotron clean || true; \ fi @echo "[✔] Limpeza concluída (releases preservadas)"