Перейти к основному содержимому

pipeline, sources, revisions

Пайплайн — это проект: корень дерева владения, арбитр своих ранов и держатель версии, которую используют автоматические запуски. Всё под ним — записи:

$ graphenectl tree pipeline/perf-nightly
pipeline/perf-nightly
gitsource/nightly-main (ready)
trigger/perf-nightly.push (ready)
trigger/perf-nightly.cron (ready)
revision/perf-nightly.a9bf6299f2d5b3b3 (ready)

Сам пайплайн, его источники и ревизии читаются и управляются общими глаголами apply, get, invoke, delete. Под source и revision остаётся только то, что эти глаголы не могут переносить: байты и потоки.

Git-источники​

gitsource — checkout ссылки Git. Файлы доступны для чтения и не редактируются: изменение checkout создало бы собственную ветвь, которую надо хранить, сравнивать и сливать, а Graphene не является системой контроля версий. Поток однонаправленный:

$ graphenectl apply gitsource main --spec '{"pipelineId":"perf-nightly","url":"https://github.com/acme/perf.git","ref":"main","subdir":"full","runtime":"go"}'
$ graphenectl invoke gitsource main sync # снова получить ref

credentialRef может назвать секрет Graphene для приватного репозитория. В записи остаётся только имя; значение разрешается во время fetch.

Git-источники в Graphene доступны только для чтения. Studio и graphenectl source files/cat показывают checkout для просмотра. Код изменяется в исходном репозитории, после движения Git ref вызывается sync.

Загрузка локальных исходников​

Локальный каталог можно материализовать, не объявляя source-запись. Это development-путь revision materialize --upload:

$ graphenectl revision materialize perf-nightly --upload ./my-code

graphenectl source upload perf-nightly ./my-code — низкоуровневый канал байтов: он сохраняет tarball и печатает ссылку, но сам не создаёт source-запись.

source — байты​

graphenectl source files <kind/id> # дерево файлов
graphenectl source cat <kind/id> <path> # прочитать файл
graphenectl source download <kind/id> [-o out.tgz]
graphenectl source upload <pipeline> <dir|file.tgz>
graphenectl source runtimes

Источник всегда называется как kind/id (gitsource/main) — клиент не угадывает kind по короткому имени. source runtimes перечисляет toolchains, которые умеет собирать эта инсталляция. Go 1.26 встроен; администратор может явно добавить build runtime, но это не добавляет Graphene SDK для другого языка.

Каждый успешный Git fetch обновляет resolved commit, digest дерева и generation записи:

$ graphenectl get gitsource/main -o json --jq .resource.state.generation
4

revision — сборка и draft-run​

graphenectl revision materialize <pipeline> [--source kind/id] [--upload dir]
graphenectl revision run <pipeline> <revision> [--params JSON]

materialize собирает источник в неизменяемую ревизию на сервере. Build является собственным Init revision-записи и продолжается после отключения клиента; команда лишь наблюдает поток прогресса. При одном источнике он выбирается автоматически, при нескольких сервер требует --source. --upload передаёт локальный каталог, не объявляя source.

run запускает draft любой ревизии, активной или нет, проверяет параметры по её собственному manifest и выполняет её образ.

Активация — команда пайплайна, не глагол ревизии:

$ graphenectl invoke pipeline perf-nightly activate --data '{"revisionId":"a9bf6299f2d5b3b3"}'

Запись сама читает manifest из blob store, приводит триггеры и словарь kinds к нужному состоянию и запоминает revisionId. Rollback — активация старой ревизии. Список ревизий остаётся общей выборкой:

$ graphenectl get revision --owner pipeline/perf-nightly