Git

Работа с ALS

ALS (ALT Linux Services) это платформа разработки ALT Linux на домене altlinux.space. Это Forgejo, форк Gitea: репозитории, ветки, pull request, CI, релизы и реестр контейнерных образов. Здесь собирается и хранится разработка Atomic Niri, а эта страница описывает общие приёмы работы с платформой.

Что есть на платформе#

ВозможностьЧто даётАдрес
Git-хостингрепозитории, ветки, теги, pull requesthttps://altlinux.space/{владелец}/{репозиторий}
Forgejo ActionsCI и CD, workflow в .forgejo/workflows/вкладка «Actions» репозитория
REST APIсовместимо с Gitea и Forgejohttps://altlinux.space/api/v1
Реестр образовOCI-образы для bootc и podmanaltlinux.space/{владелец}/{репозиторий}
Релизыgit-релизы с приложенными файламивкладка «Релизы» репозитория
ALS Pagesстатические сайтыhttps://{владелец}.altlinux.team/{репозиторий}/
Раннерымашины для CIметки als-tiny, als-huge

Учётная запись и доступ#

  1. Зарегистрируйтесь на altlinux.space.
  2. Создайте токен доступа: «Настройки», затем «Приложения», затем «Создать токен». Выдайте права на репозитории (чтение и запись). Для публикации пакетов и реестра добавьте права на пакеты.
  3. Токен это пароль. Не вставляйте его в адрес remote и не коммитьте.

Чтобы git сам подставлял токен, включите хранилище учётных данных:

git config --global credential.helper store git clone https://altlinux.space/ВЛАДЕЛЕЦ/РЕПОЗИТОРИЙ.git

При первом push git спросит имя и пароль. Пароль это ваш токен, имя пользователя это ваш логин, а git запомнит их в ~/.git-credentials.

Осторожно. Файл ~/.git-credentials хранит токен открытым текстом. Ограничьте доступ: chmod 600 ~/.git-credentials.

Как предложить правку#

Для чужого репозитория обычный путь такой:

  1. Нажмите «Форкнуть» на странице репозитория.
  2. Склонируйте свой форк и создайте ветку от основной ветки проекта (в репозиториях Atomic Niri это dev).
  3. Внесите правки, проверьте их (проверка без пересборки).
  4. Отправьте ветку в свой форк и откройте pull request в ту же ветку исходного репозитория.
git clone https://altlinux.space/ВАШ_ЛОГИН/РЕПОЗИТОРИЙ.git cd РЕПОЗИТОРИЙ git checkout -b my-feature dev git add -A git commit -m "Описание правки" git push origin my-feature

Свой репозиторий#

Проект живёт в собственном репозитории под вашей учётной записью или организацией. Репозиторий можно создать в веб-интерфейсе или через API:

curl -X POST -H "Authorization: token $TOKEN" -H "Content-Type: application/json" \ -d '{"name":"my-project","description":"Описание проекта","private":false}' \ https://altlinux.space/api/v1/user/repos

Для плагинов Tuner принято своё имя, см. плагины Tuner.

CI: Forgejo Actions#

Workflow лежат в .forgejo/workflows/*.yml (не в .github). В новом репозитории Actions могут быть выключены. Включить их можно в настройках репозитория или через API:

curl -X PATCH -H "Authorization: token $TOKEN" -H "Content-Type: application/json" \ -d '{"has_actions":true}' https://altlinux.space/api/v1/repos/ВЛАДЕЛЕЦ/РЕПОЗИТОРИЙ

Раннеры#

Образ для задачи выбирается параметром container.image, а метка раннера определяет только мощность:

МеткаПредел времениДля чего
als-tiny5 минутлинтеры, форматирование, быстрые тесты
als-huge5 часовсборки и долгие задачи

Пример: собрать проект на meson#

name: Build on: push: branches: [main, dev] pull_request: jobs: build: runs-on: als-huge container: image: altlinux.space/actions/runner/containers:sisyphus steps: - uses: actions/checkout@v4 - name: Зависимости run: | apt-get update -qq apt-get install -y -qq meson gcc pkgconfig libgtk4-devel - name: Сборка run: | meson setup build --prefix=/usr meson compile -C build

Запуск вручную через API (workflow_dispatch):

curl -X POST -H "Authorization: token $TOKEN" -H "Content-Type: application/json" \ -d '{"ref":"main"}' \ https://altlinux.space/api/v1/repos/ВЛАДЕЛЕЦ/РЕПОЗИТОРИЙ/actions/workflows/build.yml/dispatches

Ответ 204 значит успех, 404 значит, что Actions выключены или такого workflow нет, а 422 значит подождать несколько секунд.

Секреты#

Токен для CI кладут в секреты репозитория (secrets.REGISTRY_TOKEN) и берут оттуда в workflow. В коде и в логах его быть не должно.

Релизы#

Релиз это тег с приложенными файлами. Через API:

# создать релиз (тег создастся сам) curl -X POST -H "Authorization: token $TOKEN" -H "Content-Type: application/json" \ -d '{"tag_name":"v1.0","target_commitish":"main","name":"v1.0","body":"Первая версия"}' \ https://altlinux.space/api/v1/repos/ВЛАДЕЛЕЦ/РЕПОЗИТОРИЙ/releases # приложить файл (подставьте id релиза из ответа) curl -X POST -H "Authorization: token $TOKEN" -H "Content-Type: application/octet-stream" \ --data-binary @archive.tar.gz \ "https://altlinux.space/api/v1/repos/ВЛАДЕЛЕЦ/РЕПОЗИТОРИЙ/releases/ID/assets?name=archive.tar.gz"

Через релизы с приложенными файлами публикуются и виджеты Niti, см. публикация плагина Niti.

Реестр образов#

Образы лежат в реестре altlinux.space/ВЛАДЕЛЕЦ/ИМЯ_ОБРАЗА с метками. Вход и загрузка:

podman login altlinux.space podman pull altlinux.space/ВЛАДЕЛЕЦ/ИМЯ_ОБРАЗА:МЕТКА

Для входа имя любое непустое, а пароль это токен. Список образов и меток: https://altlinux.space/ВЛАДЕЛЕЦ/ИМЯ_ОБРАЗА/packages. Метки образа Atomic Niri описаны на странице каналов.

ALS Pages#

Сайт можно публиковать из репозитория. Адрес выглядит так: https://ВЛАДЕЛЕЦ.altlinux.team/РЕПОЗИТОРИЙ/. Сайт собирается workflow и публикуется в ветку pages действием actions/deploy-pages. Кэш занимает около десяти минут, поэтому правка видна не сразу.

Так устроен и этот сайт: в репозитории лежит генератор, а workflow собирает страницы при каждом изменении в main.

Правила хорошего тона#

  • Не занимайте общие раннеры долгими ненужными сборками.
  • Не удаляйте чужие запуски, ветки и репозитории.
  • Обсуждайте крупные правки заранее: в issue репозитория или в чате ALT Atomic.