Skip to main content

EnvForge - Forge, sync and restore complete development environments in minutes

Project description

๐Ÿ”ฅ EnvForge

Forge, sync and restore complete development environments in minutes

Python Platform License Status


๐ŸŽฏ What is it?

EnvForge is a CLI tool that solves one of developers' biggest problems: reconfiguring development environments from scratch.

Instead of spending days installing packages, setting up dotfiles and extensions every time you:

  • ๐Ÿ’ป Get a new laptop
  • ๐Ÿ”„ Format your system
  • ๐Ÿ‘ฅ Need to standardize your team
  • ๐Ÿ  Want to sync home/work setups

You simply restore everything automatically with EnvForge!


๐Ÿ†š EnvForge vs Other Tools

EnvForge Git/GitHub Docker Dotfiles Repos
What it manages ๐Ÿ–ฅ๏ธ Complete environment ๐Ÿ“ Source code ๐Ÿ“ฆ Isolated containers ๐Ÿ“„ Config files only
Installs packages โœ… 271 APT packages โŒ โŒ โŒ
System configuration โœ… Dotfiles + extensions โŒ โŒ โœ… Configs only
Synchronization โœ… Bidirectional Git โœ… Code only โŒ โœ… Configs only
Use case ๐Ÿ› ๏ธ Complete personal setup ๐Ÿ“‚ Code projects ๐Ÿš€ App deployment โš™๏ธ Basic configs

Practical Example:

โŒ Current Situation (2 days of work):

# New/reformatted laptop:
sudo apt update && sudo apt install git curl vim...    # 271 packages manually
code --install-extension ms-python.python...          # 15+ VS Code extensions  
cp dotfiles/.bashrc ~/.bashrc                         # Configure terminal
git config --global user.name...                      # Git configs
# ... hundreds of manual steps

โœ… With EnvForge (30 minutes):

pip install envforge
envforge restore "my-complete-environment"
# โ˜• Go grab a coffee - everything automated!

๐Ÿš€ Installation

Method 1: Direct Installation (Recommended)

# Install via PyPI
pip install envforge

Method 2: Manual Installation

# Clone the repository
git clone https://github.com/bernardoamorimalvarenga/envforge.git
cd envforge

# Create virtual environment
python -m venv .venv
source .venv/bin/activate

# Install dependencies
pip install -e .

# Test installation
envforge --help

System Requirements:

  • ๐Ÿง Linux (Ubuntu 20.04+, Debian 10+, Arch, Fedora)
  • ๐Ÿ Python 3.8+
  • ๐Ÿ”‘ sudo (for package installation)
  • ๐Ÿ“ฆ git (for synchronization)

๐Ÿ“‹ Complete Usage Guide

1. Initial Setup

# Initialize EnvForge
envforge init

# โœ… Output:
# ๐Ÿ”ฅ EnvForge initialized successfully!
# Config stored in: /home/user/.envforge

2. Capture Your Current Environment

# Capture everything installed and configured
envforge capture "my-setup-$(date +%Y%m%d)"

# โœ… Example output:
# ๐Ÿ”ฅ Capturing environment: my-setup-20241201
# โœ“ Detecting system configuration...
# 
# โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”“
# โ”ƒ Component          โ”ƒ Count โ”ƒ
# โ”กโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”ฉ
# โ”‚ APT Packages       โ”‚ 271   โ”‚
# โ”‚ Snap Packages      โ”‚ 26    โ”‚
# โ”‚ Flatpak Packages   โ”‚ 3     โ”‚
# โ”‚ PIP Packages       โ”‚ 45    โ”‚
# โ”‚ Dotfiles           โ”‚ 8     โ”‚
# โ”‚ VS Code Extensions โ”‚ 23    โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
# โœ“ Environment 'my-setup-20241201' captured successfully!

3. List Saved Environments

# List all captured environments
envforge list

# โœ… Example output:
# โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“
# โ”ƒ Name                 โ”ƒ Created         โ”ƒ File                โ”ƒ
# โ”กโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ฉ
# โ”‚ my-setup-20241201    โ”‚ 2024-12-01 14:30โ”‚ my-setup-20241201.json โ”‚
# โ”‚ work-environment     โ”‚ 2024-11-28 09:15โ”‚ work-environment.json  โ”‚
# โ”‚ complete-setup       โ”‚ 2024-11-25 16:45โ”‚ complete-setup.json    โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

4. View Environment Details

# See what a specific environment contains
envforge show "my-setup-20241201"

