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

Git actions

Git-библиотека запускает Git самой машины. Она намеренно оборачивает частые CI операции, а не весь CLI. Каждый возвращённый call выполняется через activity.Activity или ActivityAll.

Установка и checkout

_, err := activity.Activity(ctx, agent, gitlib.Install())
checkout, err := activity.Activity(ctx, agent, gitlib.Checkout(gitlib.Spec{
Repository: "https://github.com/acme/app.git",
Ref: "main",
ExpectedCommit: commit,
Depth: 1,
Clean: true,
Submodules: true,
}))

Каталог по умолчанию — <machine.Workspace()>/src/<repo>. Повтор того же репозитория делает fetch и reset; другой каталог удаляется и клонируется. ExpectedCommit превращает сдвинувшийся ref в non-retryable error.

Read и write операции

CallОбязательные поляРезультат
LsRemoteRepository; опционально Ref, Authразрешённый commit
TagDir, Name; опционально Message, Push, Authname и commit
CommitDir, Message, author name/email; опционально paths и pushcommit и факт его создания

Повторный tag того же commit и commit чистого дерева — успешные no-op. Tag, указывающий на другой commit, — ошибка.

Credentials

gitlib.Auth{
TokenSecret: pipeline.Secret(ctx, "git-token"),
TokenUser: "oauth2",
SSHKeySecret: pipeline.Secret(ctx, "git-key"),
}

HTTPS token становится временным http.extraHeader; SSH key пишется во временный файл и удаляется после вызова. Credentials остаются ссылками, разрешаются внутри action и не пишутся в .git/config. SSH сейчас использует StrictHostKeyChecking=accept-new; если политика требует заранее закреплённый host key, используйте HTTPS token.

Для необёрнутой операции создайте именованный action вокруг machine.Command. Input должен быть сериализуем, а гарантия выполнения выбрана явно.