elide build déduit des tâches des source sets et des artefacts de elide.pkl et les exécute dans l’ordre des
dépendances. Les tâches dont les entrées n’ont pas changé sont ignorées ou restaurées depuis le cache.
Lancer un build
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 runningUn argument nomme une tâche ou un groupe ; le deux-points initial (:compile-java-main) est facultatif. Une cible qui
ne correspond à rien fait échouer le build.
| Groupe | Alias | Tâches |
|---|---|---|
default | — | Ce qu’exécute un simple elide build. |
dependencies | deps | Résolution et installation des dépendances. |
compilation | compile | Compilation des sources. |
testing | test | Tests ; également lancés par elide test. |
Certaines tâches acceptent des options, listées par --inspect :
elide build test --select=class:com.example.SomeTest
elide build run --args="a b c"Dans un espace de travail, préfixez le projet : core:compile-kotlin-main,
core:compile, ou core pour ses tâches par défaut. Les cibles sans préfixe se résolvent dans le projet courant, puis
dans la racine. --inspect regroupe les tâches par projet, et les lignes de progression le nomment
([core] Compiling Kotlin sources).
Options
Les options s’écrivent --name ou --name=value, n’importe où parmi les cibles. Les arguments après -- vont au
processus que lance une tâche.
| Option | Effet |
|---|---|
--inspect, -i | Liste les tâches et leurs options sans les exécuter. |
--no-cache | Ignore le cache et l’état local du build ; toutes les tâches s’exécutent. |
--offline | Aucun téléchargement de dépendances et aucun cache partagé. |
--workers=N | Au plus N tâches simultanées (par défaut : nombre de processeurs). Le = est obligatoire. |
--insights=FILE | Exécute un script Insight dans les tâches qui lancent des programmes ; répétable. |
-f NAME[=VALUE] | Option de build, lue via build.flags ; voir Options de build. |
Les options sont vérifiées par rapport aux tâches avant toute exécution. Une option inconnue, une valeur manquante ou inattendue, ou une option répétée provoque un échec :
Unknown option '--worker', did you mean '--workers'?
Option '--workers' requires a value, as '--workers=<value>'Les options globales (-p, -v, --debug et les autres) sont exemptées. Options des tâches :
Dépendances, Tests.
Cache de build
Le niveau local est toujours actif : ~/.elide/cache/entries-v2, un répertoire par clé avec un enregistrement et
une archive tar des sorties. Les restaurations sont vérifiées par rapport à l’empreinte enregistrée. Les entrées dans
un format plus ancien comptent comme absentes.
Le niveau partagé est un cache HTTP, configuré par des variables d’environnement :
| Variable | Signification |
|---|---|
ELIDE_REMOTE_CACHE | URL du point de terminaison. Non définie : pas de niveau partagé. |
ELIDE_ | Jeton bearer ; prioritaire sur l’authentification basique. |
ELIDE_, ELIDE_ | Authentification basique ; les informations utilisateur dans l’URL fonctionnent aussi. |
ELIDE_REMOTE_CACHE_PUSH | Envoie les sorties de ce build (true par défaut). |
ELIDE_REMOTE_CACHE_PULL | Télécharge les entrées absentes (true par défaut). |
ELIDE_ | eager (par défaut) transfère chaque entrée ; smart ne transfère que si cela fait gagner du temps. |
- Le cache local est consulté en premier ; les entrées trouvées à distance sont stockées localement.
- Configuration type : la CI envoie ; les développeurs définissent
ELIDE_REMOTE_CACHE_PUSH=false. - Les entrées distantes injoignables, lentes ou illisibles comptent comme absentes. Trois échecs de transport
consécutifs désactivent le niveau pour le reste du build. Les erreurs HTTP comme
404ne sont pas des échecs de transport ; un identifiant refusé déclenche un seul avertissement. - Le build échoue sur une URL autre que
http/https, un mot de passe sans nom d’utilisateur, unPUSH/PULLnon booléen, ou des identifiants envoyés enhttpnon chiffré vers un hôte autre que le loopback. - Le cache fournit des sorties exécutables : utilisez
https, exigez une authentification pour les écritures et limitez qui peut écrire. --offlinedésactive le niveau partagé pour une exécution ;--no-cachedésactive le cache.
.eliderc et la politique smart
Avec smart, une entrée n’est téléchargée que si c’est moins coûteux que de reconstruire, et envoyée que si l’envoi
coûte moins que le travail qu’il épargne. Les coûts viennent de .eliderc (syntaxe java.util.Properties) :
~/.eliderc, puis <project>/.eliderc par-dessus. Ce fichier décrit la machine : ne le commitez pas.
# ~/.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 et mbps sont des mégabits ; MB/s des mégaoctets. Les valeurs illisibles déclenchent un avertissement et la
valeur par défaut s’applique. ELIDE_REMOTE_CACHE_POLICY prime sur cache.remote.policy. Avec eager, le fichier
n’a aucun effet.
État du build
| Fichier | Rôle |
|---|---|
.dev/elide.lock.v2.bin | Empreintes portables par tâche, partageables entre machines. Ce n’est pas un fichier de verrouillage des dépendances. |
.dev/elide.build.bin | Empreintes par tâche, propres à la machine. |
.dev/elide.filehash.bin | Condensats de fichiers indexés par taille, dates, inode et mode, pour ne pas relire les fichiers inchangés. |
- Fichiers binaires ; ne les modifiez pas.
- Il n’existe pas de fichier de verrouillage des dépendances pour tous les écosystèmes ; npm écrit
aube-lock.yaml. - Dans un espace de travail, l’état de tous les membres est stocké dans le
.dev/de la racine ; les sorties restent dans le.dev/de chaque projet. --no-cacheignore le fichier d’état local, mais lit toujours celui qui est partagé.elide installréutilise la résolution tant que la liste des dépendances ne change pas ;--freshtélécharge à nouveau toutes les dépendances et rafraîchit le cache global.- Les arguments de chaque compilateur sont écrits à côté de sa sortie dans
<tool>.args, un par ligne.
Mesurer la durée d’un build
Chaque tâche affiche sa durée. Pour plus de détails :
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.6msLes régions sont une étape (configuration, graphe, exécution, sauvegarde de l’état), une tâche, ou une
opération sur une tâche (prepare, fingerprint, up-to-date, execute, consultations et écritures du cache).
Le travail à l’intérieur de execute n’est pas détaillé.
ELIDE_BUILD_TELEMETRY écrit une trace Chrome locale à la fin
du build ; rien n’est envoyé :
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 nameOuvrez-la dans Perfetto, chrome://tracing ou speedscope, ou :
jq -r '.traceEvents[] | select(.ph=="X") | "\(.dur/1000 | floor)ms \(.cat) \(.name)"' \
.dev/telemetry/build-*.trace.json | sort -rn | head