# โœ… Example output:
# ๐Ÿ“‹ Environment Details: my-setup-20241201
# 
# โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“
# โ”ƒ Property           โ”ƒ Value                        โ”ƒ
# โ”กโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ฉ
# โ”‚ Os                 โ”‚ Linux                        โ”‚
# โ”‚ Kernel             โ”‚ 5.15.0-91-generic           โ”‚
# โ”‚ Architecture       โ”‚ x86_64                       โ”‚
# โ”‚ Python Version     โ”‚ 3.12.3                      โ”‚
# โ”‚ Shell              โ”‚ /bin/bash                    โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
# 
# โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”“
# โ”ƒ Type               โ”ƒ Count โ”ƒ
# โ”กโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”ฉ
# โ”‚ APT                โ”‚ 271   โ”‚
# โ”‚ SNAP               โ”‚ 26    โ”‚
# โ”‚ FLATPAK            โ”‚ 3     โ”‚
# โ”‚ PIP                โ”‚ 45    โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

5. Restore an Environment

Safe Preview (Dry Run):

# See what will be done WITHOUT applying changes
envforge restore "my-setup-20241201" --dry-run

# โœ… Example output:
# ๐Ÿ” DRY RUN MODE - No changes will be made
# ๐Ÿ“ฆ Restoring packages...
# Would install 45 new APT packages
# Would install: git vim curl nodejs python3-pip code...
# ๐Ÿ“ Would restore 8 dotfiles
# ๐Ÿ”Œ Would install 12 new VS Code extensions
# โœ“ Dry run completed successfully!

Actual Restoration:

# Restore the environment (WILL INSTALL PACKAGES)
envforge restore "my-setup-20241201"

# โœ… Interactive process:
# ๐Ÿ”ฅ Restoring environment: my-setup-20241201
# 
# โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”“
# โ”ƒ Type               โ”ƒ Count โ”ƒ
# โ”กโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”ฉ
# โ”‚ APT                โ”‚ 45    โ”‚
# โ”‚ SNAP               โ”‚ 8     โ”‚
# โ”‚ PIP                โ”‚ 12    โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
# 
# โš ๏ธ  This will install 65 packages and may modify your system.
# Do you want to continue? [y/N]: y
# 
# ๐Ÿ“ฆ Installing APT packages...
# โœ“ APT packages installed successfully
# ๐Ÿ“ Restoring dotfiles...
# Backed up existing .bashrc to .bashrc.envforge-backup
# โœ“ Restored .bashrc
# โœ“ Restored .vimrc
# ๐Ÿ”Œ Installing VS Code extensions...
# โœ“ VS Code extensions installed successfully
# โœ“ Environment restored successfully!

๐Ÿ”„ Git Synchronization (Multi-machine)

Initial Setup (Once)

# Configure synchronization with private repository
envforge sync setup git@github.com:your-user/envforge-private.git

# โœ… Output:
# ๐Ÿ”ง Setting up git sync with git@github.com:your-user/envforge-private.git
# 
# โ•ญโ”€ Sync Ready โ”€โ•ฎ
# โ”‚ Git sync setup complete! โ”‚
# โ”‚                          โ”‚
# โ”‚ Repository: git@github.com:your-user/envforge-private.git โ”‚
# โ”‚ Branch: main             โ”‚
# โ”‚                          โ”‚
# โ”‚ Use 'envforge sync push' to upload environments โ”‚
# โ”‚ Use 'envforge sync pull' to download environments โ”‚
# โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ

Pushing Environments

# Send all environments to repository
envforge sync push

# Send only a specific environment
envforge sync push -e "my-setup-20241201"

# Send multiple environments
envforge sync push -e "environment1" -e "environment2"

# โœ… Example output:
# ๐Ÿ“ค Pushing specific environments: my-setup-20241201
# โœ“ Successfully pushed 1 specific environments

Downloading Environments

# Download environments from repository
envforge sync pull

# โœ… Example output:
# ๐Ÿ“ฅ Pulling environments from remote...
# โœ“ Imported work-environment
# โœ“ Imported home-setup
# โœ“ Successfully imported 2 environments

Synchronization Status

# View sync status
envforge sync status

