No description
- Dockerfile 100%
BUILDTIME=$(date +%s) уходит в NEXT_PUBLIC_BUILDTIME, upstream форматирует его через new Intl.DateTimeFormat().format(new Date(buildTime)) в футере «О программе»; строка из секунд («1789826350») даёт Invalid Date → RangeError, и ErrorBoundary кладёт весь дашборд («Something went wrong: date value is not finite in DateTimeFormat.format()»). Ловится на первом рендере после пересоздания контейнера: prerender index с пустым конфигом, настройки с hideVersion: true доезжают только через ISR-регенерацию (кнопка обновления). Апстрим передаёт в это build-arg OCI-метку created (RFC3339), теперь так же. |
||
|---|---|---|
| .forgejo/workflows | ||
| dashy | ||
| docs | ||
| element-web | ||
| homepage | ||
| linkstack | ||
| memos | ||
| mortis | ||
| nora | ||
Документация пайплайнов сборки образов
Репозиторий container-build содержит Forgejo Actions workflow-ы для сборки и публикации контейнерных образов во внутренний реестр git.yadr00.internal/build/....
Все пайплайны:
- запускаются только вручную (
workflow_dispatch); - выполняются в контейнере
quay.io/containers/podman:latestна docker-runner; - используют
podman --storage-driver=vfsдля сборки; - публикуют образы от имени пользователя
alexrusчерез секретUPLOAD_TOKEN; - устанавливают доверие к локальному УЦ
step-ca(172.20.0.1:9000); - ставят системные пакеты через RPM-репозитории Хражевника (
khrazhevnik.panelka.yadr01.internal,priority=1) с--setopt=install_weak_deps=False— слабые зависимости не ставятся неосознанно; - очищают рабочее пространство и кеш Podman в финальном шаге (
if: always()).
Описания пайплайнов
| Пайплайн | Файл workflow | Документация |
|---|---|---|
| LinkStack | .forgejo/workflows/build-linkstack.yml |
build-linkstack.md |
| Memos | .forgejo/workflows/build-memos.yml |
build-memos.md |
| NORA | .forgejo/workflows/build-nora.yml |
build-nora.md |
| Dashy | .forgejo/workflows/build-dashy.yml |
build-dashy.md |
| Mortis | .forgejo/workflows/build-mortis.yml |
build-mortis.md |
| Homepage | .forgejo/workflows/build-homepage.yml |
build-homepage.md |
| Element Web | .forgejo/workflows/build-element-web.yml |
build-element-web.md |
Сводная таблица особенностей
| Параметр | LinkStack | Memos | NORA | Dashy | Mortis | Homepage | Element Web |
|---|---|---|---|---|---|---|---|
| Источник версии образа | входной параметр | входной параметр | входной параметр | входной параметр | входной параметр | входной параметр | входной параметр |
| Количество исходных репо | 2 (docker + LinkStack) | 1 (memos) | 1 (nora) | 1 (dashy) | 1 (mortis) | 1 (homepage) | 1 (element-web) |
| Дополнительные файлы из CB | Containerfile | Containerfile | Containerfile, config.toml | Containerfile | Containerfile | Containerfile | Containerfile, configs/nginx/nginx.conf |
| Сертификат step-ca в образе | да | да | нет | да | да | да | да |
| Компиляция в раннере | нет | нет | нет | нет | нет | нет | нет |
| OCI-метки | нет | нет | нет | нет | нет | нет | да (version, created) |
| Build-arg | нет | нет | нет | нет | да (VERSION) |
да (VERSION, REVISION, BUILDTIME) |
да (VERSION, CREATED) |
Пакетные менеджеры: Nora и Хражевник
Внешние зависимости пайплайнов и Containerfile'ов идут через Nora (nora.panelka.yadr01.internal) и Хражевник (khrazhevnik.panelka.yadr01.internal) там, где формат поддерживается:
- RPM (dnf) — кеш-прокси Хражевника
/rpm/fedora/+/rpm/fedora-updates/сpriority=1(раннеры CI; дефолтные fedora-репо образа остаются fallback'ом, т.к. базовый fedora уquay.io/containers/podman:latestплавается); - APK (alpine) — кеш-прокси Хражевника
/apk/alpine/...во всех стадиях Containerfile'ов (репозитории переписываются sed'ом, корень step-ca дописывается в bundle до первогоapk); - Go-модули —
GOPROXY=https://nora.panelka.yadr01.internal/go,direct(mortis, memos backend); - npm-пакеты — rewrite registry на
https://nora.panelka.yadr01.internal/npm(memos, dashy — sed по lock-файлу; homepage, element-web —.npmrcв корне проекта); - Corepack (pnpm/yarn-бандлы) —
COREPACK_NPM_REGISTRY=https://nora.panelka.yadr01.internal/npm/(memos, dashy); ENV обязан стоять ДО первого вызова corepack/yarn. Не работает в homepage и element-web: corepack ходит на{registry}/{name}/{version}с corgi-Accept, где Nora отдаёт документ безdist— там pnpm ставится npm-клиентом (npm install -g pnpm@… --registry=…nora…/npm/); - Cargo-крейты — sparse index
replace-with = "nora"в.cargo/config.toml(nora); - Базовые образы —
nora.panelka.yadr01.internal/library/...(все Containerfile).
Не проксируются (формат отсутствует и в Nora v1.1.0, и в Хражевнике v1), идут напрямую по публичным CA после update-ca-certificates:
- PHP/Composer (packagist.org) — linkstack;
- GitHub-тарболлы pnpm (
github:…-зависимости: matrix-js-sdk#develop, eslint-plugin-element-call) — element-web.