165 lines
3.8 KiB
Makefile
165 lines
3.8 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
|
|
rm -f database.txt
|
|
|
|
# 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/testing.py || pkill $(PROC_NAME)
|
|
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
|
|
|
|
api: ./docs/swagger.json
|
|
rm ../frontend/src/API/GenApi.ts
|
|
npx swagger-typescript-api \
|
|
--api-class-name GenApi \
|
|
--path ./docs/swagger.json \
|
|
--output ../frontend/src/API \
|
|
--name GenApi.ts \
|
|
|
|
./docs/swagger.json:
|
|
swag init -outputTypes json
|
|
|
|
.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 ./...
|