forked from containrrr/shoutrrr
-
-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathMakefile
More file actions
143 lines (103 loc) · 5.1 KB
/
Makefile
File metadata and controls
143 lines (103 loc) · 5.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
# Shoutrrr Makefile
# Comprehensive build, test, and deployment targets for the Shoutrrr project
# Variables
BINARY_NAME=shoutrrr
GO=go
DOCKER=docker
GORELEASER=goreleaser
GOLANGCI_LINT=golangci-lint
MOCKERY=mockery
# Default target
help: ## Show this help message
@echo "Shoutrrr Project Makefile"
@echo ""
@echo "Available targets:"
@awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {printf " %-15s %s\n", $$1, $$2}' $(MAKEFILE_LIST)
@echo ""
@echo "Parameterized test targets:"
@echo " test-unit Run unit tests for a specific service (usage: make test-unit <service>)"
@echo " test-integration Run integration tests for a specific service (usage: make test-integration <service>)"
@echo " test-e2e Run e2e tests for a specific service (usage: make test-e2e <service>)"
# =============================================================================
# Development Targets
# =============================================================================
.PHONY: build test test-unit test-integration test-e2e lint vet run setup install
build: ## Build the application binary
bash ./scripts/build.sh
mocks: ## Generate mocks
$(MOCKERY) --config build/mockery/mockery.yaml
test: ## Run unit tests only
$(GO) test -timeout 30s -v -coverprofile coverage.out -covermode atomic $(shell go list ./... | grep -v testing/...)
test-unit: ## Run unit tests for a specific service (usage: make test-unit <service>)
@SVC=`echo $(MAKECMDGOALS) | cut -d' ' -f2`; \
if [ -z "$$SVC" ]; then echo "Usage: make test-unit <service>"; exit 1; fi; \
SERVICE_DIR=`find ./pkg/services -name "$$SVC" -type d`; \
$(GO) test -timeout 30s -v $$SERVICE_DIR
test-integration: ## Run integration tests for a specific service (usage: make test-integration <service>)
@SVC=`echo $(MAKECMDGOALS) | cut -d' ' -f2`; \
if [ -z "$$SVC" ]; then echo "Usage: make test-integration <service>"; exit 1; fi; \
$(GO) test -timeout 30s -v ./testing/integration/$$SVC
test-e2e: ## Run e2e tests for a specific service (usage: make test-e2e <service>)
@SVC=`echo $(MAKECMDGOALS) | cut -d' ' -f2`; \
if [ -z "$$SVC" ]; then echo "Usage: make test-e2e <service>"; exit 1; fi; \
$(GO) test -timeout 30s -v ./testing/e2e/$$SVC
lint: ## Run linter and fix issues
$(GOLANGCI_LINT) run --fix --config build/golangci-lint/golangci.yaml ./...
vet: ## Run Go vet
$(GO) vet ./...
fmt: ## Run formatter
$(GOLANGCI_LINT) fmt --config build/golangci-lint/golangci.yaml ./...
run: ## Run the application
$(GO) run ./...
install: ## Install the application
$(GO) install ./...
# =============================================================================
# Dependency Management
# =============================================================================
.PHONY: mod-tidy mod-download
mod-tidy: ## Tidy and clean up Go modules
$(GO) mod tidy
mod-download: ## Download Go module dependencies
$(GO) mod download
# =============================================================================
# Documentation Targets
# =============================================================================
.PHONY: docs docs-setup docs-build docs-serve docs-activate docs-deactivate
docs: docs-setup docs-serve ## Build and serve documentation site for local development
docs-setup: ## Create virtual environment and install Mkdocs dependencies
python3 -m venv shoutrrr-docs && chmod +x shoutrrr-docs/bin/activate && . shoutrrr-docs/bin/activate && pip install -r build/mkdocs/docs-requirements.txt
docs-gen: ## Generate service configuration documentation
bash ./scripts/generate-service-config-docs.sh
docs-build: docs-gen ## Build Mkdocs documentation site
. shoutrrr-docs/bin/activate && mkdocs build --config-file build/mkdocs/mkdocs.yaml
docs-serve: ## Serve Mkdocs documentation site locally
. shoutrrr-docs/bin/activate && mkdocs serve --config-file build/mkdocs/mkdocs.yaml --livereload
docs-activate: ## Activate the virtual environment for documentation
@echo "Run '. shoutrrr-docs/bin/activate' to activate the virtual environment."
docs-deactivate: ## Show instructions to deactivate the virtual environment
@echo "Run 'deactivate' to exit the virtual environment."
# =============================================================================
# Release Targets
# =============================================================================
.PHONY: release
release: ## Create a new release using GoReleaser
$(GORELEASER) release --clean
# =============================================================================
# Docker Targets
# =============================================================================
.PHONY: docker-build docker-run docker-push
docker-build: ## Build Docker image
$(DOCKER) build -t $(BINARY_NAME) .
docker-run: ## Run Docker container
$(DOCKER) run -p 8080:8080 $(BINARY_NAME)
docker-push: ## Push Docker image (requires proper tagging)
$(DOCKER) push $(BINARY_NAME)
# =============================================================================
# Utility Targets
# =============================================================================
.PHONY: clean
clean: ## Clean build artifacts
rm -rf bin/
.PHONY: %
%:
@: