Name | dooservice-cli JSON |
Version |
0.13.0
JSON |
| download |
home_page | None |
Summary | Professional CLI tool for managing Odoo instances with declarative configuration, automated backups, snapshots, and GitHub integration. |
upload_time | 2025-10-18 04:36:15 |
maintainer | None |
docs_url | None |
author | None |
requires_python | >=3.9 |
license | MIT License Copyright (c) 2025 API SERVICE S.A.C. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
keywords |
odoo
docker
cli
management
deployment
backup
snapshot
devops
automation
orchestration
containerization
enterprise
erp
github-integration
webhook
configuration-management
|
VCS |
 |
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
# DooService CLI
> Professional command-line tool for managing Odoo instances with Docker
DooService CLI provides a declarative, configuration-first approach to managing complex Odoo deployments. Define your entire infrastructure in YAML and manage everything from the command line.
## 🚀 Quick Start
```bash
# 1. Install uv (if not already installed)
curl -LsSf https://astral.sh/uv/install.sh | sh
# 2. Install DooService CLI
uv tool install dooservice-cli
# 3. Check system dependencies
dooservice doctor
# 4. Initialize project
dooservice init
# 5. Edit configuration
nano dooservice.yml
# 6. Create and start instance
dooservice create production
```
## ✨ Key Features
- 🐳 **Docker-native** - Full Docker & Docker Compose integration
- 📝 **Configuration-first** - Define everything in YAML
- 🐍 **Python dependencies** - Auto-install packages in containers
- 🌐 **Cloudflare tunnels** - Automatic domain and DNS management
- 📦 **Git repositories** - Auto-sync custom addons
- 💾 **Backup & snapshots** - Database backup and restore
- 🔄 **Smart workflows** - Deploy, rebuild, destroy with data preservation
- 🪟 **Cross-platform** - Works on Windows, Linux, and macOS
## 📦 Installation
### Using uv (Recommended)
[uv](https://docs.astral.sh/uv/) is a fast, modern Python package manager. Install it first:
```bash
# On macOS and Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# On Windows
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
```
Then install DooService CLI:
```bash
uv tool install dooservice-cli
```
### Alternative: Using pipx
```bash
pipx install dooservice-cli
```
### Alternative: Using pip
```bash
pip install --user dooservice-cli
```
### Development Installation
```bash
git clone https://github.com/apiservicesac/dooservice-cli-py.git
cd dooservice-cli-py
uv tool install --editable .
```
## 🎯 Commands Reference
### System Commands
```bash
# Initialize configuration structure
dooservice init [-p|--path DIR] [--minimal] [-f|--force]
# Check system health and dependencies
dooservice doctor
```
### Instance Lifecycle
```bash
# Create instance (NAME is required)
dooservice create NAME [-c|--config FILE]
# Start instance (NAME optional, interactive selection if omitted)
dooservice start [NAME] [-c|--config FILE]
# Stop instance (NAME optional, interactive selection if omitted)
dooservice stop [NAME] [-c|--config FILE]
# Delete instance (NAME optional, interactive selection if omitted)
dooservice delete [NAME] [-c|--config FILE] [--force] [--keep-data] [--keep-domain]
# Restart instance
dooservice restart [NAME] [-c|--config FILE]
# List all instances
dooservice list [-c|--config FILE]
# Show instance status
dooservice status [NAME] [-c|--config FILE]
# View logs
dooservice logs [NAME] [--service SERVICE] [--follow] [--tail N] [-c|--config FILE]
# Execute command in container
dooservice exec NAME COMMAND [--user USER] [--workdir DIR] [-c|--config FILE]
# Sync repositories and configuration
dooservice sync NAME [-c|--config FILE] [--no-restart]
# Update Odoo modules
dooservice update-modules NAME -d|--database DATABASE [-m|--modules MODULE]... [-a|--all] [-p|--http-port PORT] [-c|--config FILE]
```
### Quick Aliases
```bash
# Shortcuts for common commands
dooservice ls [-c|--config FILE] # Alias for 'list'
dooservice ps [-c|--config FILE] # Alias for 'list'
dooservice up [NAME] [-c|--config FILE] # Alias for 'start'
dooservice down [NAME] [-c|--config FILE] # Alias for 'stop'
dooservice rm [NAME] [-c|--config FILE] [...] # Alias for 'delete'
```
### Workflow Commands
```bash
# Deploy: create + start + domain setup
dooservice deploy [NAME] [-c|--config FILE]
# Rebuild: stop + delete (keep data/domain) + create + start + domain sync
dooservice rebuild [NAME] [-c|--config FILE]
# Destroy: stop + delete
dooservice destroy [NAME] [-c|--config FILE] [--force]
```
### Repository Management
```bash
# List repositories for an instance
dooservice repo list INSTANCE_NAME [--repo-name NAME] [-c|--config FILE]
# Show detailed status of a repository
dooservice repo status INSTANCE_NAME REPO_NAME [-c|--config FILE]
# Synchronize repositories
dooservice repo sync INSTANCE_NAME [--repo-name NAME] [-q|--quiet] [--test] [-c|--config FILE]
```
### Backup Management
```bash
# Create backup
dooservice backup create INSTANCE_NAME [-d|--database NAME] [--format zip|dump] [-o|--output DIR] [-c|--config FILE] [-v|--verbose]
# Test backup connection
dooservice backup test INSTANCE_NAME [-d|--database NAME] [-c|--config FILE]
# List available databases
dooservice backup databases INSTANCE_NAME [-c|--config FILE]
```
### Tunnel Management
```bash
# Initialize Cloudflare tunnel from configuration
dooservice tunnel init [-c|--config FILE] [-v|--verbose] [--force]
# Delete tunnel and associated DNS records
dooservice tunnel delete [-c|--config FILE] [-v|--verbose]
# Check tunnel status
dooservice tunnel status [-c|--config FILE]
# Show tunnel logs
dooservice tunnel logs [-n|--tail N] [-f|--follow] [-c|--config FILE]
# Restart tunnel container
dooservice tunnel restart [-c|--config FILE]
# Stop tunnel container
dooservice tunnel stop [-c|--config FILE]
```
### Domain Management
```bash
# Enable domain (create DNS records and tunnel config)
dooservice domain enable NAME [-c|--config FILE] [-v|--verbose]
# Disable domain (remove DNS and disconnect tunnel)
dooservice domain disable NAME [-c|--config FILE] [-v|--verbose]
# Sync domain with instance (connect to tunnel network)
dooservice domain sync NAME [-c|--config FILE] [-v|--verbose]
# List configured domains
dooservice domain list [-c|--config FILE]
# Check domain status
dooservice domain status NAME [-c|--config FILE]
# Test domain connectivity and response
dooservice domain test NAME [-c|--config FILE]
# Show logs for domain's associated instance
dooservice domain logs NAME [-n|--tail N] [-f|--follow] [-c|--config FILE]
```
### Configuration Management
```bash
# Validate configuration file
dooservice config validate FILE
# Load and display configuration
dooservice config load FILE [--no-validate]
# Create new configuration
dooservice config create FILE [--no-validate]
# Convert configuration format
dooservice config convert INPUT [--output FILE]
```
## ⚙️ Configuration Guide
### Basic Structure
```yaml
version: '1.0'
# Optional: Import other configuration files
imports:
- config/defaults.yml
- config/domains.yml
- config/repositories.yml
# Global defaults (optional)
defaults:
instance:
odoo_version: '19.0'
db_version: '17'
# Cloudflare integration (optional)
domains:
default_provider: 'cloudflare'
providers:
cloudflare:
api_token: 'YOUR_TOKEN'
account_id: 'YOUR_ACCOUNT_ID'
tunnels:
main-tunnel:
zone_id: 'YOUR_ZONE_ID'
domain: 'example.com'
base_domains:
app.example.com:
instance: 'production'
# Backup configuration (optional)
backup:
enabled: true
output_dir: 'odoo-data/backups'
format: 'zip'
# Snapshot configuration (optional)
snapshot:
enabled: true
default_storage_dir: 'odoo-data/snapshots'
retention:
days: 60
max_snapshots: 100
# Repository definitions (optional)
repositories:
custom-addons:
source_type: 'git'
type: 'github'
url: 'https://github.com/your-org/odoo-addons.git'
branch: 'main'
# Instance definitions (required)
instances:
production:
odoo_version: '19.0'
data_dir: 'odoo-data/${name}'
ports:
http: 8069
longpolling: 8072
repositories:
custom-addons: {}
python_dependencies:
- 'pandas>=1.5.0'
- 'requests>=2.28.0'
env_vars:
DB_HOST: 'db_${name}'
DB_USER: 'odoo'
DB_PASSWORD: 'secure_password'
ADMIN_PASSWORD: 'admin_password'
WORKERS: 4
deployment:
type: 'docker'
docker:
web:
image: 'odoo:${odoo_version}'
container_name: 'web_${name}'
restart_policy: 'unless-stopped'
db:
image: 'postgres:${db_version}'
container_name: 'db_${name}'
restart_policy: 'unless-stopped'
```
### Configuration Sections
#### 1. Global Defaults (`defaults`)
Define default values inherited by all instances:
```yaml
defaults:
instance:
# Versions
odoo_version: '19.0' # Odoo version
db_version: '17' # PostgreSQL version
# Directories
data_dir: 'odoo-data/${name}' # Data directory (relative path)
# Auto Backup
auto_backup:
enabled: false
db_name: '${name}_db'
# Paths (inside data_dir)
paths:
config: '${data_dir}/etc/odoo.conf'
addons: '${data_dir}/addons'
logs: '${data_dir}/logs'
filestore: '${data_dir}/filestore'
# Default ports
ports:
http: 8069
longpolling: 8072
expose: [] # Options: [], ['web'], ['db'], ['web', 'db']
# Default repositories
repositories: {}
# Environment variables
env_vars:
# Network
ODOO_HTTP_PORT: 8069
ODOO_LONGPOLLING_PORT: 8072
# Database
DB_HOST: 'db_${name}'
DB_PORT: 5432
DB_USER: 'odoo'
DB_PASSWORD: 'odoo'
ADMIN_PASSWORD: 'admin'
# Performance
WORKERS: 2
LIMIT_MEMORY_SOFT: 2147483648 # 2GB
LIMIT_MEMORY_HARD: 2684354560 # 2.5GB
LIMIT_REQUEST: 8192
LIMIT_TIME_CPU: 60
LIMIT_TIME_REAL: 120
MAX_CRON_THREADS: 2
# General
PROXY_MODE: true
LIST_DB: false
TIMEZONE: 'America/Lima'
# Python packages to auto-install
python_dependencies: []
# Snapshot settings
snapshot:
enabled: true
storage_dir: '${data_dir}/snapshots'
include_backup_by_default: true
retention:
days: 60
max_snapshots: 20
# Deployment configuration
deployment:
type: 'docker'
docker:
web:
image: 'odoo:${odoo_version}'
container_name: 'web_${name}'
restart_policy: 'unless-stopped'
user: 'root'
volumes:
- '${paths.addons}:/mnt/extra-addons'
- '${paths.config}:/etc/odoo/odoo.conf'
- '${paths.logs}:/var/log/odoo'
- '${paths.filestore}:/var/lib/odoo'
networks:
- 'net_${name}'
ports:
- '${env_vars.ODOO_HTTP_PORT}:8069'
- '${env_vars.ODOO_LONGPOLLING_PORT}:8072'
depends_on:
- 'db_${name}'
environment:
TZ: '${env_vars.TIMEZONE}'
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8069/web/health"]
interval: "30s"
timeout: "10s"
retries: 3
start_period: "40s"
db:
image: 'postgres:${db_version}'
container_name: 'db_${name}'
restart_policy: 'unless-stopped'
user: 'root'
volumes:
- '${data_dir}/postgresql:/var/lib/postgresql/data'
networks:
- 'net_${name}'
ports:
- '${env_vars.DB_PORT}:5432'
environment:
TZ: '${env_vars.TIMEZONE}'
POSTGRES_USER: '${env_vars.DB_USER}'
POSTGRES_PASSWORD: '${env_vars.DB_PASSWORD}'
POSTGRES_DB: 'postgres'
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${env_vars.DB_USER}"]
interval: "10s"
timeout: "5s"
retries: 5
start_period: "10s"
```
#### 2. Domains Configuration (`domains`)
Configure Cloudflare tunnels and domain mappings:
```yaml
domains:
# Global domain settings
default_provider: 'cloudflare' # Only cloudflare supported
default_ssl: true # Enable SSL by default
default_force_ssl: true # Force HTTPS redirect
default_redirect_www: true # Redirect www to non-www
default_hsts: true # Enable HSTS header
# Cloudflare provider configuration
providers:
cloudflare:
api_token: 'YOUR_API_TOKEN' # Cloudflare API token (required)
account_id: 'YOUR_ACCOUNT_ID' # Cloudflare account ID (required)
# Tunnel definitions
tunnels:
main-tunnel:
zone_id: 'YOUR_ZONE_ID' # Cloudflare zone ID
domain: 'example.com' # Root domain
enabled: true # Enable tunnel
# Domain to instance mappings
base_domains:
app.example.com:
instance: 'production' # Instance name (required)
dev.example.com:
instance: 'development'
test.example.com:
instance: 'testing'
```
**Cloudflare Setup Requirements:**
1. Create API token with permissions: `Account:Cloudflare Tunnel:Edit`, `Zone:DNS:Edit`
2. Get Account ID from Cloudflare Dashboard
3. Get Zone ID from domain's Overview page
#### 3. Backup Configuration (`backup`)
Global backup settings:
```yaml
backup:
enabled: true # Enable backup system
output_dir: 'odoo-data/backups' # Backup storage directory
format: 'zip' # Format: 'zip' or 'dump'
# Retention policy
retention:
days: 30 # Keep backups for N days (0=unlimited)
max_backups: 10 # Max backup files (0=unlimited)
# Automatic backups
auto_backup:
enabled: false # Enable scheduled backups
format: 'zip' # Backup format
schedule:
frequency: 'daily' # Options: daily, weekly, monthly
time: '02:00' # Time in HH:MM format (24h)
```
#### 4. Snapshot Configuration (`snapshot`)
Global snapshot settings:
```yaml
snapshot:
enabled: true # Enable snapshot system
default_storage_dir: 'odoo-data/snapshots' # Snapshot storage
# Retention policy
retention:
days: 60 # Keep for N days
max_snapshots: 100 # Max total snapshots
```
#### 5. Repositories (`repositories`)
Define Git repositories for Odoo addons:
```yaml
repositories:
# Basic repository
custom-addons:
source_type: 'git' # Type: git, zip, local, tar.gz
type: 'github' # Provider: github, gitlab, git
url: 'https://github.com/org/repo.git'
branch: 'main' # Branch or tag
submodules: false # Clone submodules
# Private repository (SSH)
private-addons:
source_type: 'git'
type: 'git'
url: 'git@github.com:org/private.git'
branch: 'main'
# Specific commit
stable-addons:
source_type: 'git'
type: 'github'
url: 'https://github.com/org/addons.git'
commit: 'abc123def' # Use commit hash instead of branch
```
#### 6. Instances (`instances`)
Define Odoo instances (inherits from defaults):
```yaml
instances:
production:
# Override Odoo version
odoo_version: '19.0'
# Override data directory
data_dir: 'odoo-data/${name}'
# Override ports
ports:
http: 8069
longpolling: 8072
expose: [] # Expose ports: [], ['web'], ['db'], ['web', 'db']
# Attach repositories (reference from global repositories)
repositories:
custom-addons: {} # Use default config
private-addons:
path: '/mnt/custom-addons' # Override mount path
# Python packages to auto-install
python_dependencies:
- 'pandas>=1.5.0'
- 'requests>=2.28.0'
- 'pillow>=9.0.0'
# Environment variables (merged with defaults)
env_vars:
DB_HOST: 'db_${name}'
DB_USER: 'odoo'
DB_PASSWORD: 'secure_password_here'
ADMIN_PASSWORD: 'admin_password_here'
WORKERS: 4
TIMEZONE: 'America/Lima'
# Override deployment (optional, uses defaults if not specified)
deployment:
type: 'docker'
docker:
web:
image: 'odoo:${odoo_version}'
container_name: 'web_${name}'
# ... full docker config
db:
image: 'postgres:${db_version}'
container_name: 'db_${name}'
# ... full docker config
```
### Variable Substitution
Variables are replaced automatically:
- `${name}` - Instance name
- `${odoo_version}` - Odoo version
- `${db_version}` - PostgreSQL version
- `${data_dir}` - Data directory
- `${paths.config}` - Config file path
- `${paths.addons}` - Addons directory path
- `${paths.logs}` - Logs directory path
- `${paths.filestore}` - Filestore directory path
- `${env_vars.VARIABLE}` - Any environment variable
### Modular Configuration
Split large configurations into multiple files:
```yaml
# dooservice.yml (main file)
version: '1.0'
imports:
- config/defaults.yml
- config/domains.yml
- config/repositories.yml
- config/backups.yml
```
```yaml
# config/defaults.yml
defaults:
instance:
odoo_version: '19.0'
# ... other defaults
```
```yaml
# config/domains.yml
domains:
providers:
cloudflare:
api_token: '${CLOUDFLARE_API_TOKEN}'
# ... domain config
```
## 🐍 Python Dependencies
Automatically install Python packages during instance creation:
```yaml
instances:
production:
python_dependencies:
- 'pandas>=1.5.0'
- 'requests>=2.28.0'
- 'pillow>=9.0.0'
```
**How it works:**
1. Create instance → containers created but stopped
2. Start web container temporarily
3. Install packages with `pip3` (uses `--break-system-packages` for Odoo 18+)
4. Stop web container
5. Instance ready with dependencies installed
**Features:**
- Auto-detects Odoo version for correct pip flags
- Executes as root user in container
- Progress tracking with spinners
- Continues even if some packages fail
## 🪟 Cross-Platform Support
Works on **Windows, Linux, and macOS**:
```yaml
# Configuration (same on all platforms)
data_dir: 'odoo-data/${name}'
# Windows result: odoo-data\production
# Linux/Mac result: odoo-data/production
```
**Requirements:**
- Docker Desktop (Windows/Mac) or Docker Engine (Linux)
- Python 3.11+
- Git (for repository sync)
## 📚 Common Workflows
### Initial Setup
```bash
# 1. Check system
dooservice doctor
# 2. Initialize configuration
dooservice init
# 3. Edit configuration
nano dooservice.yml
# 4. Validate
dooservice config validate dooservice.yml
# 5. Create instance
dooservice create production
```
### Daily Operations
```bash
# Start instance
dooservice start production
# View logs
dooservice logs production --follow
# Check status
dooservice status production
# Stop instance
dooservice stop production
```
### Maintenance
```bash
# Sync repositories (update code)
dooservice sync production
# Rebuild instance (recreate containers, keep data)
dooservice rebuild production
# Create backup
dooservice backup create production --database production_db
# Update Odoo modules
dooservice update-modules production -d production_db --all
```
### Cloudflare Setup
```bash
# 1. Initialize tunnel from configuration
dooservice tunnel init
# 2. Enable a domain (connects to instance and creates DNS records)
dooservice domain enable app.example.com
# 3. Check domain status
dooservice domain status app.example.com
# 4. Test domain connectivity
dooservice domain test app.example.com
# 5. View instance logs for the domain
dooservice domain logs app.example.com --follow
```
## 🏗️ Architecture
Built with Clean Architecture principles:
```
dooservice/
├── core/ # Configuration management
├── instance/ # Instance lifecycle
├── backup/ # Backup operations
├── repository/ # Git repository management
├── domains/ # Cloudflare integration
└── shared/ # Common utilities
```
## 🤝 Contributing
Contributions welcome! Please see our [contributing guidelines](CONTRIBUTING.md).
## 📄 License
MIT License - see [LICENSE](LICENSE) file for details.
## 🆘 Support
- **Documentation**: [GitHub Wiki](https://github.com/apiservicesac/dooservice-cli-py/wiki)
- **Issues**: [GitHub Issues](https://github.com/apiservicesac/dooservice-cli-py/issues)
- **Discussions**: [GitHub Discussions](https://github.com/apiservicesac/dooservice-cli-py/discussions)
---
**Made with ❤️ by API SERVICE SAC**
Raw data
{
"_id": null,
"home_page": null,
"name": "dooservice-cli",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.9",
"maintainer_email": "DooService Development Team <principal@apiservicesac.com>",
"keywords": "odoo, docker, cli, management, deployment, backup, snapshot, devops, automation, orchestration, containerization, enterprise, erp, github-integration, webhook, configuration-management",
"author": null,
"author_email": "DooService Development Team <principal@apiservicesac.com>, API SERVICE SAC <principal@apiservicesac.com>",
"download_url": "https://files.pythonhosted.org/packages/4f/40/96f9f0de76beb4cb34b03c61337f349c303e55c96ca156ed7c84e2a60c86/dooservice_cli-0.13.0.tar.gz",
"platform": null,
"description": "# DooService CLI\n\n> Professional command-line tool for managing Odoo instances with Docker\n\nDooService CLI provides a declarative, configuration-first approach to managing complex Odoo deployments. Define your entire infrastructure in YAML and manage everything from the command line.\n\n## \ud83d\ude80 Quick Start\n\n```bash\n# 1. Install uv (if not already installed)\ncurl -LsSf https://astral.sh/uv/install.sh | sh\n\n# 2. Install DooService CLI\nuv tool install dooservice-cli\n\n# 3. Check system dependencies\ndooservice doctor\n\n# 4. Initialize project\ndooservice init\n\n# 5. Edit configuration\nnano dooservice.yml\n\n# 6. Create and start instance\ndooservice create production\n```\n\n## \u2728 Key Features\n\n- \ud83d\udc33 **Docker-native** - Full Docker & Docker Compose integration\n- \ud83d\udcdd **Configuration-first** - Define everything in YAML\n- \ud83d\udc0d **Python dependencies** - Auto-install packages in containers\n- \ud83c\udf10 **Cloudflare tunnels** - Automatic domain and DNS management\n- \ud83d\udce6 **Git repositories** - Auto-sync custom addons\n- \ud83d\udcbe **Backup & snapshots** - Database backup and restore\n- \ud83d\udd04 **Smart workflows** - Deploy, rebuild, destroy with data preservation\n- \ud83e\ude9f **Cross-platform** - Works on Windows, Linux, and macOS\n\n## \ud83d\udce6 Installation\n\n### Using uv (Recommended)\n\n[uv](https://docs.astral.sh/uv/) is a fast, modern Python package manager. Install it first:\n\n```bash\n# On macOS and Linux\ncurl -LsSf https://astral.sh/uv/install.sh | sh\n\n# On Windows\npowershell -ExecutionPolicy ByPass -c \"irm https://astral.sh/uv/install.ps1 | iex\"\n```\n\nThen install DooService CLI:\n\n```bash\nuv tool install dooservice-cli\n```\n\n### Alternative: Using pipx\n\n```bash\npipx install dooservice-cli\n```\n\n### Alternative: Using pip\n\n```bash\npip install --user dooservice-cli\n```\n\n### Development Installation\n\n```bash\ngit clone https://github.com/apiservicesac/dooservice-cli-py.git\ncd dooservice-cli-py\nuv tool install --editable .\n```\n\n## \ud83c\udfaf Commands Reference\n\n### System Commands\n\n```bash\n# Initialize configuration structure\ndooservice init [-p|--path DIR] [--minimal] [-f|--force]\n\n# Check system health and dependencies\ndooservice doctor\n```\n\n### Instance Lifecycle\n\n```bash\n# Create instance (NAME is required)\ndooservice create NAME [-c|--config FILE]\n\n# Start instance (NAME optional, interactive selection if omitted)\ndooservice start [NAME] [-c|--config FILE]\n\n# Stop instance (NAME optional, interactive selection if omitted)\ndooservice stop [NAME] [-c|--config FILE]\n\n# Delete instance (NAME optional, interactive selection if omitted)\ndooservice delete [NAME] [-c|--config FILE] [--force] [--keep-data] [--keep-domain]\n\n# Restart instance\ndooservice restart [NAME] [-c|--config FILE]\n\n# List all instances\ndooservice list [-c|--config FILE]\n\n# Show instance status\ndooservice status [NAME] [-c|--config FILE]\n\n# View logs\ndooservice logs [NAME] [--service SERVICE] [--follow] [--tail N] [-c|--config FILE]\n\n# Execute command in container\ndooservice exec NAME COMMAND [--user USER] [--workdir DIR] [-c|--config FILE]\n\n# Sync repositories and configuration\ndooservice sync NAME [-c|--config FILE] [--no-restart]\n\n# Update Odoo modules\ndooservice update-modules NAME -d|--database DATABASE [-m|--modules MODULE]... [-a|--all] [-p|--http-port PORT] [-c|--config FILE]\n```\n\n### Quick Aliases\n\n```bash\n# Shortcuts for common commands\ndooservice ls [-c|--config FILE] # Alias for 'list'\ndooservice ps [-c|--config FILE] # Alias for 'list'\ndooservice up [NAME] [-c|--config FILE] # Alias for 'start'\ndooservice down [NAME] [-c|--config FILE] # Alias for 'stop'\ndooservice rm [NAME] [-c|--config FILE] [...] # Alias for 'delete'\n```\n\n### Workflow Commands\n\n```bash\n# Deploy: create + start + domain setup\ndooservice deploy [NAME] [-c|--config FILE]\n\n# Rebuild: stop + delete (keep data/domain) + create + start + domain sync\ndooservice rebuild [NAME] [-c|--config FILE]\n\n# Destroy: stop + delete\ndooservice destroy [NAME] [-c|--config FILE] [--force]\n```\n\n### Repository Management\n\n```bash\n# List repositories for an instance\ndooservice repo list INSTANCE_NAME [--repo-name NAME] [-c|--config FILE]\n\n# Show detailed status of a repository\ndooservice repo status INSTANCE_NAME REPO_NAME [-c|--config FILE]\n\n# Synchronize repositories\ndooservice repo sync INSTANCE_NAME [--repo-name NAME] [-q|--quiet] [--test] [-c|--config FILE]\n```\n\n### Backup Management\n\n```bash\n# Create backup\ndooservice backup create INSTANCE_NAME [-d|--database NAME] [--format zip|dump] [-o|--output DIR] [-c|--config FILE] [-v|--verbose]\n\n# Test backup connection\ndooservice backup test INSTANCE_NAME [-d|--database NAME] [-c|--config FILE]\n\n# List available databases\ndooservice backup databases INSTANCE_NAME [-c|--config FILE]\n```\n\n### Tunnel Management\n\n```bash\n# Initialize Cloudflare tunnel from configuration\ndooservice tunnel init [-c|--config FILE] [-v|--verbose] [--force]\n\n# Delete tunnel and associated DNS records\ndooservice tunnel delete [-c|--config FILE] [-v|--verbose]\n\n# Check tunnel status\ndooservice tunnel status [-c|--config FILE]\n\n# Show tunnel logs\ndooservice tunnel logs [-n|--tail N] [-f|--follow] [-c|--config FILE]\n\n# Restart tunnel container\ndooservice tunnel restart [-c|--config FILE]\n\n# Stop tunnel container\ndooservice tunnel stop [-c|--config FILE]\n```\n\n### Domain Management\n\n```bash\n# Enable domain (create DNS records and tunnel config)\ndooservice domain enable NAME [-c|--config FILE] [-v|--verbose]\n\n# Disable domain (remove DNS and disconnect tunnel)\ndooservice domain disable NAME [-c|--config FILE] [-v|--verbose]\n\n# Sync domain with instance (connect to tunnel network)\ndooservice domain sync NAME [-c|--config FILE] [-v|--verbose]\n\n# List configured domains\ndooservice domain list [-c|--config FILE]\n\n# Check domain status\ndooservice domain status NAME [-c|--config FILE]\n\n# Test domain connectivity and response\ndooservice domain test NAME [-c|--config FILE]\n\n# Show logs for domain's associated instance\ndooservice domain logs NAME [-n|--tail N] [-f|--follow] [-c|--config FILE]\n```\n\n### Configuration Management\n\n```bash\n# Validate configuration file\ndooservice config validate FILE\n\n# Load and display configuration\ndooservice config load FILE [--no-validate]\n\n# Create new configuration\ndooservice config create FILE [--no-validate]\n\n# Convert configuration format\ndooservice config convert INPUT [--output FILE]\n```\n\n## \u2699\ufe0f Configuration Guide\n\n### Basic Structure\n\n```yaml\nversion: '1.0'\n\n# Optional: Import other configuration files\nimports:\n - config/defaults.yml\n - config/domains.yml\n - config/repositories.yml\n\n# Global defaults (optional)\ndefaults:\n instance:\n odoo_version: '19.0'\n db_version: '17'\n\n# Cloudflare integration (optional)\ndomains:\n default_provider: 'cloudflare'\n providers:\n cloudflare:\n api_token: 'YOUR_TOKEN'\n account_id: 'YOUR_ACCOUNT_ID'\n tunnels:\n main-tunnel:\n zone_id: 'YOUR_ZONE_ID'\n domain: 'example.com'\n base_domains:\n app.example.com:\n instance: 'production'\n\n# Backup configuration (optional)\nbackup:\n enabled: true\n output_dir: 'odoo-data/backups'\n format: 'zip'\n\n# Snapshot configuration (optional)\nsnapshot:\n enabled: true\n default_storage_dir: 'odoo-data/snapshots'\n retention:\n days: 60\n max_snapshots: 100\n\n# Repository definitions (optional)\nrepositories:\n custom-addons:\n source_type: 'git'\n type: 'github'\n url: 'https://github.com/your-org/odoo-addons.git'\n branch: 'main'\n\n# Instance definitions (required)\ninstances:\n production:\n odoo_version: '19.0'\n data_dir: 'odoo-data/${name}'\n\n ports:\n http: 8069\n longpolling: 8072\n\n repositories:\n custom-addons: {}\n\n python_dependencies:\n - 'pandas>=1.5.0'\n - 'requests>=2.28.0'\n\n env_vars:\n DB_HOST: 'db_${name}'\n DB_USER: 'odoo'\n DB_PASSWORD: 'secure_password'\n ADMIN_PASSWORD: 'admin_password'\n WORKERS: 4\n\n deployment:\n type: 'docker'\n docker:\n web:\n image: 'odoo:${odoo_version}'\n container_name: 'web_${name}'\n restart_policy: 'unless-stopped'\n db:\n image: 'postgres:${db_version}'\n container_name: 'db_${name}'\n restart_policy: 'unless-stopped'\n```\n\n### Configuration Sections\n\n#### 1. Global Defaults (`defaults`)\n\nDefine default values inherited by all instances:\n\n```yaml\ndefaults:\n instance:\n # Versions\n odoo_version: '19.0' # Odoo version\n db_version: '17' # PostgreSQL version\n\n # Directories\n data_dir: 'odoo-data/${name}' # Data directory (relative path)\n\n # Auto Backup\n auto_backup:\n enabled: false\n db_name: '${name}_db'\n\n # Paths (inside data_dir)\n paths:\n config: '${data_dir}/etc/odoo.conf'\n addons: '${data_dir}/addons'\n logs: '${data_dir}/logs'\n filestore: '${data_dir}/filestore'\n\n # Default ports\n ports:\n http: 8069\n longpolling: 8072\n expose: [] # Options: [], ['web'], ['db'], ['web', 'db']\n\n # Default repositories\n repositories: {}\n\n # Environment variables\n env_vars:\n # Network\n ODOO_HTTP_PORT: 8069\n ODOO_LONGPOLLING_PORT: 8072\n\n # Database\n DB_HOST: 'db_${name}'\n DB_PORT: 5432\n DB_USER: 'odoo'\n DB_PASSWORD: 'odoo'\n ADMIN_PASSWORD: 'admin'\n\n # Performance\n WORKERS: 2\n LIMIT_MEMORY_SOFT: 2147483648 # 2GB\n LIMIT_MEMORY_HARD: 2684354560 # 2.5GB\n LIMIT_REQUEST: 8192\n LIMIT_TIME_CPU: 60\n LIMIT_TIME_REAL: 120\n MAX_CRON_THREADS: 2\n\n # General\n PROXY_MODE: true\n LIST_DB: false\n TIMEZONE: 'America/Lima'\n\n # Python packages to auto-install\n python_dependencies: []\n\n # Snapshot settings\n snapshot:\n enabled: true\n storage_dir: '${data_dir}/snapshots'\n include_backup_by_default: true\n retention:\n days: 60\n max_snapshots: 20\n\n # Deployment configuration\n deployment:\n type: 'docker'\n docker:\n web:\n image: 'odoo:${odoo_version}'\n container_name: 'web_${name}'\n restart_policy: 'unless-stopped'\n user: 'root'\n volumes:\n - '${paths.addons}:/mnt/extra-addons'\n - '${paths.config}:/etc/odoo/odoo.conf'\n - '${paths.logs}:/var/log/odoo'\n - '${paths.filestore}:/var/lib/odoo'\n networks:\n - 'net_${name}'\n ports:\n - '${env_vars.ODOO_HTTP_PORT}:8069'\n - '${env_vars.ODOO_LONGPOLLING_PORT}:8072'\n depends_on:\n - 'db_${name}'\n environment:\n TZ: '${env_vars.TIMEZONE}'\n healthcheck:\n test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:8069/web/health\"]\n interval: \"30s\"\n timeout: \"10s\"\n retries: 3\n start_period: \"40s\"\n\n db:\n image: 'postgres:${db_version}'\n container_name: 'db_${name}'\n restart_policy: 'unless-stopped'\n user: 'root'\n volumes:\n - '${data_dir}/postgresql:/var/lib/postgresql/data'\n networks:\n - 'net_${name}'\n ports:\n - '${env_vars.DB_PORT}:5432'\n environment:\n TZ: '${env_vars.TIMEZONE}'\n POSTGRES_USER: '${env_vars.DB_USER}'\n POSTGRES_PASSWORD: '${env_vars.DB_PASSWORD}'\n POSTGRES_DB: 'postgres'\n healthcheck:\n test: [\"CMD-SHELL\", \"pg_isready -U ${env_vars.DB_USER}\"]\n interval: \"10s\"\n timeout: \"5s\"\n retries: 5\n start_period: \"10s\"\n```\n\n#### 2. Domains Configuration (`domains`)\n\nConfigure Cloudflare tunnels and domain mappings:\n\n```yaml\ndomains:\n # Global domain settings\n default_provider: 'cloudflare' # Only cloudflare supported\n default_ssl: true # Enable SSL by default\n default_force_ssl: true # Force HTTPS redirect\n default_redirect_www: true # Redirect www to non-www\n default_hsts: true # Enable HSTS header\n\n # Cloudflare provider configuration\n providers:\n cloudflare:\n api_token: 'YOUR_API_TOKEN' # Cloudflare API token (required)\n account_id: 'YOUR_ACCOUNT_ID' # Cloudflare account ID (required)\n\n # Tunnel definitions\n tunnels:\n main-tunnel:\n zone_id: 'YOUR_ZONE_ID' # Cloudflare zone ID\n domain: 'example.com' # Root domain\n enabled: true # Enable tunnel\n\n # Domain to instance mappings\n base_domains:\n app.example.com:\n instance: 'production' # Instance name (required)\n\n dev.example.com:\n instance: 'development'\n\n test.example.com:\n instance: 'testing'\n```\n\n**Cloudflare Setup Requirements:**\n1. Create API token with permissions: `Account:Cloudflare Tunnel:Edit`, `Zone:DNS:Edit`\n2. Get Account ID from Cloudflare Dashboard\n3. Get Zone ID from domain's Overview page\n\n#### 3. Backup Configuration (`backup`)\n\nGlobal backup settings:\n\n```yaml\nbackup:\n enabled: true # Enable backup system\n output_dir: 'odoo-data/backups' # Backup storage directory\n format: 'zip' # Format: 'zip' or 'dump'\n\n # Retention policy\n retention:\n days: 30 # Keep backups for N days (0=unlimited)\n max_backups: 10 # Max backup files (0=unlimited)\n\n # Automatic backups\n auto_backup:\n enabled: false # Enable scheduled backups\n format: 'zip' # Backup format\n schedule:\n frequency: 'daily' # Options: daily, weekly, monthly\n time: '02:00' # Time in HH:MM format (24h)\n```\n\n#### 4. Snapshot Configuration (`snapshot`)\n\nGlobal snapshot settings:\n\n```yaml\nsnapshot:\n enabled: true # Enable snapshot system\n default_storage_dir: 'odoo-data/snapshots' # Snapshot storage\n\n # Retention policy\n retention:\n days: 60 # Keep for N days\n max_snapshots: 100 # Max total snapshots\n```\n\n#### 5. Repositories (`repositories`)\n\nDefine Git repositories for Odoo addons:\n\n```yaml\nrepositories:\n # Basic repository\n custom-addons:\n source_type: 'git' # Type: git, zip, local, tar.gz\n type: 'github' # Provider: github, gitlab, git\n url: 'https://github.com/org/repo.git'\n branch: 'main' # Branch or tag\n submodules: false # Clone submodules\n\n # Private repository (SSH)\n private-addons:\n source_type: 'git'\n type: 'git'\n url: 'git@github.com:org/private.git'\n branch: 'main'\n\n # Specific commit\n stable-addons:\n source_type: 'git'\n type: 'github'\n url: 'https://github.com/org/addons.git'\n commit: 'abc123def' # Use commit hash instead of branch\n```\n\n#### 6. Instances (`instances`)\n\nDefine Odoo instances (inherits from defaults):\n\n```yaml\ninstances:\n production:\n # Override Odoo version\n odoo_version: '19.0'\n\n # Override data directory\n data_dir: 'odoo-data/${name}'\n\n # Override ports\n ports:\n http: 8069\n longpolling: 8072\n expose: [] # Expose ports: [], ['web'], ['db'], ['web', 'db']\n\n # Attach repositories (reference from global repositories)\n repositories:\n custom-addons: {} # Use default config\n private-addons:\n path: '/mnt/custom-addons' # Override mount path\n\n # Python packages to auto-install\n python_dependencies:\n - 'pandas>=1.5.0'\n - 'requests>=2.28.0'\n - 'pillow>=9.0.0'\n\n # Environment variables (merged with defaults)\n env_vars:\n DB_HOST: 'db_${name}'\n DB_USER: 'odoo'\n DB_PASSWORD: 'secure_password_here'\n ADMIN_PASSWORD: 'admin_password_here'\n WORKERS: 4\n TIMEZONE: 'America/Lima'\n\n # Override deployment (optional, uses defaults if not specified)\n deployment:\n type: 'docker'\n docker:\n web:\n image: 'odoo:${odoo_version}'\n container_name: 'web_${name}'\n # ... full docker config\n db:\n image: 'postgres:${db_version}'\n container_name: 'db_${name}'\n # ... full docker config\n```\n\n### Variable Substitution\n\nVariables are replaced automatically:\n\n- `${name}` - Instance name\n- `${odoo_version}` - Odoo version\n- `${db_version}` - PostgreSQL version\n- `${data_dir}` - Data directory\n- `${paths.config}` - Config file path\n- `${paths.addons}` - Addons directory path\n- `${paths.logs}` - Logs directory path\n- `${paths.filestore}` - Filestore directory path\n- `${env_vars.VARIABLE}` - Any environment variable\n\n### Modular Configuration\n\nSplit large configurations into multiple files:\n\n```yaml\n# dooservice.yml (main file)\nversion: '1.0'\n\nimports:\n - config/defaults.yml\n - config/domains.yml\n - config/repositories.yml\n - config/backups.yml\n```\n\n```yaml\n# config/defaults.yml\ndefaults:\n instance:\n odoo_version: '19.0'\n # ... other defaults\n```\n\n```yaml\n# config/domains.yml\ndomains:\n providers:\n cloudflare:\n api_token: '${CLOUDFLARE_API_TOKEN}'\n # ... domain config\n```\n\n## \ud83d\udc0d Python Dependencies\n\nAutomatically install Python packages during instance creation:\n\n```yaml\ninstances:\n production:\n python_dependencies:\n - 'pandas>=1.5.0'\n - 'requests>=2.28.0'\n - 'pillow>=9.0.0'\n```\n\n**How it works:**\n1. Create instance \u2192 containers created but stopped\n2. Start web container temporarily\n3. Install packages with `pip3` (uses `--break-system-packages` for Odoo 18+)\n4. Stop web container\n5. Instance ready with dependencies installed\n\n**Features:**\n- Auto-detects Odoo version for correct pip flags\n- Executes as root user in container\n- Progress tracking with spinners\n- Continues even if some packages fail\n\n## \ud83e\ude9f Cross-Platform Support\n\nWorks on **Windows, Linux, and macOS**:\n\n```yaml\n# Configuration (same on all platforms)\ndata_dir: 'odoo-data/${name}'\n\n# Windows result: odoo-data\\production\n# Linux/Mac result: odoo-data/production\n```\n\n**Requirements:**\n- Docker Desktop (Windows/Mac) or Docker Engine (Linux)\n- Python 3.11+\n- Git (for repository sync)\n\n## \ud83d\udcda Common Workflows\n\n### Initial Setup\n\n```bash\n# 1. Check system\ndooservice doctor\n\n# 2. Initialize configuration\ndooservice init\n\n# 3. Edit configuration\nnano dooservice.yml\n\n# 4. Validate\ndooservice config validate dooservice.yml\n\n# 5. Create instance\ndooservice create production\n```\n\n### Daily Operations\n\n```bash\n# Start instance\ndooservice start production\n\n# View logs\ndooservice logs production --follow\n\n# Check status\ndooservice status production\n\n# Stop instance\ndooservice stop production\n```\n\n### Maintenance\n\n```bash\n# Sync repositories (update code)\ndooservice sync production\n\n# Rebuild instance (recreate containers, keep data)\ndooservice rebuild production\n\n# Create backup\ndooservice backup create production --database production_db\n\n# Update Odoo modules\ndooservice update-modules production -d production_db --all\n```\n\n### Cloudflare Setup\n\n```bash\n# 1. Initialize tunnel from configuration\ndooservice tunnel init\n\n# 2. Enable a domain (connects to instance and creates DNS records)\ndooservice domain enable app.example.com\n\n# 3. Check domain status\ndooservice domain status app.example.com\n\n# 4. Test domain connectivity\ndooservice domain test app.example.com\n\n# 5. View instance logs for the domain\ndooservice domain logs app.example.com --follow\n```\n\n## \ud83c\udfd7\ufe0f Architecture\n\nBuilt with Clean Architecture principles:\n\n```\ndooservice/\n\u251c\u2500\u2500 core/ # Configuration management\n\u251c\u2500\u2500 instance/ # Instance lifecycle\n\u251c\u2500\u2500 backup/ # Backup operations\n\u251c\u2500\u2500 repository/ # Git repository management\n\u251c\u2500\u2500 domains/ # Cloudflare integration\n\u2514\u2500\u2500 shared/ # Common utilities\n```\n\n## \ud83e\udd1d Contributing\n\nContributions welcome! Please see our [contributing guidelines](CONTRIBUTING.md).\n\n## \ud83d\udcc4 License\n\nMIT License - see [LICENSE](LICENSE) file for details.\n\n## \ud83c\udd98 Support\n\n- **Documentation**: [GitHub Wiki](https://github.com/apiservicesac/dooservice-cli-py/wiki)\n- **Issues**: [GitHub Issues](https://github.com/apiservicesac/dooservice-cli-py/issues)\n- **Discussions**: [GitHub Discussions](https://github.com/apiservicesac/dooservice-cli-py/discussions)\n\n---\n\n**Made with \u2764\ufe0f by API SERVICE SAC**\n",
"bugtrack_url": null,
"license": "MIT License Copyright (c) 2025 API SERVICE S.A.C. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ",
"summary": "Professional CLI tool for managing Odoo instances with declarative configuration, automated backups, snapshots, and GitHub integration.",
"version": "0.13.0",
"project_urls": {
"Changelog": "https://github.com/apiservicesac/dooservice-cli-py/releases",
"Documentation": "https://github.com/apiservicesac/dooservice-cli-py#readme",
"Homepage": "https://apiservicesac.com",
"Issues": "https://github.com/apiservicesac/dooservice-cli-py/issues",
"Repository": "https://github.com/apiservicesac/dooservice-cli-py"
},
"split_keywords": [
"odoo",
" docker",
" cli",
" management",
" deployment",
" backup",
" snapshot",
" devops",
" automation",
" orchestration",
" containerization",
" enterprise",
" erp",
" github-integration",
" webhook",
" configuration-management"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "4daf22abcc60abcbedb867f65f1bd3bd4934868843d547f433fdf9a005a19305",
"md5": "71b46e7237716277dffcd671bd280876",
"sha256": "cd7a0e620084b410ed0651860de819efc3dc55d316d02c96887839d9a47f1c77"
},
"downloads": -1,
"filename": "dooservice_cli-0.13.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "71b46e7237716277dffcd671bd280876",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.9",
"size": 183330,
"upload_time": "2025-10-18T04:36:14",
"upload_time_iso_8601": "2025-10-18T04:36:14.141255Z",
"url": "https://files.pythonhosted.org/packages/4d/af/22abcc60abcbedb867f65f1bd3bd4934868843d547f433fdf9a005a19305/dooservice_cli-0.13.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "4f4096f9f0de76beb4cb34b03c61337f349c303e55c96ca156ed7c84e2a60c86",
"md5": "c64f0a2983f4a4b1dec5611d76202fe1",
"sha256": "24ab6583e66c0bca433a01b194a5630a39187159c556e773fe76ecaf9aaa6d0d"
},
"downloads": -1,
"filename": "dooservice_cli-0.13.0.tar.gz",
"has_sig": false,
"md5_digest": "c64f0a2983f4a4b1dec5611d76202fe1",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9",
"size": 116577,
"upload_time": "2025-10-18T04:36:15",
"upload_time_iso_8601": "2025-10-18T04:36:15.610808Z",
"url": "https://files.pythonhosted.org/packages/4f/40/96f9f0de76beb4cb34b03c61337f349c303e55c96ca156ed7c84e2a60c86/dooservice_cli-0.13.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-10-18 04:36:15",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "apiservicesac",
"github_project": "dooservice-cli-py",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "dooservice-cli"
}