
Новые возможности автоматизаций: что изменилось
Что нового:
- Теперь можно коммитить из CI в репозиторий (например, сделать процесс сборки и публикации версий пакета).
- Появилась возможность обращаться к публичному API.
- Добавили возможность переиспользовать кубики.
- Переменные окружения теперь можно определять на уровне всего рабочего процесса.
- Self-hosted раннеры можно запускать на ARM (бета-тестирование).
Коммиты из CI
Раньше при автоматическом получении локальной копии репозитория секция remote в .git/config оставалась пустой. Теперь при подготовке окружения мы создаём глобальный .git/config для бесшовной работы. Это позволяет работать с репозиторием изнутри кубика и выполнять ‑ git push/pull и другие команды привычным способом.
Пример выполнения ‑ git fetch внутри кубика
tasks:
- name: git-fetch
cubes:
- name: git-fetch
script:
- git checkout master
- git fetch
Конфигурация CI в SourceCraft Sites
В шаблоне Sites появился файл ci.yaml с готовыми примерами конфигурации CI для сборки и публикации статических сайтов. Они наглядно демонстрируют возможность коммитить прямо из CI. Улучшение упрощает работу с шаблоном и ускоряет настройку автоматизации.
Доступ к публичному API из CI
В переменные окружения добавлен пользовательский токен авторизации SOURCECRAFT_TOKEN
. Он позволяет из CI кубиков напрямую обращаться к Public API, например, чтобы получать данные или обновлять статусы задач, без необходимости дополнительной настройки.
Пример использования пользовательского токена авторизации для получения всех своих задач
on:
push:
- workflows: [list-issues]
workflows:
push-workflow:
tasks:
- issues-task
tasks:
- name: issues-task
cubes:
- name: i-have-got-issues
script:
- 'curl -H "Authorization: Bearer $SOURCECRAFT_TOKEN" https://api.sourcecraft.tech/me/issues | jq'
Упрощение конфигурации
Переиспользование кубиков
Теперь перечень логических действий, таких как вызов скрипта или запуск Docker-контейнера, можно определить один раз в блоке cubes
и затем ссылаться на него в различных заданиях и рабочих процессах с помощью параметра uses
. Например, в кубике можно задать параметры окружения для обеспечения единообразия при сборке сервисов на Go: все участники команды смогут использовать кубик с одинаковыми опциями сборки в своих заданиях.
Пример переиспользуемого кубика
cubes:
- name: build-go
image: golang:1.24.4-alpine3.22
env:
BUILD_DIR: "."
GOOS: "linux"
GOARCH: "amd64"
CGO_ENABLED: "1"
BUILD_ARGS: ""
script:
- set -x
- apk add build-base
- GOOS="$GOOS" GOARCH="$GOARCH" CGO_ENABLED="$CGO_ENABLED" go build -C "$BUILD_DIR" $BUILD_ARGS
tasks:
- name: build-my-service
cubes:
- uses: build-go
name: build-my-service
env:
BUILD_DIR: "./path/to/source"
BUILD_ARGS: "-o my-service -mod=vendor"
- name: build-my-another-service
cubes:
- uses: build-go
name: build-my-another-service
env:
BUILD_DIR: "some/completely/different/path"
CGO_ENABLED: "0"
Определение переменных для всего рабочего процесса
Добавили возможность задавать переменные окружения для разных заданий в рамках одного рабочего процесса. Общие переменные, заданные в блоке env
рабочего процесса, доступны всем заданиям и не требуют переопределения для каждого отдельно.
Полезно в случаях, когда требуется установить параметры выполнения заданий или кубиков и применять их в разных сценариях. Например, для сборки различных окружений скрипты создаются один раз и могут многократно использоваться с переменными окружения.
Пример рабочего процесса с общими переменными окружения для двух заданий
workflows:
my-workflow:
env:
WORKFLOW_VAR: test-var-'test'-\"test\"
tasks:
- name: my-first-task
cubes:
- name: my-cube
script:
- echo "$WORKFLOW_VAR"
- name: my-second-task
cubes:
- name: my-cube
script:
- echo "$WORKFLOW_VAR"
Поддержка ARM для self-hosted processor
Доступны две новые сборки пользовательского воркера для Linux ARM и Linux ARM64 в бета-тестировании. Решения подходят для запуска на Raspberry Pi и других микроконтроллерах.