docs: add project documentation
All checks were successful
CI / Lint & Check (push) Successful in 11s
All checks were successful
CI / Lint & Check (push) Successful in 11s
This commit is contained in:
45
PROJECT.md
Normal file
45
PROJECT.md
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
# Project: harbor-ctl
|
||||||
|
|
||||||
|
## Purpose
|
||||||
|
|
||||||
|
Command-line interface for managing Harbor container registry. Provides quick access to common operations without requiring the web UI or manual API calls.
|
||||||
|
|
||||||
|
## Scope
|
||||||
|
|
||||||
|
### In Scope
|
||||||
|
|
||||||
|
- Project, repository, and artifact listing
|
||||||
|
- Vulnerability scanning and reporting
|
||||||
|
- SBOM retrieval and display
|
||||||
|
- Tag management
|
||||||
|
- Artifact deletion
|
||||||
|
- Project configuration (auto-scan, auto-sbom)
|
||||||
|
|
||||||
|
### Out of Scope
|
||||||
|
|
||||||
|
- User/group management (admin-only, rare)
|
||||||
|
- System configuration (one-time setup)
|
||||||
|
- Replication rule creation (complex, rare)
|
||||||
|
- Garbage collection triggers (scheduled)
|
||||||
|
|
||||||
|
## Success Criteria
|
||||||
|
|
||||||
|
- Modular package structure for maintainability
|
||||||
|
- No external dependencies (stdlib only)
|
||||||
|
- All common daily operations accessible via CLI
|
||||||
|
- Clear, scannable output for terminal use
|
||||||
|
- Exit codes suitable for scripting
|
||||||
|
- Credentials managed securely (no hardcoding)
|
||||||
|
|
||||||
|
## Constraints
|
||||||
|
|
||||||
|
- Python 3.10+ stdlib only
|
||||||
|
- Harbor API v2.0 compatibility
|
||||||
|
- Must work in minimal environments (no pip install required)
|
||||||
|
- Legacy single-file script maintained for compatibility
|
||||||
|
|
||||||
|
## Assumptions
|
||||||
|
|
||||||
|
- Harbor instance is accessible over HTTPS
|
||||||
|
- User has appropriate permissions for requested operations
|
||||||
|
- Credentials file follows established format when present
|
||||||
104
README.md
Normal file
104
README.md
Normal file
@@ -0,0 +1,104 @@
|
|||||||
|
# harbor-ctl
|
||||||
|
|
||||||
|
CLI utility for interacting with Harbor container registry API.
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
```sh
|
||||||
|
# Run directly from source
|
||||||
|
PYTHONPATH=src python3 -m harbor <command>
|
||||||
|
|
||||||
|
# Or install in development mode
|
||||||
|
pip install -e .
|
||||||
|
|
||||||
|
# Or use the legacy single-file script
|
||||||
|
./harbor-ctl.py <command>
|
||||||
|
```
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
```
|
||||||
|
python -m harbor <command> [options]
|
||||||
|
```
|
||||||
|
|
||||||
|
## Commands
|
||||||
|
|
||||||
|
| Command | Description |
|
||||||
|
|---------|-------------|
|
||||||
|
| `projects` | List all projects |
|
||||||
|
| `repos <project>` | List repositories in a project |
|
||||||
|
| `artifacts <project> <repo>` | List artifacts in a repository |
|
||||||
|
| `info <project> <repo>` | Show artifact details |
|
||||||
|
| `vulns <project> <repo>` | List vulnerabilities |
|
||||||
|
| `scan <project> <repo>` | Trigger vulnerability scan |
|
||||||
|
| `tags <project> <repo>` | List or manage tags |
|
||||||
|
| `sbom <project> <repo>` | Get SBOM for artifact |
|
||||||
|
| `delete <project> <repo>` | Delete artifact or tag |
|
||||||
|
| `config <project>` | View/modify project settings |
|
||||||
|
|
||||||
|
## Authentication
|
||||||
|
|
||||||
|
Credentials are loaded in priority order:
|
||||||
|
|
||||||
|
1. CLI arguments (`-u`, `-p`)
|
||||||
|
2. Secrets file (`/opt/ansible/secrets/harbor/credentials.json`)
|
||||||
|
3. Environment variables (`HARBOR_USER`, `HARBOR_PASS`)
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
```sh
|
||||||
|
# List projects
|
||||||
|
python -m harbor projects
|
||||||
|
|
||||||
|
# List repositories in 'library' project
|
||||||
|
python -m harbor repos library
|
||||||
|
|
||||||
|
# Show latest artifact details
|
||||||
|
python -m harbor info library myapp
|
||||||
|
|
||||||
|
# Show artifact by tag
|
||||||
|
python -m harbor info library myapp -d v1.0.0
|
||||||
|
|
||||||
|
# List high severity vulnerabilities
|
||||||
|
python -m harbor vulns library myapp -s high
|
||||||
|
|
||||||
|
# Filter vulnerabilities by package
|
||||||
|
python -m harbor vulns library myapp -P openssl
|
||||||
|
|
||||||
|
# Trigger scan and wait for completion
|
||||||
|
python -m harbor scan library myapp --wait
|
||||||
|
|
||||||
|
# Add tag to artifact
|
||||||
|
python -m harbor tags library myapp -a production
|
||||||
|
|
||||||
|
# Show SBOM
|
||||||
|
python -m harbor sbom library myapp
|
||||||
|
|
||||||
|
# Show project settings
|
||||||
|
python -m harbor config library --show
|
||||||
|
|
||||||
|
# Enable auto-scan
|
||||||
|
python -m harbor config library --auto-scan true
|
||||||
|
```
|
||||||
|
|
||||||
|
## Project Structure
|
||||||
|
|
||||||
|
```
|
||||||
|
src/
|
||||||
|
└── harbor/
|
||||||
|
├── __init__.py Package metadata
|
||||||
|
├── __main__.py Entry point (python -m harbor)
|
||||||
|
├── cli.py Argument parsing, main()
|
||||||
|
├── client.py API client functions
|
||||||
|
├── commands.py CLI command handlers
|
||||||
|
└── config.py Credentials loading
|
||||||
|
```
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
- Python 3.10+
|
||||||
|
- No external dependencies (stdlib only)
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
MIT
|
||||||
69
ROADMAP.md
Normal file
69
ROADMAP.md
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
# Roadmap
|
||||||
|
|
||||||
|
## Phase 1: Foundation (Complete)
|
||||||
|
|
||||||
|
Core functionality implemented:
|
||||||
|
|
||||||
|
- [x] Project listing
|
||||||
|
- [x] Repository listing
|
||||||
|
- [x] Artifact listing and details
|
||||||
|
- [x] Vulnerability display with filtering
|
||||||
|
- [x] Scan triggering with wait
|
||||||
|
- [x] Tag management
|
||||||
|
- [x] SBOM retrieval
|
||||||
|
- [x] Artifact/tag deletion
|
||||||
|
- [x] Project configuration
|
||||||
|
- [x] CI pipeline (syntax + lint)
|
||||||
|
- [x] Modular package structure (`src/harbor/`)
|
||||||
|
|
||||||
|
## Phase 2: Quality
|
||||||
|
|
||||||
|
Code quality and maintainability improvements:
|
||||||
|
|
||||||
|
- [x] Add type hints throughout
|
||||||
|
- [x] Modular code organization
|
||||||
|
- [ ] Add unit tests for core functions
|
||||||
|
- [ ] Add integration tests (mock API)
|
||||||
|
- [ ] Improve error messages
|
||||||
|
- [x] Add `--version` flag
|
||||||
|
- [ ] Add `--quiet` mode for scripting
|
||||||
|
|
||||||
|
## Phase 3: Output
|
||||||
|
|
||||||
|
Terminal output improvements:
|
||||||
|
|
||||||
|
- [ ] Unicode status indicators
|
||||||
|
- [ ] Color output (with NO_COLOR support)
|
||||||
|
- [ ] Table alignment fixes
|
||||||
|
- [ ] Progress indicators for long operations
|
||||||
|
- [ ] JSON output mode for all commands
|
||||||
|
|
||||||
|
## Phase 4: Features
|
||||||
|
|
||||||
|
Additional functionality:
|
||||||
|
|
||||||
|
- [ ] `labels` command - manage artifact labels
|
||||||
|
- [ ] `copy` command - copy artifact between repos
|
||||||
|
- [ ] `gc` command - show garbage collection status
|
||||||
|
- [ ] `replication` command - list replication rules/executions
|
||||||
|
- [ ] `quota` command - show project quota usage
|
||||||
|
- [ ] `audit` command - show audit logs
|
||||||
|
- [ ] Partial digest tab completion
|
||||||
|
|
||||||
|
## Phase 5: Distribution
|
||||||
|
|
||||||
|
Packaging and distribution:
|
||||||
|
|
||||||
|
- [ ] pyproject.toml with entry points
|
||||||
|
- [ ] Installable package (`pip install .`)
|
||||||
|
- [ ] Man page generation
|
||||||
|
- [ ] Shell completions (bash/zsh/fish)
|
||||||
|
|
||||||
|
## Dependencies
|
||||||
|
|
||||||
|
```
|
||||||
|
Phase 1 (done) ──> Phase 2 ─┬─> Phase 3
|
||||||
|
└─> Phase 4 ──> Phase 5
|
||||||
|
```
|
||||||
|
|
||||||
|
Phase 3 and 4 can proceed in parallel after Phase 2.
|
||||||
43
TASKLIST.md
Normal file
43
TASKLIST.md
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
# Task List
|
||||||
|
|
||||||
|
Active, prioritized work items.
|
||||||
|
|
||||||
|
## In Progress
|
||||||
|
|
||||||
|
(none)
|
||||||
|
|
||||||
|
## Next Up
|
||||||
|
|
||||||
|
| # | Task | Notes |
|
||||||
|
|---|------|-------|
|
||||||
|
| 1 | Unit tests for `client.resolve_digest()` | Core function, good test candidate |
|
||||||
|
| 2 | Unit tests for `client.build_url()` | Simple, deterministic |
|
||||||
|
| 3 | Mock API tests for `commands.cmd_projects()` | Start with simplest command |
|
||||||
|
| 4 | Unicode status symbols in output | Replace dashes with box-drawing |
|
||||||
|
| 5 | Add `--quiet` mode for scripting | Suppress headers, minimal output |
|
||||||
|
|
||||||
|
## Backlog
|
||||||
|
|
||||||
|
| Task | Phase |
|
||||||
|
|------|-------|
|
||||||
|
| ANSI color support (with NO_COLOR) | 3 |
|
||||||
|
| JSON output mode for all commands | 3 |
|
||||||
|
| `labels` command | 4 |
|
||||||
|
| `copy` command | 4 |
|
||||||
|
| `quota` command | 4 |
|
||||||
|
| pyproject.toml with entry points | 5 |
|
||||||
|
| Shell completions | 5 |
|
||||||
|
|
||||||
|
## Completed
|
||||||
|
|
||||||
|
- [x] Initial implementation
|
||||||
|
- [x] CI pipeline setup
|
||||||
|
- [x] Empty response body handling fix
|
||||||
|
- [x] README documentation
|
||||||
|
- [x] PROJECT.md, ROADMAP.md, TODO.md created
|
||||||
|
- [x] Type hints for `api_request()` and `load_credentials()`
|
||||||
|
- [x] `--version` flag (`-V`)
|
||||||
|
- [x] `build_url()` helper function
|
||||||
|
- [x] `--verify-ssl` flag for SSL certificate verification
|
||||||
|
- [x] Modular package structure (`src/harbor/`)
|
||||||
|
- [x] Documentation updated for new structure
|
||||||
31
TODO.md
Normal file
31
TODO.md
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
# TODO
|
||||||
|
|
||||||
|
Intake buffer for ideas, issues, and unrefined tasks.
|
||||||
|
|
||||||
|
## Ideas
|
||||||
|
|
||||||
|
- Support for `.harborrc` config file in home directory
|
||||||
|
- Cache project/repo lists for faster tab completion
|
||||||
|
- Webhook management commands
|
||||||
|
- Robot account management
|
||||||
|
- Retention policy display
|
||||||
|
- Health check endpoint monitoring
|
||||||
|
- Multi-registry support (switch between registries)
|
||||||
|
|
||||||
|
## Issues
|
||||||
|
|
||||||
|
- SSL verification disabled globally (should be configurable)
|
||||||
|
- No timeout configuration for API calls
|
||||||
|
- Delete confirmation reads stdin (breaks piping)
|
||||||
|
- Partial digest matching fetches all artifacts (slow for large repos)
|
||||||
|
|
||||||
|
## Questions
|
||||||
|
|
||||||
|
- Should `--json` output be available on all commands?
|
||||||
|
- Should we support OIDC authentication?
|
||||||
|
- Worth adding `--dry-run` for destructive operations?
|
||||||
|
|
||||||
|
## Debt
|
||||||
|
|
||||||
|
- Error handling inconsistent across commands
|
||||||
|
- Some magic numbers (column widths, timeouts)
|
||||||
Reference in New Issue
Block a user