elide build выводит задачи из наборов исходников и артефактов в elide.pkl и выполняет их в порядке зависимостей.
Задачи с неизменившимися входными данными пропускаются или восстанавливаются из кеша.
Запуск сборки
elide build # run the default group
elide build compile-java-main # run one task
elide build compile # run a group
elide build clean # the clean target
elide build --inspect # list tasks and their options without runningАргумент задаёт задачу или группу; начальное двоеточие (:compile-java-main) необязательно. Цель, которой ничего не
соответствует, приводит к ошибке сборки.
| Группа | Псевдоним | Задачи |
|---|---|---|
default | — | То, что выполняет elide build без аргументов. |
dependencies | deps | Разрешение и установка зависимостей. |
compilation | compile | Компиляция исходников. |
testing | test | Тесты; их также запускает elide test. |
Некоторые задачи принимают параметры; их выводит --inspect:
elide build test --select=class:com.example.SomeTest
elide build run --args="a b c"В рабочем пространстве добавьте префикс проекта: core:compile-kotlin-main,
core:compile или core для его задач по умолчанию. Цели без префикса ищутся в текущем проекте, затем в корне.
--inspect группирует задачи по проектам, а строки прогресса называют проект ([core] Compiling Kotlin sources).
Параметры
Параметры записываются как --name или --name=value в любом месте среди целей. Аргументы после -- передаются
процессу, который запускает задача.
| Параметр | Действие |
|---|---|
--inspect, -i | Вывести задачи и их параметры без запуска. |
--no-cache | Игнорировать кеш и локальное состояние сборки; выполняются все задачи. |
--offline | Без загрузки зависимостей и без общего кеша. |
--workers=N | Не более N одновременных задач (по умолчанию — число процессоров). Знак = обязателен. |
--insights=FILE | Запускать скрипт Insight в задачах, которые запускают программы; можно повторять. |
-f NAME[=VALUE] | Флаг сборки, читается как build.flags; см. Флаги сборки. |
Параметры проверяются по задачам до начала выполнения. Неизвестный параметр, отсутствующее или лишнее значение либо повторённый параметр приводят к ошибке:
Unknown option '--worker', did you mean '--workers'?
Option '--workers' requires a value, as '--workers=<value>'Глобальные флаги (-p, -v, --debug и другие) не проверяются. Параметры задач:
Зависимости, Тестирование.
Кеш сборки
Локальный уровень включён всегда: ~/.elide/cache/entries-v2, по одному каталогу на ключ с записью и tar-архивом
результатов. При восстановлении проверяется записанный отпечаток. Записи в старом формате считаются промахом.
Общий уровень — это HTTP-кеш, который настраивается переменными окружения:
| Переменная | Назначение |
|---|---|
ELIDE_REMOTE_CACHE | URL конечной точки. Не задана — общего уровня нет. |
ELIDE_ | Bearer-токен; имеет приоритет над базовой аутентификацией. |
ELIDE_, ELIDE_ | Базовая аутентификация; данные пользователя в URL тоже работают. |
ELIDE_REMOTE_CACHE_PUSH | Выгружать результаты этой сборки (по умолчанию true). |
ELIDE_REMOTE_CACHE_PULL | Загружать при промахе (по умолчанию true). |
ELIDE_ | eager (по умолчанию) передаёт каждую запись; smart — только когда это экономит время. |
- Сначала проверяется локальный кеш; попадания в удалённом кеше сохраняются локально.
- Типичная настройка: CI выгружает, разработчики задают
ELIDE_REMOTE_CACHE_PUSH=false. - Недоступные, медленные или нечитаемые удалённые записи считаются промахами. Три сбоя транспорта подряд отключают
уровень до конца сборки. Ошибки HTTP, например
404, сбоями транспорта не считаются; об отклонённых учётных данных выводится одно предупреждение. - Сборка завершается ошибкой при URL со схемой, отличной от
http/https, пароле без имени пользователя, небулевомPUSH/PULLили учётных данных по незашифрованномуhttpк хосту, отличному от loopback. - Кеш отдаёт исполняемые результаты: используйте
https, требуйте аутентификацию для записи и ограничьте круг тех, кто может записывать. --offlineотключает общий уровень на один запуск;--no-cacheотключает кеширование.
.eliderc и политика smart
При smart запись загружается, только если это дешевле повторной сборки, и выгружается, только если выгрузка обходится
дешевле, чем работа, которую она экономит. Стоимость берётся из .eliderc (синтаксис java.util.Properties):
~/.eliderc, поверх него <project>/.eliderc. Файл описывает машину, поэтому не добавляйте его в репозиторий.
# ~/.eliderc
network.downlink = 200mbps
network.uplink = 20mbps
network.latency = 250ms
network.stability = good # good | fair | poor
machine.compute = fast # slow | normal | fast, or a multiplier such as 1.5
cache.remote.policy = smart # smart | eager (default)
cache.remote.upload-budget = 2.0
cache.remote.min-build = 500ms # work cheaper than this is never publishedMb/s и mbps — мегабиты; MB/s — мегабайты. Для нечитаемых значений выводится предупреждение и используется
значение по умолчанию. ELIDE_REMOTE_CACHE_POLICY переопределяет cache.remote.policy. При eager файл ни на что не
влияет.
Состояние сборки
| Файл | Роль |
|---|---|
.dev/elide.lock.v2.bin | Переносимые отпечатки задач, которые можно использовать на разных машинах. Это не lock-файл зависимостей. |
.dev/elide.build.bin | Отпечатки задач, локальные для машины. |
.dev/elide.filehash.bin | Хеши файлов с ключом по размеру, времени, inode и режиму, чтобы не перечитывать неизменённые файлы. |
- Двоичные файлы; не редактируйте их.
- Единого lock-файла зависимостей для всех экосистем нет; npm записывает
aube-lock.yaml. - В рабочем пространстве состояние всех участников хранится в
.dev/корня; результаты остаются в.dev/каждого проекта. --no-cacheигнорирует локальный файл состояния, но по-прежнему читает общий.elide installповторно использует разрешение, пока список зависимостей не меняется;--freshзаново загружает все зависимости, обновляя глобальный кеш.- Аргументы каждого компилятора записываются рядом с его результатом в
<tool>.args, по одному на строку.
Замер времени сборки
Каждая задача выводит свою длительность. Подробнее:
elide build -v # everything, at debug
ELIDE_LOG=dev.elide.tooling.build.telemetry=debug elide build # only the timings[debug] dev.elide.tooling.build.telemetry stage graph took 590us
[debug] dev.elide.tooling.build.telemetry op compile-kotlin-main · up-to-date (up-to-date) took 420us
[debug] dev.elide.tooling.build.telemetry task compile-kotlin-main (skipped: up-to-date) took 12.6msУчасток — это этап (конфигурация, граф, выполнение, сохранение состояния), задача или операция над задачей
(prepare, fingerprint, up-to-date, execute, поиск и запись в кеше). Работа внутри execute не детализируется.
ELIDE_BUILD_TELEMETRY по завершении сборки записывает локальную
трассировку Chrome; ничего не выгружается:
ELIDE_BUILD_TELEMETRY=1 elide build # .dev/telemetry/build-<stamp>.trace.json
ELIDE_BUILD_TELEMETRY=profile.json elide build # a file you name
ELIDE_BUILD_TELEMETRY=/tmp/traces elide build # a directory you nameОткройте её в Perfetto, chrome://tracing или speedscope либо
выполните:
jq -r '.traceEvents[] | select(.ph=="X") | "\(.dur/1000 | floor)ms \(.cat) \(.name)"' \
.dev/telemetry/build-*.trace.json | sort -rn | head