# โœ… Example output:
# โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“
# โ”ƒ Property           โ”ƒ Value                                               โ”ƒ
# โ”กโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ฉ
# โ”‚ Status             โ”‚ โœ“ Enabled                                          โ”‚
# โ”‚ Remote URL         โ”‚ git@github.com:your-user/envforge-private.git     โ”‚
# โ”‚ Branch             โ”‚ main                                               โ”‚
# โ”‚ Uncommitted Changes โ”‚ No                                                โ”‚
# โ”‚ Last Commit        โ”‚ abc123 - Sync 2 environments                      โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

๐Ÿ’ผ Practical Use Cases

๐Ÿ†• Case 1: New Laptop

# On old machine:
envforge capture "my-complete-setup"
envforge sync push

# On new machine:
pip install envforge
envforge init
envforge sync setup git@github.com:your-user/envforge-private.git
envforge sync pull
envforge restore "my-complete-setup"
# โ˜• 30 minutes later: identical environment!

๐Ÿ‘ฅ Case 2: Team Onboarding

# Company setup (done once by tech lead):
envforge capture "company-dev-env-2024"  
envforge sync push

# New developer:
envforge sync pull
envforge restore "company-dev-env-2024"
# ๐ŸŽ‰ Standardized environment automatically!

๐Ÿ  Case 3: Home/Work Synchronization

# At work:
envforge capture "work-setup"
envforge sync push

# At home:
envforge sync pull
envforge restore "work-setup" 
# ๐Ÿ”„ Same environment at home!

๐Ÿ”„ Case 4: Backup/Disaster Recovery

# Regular backup:
envforge capture "backup-$(date +%Y%m%d)"
envforge sync push

# After problem/reformatting:
envforge sync pull
envforge list  # View available backups
envforge restore "backup-20241201"
# ๐Ÿ›ก๏ธ Environment restored!

๐Ÿ“Š Available Commands

Basic Commands:

envforge init                    # Initialize EnvForge
envforge capture "name"          # Capture current environment
envforge list                    # List saved environments
envforge show "name"             # Show environment details  
envforge restore "name"          # Restore environment
envforge delete "name"           # Delete environment
envforge status                  # Current system status

Sync Commands:

envforge sync setup <repo-url>   # Configure Git synchronization
envforge sync push               # Send all environments
envforge sync push -e "name"     # Send specific environment
envforge sync pull               # Download environments from repository
envforge sync status             # Synchronization status

Utility Commands:

envforge export "name" file.json    # Export to file
envforge import-env file.json       # Import from file
envforge diff "env1" "env2"         # Compare environments
envforge clean                      # Clean old backups

Useful Options:

envforge restore "name" --dry-run     # Preview without applying changes
envforge restore "name" --force       # Skip confirmations
envforge delete "name" --force        # Delete without confirmation

๐ŸŽฏ What Gets Captured

๐Ÿ“ฆ System Packages:

  • APT packages (manually installed only)
  • Snap packages
  • Flatpak packages
  • PIP packages (global)

โš™๏ธ Configurations:

  • Important dotfiles: .bashrc, .bash_profile, .zshrc, .profile
  • Tool configs: .vimrc, .gitconfig
  • SSH config: .ssh/config (optional, disabled by default)

๐Ÿ”Œ Extensions and Tools:

  • VS Code: All installed extensions
  • System info: OS, kernel, architecture, Python version

Example Snapshot (JSON):

{
  "metadata": {
    "name": "my-setup-20241201",
    "created_at": "2024-12-01T14:30:00",
    "version": "0.1.0"
  },
  "system_info": {
    "os": "Linux",
    "kernel": "5.15.0-91-generic",
    "architecture": "x86_64",
    "python_version": "3.12.3"
  },
  "packages": {
    "apt": ["git", "vim", "curl", "nodejs", "python3-pip"],
    "snap": ["code", "discord", "telegram-desktop"],
    "pip": ["requests", "flask", "django"]
  },
  "dotfiles": {
    ".bashrc": "# .bashrc content...",
    ".vimrc": "# Vim configurations..."
  },
  "vscode_extensions": [
    "ms-python.python",
    "ms-vscode.vscode-json"
  ]
}

๐Ÿ”’ Security

โœ… Secure Settings:

  • SSH keys are not captured by default
  • Automatic backups of existing files before replacement
  • Dry-run mode for safe previews
  • Confirmations before important changes
  • Private repositories recommended for sync

โš ๏ธ Important Considerations:

  • Use private repositories for sensitive data
  • Review snapshots before sharing
  • Dotfiles may contain personal information
  • Always test with --dry-run first

๐Ÿ›ก๏ธ Best Practices:

# โœ… Use private repository
envforge sync setup git@github.com:your-user/envforge-PRIVATE.git

