update project and selectors
This commit is contained in:
@@ -0,0 +1,204 @@
|
||||
GO ?= go
|
||||
GOFMT ?= gofmt "-s"
|
||||
GO_VERSION=$(shell $(GO) version | cut -c 14- | cut -d' ' -f1 | cut -d'.' -f2)
|
||||
PACKAGES ?= $(shell $(GO) list ./...)
|
||||
VETPACKAGES ?= $(shell $(GO) list ./...)
|
||||
GOFILES := $(shell find . -name "*.go")
|
||||
CORE_DIR := ./core
|
||||
UI_DIR := ./ui
|
||||
DOCS_DIR := ./docs
|
||||
LIBRARIES_DIR := ./../libraries
|
||||
PG_VERSION := 16.4-alpine3.20
|
||||
DB_NAME := rating
|
||||
MOD_NAME := rating-orama
|
||||
|
||||
.PHONY: sayhello
|
||||
# Print Hello World
|
||||
sayhello:
|
||||
@echo "Hello World"
|
||||
|
||||
.PHONY: dockerize
|
||||
# Creates a development database.
|
||||
dockerize:
|
||||
docker run --name $(DB_NAME)-db-dev -e POSTGRES_PASSWORD=secret -e POSTGRES_USER=developer -e POSTGRES_DB=$(DB_NAME) -p 5432:5432 -d postgres:$(PG_VERSION)
|
||||
|
||||
.PHONY: dockerize-test
|
||||
# Creates a test database.
|
||||
dockerize-test:
|
||||
docker run --name $(DB_NAME)-db-test -e POSTGRES_PASSWORD=secret -e POSTGRES_USER=developer -e POSTGRES_DB=$(DB_NAME) -p 5433:5432 -d postgres:$(PG_VERSION)
|
||||
|
||||
.PHONY: undockerize
|
||||
# Destroy a development database.
|
||||
undockerize:
|
||||
docker rm -f $(DB_NAME)-db-dev
|
||||
|
||||
.PHONY: undockerize-test
|
||||
# Destroy a test database.
|
||||
undockerize-test:
|
||||
docker rm -f $(DB_NAME)-db-test
|
||||
|
||||
.PHONY: restart-db
|
||||
# Restart a development database.
|
||||
restart-db:
|
||||
make undockerize
|
||||
make dockerize
|
||||
|
||||
.PHONY: restart-db-test
|
||||
# Restart a test database.
|
||||
restart-db-test:
|
||||
make undockerize-test
|
||||
make dockerize-test
|
||||
|
||||
.PHONY: migrateup
|
||||
# Migrate all schemas, triggers and data located in database/migrations.
|
||||
migrateup:
|
||||
migrate -path $(CORE_DIR)/cmd/database/migrations -database "postgresql://developer:secret@localhost:5432/$(DB_NAME)?sslmode=disable" -verbose up
|
||||
|
||||
.PHONY: migratedown
|
||||
# Migrate all schemas, triggers and data located in database/migrations.
|
||||
migratedown:
|
||||
migrate -path $(CORE_DIR)/cmd/database/migrations -database "postgresql://developer:secret@localhost:5432/$(DB_NAME)?sslmode=disable" -verbose down
|
||||
|
||||
.PHONY: pg-dump
|
||||
# Dump database to file.
|
||||
pg-dump:
|
||||
docker exec -e PGPASSWORD=secret $(DB_NAME)-db-dev pg_dump -U developer --column-inserts --data-only $(DB_NAME) > $(CORE_DIR)/cmd/database/data/data.sql
|
||||
sed -i '1iSET session_replication_role = '\''replica'\'';' $(CORE_DIR)/cmd/database/data/data.sql
|
||||
sed -i '$$aSET session_replication_role = '\''origin'\'';' $(CORE_DIR)/cmd/database/data/data.sql
|
||||
|
||||
.PHONY: pg-restore
|
||||
# Restore database from file.
|
||||
pg-restore:
|
||||
docker cp $(CORE_DIR)/cmd/database/data/data.sql $(DB_NAME)-db-dev:/data.sql
|
||||
docker exec -e PGPASSWORD=secret $(DB_NAME)-db-dev psql -U developer -d $(DB_NAME) -f data.sql
|
||||
|
||||
.PHONY: pg-docs
|
||||
# Generate docs from database.
|
||||
pg-docs:
|
||||
java -jar $(LIBRARIES_DIR)/schemaspy-6.2.4.jar -t pgsql -dp $(LIBRARIES_DIR)/postgresql-42.7.4.jar -db $(DB_NAME) -host localhost -port 5432 -u developer -p secret -o $(DOCS_DIR)/database -vizjs
|
||||
|
||||
.PHONY: sqlc
|
||||
# Generate or recreate SQLC queries.
|
||||
sqlc:
|
||||
cd $(CORE_DIR) && sqlc generate
|
||||
make gomock
|
||||
|
||||
|
||||
.PHONY: test
|
||||
# Test all files and generate coverage file.
|
||||
test:
|
||||
cd $(CORE_DIR) && $(GO) test ./... -v -covermode=count -coverprofile=./benchmark/coverage.out $(PACKAGES)
|
||||
|
||||
.PHONY: gomock
|
||||
# Generate mock files.
|
||||
gomock:
|
||||
cd $(CORE_DIR) && mockgen -package mock -destination internal/repository/mock/querier.go $(MOD_NAME)/internal/repository ExtendedQuerier
|
||||
|
||||
.PHONY: run
|
||||
# Run project.
|
||||
run:
|
||||
cd $(CORE_DIR) && $(GO) run ./cmd/.
|
||||
|
||||
.PHONY: bench
|
||||
# Run benchmarks.
|
||||
bench:
|
||||
cd $(CORE_DIR) && test -f benchmark/new_benchmark.txt && mv benchmark/new_benchmark.txt benchmark/old_benchmark.txt || true
|
||||
cd $(CORE_DIR) && $(GO) test ./... -bench=. -count=10 -benchmem > benchmark/new_benchmark.txt
|
||||
cd $(CORE_DIR) && benchstat benchmark/old_benchmark.txt benchmark/new_benchmark.txt > benchmark/benchstat.txt
|
||||
|
||||
.PHONY: recreate
|
||||
# Destroy development DB and generate ones.
|
||||
recreate:
|
||||
echo "y" | make migratedown
|
||||
make migrateup
|
||||
|
||||
.PHONY: tidy
|
||||
# Runs a go mod tidy
|
||||
tidy:
|
||||
cd $(CORE_DIR) && $(GO) mod tidy
|
||||
|
||||
.PHONY: build-linux
|
||||
# Build and generate linux executable.
|
||||
build-linux:
|
||||
cd $(CORE_DIR) && make tidy
|
||||
cd $(CORE_DIR) && make remove-debug
|
||||
cd $(CORE_DIR) && CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o ./tmp/arena ./cmd/.
|
||||
|
||||
.PHONY: pack-docker
|
||||
# Run docker build for pack binary and assets to Docker container.
|
||||
pack-docker:
|
||||
make test
|
||||
make build-linux
|
||||
docker build -t $(MOD_NAME):${version} -t $(MOD_NAME):latest .
|
||||
|
||||
.PHONY: remove-debug
|
||||
# Remove all debug entries for reduce size binary.
|
||||
remove-debug:
|
||||
cd $(CORE_DIR) && find . -name "*.go" -type f -exec sed -i '/slog\.Debug/d' {} +
|
||||
|
||||
.PHONY: fmt
|
||||
# Ensure consistent code formatting.
|
||||
fmt:
|
||||
cd $(CORE_DIR) && $(GOFMT) -w $(GOFILES)
|
||||
|
||||
.PHONY: fmt-check
|
||||
# format (check only).
|
||||
fmt-check:
|
||||
@diff=$$($(GOFMT) -d $(GOFILES)); \
|
||||
if [ -n "$$diff" ]; then \
|
||||
echo "Please run 'make fmt' and commit the result:"; \
|
||||
echo "$${diff}"; \
|
||||
exit 1; \
|
||||
fi;
|
||||
|
||||
.PHONY: vet
|
||||
# Examine packages and report suspicious constructs if any.
|
||||
vet:
|
||||
cd $(CORE_DIR) && $(GO) vet $(VETPACKAGES)
|
||||
|
||||
.PHONY: tools
|
||||
# Install tools (migrate and sqlc).
|
||||
tools:
|
||||
@if [ $(GO_VERSION) -gt 16 ]; then \
|
||||
cd $(CORE_DIR) && $(GO) install -tags 'postgres' github.com/golang-migrate/migrate/v4/cmd/migrate@latest; \
|
||||
cd $(CORE_DIR) && $(GO) install github.com/sqlc-dev/sqlc/cmd/sqlc@latest; \
|
||||
fi
|
||||
|
||||
.PHONY: env
|
||||
# Copy .env.example to .env if .env does not already exist
|
||||
env:
|
||||
cd $(CORE_DIR) && @if [ ! -f .env ]; then \
|
||||
cp .env.example .env; \
|
||||
echo ".env file created from .env.example"; \
|
||||
else \
|
||||
echo ".env file already exists"; \
|
||||
fi
|
||||
|
||||
|
||||
.PHONY: first-run
|
||||
# Runs for the first time
|
||||
first-run:
|
||||
make tools
|
||||
make env
|
||||
make recreate
|
||||
make run
|
||||
|
||||
.PHONY: help
|
||||
# Help.
|
||||
help:
|
||||
@echo ''
|
||||
@echo 'Usage:'
|
||||
@echo ' make [target]'
|
||||
@echo ''
|
||||
@echo 'Targets:'
|
||||
@awk '/^[a-zA-Z\-\0-9]+:/ { \
|
||||
helpMessage = match(lastLine, /^# (.*)/); \
|
||||
if (helpMessage) { \
|
||||
helpCommand = substr($$1, 0, index($$1, ":")-1); \
|
||||
helpMessage = substr(lastLine, RSTART + 2, RLENGTH); \
|
||||
printf " - \033[36m%-20s\033[0m %s\n", helpCommand, helpMessage; \
|
||||
} \
|
||||
} \
|
||||
{ lastLine = $$0 }' $(MAKEFILE_LIST)
|
||||
|
||||
.DEFAULT_GOAL := help
|
||||
Reference in New Issue
Block a user