Oppgave 4: Automatisering med make og scripts
📋 Mål
I denne oppgaven skal du:
- Lage en
Makefilefor vanlige meta-repo operasjoner - Bruke
.PHONYog help-target - Automatisere git-operasjoner på tvers av repos
- Lage nyttige shortcuts for teamet
🛠 Steg-for-steg
Steg 1: Lag din første Makefile
Gå til rot-mappen til ditt meta-repo og opprett en Makefile:
# Gå til meta-repo mappen (todo-meta eller hva den heter)
cd todo-meta
# Lag en Makefile
touch Makefile
Åpne Makefile i din editor og legg til:
help:
@echo "Tilgjengelige kommandoer:"
@echo " help - Vis denne hjelpeteksten"
@echo " status - Git status på alle repos"
@echo " pull - Git pull på alle repos"
status:
@echo "🔍 Sjekker git status..."
meta git status
pull:
@echo "⬇️ Oppdaterer alle repos..."
meta exec "git pull"
Test det:
make
make status
Steg 2: Legg til .PHONY
Legg til .PHONY i filen:
.PHONY: help status pull
help:
@echo "Tilgjengelige kommandoer:"
@echo " help - Vis denne hjelpeteksten"
@echo " status - Git status på alle repos"
@echo " pull - Git pull på alle repos"
status:
@echo "🔍 Sjekker git status..."
meta git status
pull:
@echo "⬇️ Oppdaterer alle repos..."
meta exec "git pull"
Steg 3: Smart .PHONY automatisering
Erstatt den manuelle .PHONY-listen med denne smarte løsningen:
.PHONY: $(shell sed -n -e '/^$$/ { n ; /^[^ .\#][^ ]*:/ { s/:.*$$// ; p ; } ; }' $(MAKEFILE_LIST))
Steg 4: Automatisk help med dokumentasjon
Oppgrader til et help-system som bruker ## kommentarer ved å bytte ut med linjene i Makefile:
help: ## Vis denne hjelpeteksten
@grep -hE '^\S+:.*##' $(MAKEFILE_LIST) | sed -e 's/:.*##\s*/ : /' | \
while IFS=' : ' read -r cmd desc; do \
printf "\033[36m%-20s\033[0m %s\n" "$$cmd" "$$desc"; \
done
status: ## Git status på alle repos
@echo "🔍 Sjekker git status..."
meta git status
pull: ## Git pull på alle repos med rebase
@echo "⬇️ Oppdaterer alle repos..."
meta exec "git pull --rebase --autostash" --parallel
Test det nye help-systemet:
make help
Legg merket til at dersom du tar bort en # på en linje, så forsvinner den fra helpen:
help: # Vis denne hjelpeteksten
Prøv make help igjen for å se at “help” ikke lenger vises.
Steg 5: Legg til meta-repo kommandoer
Legg til dette på slutten av Makefile med de viktigste meta-repo operasjonene:
root_dir := $(dir $(abspath $(lastword $(MAKEFILE_LIST))))
meta_project := $(notdir $(patsubst %/,%,$(root_dir)))
build: ## Build all sub-projects with make build
@meta exec "make build" --exclude "$(meta_project)"
test: ## Test all sub-projects with make test
@meta exec "make test" --exclude "$(meta_project)"
list-local-commits: ## Shows local, unpushed, commits
@meta exec "git log --oneline origin/HEAD..HEAD | cat"
Steg 6: Test meta-repo kommandoene
Prøv ut de forskjellige kommandoene:
make help
make pull
make list-local-commits
Denne kan nok hende at ikke virker hos deg - krever at du har det som trengs for å bygge Java og Node.js prosjektene.
make build
make test
Steg 7: Commit endringene
Commit den nye Makefile til meta-repoet:
git add Makefile
git commit -m"Legg til Makefile for meta-repo automatisering"
🎯 Ekstra-oppgaver for de med tid
Legg til disse kommandoene i din Makefile:
- Kodestatistikk: Vis cloc-statistikk for alle repos
- Branch info: Vis hvilken branch hvert repo er på
- Clean: Rydd opp git working directories 4Health check: Sjekk at alle services kan starte
Løsningsforslag
stats: ## Vis kodestatistikk med cloc
@echo "📊 Genererer kodestatistikk..."
meta exec "cloc . --vcs=git --quiet" --exclude "$(meta_project)"
branch-info: ## Vis hvilken branch hvert repo er på
@echo "🌳 Viser branch-informasjon..."
meta exec "echo \"\$$(basename \$$(pwd)): \$$(git branch --show-current)\"" --exclude "$(meta_project)"
clean: ## Rydd opp git working directories
@echo "🧹 Rydder opp..."
meta exec "git clean -fd" --exclude "$(meta_project)"
health: ## Kjør health check på alle services
@echo "💚 Kjører health check..."
meta exec "if [ -f docker-compose.yml ]; then docker-compose config -q && echo 'Docker compose OK'; fi" --exclude "$(meta_project)"
💡 Tips
- Bruk
@echofor beskrivende meldinger --parallelgjør kommandoer raskere- Bruk
--exclude "$(meta_project)"for å unngå meta-repoet selv - Test kommandoer først med
meta execfør du legger dem i Makefile $(MAKE)er bedre ennmakei Makefiles
| ← Tilbake til oversikt | → Neste oppgave: Git-historikk analyse |