Add CI pipeline#58
Open
bobwhitelock wants to merge 60 commits into
Open
Conversation
bobwhitelock
force-pushed
the
claude/add-ci-pipeline-gScOt
branch
4 times, most recently
from
January 25, 2026 19:49
0799a80 to
04356e4
Compare
- GitHub Actions workflow runs pre-commit on all PRs - pre-commit config with shellcheck hook (excludes Python/Perl scripts) - Taskfile for local `task lint` command
- Add `# shellcheck shell=bash` directive to zsh/lib/*.sh files - Convert backticks to $() syntax - Split local declarations to avoid masking return values - Quote variables where safe - Add suppressions for intentional patterns (zsh-specific, eval, etc.)
bobwhitelock
force-pushed
the
claude/add-ci-pipeline-gScOt
branch
from
January 25, 2026 20:00
ecfff5e to
51f0c82
Compare
- Add `# shellcheck shell=bash` to zsh/env.sh and zsh/packages.sh - Add suppressions for expected warnings in zsh/packages.sh - Exclude zsh/env.private.example.sh from shellcheck (local-only file)
SC1091 fires when shellcheck can't follow dynamic source paths that only exist at runtime, not in the CI environment.
- Add ruff for Python linting, formatting, and import sorting - Add mypy for Python type checking - Add yamllint for YAML validation (excluding tmuxinator templates) - Add pyproject.toml with tool configurations - Add .yamllint.yml with permissive rules for dotfiles - Fix mypy error in claude_alert.py (handle None from os.environ.get) - Remove unused variable in todoist-to-markdown - Make install script work without sudo by commenting out privileged ops - Add CI job to verify install script syntax - Set up Python 3.11 in CI workflow
- Add pre-commit-hooks for basic file hygiene: - trailing-whitespace - end-of-file-fixer - check-merge-conflict - check-added-large-files - check-executables-have-shebangs - Add typos for catching spelling mistakes - Add .typos.toml to ignore vim mapping false positive - Fix missing trailing newlines in various files
…onfig - Rename underwear.yml back to underware.yml (actual project name) - Add underware to typos ignore list - Enable yamllint for aider.conf.yml (fix long line) - Keep tmuxinator/ ignored since files use ERB templating
Move SC1091 (missing sourced file) suppression from global shellcheck args to inline comments on specific source statements.
- Revert underwear -> underware in tmuxinator configs (typos false positive) - Restore commented-out sudo pre-emptive access block in install script
- Add vint linter for vim files - Fix grea alias (was incorrectly changed to great by typos) - Add grea to typos ignore list - Add scriptencoding utf-8 to vim files with unicode characters
- Add scriptencoding utf-8 at top of vimrc - Change double quotes to single quotes where safe - Wrap autocmds in augroup lsp_servers - Create .vintrc.yaml to disable ProhibitEqualTildeOperator (operator case-sensitivity not always safe to change)
bobwhitelock
force-pushed
the
claude/add-ci-pipeline-gScOt
branch
from
January 26, 2026 17:25
5aa8ffb to
01684a0
Compare
bobwhitelock
force-pushed
the
claude/add-ci-pipeline-gScOt
branch
from
January 26, 2026 17:32
8c97645 to
b0be0ac
Compare
- Add zsh-check CI job that: - Checks syntax of all zsh/*.sh and zsh/lib/*.sh files - Tests that env.sh loads without producing any output - Add task check:zsh for local testing
- Combine install-script and zsh-check CI jobs into single integration job - Run install script then verify zsh loads lib files without errors/output - Update Taskfile with matching integration task
Create required directories and symlinks that the install script expects: DOTFILES at ~/src/bobwhitelock/dotfiles, dotfiles-private directories for dotbot links, and claude-plans directory.
Remove the full install script from CI since it has many dependencies that aren't needed for basic validation. The integration test now just verifies zsh lib files can be sourced without errors.
Add is_ci() check to detect CI environment (via CI=true env var). In CI mode: - Create required directories for dotbot (dotfiles-private, claude-plans) - Skip vim plugin install (no display, can hang) - Skip tmux plugin install (not needed for validation) This allows the full install script to run in CI while skipping steps that would fail or aren't useful for validation.
The kubernetes.sh file was running `kubectl config get-contexts` at source time, which produces errors when kubectl isn't installed. Now wrapped in a command check and stderr redirect. Also restored the CI workflow with install script and strict zsh test.
Re-enable all install script steps with proper safeguards: - Create placeholder directories for dotbot if they don't exist - Skip vim plugin install if not in a terminal - Skip tmux plugin install if tpm isn't installed - Source env.sh without pipeline to preserve exports
Remove graceful handling of missing dotbot/tpm - submodules should be initialized by `git submodule update --init --recursive`, so we should fail if they're not available rather than silently skip.
Add better error tracking to identify exactly which step in the install process is failing in CI.
Run the actual install script instead of manually duplicating steps. The install script already has guards for CI-incompatible operations: - Creates placeholder directories if needed - Skips vim plugin install when not in a terminal - Skips tpm install if tmux not available
This allows dotbot to succeed even when dotfiles-private repo is not available (e.g., in CI or fresh installs).
Create placeholder at $BASEDIR/../dotfiles-private so it works regardless of where dotfiles is checked out. Also create the actual aws/config file that dotbot expects, not just the directory.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Resolves #38.