平台
平台是客端要求的內容(hostel acquire <平台>)。有兩種:
| 種類 | 名稱 | 服務的機器 |
|---|---|---|
| OS 平台 | linux、macos、windows | 每個具有該 OS 的機器,自動服務。永遠不要列在 platforms 中。 |
| 裝置平台 | ios、android 或您自訂的平台 | 在 platforms 中列出該平台的機器 |
Node、Java 或 pnpm 等工具不是平台:專案的 mise 檔案宣告它們(hostel-use),或機器的 tools 鍵(hostel-rooms)。
hostel platforms # 對所有人:顯示空閒插槽、佇列、等待、裝置
hostel config platforms # 對管理員:顯示 NAME、KIND、MACHINES、SOURCE
預設平台
二進位檔內建了 ios、android、macos 和 windows。linux 是沒有腳本的 OS 平台。
| 平台 | 裝置 | 機器 OS | 機器需要 |
|---|---|---|---|
ios | iphone-17-pro、ipad-pro-13(最多 2 個) | macOS | 由人員安裝 Xcode 和 iOS Simulator 執行環境。平台需要標籤 xcode-26.5。可選的機器 env:HOSTEL_IOS_RUNTIME(例如 26.5)、DEVELOPER_DIR。 |
android | pixel-9、pixel-tablet(最多 2 個) | Linux 或 macOS | Java 17 或更新版本:在機器上設定 tools = { java = "21" }。Linux:/dev/kvm 可供房間使用者使用(給機器一個標籤,例如 kvm),以及模擬器的套件或無密碼的 sudo。佈建下載約 5 GB(逾時 30 分鐘)。可選的 env:HOSTEL_ANDROID_API (36)、HOSTEL_ANDROID_TAG (google_apis)、HOSTEL_ANDROID_PORT (5554)。 |
macos | 無 | macOS | 無頭部建置:不需任何東西。桌面應用程式:標籤 desktop、房間使用者的自動登入、解鎖的螢幕、對 /usr/libexec/sshd-keygen-wrapper 的螢幕錄製權限,以及無密碼的自動化模式(sudo automationmodetool enable-automationmode-without-authentication)。 |
windows | 無 | Windows | OpenSSH 伺服器。桌面應用程式:標籤 desktop,以及在已登入、解鎖的桌面工作階段中的「Hostel 桌面」工作。 |
linux | 無 | Linux | SSH 伺服器。 |
平台提供給命令的內容:
ios:每個租約新且乾淨的模擬器;SIMULATOR_UDID(第一個裝置)和SIMULATOR_UDIDS。android:從乾淨快照唯讀的模擬器;ANDROID_SERIAL、ANDROID_SERIALS、ANDROID_HOME。- 需要
desktop的租約是獨佔的:它佔用整台機器。
每個房間也會獲得 agent-device(點擊、輸入、讀取螢幕),在 Windows 上則獲得 winapp。mise.agent_device = false(hostel config settings set)可關閉此功能。
完整的 Mac 和 Windows 準備(使用者、遠端登入、自動登入、桌面工作)在 docs/static-room-setup.md 中。
裝置與標籤
--device <d>選擇平台中的裝置(可重複,最多max_devices個)。如果不指定,則使用專案的devices或平台的第一個裝置。- 標籤是機器上的自由文字(
labels = [...])。機器只有在擁有每個必要標籤時才是候選者:平台的requires、專案hostel.toml中的requires,以及每個--require。 - 根據機器擁有的內容命名標籤:
xcode-26.5、desktop、kvm。 - 未知的平台或裝置,或沒有任何機器擁有的標籤,會立即失敗並回傳退出碼 69。
您自己的平台
hostel config platforms new tvos ./tvos --os macos # 一個範本資料夾(--os linux|macos|windows)
# 編輯 ./tvos/platform.toml 和腳本
hostel config platforms push ./tvos # 檢查並儲存;名稱是資料夾名稱
hostel config rooms set mac-mini platforms=ios,tvos # 讓機器服務它
修改預設平台:
hostel config platforms pull ios ./ios # 將當前檔案拉取到新資料夾
hostel config platforms push ./ios # 儲存您的版本(source: changed)
hostel config platforms reset ios # 恢復到此版本的原始狀態
hostel config platforms remove tvos # 如果仍有機器列出它,則拒絕
push --name <n> 以其他名稱儲存資料夾。推送會立即生效。平台變更後的空房間會重新佈建。推送僅傳送 platform.toml、README.md 和腳本。
platform.toml
description = "tvOS Simulator"
devices = ["apple-tv-4k"] # 第一個是預設值(僅限裝置平台)
max_devices = 1 # 預設 1
requires = ["xcode-26.5"] # 每台機器必須擁有的標籤
exclusive = false # true:租約佔用整個房間
script_timeouts = { provision = "20m" } # 預設:provision 20m,其他 3m
OS 平台資料夾(linux、macos、windows)可以有 description、requires、exclusive 和 script_timeouts,但不能有 devices。
腳本
檔案名稱:<步驟>.<OS>.sh(適用於 macos 和 linux),<步驟>.<OS>.ps1(適用於 windows)。房間的 OS 選擇對應的檔案。拼寫錯誤的腳本名稱會導致錯誤。
| 步驟 | 執行時機 | 執行目錄 |
|---|---|---|
provision | 每個房間一次,並在腳本變更時再次執行:安裝並檢查平台需要的內容 | hostel/ |
prepare | 每個租約,在準備就緒之前:啟動裝置,將其事實寫入 device.env | slots/<slot>/ |
screenshot | hostel screenshot:$1 是輸出 PNG 路徑,$2 是裝置 | slots/<slot>/ |
reset | 在清理時:停止並刪除 prepare 啟動的內容 | slots/<slot>/ |
health | 在清理後、修復時、或暖房間接受租約前:如果房間無法服務平台則退出非零 | hostel/ |
規則:
- 每個步驟都是可選的,除了列出該平台的機器上每個 OS 的裝置平台所需的
prepare。 - 每個步驟必須可安全地重複執行。
- 非零退出碼表示失敗。佈建或準備失敗會使房間處於 Broken 狀態,並將租約送回佇列。最後 4 KB 的輸出會進入事件日誌(
hostel status <房間>)。 - Helper 會執行
/bin/sh <腳本>(不需要可執行位元),並在逾時時停止其處理程序群組。 - 機器層級的
tools在provision之前安裝,因此腳本可以使用它們。
腳本的環境變數:HOSTEL_PLATFORM、HOSTEL_PLATFORM_DEVICES(平台的所有裝置)、HOSTEL_SLOT、HOSTEL_SLOT_DIR、HOSTEL_WORK_DIR、HOSTEL_CACHE_DIR(在租約之間保留)、HOSTEL_LEASE_ID,以及對於 prepare、screenshot 和 reset:HOSTEL_DEVICES(租約的裝置,以逗號分隔)和 HOSTEL_EXCLUSIVE(整房間租約為 1)。另外還有 MISE_* 變數、提供者、機器和插槽的 env,以及 device.env(供 screenshot 和 reset 使用)。使用機器 env 在不同的機器之間變化腳本。
device.env 行(NAME=value)會進入每個租約命令的環境。記錄您的平台寫入的名稱。
檢查
hostel config platforms
hostel status mac-mini # 事件會顯示佈建輸出和錯誤