-
Notifications
You must be signed in to change notification settings - Fork 0
Add comprehensive test automation pipeline with CI/CD #1
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,11 @@ | ||
| <claude-mem-context> | ||
| # Recent Activity | ||
|
|
||
| <!-- This section is auto-generated by claude-mem. Edit content outside the tags. --> | ||
|
|
||
| ### Jan 13, 2026 | ||
|
|
||
| | ID | Time | T | Title | Read | | ||
| |----|------|---|-------|------| | ||
| | #167 | 10:49 PM | 🟣 | Test Automation Orchestrator for Themer-Up | ~817 | | ||
| </claude-mem-context> | ||
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
| @@ -0,0 +1,206 @@ | ||||||
| name: CI Pipeline | ||||||
|
|
||||||
| on: | ||||||
| push: | ||||||
| branches: [main, develop] | ||||||
| pull_request: | ||||||
| branches: [main] | ||||||
|
|
||||||
| # Cancel in-progress runs for the same branch | ||||||
| concurrency: | ||||||
| group: ${{ github.workflow }}-${{ github.ref }} | ||||||
| cancel-in-progress: true | ||||||
|
|
||||||
| env: | ||||||
| BATS_VERSION: "1.10.0" | ||||||
|
|
||||||
| jobs: | ||||||
| # ============================================ | ||||||
| # Stage 1: Static Analysis (runs in parallel) | ||||||
| # ============================================ | ||||||
|
|
||||||
| shellcheck: | ||||||
| name: ShellCheck Linting | ||||||
| runs-on: ubuntu-latest | ||||||
| steps: | ||||||
| - uses: actions/checkout@v4 | ||||||
|
|
||||||
| - name: Run ShellCheck | ||||||
| uses: ludeeus/action-shellcheck@master | ||||||
|
||||||
| uses: ludeeus/action-shellcheck@master | |
| uses: ludeeus/action-shellcheck@2.0.0 |
Copilot
AI
Jan 14, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The BATS installation clones the repository without specifying a branch or tag. This could lead to inconsistent behavior if the default branch changes. Consider checking out a specific version tag to ensure reproducible builds: git clone --branch v1.10.0 --depth 1 https://github.com/bats-core/bats-core.git
| git clone https://github.com/bats-core/bats-core.git | |
| git clone --branch "v${BATS_VERSION}" --depth 1 https://github.com/bats-core/bats-core.git |
Copilot
AI
Jan 14, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The BATS installation clones the repository without specifying a branch or tag. This could lead to inconsistent behavior if the default branch changes. Consider checking out a specific version tag to ensure reproducible builds: git clone --branch v1.10.0 --depth 1 https://github.com/bats-core/bats-core.git
| Original file line number | Diff line number | Diff line change | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| @@ -0,0 +1,18 @@ | ||||||||||||
| # ShellCheck configuration for themer-up | ||||||||||||
| # https://www.shellcheck.net/wiki/ | ||||||||||||
|
|
||||||||||||
| # Set severity to warning (ignore style/info suggestions) | ||||||||||||
| # Style issues (SC2250, SC2292) are valid suggestions but not errors | ||||||||||||
| severity=warning | ||||||||||||
|
|
||||||||||||
| # Exclude warnings that don't apply to our use case | ||||||||||||
| # SC2312: Consider invoking this command separately (we handle exit codes) | ||||||||||||
| # SC2012: Use find instead of ls (our use case is controlled) | ||||||||||||
| # SC2129: Consider using grouped redirects (readability preference) | ||||||||||||
| exclude=SC2312,SC2012,SC2129 | ||||||||||||
|
Comment on lines
+10
to
+12
|
||||||||||||
| # SC2012: Use find instead of ls (our use case is controlled) | |
| # SC2129: Consider using grouped redirects (readability preference) | |
| exclude=SC2312,SC2012,SC2129 | |
| # SC2129: Consider using grouped redirects (readability preference) | |
| exclude=SC2312,SC2129 |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,126 @@ | ||
| # Themer-Up Makefile | ||
| # Orchestrates testing, linting, and development tasks | ||
|
|
||
| .PHONY: all test test-unit test-integration lint clean install-deps help | ||
|
|
||
| # Default target | ||
| all: lint test | ||
|
|
||
| # ───────────────────────────────────────────────────── | ||
| # Testing Targets | ||
| # ───────────────────────────────────────────────────── | ||
|
|
||
| ## Run all tests (linting + unit + integration) | ||
| test: lint test-unit test-integration | ||
|
|
||
| ## Run unit tests only (fast feedback) | ||
| test-unit: | ||
| @echo "Running unit tests..." | ||
| @bats tests/unit/*.bats --tap | ||
|
|
||
| ## Run integration tests only | ||
| test-integration: | ||
| @echo "Running integration tests..." | ||
| @bats tests/integration/*.bats --tap | ||
|
|
||
| ## Run tests in parallel (requires GNU parallel) | ||
| test-parallel: | ||
| @./scripts/test.sh --parallel | ||
|
|
||
| ## Run tests with verbose output | ||
| test-verbose: | ||
| @./scripts/test.sh --verbose | ||
|
|
||
| ## Run fast tests only (skip integration) | ||
| test-fast: | ||
| @./scripts/test.sh --fast | ||
|
|
||
| # ───────────────────────────────────────────────────── | ||
| # Linting Targets | ||
| # ───────────────────────────────────────────────────── | ||
|
|
||
| ## Run shellcheck on all scripts | ||
| lint: | ||
| @./scripts/lint.sh | ||
|
|
||
| ## Validate all JSON config files | ||
| lint-json: | ||
| @echo "Validating JSON files..." | ||
| @for f in themes/*/iterm2.json themes/*/vscode.json themes/*/theme.json; do \ | ||
| if [ -f "$$f" ]; then python3 -m json.tool "$$f" > /dev/null && echo " ✓ $$f"; fi; \ | ||
| done | ||
|
|
||
| ## Validate all YAML config files | ||
| lint-yaml: | ||
| @echo "Validating YAML files..." | ||
| @for f in themes/*/*.yaml; do \ | ||
| if [ -f "$$f" ]; then yamllint -d relaxed "$$f" && echo " ✓ $$f"; fi; \ | ||
| done | ||
|
|
||
| # ───────────────────────────────────────────────────── | ||
| # Development Targets | ||
| # ───────────────────────────────────────────────────── | ||
|
|
||
| ## Install development dependencies | ||
| install-deps: | ||
| @echo "Installing dependencies..." | ||
| @which bats > /dev/null || brew install bats-core | ||
| @which shellcheck > /dev/null || brew install shellcheck | ||
| @which yamllint > /dev/null || pip install yamllint | ||
| @echo "Done!" | ||
|
|
||
| ## Apply synthwave theme (default) | ||
| apply: | ||
| @./scripts/apply.sh synthwave | ||
|
|
||
| ## Create a backup of current configs | ||
| backup: | ||
| @./scripts/backup.sh | ||
|
|
||
| ## Restore from latest backup | ||
| restore: | ||
| @./scripts/restore.sh | ||
|
|
||
| ## Clean temporary test files | ||
| clean: | ||
| @echo "Cleaning temporary files..." | ||
| @rm -rf /tmp/themer-test-* | ||
| @rm -f /tmp/bats_output | ||
| @echo "Done!" | ||
|
|
||
| # ───────────────────────────────────────────────────── | ||
| # CI Simulation | ||
| # ───────────────────────────────────────────────────── | ||
|
|
||
| ## Simulate full CI pipeline locally | ||
| ci: lint lint-json test-unit test-integration | ||
| @echo "" | ||
| @echo "✅ CI simulation passed!" | ||
|
|
||
| # ───────────────────────────────────────────────────── | ||
| # Help | ||
| # ───────────────────────────────────────────────────── | ||
|
|
||
| ## Show this help message | ||
| help: | ||
| @echo "Themer-Up Development Commands" | ||
| @echo "══════════════════════════════" | ||
| @echo "" | ||
| @grep -E '^##' Makefile | sed 's/## / /' | ||
| @echo "" | ||
| @echo "Usage: make <target>" | ||
| @echo "" | ||
| @echo "Testing:" | ||
| @echo " make test - Run all tests" | ||
| @echo " make test-unit - Run unit tests only" | ||
| @echo " make test-fast - Skip integration tests" | ||
| @echo " make test-parallel - Run tests in parallel" | ||
| @echo "" | ||
| @echo "Linting:" | ||
| @echo " make lint - Run shellcheck" | ||
| @echo " make lint-json - Validate JSON files" | ||
| @echo "" | ||
| @echo "Development:" | ||
| @echo " make install-deps - Install dev dependencies" | ||
| @echo " make apply - Apply synthwave theme" | ||
| @echo " make ci - Simulate CI locally" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The date "Jan 13, 2026" is valid and not in the future. However, this appears to be an auto-generated file from the claude-mem tool. Consider whether these metadata files should be included in version control, or if they should be added to .gitignore instead.