{"id":19654580,"url":"https://github.com/bryndin/provo","last_synced_at":"2026-04-21T10:02:11.733Z","repository":{"id":243609641,"uuid":"812764214","full_name":"bryndin/provo","owner":"bryndin","description":"Provo: A modular shell scripting framework for organizing your automation scripts into reusable modules, streamlining environment setups, host provisioning, and various automation tasks.","archived":false,"fork":false,"pushed_at":"2024-06-15T00:21:51.000Z","size":26,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-01-10T00:27:33.683Z","etag":null,"topics":["automation","automation-framework","cli","command-line-tool","devops","devops-tools","dotfiles","environment-setup","modular","productivity","reusability","reusable","scripting","setup-scripts","shell-script","shell-scripting","sysadmin-tool","system-administration-tool","system-configuration","workflow-automation-tools"],"latest_commit_sha":null,"homepage":"","language":"Shell","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/bryndin.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}},"created_at":"2024-06-09T20:10:16.000Z","updated_at":"2024-06-15T00:19:46.000Z","dependencies_parsed_at":"2024-06-15T00:38:54.605Z","dependency_job_id":"31c0f43d-82d2-47c3-8d59-19fa9e79e442","html_url":"https://github.com/bryndin/provo","commit_stats":null,"previous_names":["bryndin/provo"],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bryndin%2Fprovo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bryndin%2Fprovo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bryndin%2Fprovo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bryndin%2Fprovo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bryndin","download_url":"https://codeload.github.com/bryndin/provo/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240962950,"owners_count":19885549,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["automation","automation-framework","cli","command-line-tool","devops","devops-tools","dotfiles","environment-setup","modular","productivity","reusability","reusable","scripting","setup-scripts","shell-script","shell-scripting","sysadmin-tool","system-administration-tool","system-configuration","workflow-automation-tools"],"created_at":"2024-11-11T15:17:42.409Z","updated_at":"2026-04-21T10:02:11.617Z","avatar_url":"https://github.com/bryndin.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Provo - Taming the Chaos of Automation Scripts\n\nProvo is a modular framework designed to streamline the automation of your workflows, especially when it comes to setting up and provisioning environments. Think of it as a powerful manager for all your automation scripts.\n\nProvo's strength lies in its modularity. It helps you organize your collection of automation scripts into a system of reusable modules. Want to quickly set up a new VM? Configure your editor just the way you like it? Deploy your dotfiles? Provo makes it a breeze. Simply clone your Provo setup to any machine and, with a single command, run the workflow you need.\n\n## Use Cases\n\n- **Working with Remote Hosts:** Connect to different VMs to investigate logs, perform active debugging, or leave a script running overnight. Run your setup and work within the comfort of your custom environment, even if they were bare systems with outdated shells, basic prompts, and missing needed packages.\n\n- **Configuring a New Developer Laptop:**  Migrate years of fine-tuning your development environment to a new laptop without hassle. Don't worry if your old laptop is gone, the image is incompatible, or cloud restore is hanging – with a modular system, it's easy to keep setup scripts up-to-date and get running in no time.\n\n- **Synchronizing Multiple Environments:**  Maintain a consistent look and feel across your macOS laptop, Debian VMs, and Windows desktop with WSL2 and Ubuntu.\n\n- **Moving Your Website to a New Host:** Seamlessly transition your website from Amazon AWS to Google Cloud (or any other host) by recreating all your setups, including MySQL, Apache, WordPress, etc.\n\n- **Provisioning a New VM:** With scripted CLI tools quickly provision a new development VM to replace a misbehaving one or add more boxes to distribute the load.\n\nWith Provo and your custom modules, you can configure your shell, prompt, and editor, unroll your development setup, launch a VM, or migrate a host within seconds, boosting your productivity.\n\n## Features\n\n- **Modular Design:** Promotes organizing your automation scripts into reusable, self-contained modules.\n- **Dependency Management:** Verifies that declared requirements are met before running any module actions.\n- **Error Handling:** Propagates error codes from individual modules to the framework, allowing for easy identification and debugging.\n- **Safe Execution:** Stops execution if any error or missing dependency is detected, ensuring the correct order of module execution.\n\n## Installation\n\nWhile you can clone Provo directly:\n\n```shell\ngit clone https://github.com/bryndin/provo\n```\n\nIt's typically recommended to fork the repository to customize it with your own modules:\n\n1. **Fork** the [Provo repository](https://github.com/bryndin/provo) on GitHub.\n2. **Clone** your forked repository:\n\n   ```shell\n   git clone https://github.com/\u003cyour-username\u003e/provo.git\n   ```\n\n3. **Create and add your modules** to the `modules` directory.\n\n    See [Modules Docs](https://github.com/bryndin/provo/blob/master/modules/README.md).\n\nThis approach allows you to easily manage your custom modules and keep them separate from the original Provo repository.\n\n## Usage\n\n1. **Specify an action and modules:**\n\n   Provide an action (`install`, `update`, or `remove`) to run on a list of modules:\n\n    ```shell\n    ./provo [install|update|remove] [module1 module2 ...]\n    ```\n\n2. **Hardcode common modules (optional):**\n\n   If you have a predominantly common setup, hardcode it in the `MODULES` list inside the `provo` script and omit passing modules:\n\n    ```shell\n    ./provo [install|update|remove]\n    ```\n\n## Modules\n\n*Modules* are the core concept in Provo, representing units of provisioning logic. Convert your automation scripts into Provo's *modules* to leverage the framework's capabilities for organizing, managing, and running these scripts in a standardized manner.\n\n[Modules Docs](https://github.com/bryndin/provo/blob/master/modules/README.md) cover the Modules and Action Scripts structure, and explain how to create modules.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbryndin%2Fprovo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbryndin%2Fprovo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbryndin%2Fprovo/lists"}