dantleech/maestro

Maestro 第二版

dev-master / 1.0.x-dev 2021-01-07 08:30 UTC

This package is auto-updated.

Last update: 2024-09-07 16:53:28 UTC


README

CI

Maestro2 是一个 PHP 仓库管理系统的。

想象一下它是用于仓库的 Ansible。

  • 对多个包执行升级。
  • 标准化跨仓库的配置。
  • 运行 CI
  • 进行调查(发现最新标签、CI 状态等)

此项目是一个正在进行中的项目。

工作原理

Maestro 实质上是一个方便与仓库一起工作的并发任务运行器。

您的任务是创建一个 pipeline 类。这个类将被实例化,并通过 configuration node 传递,它必须返回一个 task。这个 task 可以是许多任务的聚合。

配置

maestro.json

这是主要的配置文件,可能看起来像这样

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

库存文件是我们定义仓库和变量的地方

{
    "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"
        }
    ]
}

库存文件将被合并并转换成配置节点,这些节点可以由流水线使用。

流水线

创建一个流水线并确保它可以自动加载,例如

<?php
// example/EmptyPipeline.php

namespace Maestro\Examples\Pipeline;

use Maestro\Core\Inventory\MainNode;
use Maestro\Core\Pipeline\Pipeline;
use Maestro\Core\Task\NullTask;
use Maestro\Core\Task\SequentialTask;
use Maestro\Core\Task\Task;

class EmptyPipeline implements Pipeline
{
    public function build(MainNode $mainNode): Task
    {
        return new SequentialTask([
            new NullTask(),
        ]);
    }
}

然后您可以运行它

$ ./vendor/bin/maestro run pipeline/EmptyPipeline.php

这几乎什么都没做 - 实际上它什么也不会做,因为我们只指定了后续任务的 reporting group,然后是 NullTask

有关示例,请参阅此项目中的 example 目录。

有许多可以添加的任务(包括聚合任务,用于按顺序或并行运行更多任务)。这些可以在 Maestro\Core\Task\Task 的实现中找到(也位于同一命名空间中)。

文档

您将能够在这里阅读文档这里