153 lines
		
	
	
	
		
			3.5 KiB
		
	
	
	
		
			Makefile
		
	
	
	
	
	
			
		
		
	
	
			153 lines
		
	
	
	
		
			3.5 KiB
		
	
	
	
		
			Makefile
		
	
	
	
	
	
| # Go parameters
 | |
| GOCMD = go
 | |
| GOBUILD = $(GOCMD) build
 | |
| GOCLEAN = $(GOCMD) clean
 | |
| GOTEST = $(GOCMD) test
 | |
| GOGET = $(GOCMD) get
 | |
| 
 | |
| # SQLite database filename
 | |
| DB_FILE = db.sqlite3
 | |
| 
 | |
| PROC_NAME = ttime_server
 | |
| 
 | |
| # Directory containing migration SQL scripts
 | |
| MIGRATIONS_DIR = internal/database/migrations
 | |
| SAMPLE_DATA_DIR = internal/database/sample_data
 | |
| 
 | |
| # Build target
 | |
| build:
 | |
| 	$(GOBUILD) -o bin/$(PROC_NAME) main.go
 | |
| 
 | |
| # Run target
 | |
| run: build
 | |
| 	./bin/$(PROC_NAME)
 | |
| 
 | |
| watch: build
 | |
| 	watchexec -c -w . -r make run
 | |
| 
 | |
| # Clean target
 | |
| clean:
 | |
| 	$(GOCLEAN)
 | |
| 	rm -rf bin
 | |
| 	rm -f db.sqlite3
 | |
| 	rm -f diagram*
 | |
| 	rm -f plantuml.jar
 | |
| 	rm -f erd.png
 | |
| 	rm -f config.toml
 | |
| 
 | |
| # Test target
 | |
| test: db.sqlite3
 | |
| 	$(GOTEST) ./... -count=1
 | |
| 
 | |
| # Integration test target
 | |
| .PHONY: itest
 | |
| itest:
 | |
| 	pgrep $(PROC_NAME) && echo "Server already running" && exit 1 || true
 | |
| 	make build
 | |
| 	./bin/$(PROC_NAME) >/dev/null 2>&1 &
 | |
| 	sleep 1 # Adjust if needed
 | |
| 	python ../testing.py
 | |
| 	pkill $(PROC_NAME)
 | |
| 
 | |
| # Get dependencies target
 | |
| deps:
 | |
| 	$(GOGET) -v ./...
 | |
| 
 | |
| # Update dependencies target
 | |
| update:
 | |
| 	$(GOGET) -u -v ./...
 | |
| 	$(GOCMD) mod tidy
 | |
| 
 | |
| # Migration target
 | |
| migrate:
 | |
| 	@echo "If this ever fails, run make clean and try again"
 | |
| 	@echo "Migrating database $(DB_FILE) using SQL scripts in $(MIGRATIONS_DIR)"
 | |
| 	@for file in $(wildcard $(MIGRATIONS_DIR)/*.sql); do \
 | |
| 		echo "Applying migration: $$file"; \
 | |
| 		sqlite3 $(DB_FILE) < $$file; \
 | |
| 	done
 | |
| 
 | |
| sampledata:
 | |
| 	@echo "If this ever fails, run make clean and try again"
 | |
| 	@echo "Migrating database $(DB_FILE) using SQL scripts in $(SAMPLE_DATA_DIR)"
 | |
| 	@for file in $(wildcard $(SAMPLE_DATA_DIR)/*.sql); do \
 | |
| 		echo "Applying migration: $$file"; \
 | |
| 		sqlite3 $(DB_FILE) < $$file; \
 | |
| 	done
 | |
| 
 | |
| # Target added primarily for CI/CD to ensure that the database is created before running tests
 | |
| db.sqlite3:
 | |
| 	make migrate
 | |
| 
 | |
| dbdump:
 | |
| 	sqlite3 $(DB_FILE) .dump > database.txt
 | |
| 
 | |
| backup:
 | |
| 	mkdir -p backups
 | |
| 	sqlite3 $(DB_FILE) .dump | gzip -9 > ./backups/BACKUP_$(DB_FILE)_$(shell date +"%Y-%m-%d_%H:%M:%S").sql.gz
 | |
| 	# Restore with:
 | |
| 	# gzip -cd BACKUP_FILE.sql.gz | sqlite3 $(DB_FILE)
 | |
| 
 | |
| # Format
 | |
| fmt:
 | |
| 	$(GOCMD) fmt ./...
 | |
| 
 | |
| # Lint
 | |
| lint:
 | |
| 	golangci-lint run ./...
 | |
| 	
 | |
| # Default target
 | |
| default: build	
 | |
| 
 | |
| # Generate swagger docs
 | |
| .PHONY: docs
 | |
| docs:
 | |
| 	swag init -outputTypes go
 | |
| 
 | |
| .PHONY: docfmt
 | |
| docfmt:
 | |
| 	swag fmt
 | |
| 
 | |
| # Generate ERD
 | |
| # Requires eralchemy2
 | |
| .PHONY: erd
 | |
| erd:
 | |
| 	eralchemy2 -i sqlite:///db.sqlite3 -o erd.png
 | |
| 
 | |
| install-swag:
 | |
| 	@echo "Installing swag"
 | |
| 	@go get -u github.com/swaggo/swag/cmd/swag
 | |
| 
 | |
| # Convenience target to install golangci-lint
 | |
| install-lint:
 | |
| 	@echo "Installing golangci-lint"
 | |
| 	@curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(shell go env GOPATH)/bin v1.42.1
 | |
| 
 | |
| # Fetches the latest plantuml.jar and checks its SHA256 hash
 | |
| plantuml.jar:
 | |
| 	curl -sSfL https://github.com/plantuml/plantuml/releases/download/v1.2024.3/plantuml.jar -o plantuml.jar \
 | |
| 	&& echo "519a4a7284c6a0357c369e4bb0caf72c4bfbbde851b8c6d6bbdb7af3c01fc82f plantuml.jar" | sha256sum -c
 | |
| 
 | |
| # Generate UML diagrams diagral.png & diagram.svg
 | |
| .PHONY: uml
 | |
| uml: plantuml.jar
 | |
| 	goplantuml -recursive . > diagram.puml
 | |
| 	java -jar plantuml.jar -tpng diagram.puml
 | |
| 	java -jar plantuml.jar -tsvg diagram.puml
 | |
| 
 | |
| # Convenience target to install just (requires sudo privileges)
 | |
| install-just:
 | |
| 	@echo "Installing just"
 | |
| 	@curl --proto '=https' --tlsv1.2 -sSf https://just.systems/install.sh | bash -s -- --to /usr/local/bin
 | |
| 
 | |
| .PHONY: types
 | |
| types:
 | |
| 	tygo generate
 | |
| 
 | |
| .PHONY: install-golds
 | |
| install-golds:
 | |
| 	go install go101.org/golds@latest
 | |
| 
 | |
| .PHONY: golds
 | |
| golds:
 | |
| 	golds -port 6060 -nouses -plainsrc -wdpkgs-listing=promoted ./...
 | 
