Skip to content

Cross-workspace references

A report in one workspace binds to a model in another; a notebook reads a lakehouse two folders over. Each is an id in a definition that must change per environment. parameter.yml rewrites them, a $allez.* token lets a rule name a workspace this repo owns, and allez audit checks that no id was missed.

$allez.* variables

A $allez.* token works like a fabric-cicd dynamic variable, for a workspace this repo owns. fabric-cicd reaches another workspace only by a literal display name, and a branch workspace has no fixed name: it is derived from the branch, so every branch would need its own rule. The alternative, one shared branch workspace per environment, puts every developer in the same workspace, where one person's half-finished change is everyone's, and the only way to move on to something urgent is to commit early. A token names the sub-folder instead, and reads the workspace from that folder's config.yml. Two things follow. One token covers every environment, where a literal name needs one replace_value entry per environment. And a token resolves to the branch workspace allez creates for the current branch, which no literal name can. allez resolves it just before that node's fab deploy, then restores the file. No new file: the token goes in the rule.

└── 📁 fabric/
    ├── 📄 allez.yml
    ├── 📁 data/
    │   └── ...
    └── 📁 reporting/
        ├── 📄 parameter.yml                # (1)!
        └── ...
  1. Same file, same rule types. A replace_value carries the token.
fabric/reporting/parameter.yml
find_replace:
  - find_value: 'onelake\.dfs\.fabric\.microsoft\.com/([0-9a-fA-F-]{36})/'
    is_regex: "true"
    replace_value:
      _ALL_: "$allez.data.$workspace.$id"

Token resolution order

The node that publishes what a token names must come earlier in the dag. Full reference: $allez.* variables.

The audit

allez audit reads the item definitions and every parameter.yml, offline, and fails on an environment-specific id that no rule rewrites.

allez audit fabric

A finding that is by design can be accepted in the sub-folder's allez.yml, with a reason.

fabric/data/allez.yml
audit:
  accept:
    - kind: uncovered
      file: Ingest.Notebook/notebook-content.py
      value: 5d1c3a7e-2b4f-4e8a-9c6d-0f1e2a3b4c5d
      reason: the shared reference-data workspace is the same in every environment

Run it as a pull request check, as the example validate.yml pipeline does, and an uncovered id cannot merge. Full reference: allez audit.