{"id":39664356,"url":"https://github.com/ideonate/devs","last_synced_at":"2026-01-18T09:27:08.457Z","repository":{"id":329266917,"uuid":"1007111762","full_name":"ideonate/devs","owner":"ideonate","description":null,"archived":false,"fork":false,"pushed_at":"2026-01-10T23:56:28.000Z","size":679,"stargazers_count":0,"open_issues_count":2,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-11T07:13:17.767Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ideonate.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-06-23T13:33:14.000Z","updated_at":"2026-01-10T23:49:29.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/ideonate/devs","commit_stats":null,"previous_names":["ideonate/devs"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ideonate/devs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ideonate%2Fdevs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ideonate%2Fdevs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ideonate%2Fdevs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ideonate%2Fdevs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ideonate","download_url":"https://codeload.github.com/ideonate/devs/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ideonate%2Fdevs/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28534159,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-18T00:39:45.795Z","status":"online","status_checked_at":"2026-01-18T02:00:07.578Z","response_time":98,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-01-18T09:27:08.386Z","updated_at":"2026-01-18T09:27:08.448Z","avatar_url":"https://github.com/ideonate.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# devs - DevContainer Management Toolkit\n\nA collection of tools for managing multiple named devcontainers for any project.\n\n## Repository Structure\n\nThis is a multi-package monorepo containing:\n\n### 📦 [CLI Tool](packages/cli/) - `devs`\n\nThe main command-line interface for managing devcontainers locally.\n\n```bash\n# Install the CLI tool\npip install devs\n\n# Start development environments\ndevs start frontend backend\n\n# Open in VS Code\ndevs vscode frontend backend\n```\n\n### 🔄 [Webhook Handler](packages/webhook/)\n\nGitHub webhook handler for automated devcontainer operations in response to @mentions in issues and PRs.\n\n### 🛠️ [Common Utilities](packages/common/)\n\nShared utilities between CLI and webhook packages including container management, workspace handling, and devcontainer templates.\n\n## Quick Start\n\n### Installation\n\n```bash\n# Install just the CLI tool\npip install devs\n\n# Or install from source (development)\ncd packages/cli\npip install -e .\n```\n\n### Basic Usage\n\n```bash\n# Start development environments\ndevs start sally bob charlie\n\n# Open containers in VS Code (separate windows)\ndevs vscode sally bob\n\n# Work in a specific container\ndevs shell sally\n\n# List active containers\ndevs list\n\n# Clean up when done\ndevs stop sally bob charlie\n```\n\n## Requirements\n\n- **Docker**: Container runtime\n- **VS Code**: With `code` command in PATH\n- **DevContainer CLI**: `npm install -g @devcontainers/cli`\n- **Project Requirements**: `.devcontainer/devcontainer.json` in target projects\n\n## Features\n\n- **Multiple Named Containers**: Start multiple devcontainers with custom names\n- **VS Code Integration**: Open containers in separate VS Code windows with clear titles\n- **Project Isolation**: Containers are prefixed with git repository names\n- **Workspace Isolation**: Each dev environment gets its own workspace copy\n- **Environment Variable Management**: Layered configuration system with user-specific overrides\n- **GitHub Webhook Integration**: Automated CI and Claude Code responses to @mentions\n- **Cross-Platform**: Works on any project with devcontainer configuration\n\n## Configuration\n\n### Environment Variables\n\ndevs supports a powerful layered configuration system for environment variables:\n\n```bash\n# Basic usage with repository DEVS.yml\ndevs start myenv\n\n# CLI overrides for testing\ndevs start myenv --env DEBUG=true --env API_URL=http://localhost:3000\n```\n\n**Configuration priority (highest to lowest):**\n1. CLI `--env` flags\n2. `~/.devs/envs/{org-repo}/DEVS.yml` (user-specific project overrides)\n3. `~/.devs/envs/default/DEVS.yml` (user defaults)\n4. `{project-root}/DEVS.yml` (repository configuration)\n\n**Example DEVS.yml:**\n```yaml\nenv_vars:\n  default:\n    NODE_ENV: development\n    API_URL: https://api.example.com\n  \n  myenv:  # Container-specific overrides\n    DEBUG: \"true\"\n    SPECIAL_FEATURE: \"enabled\"\n```\n\n**User-specific configuration:**\n```bash\n# Global defaults for all projects\nmkdir -p ~/.devs/envs/default\necho 'env_vars:\n  default:\n    GLOBAL_SETTING: \"user_preference\"' \u003e ~/.devs/envs/default/DEVS.yml\n\n# Project-specific overrides (replace \"/\" with \"-\" in repo name)\nmkdir -p ~/.devs/envs/myorg-myrepo\necho 'env_vars:\n  myenv:\n    SECRET_KEY: \"user_secret\"' \u003e ~/.devs/envs/myorg-myrepo/DEVS.yml\n```\n\n📖 **[See example-usage.md for detailed examples and scenarios](example-usage.md)**\n\n## Development\n\n### Repository Structure\n\n```\ndevs/\n├── packages/\n│   ├── cli/                    # Main CLI tool\n│   ├── webhook/               # GitHub webhook handler\n│   └── common/                # Shared utilities\n├── docs/                      # Documentation\n├── scripts/                   # Development scripts\n├── devs                       # Legacy zsh script (to be removed)\n└── README.md                  # This file\n```\n\n### Development Setup\n\n```bash\n# Install CLI package in development mode\ncd packages/cli\npip install -e \".[dev]\"\n\n# Run tests\npytest\n\n# Format code\nblack devs tests\n\n# Type checking\nmypy devs\n```\n\n### Publishing Releases\n\nUse the provided script to bump versions and publish all packages to PyPI:\n\n```bash\n# Patch version bump (e.g., 0.1.0 -\u003e 0.1.1)\npython scripts/bump-and-publish.py\n\n# Minor version bump (e.g., 0.1.0 -\u003e 0.2.0)\npython scripts/bump-and-publish.py minor\n\n# Major version bump (e.g., 0.1.0 -\u003e 1.0.0)\npython scripts/bump-and-publish.py major\n```\n\nThe script will:\n- Update version numbers in all three package `pyproject.toml` files\n- Build packages in dependency order (common → cli → webhook)\n- Upload to PyPI using `twine`\n\n**Prerequisites:**\n- `build` and `twine` packages installed\n- PyPI authentication configured (API token or username/password)\n\n## Architecture\n\n### Container Naming\n\nContainers follow the pattern: `dev-\u003corg\u003e-\u003crepo\u003e-\u003cdev-name\u003e`\n\nExample: `dev-ideonate-devs-sally`, `dev-ideonate-devs-bob`\n\n### VS Code Window Management\n\nEach container gets unique workspace paths to ensure VS Code treats them as separate sessions.\n\n### Workspace Isolation\n\nEach dev environment gets its own workspace copy with:\n\n- Git-tracked files (or all files for non-git projects)\n- Special directories (.git, .claude, .devcontainer extras)\n- Proper exclusion of build/cache directories\n\n## Legacy Shell Script\n\nThe original zsh script is still available at the repository root (`./devs`) but will be removed in a future version. New users should use the Python CLI tool.\n\n## License\n\nMIT License - see individual package directories for details.\n\n## Contributing\n\n1. Fork the repository\n2. Create a feature branch\n3. Make your changes in the appropriate package directory\n4. Add tests for new functionality\n5. Ensure all tests pass\n6. Submit a Pull Request\n\n## Support\n\n- [Issues](https://github.com/ideonate/devs/issues)\n- [CLI Documentation](packages/cli/README.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fideonate%2Fdevs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fideonate%2Fdevs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fideonate%2Fdevs/lists"}