FFX 設定

FFX 的設定管理可讓您在無須重新編譯的情況下設定 FFX 程式碼。從高層面來看,設定可視為多層的鍵/值對應表。

價值解決流程

設定管理程式碼會在多個位置搜尋與鍵相關聯的值。系統會依下列順序執行搜尋,並傳回找到的第一個值:

  1. 執行階段設定 (由指令列設定)
  2. 使用者層級設定 (由 ffx config set 設定)
  3. 建構目錄層級設定 (由建構作業產生)
  4. 全域層級設定變數
  5. 預設設定 (編譯為 ffx)

執行階段設定

使用者在叫用 ffx 時,會在指令列上設定執行階段設定。頂層指令可接受設定參數:

$ ffx --config "property-name=value" ...

由於這個參數並未強制型別,因此會採用以半形逗號分隔的鍵/值組合格式 ("{key}={value},{key}={value},等等...),因此系統會假設這裡設定的任何設定都是字串。

這個守護程式會以自己的程序執行,如果啟動守護程式,目前不會將執行階段設定從 CLI 轉移至守護程式。如要使用執行階段設定設定 Daemon,您應該手動執行 Daemon 指令:

$ ffx --config "config-test=runtime" daemon start --background

使用者設定

使用者設定是使用者主目錄中的設定,適用於該使用者對 ffx 的所有叫用。只有執行階段設定會覆寫使用者設定。

使用 ffx config set 指令設定使用者設定。

$ ffx config set property-name value

建構目錄設定

建構設定與建構目錄相關聯。其用途是設定描述建構輸出的屬性。這應在建構程序中產生,且 ffx 會將此視為唯讀。

檔案格式為 JSON 物件:

{
    "product": {
        "path": "/out/project/dir/product_bundle",
        "name": "sample_project"
    },
    "fidl": {
        "ir": "$BUILD_DIR/fidling/gen/ir_root"
    }
}

此範例中的 $BUILD_DIR 不是殼層環境變數,而是內部 ffx 變數預留位置。詳情請參閱「值表示法」。

全域設定

全域設定是系統層級的設定層級。這個檔案可在主機系統上安裝 ffx 時使用,用於設定組織屬性,讓一組使用者皆可使用相同的屬性。

它是在 ffx 工作流程外建立,且 ffx 會將其視為唯讀。

檔案格式為 JSON 物件:

{
    "gcs": {
        "release_bucket": "gs://project/releases",
    }
}

預設設定

預設設定會透過 GN 建構規則在所有子指令中提供,且為硬式編碼且無法變更。

值表示

儲存在 ffx 設定中的值會編碼為 JSON 值。

  • 數字,包括整數和浮點數。
  • 字串
  • 布林值,true|false。
  • 空值,以 null 表示
  • 值陣列
  • 物件

字串插補

部分字串可能包含經過插補的預留位置。這樣一來,您就能相對於目錄設定屬性,或從執行程序環境中解析值。

ffx 定義的預留位置如下:

  • $BUILD_DIR:執行 ffx 指令時決定的建構目錄。如果未找到或設定建構目錄,這個屬性可能會是空白。
  • $CACHE:用來儲存快取資料的目錄。
  • $CONFIG:儲存設定資料的目錄。
  • $DATA:儲存永久性資料的目錄。
  • $SHARED_DATA - 目前主體機器上所有區隔和 ffx 執行個體共用的永久資料目錄。這項屬性適用於用於管理全域狀態的資料,例如開啟 TCP/IP 通訊埠的程序。
  • $FIND_WORKSPACE_ROOT:包含 Bazel 工作區的第一個父項目錄。
  • $HOME - 目前使用者的主目錄。
  • $RUNTIME:用於儲存所有執行階段資訊的目錄。在 Linux 上,這個值通常為 $HOME/.local/share/Fuchsia/ffx

此外,任何由 $ 開頭,後面接上全大寫名稱、數字和其他允許字元的字串,都會從程序環境中解析。

陣列處理

陣列通常用於提供可能值的排序清單,然後傳回第一個非空值。

舉例來說,嘗試從環境使用 SSH 金鑰,如果沒有的話,則會改回使用標準位置:

{
    "ssh_key": [ "$SSH_KEY_FROM_ENV", "$HOME/.ssh/ssh_key"]
}


## Configuration environment settings

The command collection `ffx config env` is used to manage the configuration
of how to locate the various configuration level data files.

For example, to set the path to the global configuration:

```sh
$ ffx config env set --level global /etc/fuchsia/ffx_global_props.json