elide build leitet Tasks aus den Source-Sets und Artefakten in elide.pkl ab und führt sie in
Abhängigkeitsreihenfolge aus. Tasks mit unveränderten Eingaben werden übersprungen oder aus dem Cache wiederhergestellt.
Build ausführen
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 runningEin Argument nennt einen Task oder eine Gruppe; ein führender Doppelpunkt (:compile-java-main) ist optional. Ein
Ziel, das auf nichts passt, lässt den Build fehlschlagen.
| Gruppe | Alias | Tasks |
|---|---|---|
default | — | Was ein einfaches elide build ausführt. |
dependencies | deps | Auflösung und Installation der Abhängigkeiten. |
compilation | compile | Kompilieren der Quellen. |
testing | test | Tests; werden auch von elide test ausgeführt. |
Manche Tasks nehmen Optionen an, die --inspect auflistet:
elide build test --select=class:com.example.SomeTest
elide build run --args="a b c"Stellen Sie in einem Workspace das Projekt voran: core:compile-kotlin-main,
core:compile oder core für seine Standard-Tasks. Ziele ohne Präfix werden im aktuellen Projekt aufgelöst, dann in
der Wurzel. --inspect gruppiert Tasks nach Projekt, und Fortschrittszeilen nennen es
([core] Compiling Kotlin sources).
Optionen
Optionen haben die Form --name oder --name=value und dürfen an beliebiger Stelle zwischen den Zielen stehen.
Argumente nach -- gehen an den Prozess, den ein Task startet.
| Option | Wirkung |
|---|---|
--inspect, -i | Tasks und ihre Optionen auflisten, ohne sie auszuführen. |
--no-cache | Cache und lokalen Build-Zustand ignorieren; jeder Task wird ausgeführt. |
--offline | Keine Downloads von Abhängigkeiten und kein gemeinsamer Cache. |
--workers=N | Höchstens N parallele Tasks (Standard: Anzahl der Prozessoren). = ist erforderlich. |
--insights=FILE | Ein Insight-Skript in Tasks ausführen, die Programme starten; wiederholbar. |
-f NAME[=VALUE] | Build-Flag, gelesen als build.flags; siehe Build-Flags. |
Optionen werden vor der Ausführung gegen die Tasks geprüft. Eine unbekannte Option, ein fehlender oder unerwarteter Wert oder eine wiederholte Option führen zum Fehlschlag:
Unknown option '--worker', did you mean '--workers'?
Option '--workers' requires a value, as '--workers=<value>'Globale Flags (-p, -v, --debug und die übrigen) sind davon ausgenommen. Task-Optionen:
Abhängigkeiten, Tests.
Build-Cache
Die lokale Stufe ist immer aktiv: ~/.elide/cache/entries-v2, ein Verzeichnis pro Schlüssel mit einem Datensatz
und einem Tar-Archiv der Ausgaben. Wiederherstellungen werden gegen den gespeicherten Fingerabdruck geprüft. Einträge
in einem älteren Format gelten als Fehltreffer.
Die gemeinsame Stufe ist ein HTTP-Cache, der über Umgebungsvariablen eingerichtet wird:
| Variable | Bedeutung |
|---|---|
ELIDE_REMOTE_CACHE | Endpunkt-URL. Nicht gesetzt: keine gemeinsame Stufe. |
ELIDE_ | Bearer-Token; hat Vorrang vor Basic-Authentifizierung. |
ELIDE_, ELIDE_ | Basic-Authentifizierung; Benutzerdaten in der URL funktionieren ebenfalls. |
ELIDE_REMOTE_CACHE_PUSH | Die Ausgaben dieses Builds hochladen (Standard true). |
ELIDE_REMOTE_CACHE_PULL | Fehltreffer herunterladen (Standard true). |
ELIDE_ | eager (Standard) überträgt jeden Eintrag; smart überträgt nur, wenn es Zeit spart. |
- Der lokale Cache wird zuerst geprüft; Treffer aus dem entfernten Cache werden lokal gespeichert.
- Typische Einrichtung: CI lädt hoch; Entwickler setzen
ELIDE_REMOTE_CACHE_PUSH=false. - Nicht erreichbare, langsame oder unlesbare entfernte Einträge gelten als Fehltreffer. Drei Transportfehler in Folge
schalten die Stufe für den Rest des Builds ab. HTTP-Fehler wie
404sind keine Transportfehler; bei einer abgelehnten Anmeldung erscheint einmal eine Warnung. - Der Build schlägt fehl bei einer URL, die nicht
http/httpsist, bei einem Passwort ohne Benutzernamen, bei einem nicht booleschenPUSH/PULLoder bei Anmeldedaten über unverschlüsselteshttpzu einem Host außerhalb von Loopback. - Der Cache liefert ausführbare Ausgaben: Verwenden Sie
https, verlangen Sie Authentifizierung für Schreibzugriffe und beschränken Sie, wer schreiben darf. --offlineschaltet die gemeinsame Stufe für einen Lauf ab;--no-cacheschaltet das Caching ab.
.eliderc und die Richtlinie smart
Unter smart wird ein Eintrag nur heruntergeladen, wenn das günstiger ist als ein erneuter Build, und nur hochgeladen,
wenn der Upload weniger kostet als die Arbeit, die er einspart. Die Kosten stammen aus .eliderc
(java.util.Properties-Syntax): ~/.eliderc, darüber <project>/.eliderc. Die Datei beschreibt die Maschine,
committen Sie sie also nicht.
# ~/.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 und mbps sind Megabit; MB/s ist Megabyte. Unlesbare Werte erzeugen eine Warnung, und der Standardwert gilt.
ELIDE_REMOTE_CACHE_POLICY überschreibt cache.remote.policy. Unter eager hat die Datei keine Wirkung.
Build-Zustand
| Datei | Zweck |
|---|---|
.dev/elide.lock.v2.bin | Portable Fingerabdrücke pro Task, zwischen Maschinen teilbar. Kein Lockfile für Abhängigkeiten. |
.dev/elide.build.bin | Maschinenlokale Fingerabdrücke pro Task. |
.dev/elide.filehash.bin | Datei-Digests mit Größe, Zeitstempeln, Inode und Modus als Schlüssel, damit unveränderte Dateien nicht erneut gelesen werden. |
- Binärdateien; nicht bearbeiten.
- Es gibt kein Lockfile für Abhängigkeiten aller Ökosysteme; npm schreibt
aube-lock.yaml. - In einem Workspace wird der Zustand aller Mitglieder im
.dev/der Wurzel gespeichert; Ausgaben bleiben im.dev/des jeweiligen Projekts. --no-cacheignoriert die lokale Zustandsdatei, liest aber weiterhin die gemeinsame.elide installverwendet die Auflösung wieder, solange sich die Abhängigkeitsliste nicht ändert;--freshlädt jede Abhängigkeit erneut herunter und frischt so den globalen Cache auf.- Die Argumente jedes Compilers werden neben seiner Ausgabe als
<tool>.argsgeschrieben, eines pro Zeile.
Build-Zeiten messen
Jeder Task gibt seine Dauer aus. Für mehr Details:
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.6msBereiche sind eine Phase (Konfiguration, Graph, Ausführung, Speichern des Zustands), ein Task oder eine
Operation eines Tasks (prepare, fingerprint, up-to-date, execute, Cache-Abfragen und -Speicherungen).
Arbeit innerhalb von execute wird nicht weiter aufgeschlüsselt.
ELIDE_BUILD_TELEMETRY schreibt am Ende des Builds einen lokalen
Chrome-Trace; nichts wird hochgeladen:
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Öffnen Sie ihn in Perfetto, chrome://tracing oder speedscope,
oder:
jq -r '.traceEvents[] | select(.ph=="X") | "\(.dur/1000 | floor)ms \(.cat) \(.name)"' \
.dev/telemetry/build-*.trace.json | sort -rn | head