# โœ… Always preview first
envforge restore "environment" --dry-run

# โœ… Manual backup before major changes
cp ~/.bashrc ~/.bashrc.backup-$(date +%s)

# โœ… Review what will be installed
envforge show "environment"

๐Ÿš€ Performance

Typical Times:

  • Capture: ~30 seconds (271 packages + configs)
  • Restore APT: ~15 minutes (271 packages)
  • Restore Snap: ~5 minutes (26 packages)
  • Dotfiles: ~1 second
  • VS Code extensions: ~2 minutes

Sizes:

  • Snapshot JSON: ~16KB per environment
  • Sync repository: ~1MB (10 environments)

๐Ÿ› Troubleshooting

Common Issues:

"Permission denied" during restore:

# Make sure you have sudo
sudo echo "test"

# Execute with confirmation
envforge restore "environment" --force

"Git sync failed":

# Check if repository is private and you have access
git clone git@github.com:your-user/envforge-private.git

# Reconfigure if necessary
envforge sync setup git@github.com:your-user/envforge-private.git

"VS Code extensions failed":

# Make sure VS Code is installed
code --version

# Install manually if necessary
envforge show "environment"  # View extension list

Logs and Debug:

# View detailed status
envforge status

# Check config files
ls -la ~/.envforge/

# Preview before applying
envforge restore "environment" --dry-run

๐Ÿค Contributing

Contributions are welcome!

How to Contribute:

  1. Fork the repository
  2. Create a branch for your feature (git checkout -b feature/new-functionality)
  3. Commit your changes (git commit -am 'Add new functionality')
  4. Push to the branch (git push origin feature/new-functionality)
  5. Open a Pull Request

Areas That Need Help:

  • Support for other distros (CentOS, OpenSUSE)
  • Additional package managers (brew, chocolatey)
  • Automated testing
  • Documentation
  • Graphical interface

๐Ÿ—บ๏ธ Roadmap

v0.2.0 - Security (Next 4 weeks)

  • Snapshot encryption
  • Safe package list (whitelist)
  • Sensitive data filtering
  • Integrity verification

v0.3.0 - Multi-OS (8 weeks)

  • Windows support (WSL)
  • macOS support
  • Homebrew support
  • Chocolatey support

v1.0.0 - GUI and Cloud (12 weeks)

  • Graphical interface (PyQt6)
  • Cloud storage (Google Drive, Dropbox)
  • Community templates
  • Pro version with advanced features

๐Ÿ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.


๐Ÿ‘จโ€๐Ÿ’ป Author

Bernardo


๐Ÿ™ Acknowledgments

  • Click - Fantastic CLI framework
  • Rich - Beautiful colored interface
  • Git - Robust sync system
  • Python Community - Amazing tools

โญ Like the Project?

If EnvForge helped you, consider:

  • โญ Give it a star on GitHub
  • ๐Ÿ› Report bugs or suggest improvements
  • ๐Ÿ“ข Share with other developers
  • ๐Ÿค Contribute with code or documentation

๐Ÿ”ฅ Stop manually reconfiguring environments - forge with EnvForge! ๐Ÿ”ฅ

๐Ÿ‡ง๐Ÿ‡ท Portuguรชs | ๐Ÿ‡บ๐Ÿ‡ธ English

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

envforge-0.1.3.tar.gz (39.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

envforge-0.1.3-py3-none-any.whl (32.6 kB view details)

Uploaded Python 3

File details

Details for the file envforge-0.1.3.tar.gz.

File metadata

  • Download URL: envforge-0.1.3.tar.gz
  • Upload date:
  • Size: 39.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.3

File hashes

Hashes for envforge-0.1.3.tar.gz
Algorithm Hash digest
SHA256 01251a84bdda5b7e0473c323b23c43f33c8b6c2b5513c4956c47440fb0a9b656
MD5 4119591b690685df2f9e8521ed617b60
BLAKE2b-256 892c69376087c3728ca564a01228dcd2fdc1c939db69d4e4a8d6de6139efa096

See more details on using hashes here.

File details

Details for the file envforge-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: envforge-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 32.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.3

File hashes

Hashes for envforge-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 512297f49986988ab19ac8be3d18d84bc6e857b3e1205526ea81a3eead700492
MD5 cbe0b19e356671ea44112d9356d36d91
BLAKE2b-256 97675d99f6f843590d232d7dcd9eb184309406fbdc0417a70efe669bed07bc47

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page