← Code-Übersicht

run-migrations.php

Pfad: run-migrations.php

Ext: php

Größe: 1860 Bytes

Geändert: 2026-07-16 18:11:15+02

<?php
declare(strict_types=1);

use Demo\Autoloader;
use Demo\Infrastructure\Config\CredentialsProvider;
use Demo\Infrastructure\Persistence\MigrationRunner;
use Demo\Infrastructure\Persistence\PdoConnectionFactory;

require __DIR__ . '/src/Autoloader.php';
(new Autoloader(__DIR__ . '/src'))->register();

if (PHP_SAPI !== 'cli') {
    fwrite(STDERR, "Nur CLI-Aufruf erlaubt\n");
    exit(2);
}

$baseline = null;
foreach (array_slice($argv, 1) as $argument) {
    if (preg_match('/^--baseline=(\d{1,4})$/', $argument, $match) === 1) {
        $baseline = (int) $match[1];
        continue;
    }
    fwrite(STDERR, "Unbekanntes Argument: {$argument}\n");
    exit(2);
}

try {
    $peerDatabase = getenv('MIGRATION_PEER_DATABASE');
    if (is_string($peerDatabase) && $peerDatabase !== '') {
        if (preg_match('/^[a-zA-Z_][a-zA-Z0-9_]{0,62}$/', $peerDatabase) !== 1) {
            throw new RuntimeException('MIGRATION_PEER_DATABASE ist ungueltig');
        }
        $pdo = new PDO('pgsql:host=/var/run/postgresql;dbname=' . $peerDatabase);
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
    } else {
        $credentialsDir = getenv('APP_CREDENTIALS_DIR') ?: __DIR__ . '/credentials';
        $credentials = (new CredentialsProvider($credentialsDir))->database();
        $pdo = (new PdoConnectionFactory($credentials))->create();
    }
    $runner = new MigrationRunner($pdo, __DIR__ . '/migrations', getenv('USER') ?: 'migration-cli');
    $result = $runner->run($baseline);
    fwrite(STDOUT, json_encode(['ok' => true, 'changes' => $result], JSON_PRETTY_PRINT | JSON_THROW_ON_ERROR) . "\n");
} catch (Throwable $error) {
    fwrite(STDERR, json_encode(['ok' => false, 'error' => $error->getMessage()], JSON_THROW_ON_ERROR) . "\n");
    exit(1);
}

Frühere Versionen

Version Zeitpunkt Operation
51 2026-07-16 20:11:24.652981+02 UPDATE
31 2026-07-16 19:55:01.884462+02 UPDATE