Plateformes
Une plateforme est ce qu'un invité demande (hostel acquire <plateforme>). Il en existe deux types :
| Type | Noms | Quelles machines le servent |
|---|---|---|
| Plateforme OS | linux, macos, windows | Toute machine avec cet OS, automatiquement. Ne jamais la lister dans platforms. |
| Plateforme device | ios, android, ou vos propres | Machines qui la listent dans platforms. |
Des outils comme Node, Java ou pnpm ne sont pas des plateformes : ils sont déclarés dans les fichiers mise du dépôt (hostel-use) ou dans la clé tools de la machine (hostel-rooms).
hostel platforms # pour tout le monde : créneaux libres, file d'attente, devices
hostel config platforms # pour les admins : NOM, TYPE, MACHINES, SOURCE
Les plateformes par défaut
Le binaire intègre ios, android, macos et windows. linux est une plateforme OS sans scripts.
| Plateforme | Devices | OS de la machine | Prérequis machine |
|---|---|---|---|
ios | iphone-17-pro, ipad-pro-13 (max 2) | macOS | Xcode et un runtime iOS Simulator, installés manuellement. La plateforme nécessite le label xcode-26.5. Variables d'env optionnelles : HOSTEL_IOS_RUNTIME (ex. 26.5), DEVELOPER_DIR. |
android | pixel-9, pixel-tablet (max 2) | Linux ou macOS | Java 17 ou plus : définir tools = { java = "21" } sur la machine. Linux : /dev/kvm utilisable par l'utilisateur du room (ajouter un label tel que kvm), et les paquets de l'émulateur ou sudo sans mot de passe. Le provision télécharge environ 5 Go (timeout 30 min). Variables d'env optionnelles : HOSTEL_ANDROID_API (36), HOSTEL_ANDROID_TAG (google_apis), HOSTEL_ANDROID_PORT (5554). |
macos | aucun | macOS | Builds headless : rien. Apps de bureau : le label desktop, une connexion automatique de l'utilisateur du room, un écran déverrouillé, l'enregistrement d'écran pour /usr/libexec/sshd-keygen-wrapper, et le mode automatisation sans mot de passe (sudo automationmodetool enable-automationmode-without-authentication). |
windows | aucun | Windows | Serveur OpenSSH. Apps de bureau : le label desktop et la tâche "Hostel desktop" dans une session de bureau connectée et déverrouillée. |
linux | aucun | Linux | Un serveur SSH. |
Ce que les plateformes fournissent aux commandes :
ios: nouveaux simulateurs propres pour chaque lease ;SIMULATOR_UDID(premier device) etSIMULATOR_UDIDS.android: émulateurs en lecture seule à partir d'un snapshot propre ;ANDROID_SERIAL,ANDROID_SERIALS,ANDROID_HOME.- Un lease nécessitant
desktopest exclusif : il prend toute la machine.
Chaque room reçoit également agent-device (tap, type, lire l'écran) et, sur Windows, winapp. mise.agent_device = false (hostel config settings set) désactive cela.
La préparation complète Mac et Windows (utilisateurs, connexion à distance, connexion automatique, tâche de bureau) se trouve dans docs/static-room-setup.md.
Devices et labels
--device <d>sélectionne les devices de la plateforme (répétez-le, jusqu'àmax_devices). Sans cela, lesdevicesdu dépôt ou le premier device de la plateforme s'appliquent.- Les labels sont des mots libres sur les machines (
labels = [...]). Une machine est candidate uniquement si elle possède tous les labels requis : ceux de la plateforme (requires), ceux du dépôt (requiresdanshostel.toml), et chaque--require. - Nommez les labels d'après ce que possède la machine :
xcode-26.5,desktop,kvm. - Une plateforme ou un device inconnu, ou un label qu'aucune machine ne possède, échoue immédiatement avec le code de sortie 69.
Votre propre plateforme
hostel config platforms new tvos ./tvos --os macos # un dossier modèle (--os linux|macos|windows)
# éditez ./tvos/platform.toml et les scripts
hostel config platforms push ./tvos # vérifie et enregistre ; le nom est celui du dossier
hostel config rooms set mac-mini platforms=ios,tvos # autorise une machine à la servir
Modifier une plateforme par défaut :
hostel config platforms pull ios ./ios # les fichiers actuels dans un nouveau dossier
hostel config platforms push ./ios # enregistre votre version (source : changed)
hostel config platforms reset ios # revient à la version de cette version
hostel config platforms remove tvos # refusé tant qu'une machine la liste
push --name <n> enregistre le dossier sous un autre nom. Un push s'applique immédiatement. Un room libre dont la plateforme a changé provisionne à nouveau. Un push n'envoie que platform.toml, README.md et les scripts.
platform.toml
description = "tvOS Simulator"
devices = ["apple-tv-4k"] # le premier est le défaut (plateformes device uniquement)
max_devices = 1 # défaut 1
requires = ["xcode-26.5"] # labels que chaque machine doit avoir
exclusive = false # true : le lease prend tout le room
script_timeouts = { provision = "20m" } # défauts : provision 20m, autres 3m
Un dossier de plateforme OS (linux, macos, windows) peut avoir description, requires, exclusive et script_timeouts, mais pas devices.
Scripts
Noms de fichiers : <étape>.<os>.sh pour macos et linux, <étape>.<os>.ps1 pour windows. L'OS du room sélectionne le fichier. Un nom de script mal orthographié est une erreur.
| Étape | Quand | S'exécute dans |
|---|---|---|
provision | une fois par room, et à nouveau quand les scripts changent : installer et vérifier ce dont la plateforme a besoin | hostel/ |
prepare | chaque lease, avant qu'il soit prêt : démarrer les devices, écrire leurs informations dans device.env | slots/<slot>/ |
screenshot | hostel screenshot : $1 est le chemin PNG de sortie, $2 le device | slots/<slot>/ |
reset | au nettoyage : arrêter et supprimer ce que prepare a démarré | slots/<slot>/ |
health | après le nettoyage, lors de la réparation, avant qu'un room chaud prenne un lease : sortir non nul si le room ne peut pas servir la plateforme | hostel/ |
Règles :
- Chaque étape est optionnelle, sauf
preparepour une plateforme device sur chaque OS des machines qui la listent. - Chaque étape doit pouvoir être exécutée à nouveau sans problème.
- Un code de sortie non nul est un échec. Les échecs de provision ou de prepare mettent le room en état Broken et renvoient le lease dans la file d'attente. Les 4 derniers Ko de la sortie vont dans le journal des événements (
hostel status <room>). - Le helper exécute
/bin/sh <script>(pas besoin de bit d'exécution) et arrête son groupe de processus au timeout. - Les
toolsau niveau machine sont installés avantprovision, donc les scripts peuvent les utiliser.
Environnement des scripts : HOSTEL_PLATFORM, HOSTEL_PLATFORM_DEVICES (tous les devices de la plateforme), HOSTEL_SLOT, HOSTEL_SLOT_DIR, HOSTEL_WORK_DIR, HOSTEL_CACHE_DIR (conservé entre les leases), HOSTEL_LEASE_ID, et pour prepare, screenshot et reset : HOSTEL_DEVICES (les devices du lease, séparés par des virgules) et HOSTEL_EXCLUSIVE (1 pour un lease occupant tout le room). Également les variables MISE_*, les variables env du provider, de la machine et du slot, et device.env (pour screenshot et reset). Utilisez les variables env de la machine pour faire varier un script entre machines.
Les lignes de device.env (NOM=valeur) vont dans l'environnement de chaque commande du lease. Documentez les noms que votre plateforme écrit.
Vérification
hostel config platforms
hostel status mac-mini # les événements montrent la sortie du provision et les erreurs