Skip to main content
Glama
common.mk5.24 kB
# ============================================================================ # common.mk - Core Makefile Infrastructure # ============================================================================ # Provides: strict error handling, colors, ENV system, build metadata # Include in main Makefile with: -include .makefiles/common.mk # # Extracted from: claude-mpm production Makefile (tested with 97 targets) # Last updated: 2025-11-21 # ============================================================================ # ============================================================================ # Strict Error Handling # ============================================================================ # Enable bash strict mode for safer shell execution SHELL := bash .SHELLFLAGS := -eu -o pipefail -c MAKEFLAGS += --warn-undefined-variables MAKEFLAGS += --no-builtin-rules # ============================================================================ # Terminal Colors # ============================================================================ # ANSI color codes for terminal output formatting BLUE := \033[0;34m GREEN := \033[0;32m YELLOW := \033[0;33m RED := \033[0;31m NC := \033[0m # No Color # ============================================================================ # Environment Detection & Configuration # ============================================================================ # Environment-based configuration system # Supports: development (default), staging, production # Override with: make ENV=production <target> ENV ?= development export ENV # Detect user's shell for compatibility DETECTED_SHELL := $(shell echo $$SHELL | grep -o '[^/]*$$') # ENV-specific configurations # Customize these for your project's needs ifeq ($(ENV),production) # Production: strict, fast, minimal output PYTEST_ARGS := -n auto -v --tb=short --strict-markers BUILD_FLAGS := --no-isolation RUFF_ARGS := --quiet else ifeq ($(ENV),staging) # Staging: balanced settings for pre-production testing PYTEST_ARGS := -n auto -v --tb=line BUILD_FLAGS := RUFF_ARGS := else # Development (default): verbose, helpful errors PYTEST_ARGS := -n auto -v --tb=long BUILD_FLAGS := RUFF_ARGS := --verbose endif # ============================================================================ # Build Metadata (optional - customize for your project) # ============================================================================ # Version and build tracking files VERSION_FILE ?= VERSION BUILD_NUMBER_FILE ?= BUILD_NUMBER # ============================================================================ # Directory Variables # ============================================================================ # Standard Python project directories BUILD_DIR := build DIST_DIR := dist SRC_DIR := src TESTS_DIR := tests # ============================================================================ # Utility Functions # ============================================================================ # Check if command exists in PATH command-exists = $(shell command -v $(1) 2>/dev/null) # Get Python binary (prefer python3 over python) PYTHON := $(or $(call command-exists,python3),$(call command-exists,python)) # Get current version (if VERSION file exists) ifneq (,$(wildcard $(VERSION_FILE))) VERSION := $(shell cat $(VERSION_FILE)) endif # Get current build number (if BUILD_NUMBER file exists) ifneq (,$(wildcard $(BUILD_NUMBER_FILE))) BUILD_NUMBER := $(shell cat $(BUILD_NUMBER_FILE)) endif # ============================================================================ # Environment Information Target # ============================================================================ .PHONY: env-info env-info: ## Display current environment configuration @echo "$(BLUE)════════════════════════════════════════$(NC)" @echo "$(BLUE)Environment Configuration$(NC)" @echo "$(BLUE)════════════════════════════════════════$(NC)" @echo "Environment: $(ENV)" @echo "Python: $$($(PYTHON) --version 2>&1)" @echo "Shell: $(DETECTED_SHELL)" @echo "Version: $(or $(VERSION),unknown)" @echo "Build: $(or $(BUILD_NUMBER),unknown)" @echo "" @echo "$(YELLOW)Environment-Specific Settings:$(NC)" @echo "Pytest Args: $(PYTEST_ARGS)" @echo "Build Flags: $(BUILD_FLAGS)" @echo "Ruff Args: $(RUFF_ARGS)" @echo "" @echo "$(GREEN)To change environment:$(NC)" @echo " make ENV=production <target>" @echo " make ENV=staging <target>" # ============================================================================ # Usage Examples # ============================================================================ # Include in your main Makefile: # -include .makefiles/common.mk # # Override variables: # VERSION_FILE := VERSION.txt # SRC_DIR := lib # # Use colors in targets: # @echo "$(GREEN)✓ Success!$(NC)" # @echo "$(YELLOW)⚠ Warning$(NC)" # @echo "$(RED)✗ Error$(NC)" # # Use ENV system: # make ENV=production build # make ENV=staging test # ============================================================================

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/bobmatnyc/mcp-skills'

If you have feedback or need assistance with the MCP directory API, please join our Discord server