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