PHPackages                             dantleech/maestro - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. dantleech/maestro

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

dantleech/maestro
=================

Maestro the Second

19231[2 issues](https://github.com/dantleech/maestro2/issues)PHP

Since Dec 15Pushed 5y ago2 watchersCompare

[ Source](https://github.com/dantleech/maestro2)[ Packagist](https://packagist.org/packages/dantleech/maestro)[ RSS](/packages/dantleech-maestro/feed)WikiDiscussions master Synced today

READMEChangelogDependenciesVersions (2)Used By (0)

Maestro2
========

[](#maestro2)

[![CI](https://github.com/dantleech/maestro2/workflows/CI/badge.svg?branch=master)](https://github.com/dantleech/maestro2/workflows/CI/badge.svg?branch=master)

Maestro2 is a Repository Manager System for PHP.

Think of it like Ansible for repositories.

- Perform upgrades on multiple packages.
- Standardize configuration accross repositories.
- Run CI
- Conduct surveys (discover latest tags, CI status etc)

This project is a work-in-progress.

How It Works
------------

[](#how-it-works)

Maestro is essentially a concurrent task runner which is conveniently adapted for working with repositories.

It is your job to create a *pipeline* class. This class will be instantiated and passed the *configuration node*, and it must return a *task*. This *task*can be an aggregate of many tasks.

Configuration
-------------

[](#configuration)

### `maestro.json`

[](#maestrojson)

This is the main configuration file, which can look something like:

```
{
    "core.inventory": [
        "example/inventory.json",
        "example/secrets.json"
    ],
    "core.templatePath": "example/templates",
    "core.workspacePath": "var",
    "core.concurrency": 10
}

```

The inventory files are where we define our repositories and variables:

```
{
    "vars": {
        "jobs": [
            "php-cs-fixer",
            "phpstan",
            "phpunit"
        ],
        "defaultBranch": "master"
    },
    "repositories": [
        {
            "name": "maestro",
            "url": "git@github.com:dantleech/maestro2",
            "vars": {
                "jobs": [
                    "psalm",
                    "phpunit"
                ]
            }
        },
        {
            "name": "worse-reflection",
            "url": "git@github.com:phpactor/worse-reflection"
        }
    ]
}

```

The inventory files will be merged and cast into configuration nodes which can be used by pipelines.

Pipelines
---------

[](#pipelines)

Create a pipeline and ensure that it is autoloadable, for example:

```
