Storage Configuration
A storage item has two halves: the files entry — the payload you upload with
fwci files — and the storage.yaml in your repository that references it
and describes how tests use it.
Files Entries
A files entry is created with fwci files add <name> <path>. The upload is a
single file; the server identifies its format from the content and unpacks it
into the entry.
Accepted Upload Formats
| Format | Extensions | Result |
|---|---|---|
| Archive | .tar, .zip, .7z | Unpacked; directory layout preserved |
| Compressed tar | .tar.gz, .tar.bz2, .tar.xz, .tar.zst | Unpacked; directory layout preserved |
| Plain file | any, including no extension | Stored as the single entry, original filename kept |
A standalone compressed file is rejected.
tool.gz,firmware.bin.zstand the like fail to upload, because only archives are unpacked — a lone compressed file is neither an archive nor a plain file. Wrap it in a tar:tar czf tool.tar.gz tool.
Detection uses the content and the filename, so the extension must not lie: a
text file named payload.zip is rejected with zip: not a valid zip file.
Symlinks inside an archive are skipped silently. Nothing is written for them
and no error is raised, so a storage entry can end up missing a file that is
present in your local tree. Pack the targets instead — tar czhf lib.tar.gz lib/
(-h dereferences symlinks) — and confirm the result with fwci files get.
Naming
| Rule | Value |
|---|---|
| Allowed characters | letters, digits, underscore (^[a-zA-Z0-9_]+$) |
| Not allowed | hyphens, dots, spaces |
| Uniqueness | unique per organization |
Replacing and Removing
fwci files update <name> <path> replaces the entry: its contents are
deleted, then the new upload is unpacked in their place. There is no incremental
add — to extend an entry, repack the old and new files together and upload the
result. Storage items keep referencing the entry by name, so they need no change
unless you rename the entry with -n.
fwci files delete <name> fails while any storage item still references the
entry. Remove or re-point that storage item first.
Storage
The storage.yaml file describes a storage item for your tests.
Required Fields
| Attribute | Type | Description |
|---|---|---|
| name | string | Unique name of the storage, used for templating in tests. No spaces, and no - or ! — the name becomes a template key. |
| uri | string | Reference to a files entry. Must use the fwci:// scheme: fwci://<files-name>. No other scheme is accepted. |
Optional Fields
| Attribute | Type | Description |
|---|---|---|
| commands | array | List of shell commands to run in the test environment before any test steps. |
| paths | map | Named references to paths inside the storage, relative to its root. |
Both sides of a paths entry are validated:
| Part | Allowed characters |
|---|---|
| Key | letters, digits, _, - |
| Value | path segments of letters, digits, ., _, -, separated by / |
Spaces are rejected in either, so an archive containing my tool/run.sh cannot be
addressed through paths. The values must match the layout shown by
fwci files get for the referenced entry.
Example
Commands
Commands are executed in the test environment before any test steps. Use them to install dependencies, configure the environment, or perform setup tasks.
Examples
Installing system packages:
Installing Python packages:
Setting environment variables:
Referencing Paths in Tests
Define named paths in the paths map for easy reference in your test configuration. Use the template syntax [[storage.<storage_name>.<path_key>]] to refer to these paths.
Path Example
In this example, [[storage.example.bin]], [[storage.example.data]], and [[storage.example.config]] are replaced with the actual relative paths from your storage configuration.