206 lines
6.1 KiB
Makefile
206 lines
6.1 KiB
Makefile
# BACKBEAT Contracts CI Integration Makefile
|
|
|
|
# Variables
|
|
SCHEMA_DIR = ../../schemas
|
|
EXAMPLES_DIR = ../examples
|
|
CLI_TOOL = ./cmd/backbeat-validate
|
|
BINARY_NAME = backbeat-validate
|
|
|
|
# Default target
|
|
.PHONY: all
|
|
all: build test
|
|
|
|
# Build the CLI validation tool
|
|
.PHONY: build
|
|
build:
|
|
@echo "Building BACKBEAT validation CLI tool..."
|
|
go build -o $(BINARY_NAME) $(CLI_TOOL)
|
|
|
|
# Run all tests
|
|
.PHONY: test
|
|
test: test-schemas test-examples test-integration
|
|
|
|
# Test schema files are valid
|
|
.PHONY: test-schemas
|
|
test-schemas:
|
|
@echo "Testing JSON schema files..."
|
|
@for schema in $(SCHEMA_DIR)/*.schema.json; do \
|
|
echo "Validating schema: $$schema"; \
|
|
python3 -c "import json; json.load(open('$$schema'))" || exit 1; \
|
|
done
|
|
|
|
# Test all example files
|
|
.PHONY: test-examples
|
|
test-examples: build
|
|
@echo "Testing example messages..."
|
|
./$(BINARY_NAME) --schemas $(SCHEMA_DIR) --dir $(EXAMPLES_DIR)
|
|
|
|
# Run Go integration tests
|
|
.PHONY: test-integration
|
|
test-integration:
|
|
@echo "Running Go integration tests..."
|
|
go test -v ./...
|
|
|
|
# Validate built-in examples
|
|
.PHONY: validate-examples
|
|
validate-examples: build
|
|
@echo "Validating built-in examples..."
|
|
./$(BINARY_NAME) --schemas $(SCHEMA_DIR) --examples
|
|
|
|
# Validate a specific directory (for CI use)
|
|
.PHONY: validate-dir
|
|
validate-dir: build
|
|
@if [ -z "$(DIR)" ]; then \
|
|
echo "Usage: make validate-dir DIR=/path/to/messages"; \
|
|
exit 1; \
|
|
fi
|
|
./$(BINARY_NAME) --schemas $(SCHEMA_DIR) --dir $(DIR) --exit-code
|
|
|
|
# Validate a specific file (for CI use)
|
|
.PHONY: validate-file
|
|
validate-file: build
|
|
@if [ -z "$(FILE)" ]; then \
|
|
echo "Usage: make validate-file FILE=/path/to/message.json"; \
|
|
exit 1; \
|
|
fi
|
|
./$(BINARY_NAME) --schemas $(SCHEMA_DIR) --file $(FILE) --exit-code
|
|
|
|
# Clean build artifacts
|
|
.PHONY: clean
|
|
clean:
|
|
rm -f $(BINARY_NAME)
|
|
|
|
# Install dependencies
|
|
.PHONY: deps
|
|
deps:
|
|
go mod tidy
|
|
go mod download
|
|
|
|
# Format Go code
|
|
.PHONY: fmt
|
|
fmt:
|
|
go fmt ./...
|
|
|
|
# Run static analysis
|
|
.PHONY: lint
|
|
lint:
|
|
go vet ./...
|
|
|
|
# Generate CI configuration examples
|
|
.PHONY: examples
|
|
examples: generate-github-actions generate-gitlab-ci generate-makefile-example
|
|
|
|
# Generate GitHub Actions workflow
|
|
.PHONY: generate-github-actions
|
|
generate-github-actions:
|
|
@echo "Generating GitHub Actions workflow..."
|
|
@mkdir -p ci-examples
|
|
@cat > ci-examples/github-actions.yml << 'EOF'\
|
|
name: BACKBEAT Contract Validation\
|
|
\
|
|
on:\
|
|
push:\
|
|
branches: [ main, develop ]\
|
|
pull_request:\
|
|
branches: [ main ]\
|
|
\
|
|
jobs:\
|
|
validate-backbeat-messages:\
|
|
runs-on: ubuntu-latest\
|
|
\
|
|
steps:\
|
|
- uses: actions/checkout@v4\
|
|
with:\
|
|
repository: 'chorus-services/backbeat'\
|
|
path: 'backbeat-contracts'\
|
|
\
|
|
- uses: actions/checkout@v4\
|
|
with:\
|
|
path: 'current-repo'\
|
|
\
|
|
- name: Set up Go\
|
|
uses: actions/setup-go@v4\
|
|
with:\
|
|
go-version: '1.22'\
|
|
\
|
|
- name: Build BACKBEAT validator\
|
|
run: |\
|
|
cd backbeat-contracts/contracts/tests/integration\
|
|
make build\
|
|
\
|
|
- name: Validate BACKBEAT messages\
|
|
run: |\
|
|
cd backbeat-contracts/contracts/tests/integration\
|
|
./backbeat-validate \\\
|
|
--schemas ../../schemas \\\
|
|
--dir ../../../current-repo/path/to/messages \\\
|
|
--exit-code\
|
|
EOF
|
|
|
|
# Generate GitLab CI configuration
|
|
.PHONY: generate-gitlab-ci
|
|
generate-gitlab-ci:
|
|
@echo "Generating GitLab CI configuration..."
|
|
@mkdir -p ci-examples
|
|
@cat > ci-examples/gitlab-ci.yml << 'EOF'\
|
|
validate-backbeat-contracts:\
|
|
stage: test\
|
|
image: golang:1.22\
|
|
\
|
|
before_script:\
|
|
- git clone https://github.com/chorus-services/backbeat.git /tmp/backbeat\
|
|
- cd /tmp/backbeat/contracts/tests/integration\
|
|
- make deps build\
|
|
\
|
|
script:\
|
|
- /tmp/backbeat/contracts/tests/integration/backbeat-validate \\\
|
|
--schemas /tmp/backbeat/contracts/schemas \\\
|
|
--dir $$CI_PROJECT_DIR/path/to/messages \\\
|
|
--exit-code\
|
|
\
|
|
only:\
|
|
- merge_requests\
|
|
- main\
|
|
- develop\
|
|
EOF
|
|
|
|
# Generate example Makefile for downstream projects
|
|
.PHONY: generate-makefile-example
|
|
generate-makefile-example:
|
|
@echo "Generating example Makefile for downstream projects..."
|
|
@mkdir -p ci-examples
|
|
@echo "# Example Makefile for BACKBEAT contract validation" > ci-examples/downstream-makefile
|
|
@echo "" >> ci-examples/downstream-makefile
|
|
@echo "BACKBEAT_REPO = https://github.com/chorus-services/backbeat.git" >> ci-examples/downstream-makefile
|
|
@echo "BACKBEAT_DIR = .backbeat-contracts" >> ci-examples/downstream-makefile
|
|
@echo "" >> ci-examples/downstream-makefile
|
|
@echo "validate-backbeat:" >> ci-examples/downstream-makefile
|
|
@echo " git clone \$$(BACKBEAT_REPO) \$$(BACKBEAT_DIR) 2>/dev/null || true" >> ci-examples/downstream-makefile
|
|
@echo " cd \$$(BACKBEAT_DIR)/contracts/tests/integration && make build" >> ci-examples/downstream-makefile
|
|
@echo " \$$(BACKBEAT_DIR)/contracts/tests/integration/backbeat-validate --schemas \$$(BACKBEAT_DIR)/contracts/schemas --dir messages --exit-code" >> ci-examples/downstream-makefile
|
|
|
|
# Help target
|
|
.PHONY: help
|
|
help:
|
|
@echo "BACKBEAT Contracts CI Integration Makefile"
|
|
@echo ""
|
|
@echo "Available targets:"
|
|
@echo " all - Build and test everything"
|
|
@echo " build - Build the CLI validation tool"
|
|
@echo " test - Run all tests"
|
|
@echo " test-schemas - Validate JSON schema files"
|
|
@echo " test-examples - Test example message files"
|
|
@echo " test-integration - Run Go integration tests"
|
|
@echo " validate-examples - Validate built-in examples"
|
|
@echo " validate-dir DIR=path - Validate messages in directory"
|
|
@echo " validate-file FILE=path - Validate single message file"
|
|
@echo " clean - Clean build artifacts"
|
|
@echo " deps - Install Go dependencies"
|
|
@echo " fmt - Format Go code"
|
|
@echo " lint - Run static analysis"
|
|
@echo " examples - Generate CI configuration examples"
|
|
@echo " help - Show this help message"
|
|
@echo ""
|
|
@echo "Examples:"
|
|
@echo " make validate-dir DIR=../../../examples"
|
|
@echo " make validate-file FILE=../../../examples/beatframe-valid.json"
|