GitLab Stack Validator
Validates GitLab stack projects before deployment, ensuring proper architecture patterns, directory structure, secrets management, .env configuration, and Docker best practices. Use when users ask to validate a stack, check stack configuration, verify stack architecture, audit stack setup, or ensure stack deployment readiness.
What this skill does
# GitLab Stack Validator This skill validates GitLab stack projects to ensure they follow proper architecture patterns and are ready for deployment. It focuses on **detection and reporting** of issues, working alongside companion skills (stack-creator, secrets-manager) for remediation. ## When to Use This Skill Activate this skill when the user requests: - Validate a GitLab stack project - Check stack configuration before deployment - Verify stack architecture and structure - Audit stack for best practices compliance - Ensure stack follows proper patterns - Pre-deployment validation checks - Stack health check or readiness verification ## Core Validation Principles This skill validates stacks that follow these architecture principles: 1. **Configuration Management**: All configuration through docker-compose.yml and ./config directory 2. **Secrets Management**: Secrets stored in ./secrets and referenced via Docker secrets 3. **Environment Variables**: .env file with matching .env.example template 4. **Minimal Custom Scripts**: docker-entrypoint.sh only when containers don't support native secrets 5. **Proper Ownership**: No root-owned files (all files owned by Docker user) 6. **Temporary Files**: _temporary directory for transient files that are cleaned up after use 7. **Docker Best Practices**: Leverage docker-validation skill for Docker-specific checks ## Validation Workflow When a user requests stack validation, follow this comprehensive workflow: ### Phase 1: Pre-flight Checks **Step 1: Verify Stack Project** 1. Check if current directory appears to be a stack project 2. Look for key indicators: - docker-compose.yml exists - Presence of ./config, ./secrets, or ./_temporary directories - .env file exists 3. If not a stack project, report findings and ask if user wants to initialize one **Step 2: Gather Context** 1. Ask user for validation scope (if needed): - Full validation or targeted checks? - Strict mode or permissive mode? - Output format preference (text report vs JSON)? 2. Check if .stack-validator.yml exists for custom rules 3. Note the working directory for reporting ### Phase 2: Directory Structure Validation **Step 1: Required Directories** 1. Check for required directories: - `./config` - Configuration files directory - `./secrets` - Secrets storage directory - `./_temporary` - Temporary files directory 2. For each missing directory, record: - Directory name - Purpose and why it's required - Impact on stack functionality **Step 2: Directory Permissions** 1. Check ./secrets has restricted permissions (700 or 600) 2. Verify other directories have appropriate permissions 3. Report any permission issues with security implications **Step 3: Directory Ownership** 1. Scan all project directories for ownership 2. Flag any root-owned directories: - Directory path - Current owner - Expected owner (current user or docker user) 3. Flag any files with unexpected ownership **Step 4: .gitignore Validation** 1. Check if .gitignore exists 2. Verify it excludes: - `./secrets` or `./secrets/*` - `./_temporary` or `./_temporary/*` - `.env` (should not be in git) 3. Report missing exclusions with security implications ### Phase 3: Environment Variables Validation **Step 1: .env File Validation** 1. Check if .env file exists 2. Parse .env file for: - Syntax errors - Duplicate variable definitions - Empty values that might be required 3. Record all environment variable names found **Step 2: .env.example Validation** 1. Check if .env.example exists 2. If missing, this is a **critical issue** - document why it's needed 3. Parse .env.example for variable names **Step 3: .env Synchronization Check** 1. Compare variables in .env with .env.example: - Variables in .env but NOT in .env.example - Variables in .env.example but NOT in .env 2. This is a **critical validation point** - they must match 3. Report any mismatches with specific variable names **Step 4: Environment Variable Security** 1. Scan .env for potential secrets: - Variables with names containing: password, secret, key, token, api - Base64-encoded looking values - Long random strings 2. If secrets detected in .env, flag as security issue 3. Suggest moving to ./secrets and Docker secrets instead ### Phase 4: Docker Configuration Validation **Step 1: Invoke docker-validation Skill** 1. Use the docker-validation skill to validate: - docker-compose.yml syntax and best practices - Dockerfile(s) if present - Multi-stage builds - Security configurations 2. Collect all findings from docker-validation 3. Integrate into overall stack validation report **Step 2: Stack-Specific Docker Checks** 1. Review docker-compose.yml for stack patterns: - Secrets are defined in top-level `secrets:` section - Services reference secrets via `secrets:` key (not environment variables) - Volume mounts follow patterns (./config, ./secrets, ./_temporary) - Networks are properly defined if multi-service - Service dependencies use `depends_on` correctly **Step 3: Version Check** 1. Ensure docker-compose.yml does NOT have version field at top 2. This follows modern Docker Compose specification 3. If version field present, flag for removal ### Phase 5: Secrets Management Validation **Step 1: Secrets Directory Check** 1. Verify ./secrets directory exists 2. Check permissions are restrictive (700) 3. Verify it's excluded from git **Step 2: Docker Secrets Validation** 1. Parse docker-compose.yml for secrets definitions 2. For each secret definition: - Verify the secret file exists in ./secrets - Check file permissions (600 or 400) - Verify not tracked by git 3. Report missing secret files **Step 3: Secret References Validation** 1. Check each service's `secrets:` section 2. Verify referenced secrets are defined in top-level secrets 3. Flag any undefined secret references **Step 4: Environment Variables vs Secrets** 1. Scan service environment variables for potential secrets 2. Look for patterns like: - *_PASSWORD - *_SECRET - *_KEY - *_TOKEN - API_* 3. If sensitive data in environment, suggest using secrets instead **Step 5: Secret Exposure Check** 1. Check for secrets in: - docker-compose.yml (hardcoded values) - .env file (should be in ./secrets instead) - Configuration files in ./config - Any shell scripts 2. Report any exposed secrets as **critical security issues** ### Phase 6: Configuration Files Validation **Step 1: Config Directory Structure** 1. List all files in ./config directory 2. Organize by service (if applicable) 3. Check for proper organization **Step 2: Config File Validation** 1. For common config file types, validate syntax: - YAML files (.yml, .yaml) - JSON files (.json) - INI files (.ini, .conf) - TOML files (.toml) 2. Report any syntax errors **Step 3: Config vs Secrets Separation** 1. Scan config files for potential secrets 2. Look for hardcoded passwords, tokens, keys 3. Flag any secrets that should be in ./secrets instead **Step 4: Config Ownership** 1. Check all config files for ownership 2. Flag any root-owned config files 3. Report expected ownership (current user) ### Phase 7: Script Validation **Step 1: docker-entrypoint.sh Detection** 1. Search for docker-entrypoint.sh files 2. For each found: - Document location - Check if truly necessary 3. Validate it's only used when container doesn't support native secrets **Step 2: Script Permissions** 1. Check docker-entrypoint.sh is executable (chmod +x) 2. Verify ownership (should not be root) 3. Report permission issues **Step 3: Script Content Validation** 1. Scan script for: - Hardcoded secrets (critical issue) - Proper secret handling from /run/secrets/ - Error handling - Syntax errors (if bash/sh) 2. Report any issues found **Step 4: Necessity Check** 1. Review if docker-entrypoint.sh is truly needed 2. Check if service supports native Docker secrets 3
Related in Cloud & DevOps
appbuilder-action-scaffolder
IncludedCreate, implement, deploy, and debug Adobe Runtime actions with consistent layout, validation, and error handling. Use this skill whenever the user needs to add actions to an App Builder project, understand action structure (params, response format, web/raw actions), configure actions in the manifest, use App Builder SDKs (State, Files, Events, database), deploy and invoke actions via CLI, debug action issues, or implement patterns such as webhook receivers, custom event providers, journaling consumers, large payload redirects, action sequence pipelines, and Asset Compute workers. Also trigger when users mention serverless functions in Adobe context, action logging, IMS authentication for actions, or cron-style scheduled actions.
orchestrating-datacloud
IncludedSalesforce Data Cloud product orchestrator for connect→prepare→harmonize→segment→act workflows. Use this skill when the user needs a multi-step Data Cloud pipeline, cross-phase troubleshooting, or data space and data kit management. TRIGGER when: user needs a multi-step Data Cloud pipeline, asks to set up or troubleshoot Data Cloud across phases, manages data spaces or data kits, or wants a cross-phase sf data360 workflow. DO NOT TRIGGER when: work is isolated to a single phase (use the matching phase-specific skill), the task is STDM/session tracing/parquet telemetry (use observing-agentforce), standard CRM SOQL (use querying-soql), or Apex implementation (use generating-apex).
github-project-automation
IncludedAutomate GitHub repository setup with CI/CD workflows, issue templates, Dependabot, and CodeQL security scanning. Includes 12 production-tested workflows and prevents 18 errors: YAML syntax, action pinning, and configuration. Use when: setting up GitHub Actions CI/CD, creating issue/PR templates, enabling Dependabot or CodeQL scanning, deploying to Cloudflare Workers, implementing matrix testing, or troubleshooting YAML indentation, action version pinning, secrets syntax, runner versions, or CodeQL configuration. Keywords: github actions, github workflow, ci/cd, issue templates, pull request templates, dependabot, codeql, security scanning, yaml syntax, github automation, repository setup, workflow templates, github actions matrix, secrets management, branch protection, codeowners, github projects, continuous integration, continuous deployment, workflow syntax error, action version pinning, runner version, github context, yaml indentation error
sf-datacloud
IncludedSalesforce Data Cloud product orchestrator for connect→prepare→harmonize→segment→act workflows. TRIGGER when: user needs a multi-step Data Cloud pipeline, asks to set up or troubleshoot Data Cloud across phases, manages data spaces or data kits, or wants a cross-phase `sf data360` workflow. DO NOT TRIGGER when: work is isolated to a single phase (use the matching sf-datacloud-* skill), the task is STDM/session tracing/parquet telemetry (use sf-ai-agentforce-observability), standard CRM SOQL (use sf-soql), or Apex implementation (use sf-apex).
fabric-cli
IncludedUse this skill for Fabric.so CLI workflows with the `fabric` terminal command: diagnose/install/login, search or browse a Fabric library, save notes/links/files, create folders, ask the Fabric AI assistant, manage tasks/workspaces, generate shell completion, check subscription usage, produce JSON output, and use Fabric as persistent agent memory. Do not use for Microsoft Fabric/Azure/Power BI `fab`, Daniel Miessler's Fabric framework, Python Fabric SSH, Fabric.js, or textile/fashion fabric.
lark
IncludedLark/Feishu CLI skills: lark-cli operations for docs, markdown, sheets, base, calendar, im, mail, task, okr, drive, wiki, slides, whiteboard, apps, approval, attendance, contact, vc, minutes, event. Use when the user needs to operate Lark/Feishu resources via lark-cli, send messages, manage documents, spreadsheets, calendars, tasks, OKRs, deploy web pages, or any Feishu/Lark workspace operations.