Skip to content

Contributing

Thank you for your interest in contributing to Sidekick Docker! This page mirrors the CONTRIBUTING.md in the repository.

Getting Started

Prerequisites

  • Node.js 22.12+
  • Docker running
  • VS Code 1.109+ (for extension development)

Development Setup

git clone https://github.com/cesarandreslopez/sidekick-docker.git
cd sidekick-docker
bash scripts/build-all.sh
npm test

Running Locally

  • TUI dashboard: node ./sidekick-docker-cli/dist/sidekick-docker.mjs (esbuild writes the file mode 0644, so the #! line is inert and invoking the path directly exits 126)
  • VS Code extension: Open sidekick-docker-vscode/ in VS Code and press F5

Available Commands

npm run build              # Full build (shared -> cli -> vscode)
npm run build:shared       # Shared library only
npm run build:cli          # CLI only
npm run build:vscode       # VS Code extension only
npm test                   # Run all tests
npm run test:packages      # Build and check SSH in the npm tarball and production VSIX
npm run lint               # Lint all packages (ESLint 10)
npm run lint:fix           # Lint + auto-fix

Code Style

  • TypeScript strict mode everywhere
  • Vitest for testing, co-located .test.ts files
  • ESLint 10 (flat config) for code quality — run npm run lint before submitting PRs
  • Conventional Commits for commit messages

Validation and Releases

Before handing off changes, run the complete gate from the repository root:

(cd sidekick-docker-shared && npx tsc --noEmit)
(cd sidekick-docker-cli && npx tsc --noEmit)
(cd sidekick-docker-vscode && npx tsc --noEmit)
npm run lint
npm test
node scripts/check-imports.mjs
npm run build

Install root lint dependencies with npm ci if needed. Packaging or SSH changes also require npm run test:packages, which tests the packed CLI and production VSIX against a temporary local SSH fixture. It needs tar, unzip, npm, and network access to fetch vsce; it does not use a real Docker daemon or SSH credentials. Build documentation with zensical build after installing Zensical.

bash scripts/bump-version.sh X.Y.Z updates all four manifests and lockfiles, including local shared-package references. Update the root, CLI, extension, and docs changelogs, validate, commit, and push main. Wait for CI and documentation deployment before pushing an annotated vX.Y.Z tag. The Release workflow publishes to npm and Open VSX and creates a GitHub release containing the VSIX; verify each destination after the workflow finishes. The shared package remains internal.

Making Changes

  1. Create a feature branch from main
  2. Make your changes with clear commits
  3. Ensure linting and tests pass (npm run lint && npm test)
  4. Update documentation if needed
  5. Submit a PR with a clear description

Areas for Contribution

  • Test coverage improvements
  • New container actions (attach, inspect)
  • Remote Docker host support
  • Documentation and developer experience
  • Bug fixes

Look for issues labeled good first issue for newcomers.

License

By contributing, you agree that your contributions will be licensed under the MIT License.