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

FormatExtensionsResult
Archive.tar, .zip, .7zUnpacked; directory layout preserved
Compressed tar.tar.gz, .tar.bz2, .tar.xz, .tar.zstUnpacked; directory layout preserved
Plain fileany, including no extensionStored as the single entry, original filename kept

A standalone compressed file is rejected. tool.gz, firmware.bin.zst and 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

RuleValue
Allowed charactersletters, digits, underscore (^[a-zA-Z0-9_]+$)
Not allowedhyphens, dots, spaces
Uniquenessunique 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

AttributeTypeDescription
namestringUnique name of the storage, used for templating in tests. No spaces, and no - or ! — the name becomes a template key.
uristringReference to a files entry. Must use the fwci:// scheme: fwci://<files-name>. No other scheme is accepted.

Optional Fields

AttributeTypeDescription
commandsarrayList of shell commands to run in the test environment before any test steps.
pathsmapNamed references to paths inside the storage, relative to its root.

Both sides of a paths entry are validated:

PartAllowed characters
Keyletters, digits, _, -
Valuepath 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

name: my_python_lib
commands: 
  - "apt update"
  - "apt install pip ipmitool inetutils-ping xvfb lsb-core -y"
  - "pip install robotframework"
paths:
  bin: bin/executable
  data: data
uri: fwci://my_python_lib

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:

    commands:
      - "apt update"
      - "apt install curl git -y"
  • Installing Python packages:

    commands:
      - "pip install requests pytest"
  • Setting environment variables:

    commands:
      - "export TEST_ENV=ci"

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

name: example
paths:
  bin: bin/executable
  data: data
  config: config/settings.yaml
uri: fwci://example
test:
  name: run_bin_executable
  steps:
    - name: Run executable from storage
      command: "[[storage.example]]/[[storage.example.bin]] --version"
    - name: Use data directory
      command: "ls [[storage.example]]/[[storage.example.data]]"
    - name: Show config file
      command: "cat [[storage.example]]/[[storage.example.config]]"

In this example, [[storage.example.bin]], [[storage.example.data]], and [[storage.example.config]] are replaced with the actual relative paths from your storage configuration.