Changelog¶
Releases are tagged <major>.<minor>.<patch> and published to PyPI as allez, to the VS Code Marketplace as vscode-allez, and as a GitHub release carrying both files. The CLI and the extension share one version.
0.1.0 - October 2026¶
allez 0.1.0 on PyPI · vscode-allez on the Marketplace · GitHub release (wheel and VSIX)
The first public release. allez was built and used privately for two months before this; that history is folded into one entry, so this page says what allez is, not what it was.
allez CLI¶
- Six verbs over the Fabric CLI,
fab.allez applyimports one item into a branch workspace and checks it is there.allez deployrunsfab deployfor every workspace in dag order, hooks included, and with--branch-workspace --commit-to-gitpublishes a fresh branch workspace and connects it to its branch.allez provisioncreates and configures branch workspaces;allez teardowndeletes one branch's, or every orphaned one.allez auditandallez documentrun offline. Every verb takes--plan, which prints the exactfabcalls a run would make and touches nothing. -
allez.ymlis automation config. The root file declaresenvironments:, optionalprotected-branches:, abranch-workspace:block (capacity, roles, domain, tags, settings, identity, and thegit:block the binding deploy connects with) and thedag:that ordersconfig.ymlfiles, with hooks either side of each publish. A sub-folder'sallez.ymlpatches the root. Every key is validated at load, before anyfabcall, andallez.schema.jsongives the editor completion and hover text. allez.yml. - The dag orders config files, not workspaces. A node is a sub-folder's
config.ymlor a.deploy/config-overlay/*.config.ymloverlay, withdepends_on,pre_deploy_hooks,post_deploy_hooksand anenvironments:scope. A workspace can be revisited. Deployment dag. - A node publishes what fabric-cicd would. Every
config.ymlsetting is read per environment the way fabric-cicd 1.4.0 reads it, a mapping yielding its entry for the environment, and the plan,allez document, the Deployment view andallez auditall honour thepublishandunpublishfilters andcore.repository_directory.deploy --planprintsItem types:resolved for--envand anExcluded:line naming each item apublishfilter excludes and the key;--sincelists only published items, and a removal may readnot in unpublish.items_to_include (kept). A filter without itsfeatures:flag, both folder filters for one environment, or a regex that does not compile is refused at load, naming the file, the key and the fix.config.yml. -
$allez.*tokens inparameter.yml.$allez.<sub-folder>.$workspace.$id,$allez.<sub-folder>.$items.<Type>.<Name>.$id,$sqlendpointand$sqlendpointidresolve against the right workspace for--env, per dag node, insideallez deploy, so a report can bind to another workspace's model before that workspace has ever been deployed. A node resolves only the rules for the item types it publishes, so a workspace the dag revisits through an overlay can name items a later node publishes; the plan prints the rest as deferred. The repo keeps its tokens: every file a publish rewrote is restored, byte for byte. Variables. - A hooks library, and your own hooks. A hooks file is a flat
steps:list; each step'sactionnames a Python file in your repo's.allez/hooks/or one of the seven hooks allez ships:run_notebook,run_pipeline,run_item,refresh_semanticmodel(with Power BI's enhanced refresh body and a per-partition report),query_semanticmodel(one DAX query, its rows printed in the deploy log),fab_apiandpublish_sqlproj(a SQL database's or a warehouse'ssqlprojdefinition, built and published by Fabric, so no SqlPackage anywhere). A hook's name spells the item type or format as Fabric writes it. Placeholders such as{{ workspace_id }}fill from the node. Signatures are checked at load. Hooks. - Branch workspaces, named from the branch.
[<repo>]-[<branch-slug>]-[<sub-folder>], created byprovision, filled by the binding deploy, committed back to the branch selectively so an item the workspace lacks is never deleted from it, related to dev in the Fabric UI, swept byteardown --orphansonce the branch is gone. Protected branches (main,master,release/*by default, or the rootprotected-branches:) are refused before anyfabcall. Workspaces are found by name on every run; nothing records an id. Branch workspaces. -
allez auditchecks thatparameter.ymlcovers every environment-specific id, offline. An id no rule rewrites (uncovered) or a rule with no value for an environment (env-gap) fails it; a rule that matches nothing (dead-rule) and a rule or token that resolves before what it names is published (order) warn, or fail with--strict. Ids fabric-cicd rebinds by itself are skipped. A finding that is the design is accepted in the sub-folder'sallez.ymlunderaudit.accept:with a reason; it still prints, never counts, and warnsunused-acceptwhen it stops matching.--junit-xmlwrites one test case per scanned file. - The plan says which items will change.
allez deploy --since <ref>lists, under each node, the items that differ between that commit and the working tree:+new,~changed with the files named (dimmed when only ids moved),-removed with the unpublish verdict. The pipelines pass--since deployed/<env>, a tag every green deploy moves. Reading the plan. -
allez documentprints the solution as JSON. The plan's data, the audit's findings for every environment, the lines each rule matches, and every id reference with how it is covered (autobinding, dynamic replace, static replace,$alleztoken, uncovered) and, per item, whether a filter excludes it. Offline, for tools. - Readable console output, on a laptop and on an agent. Numbered, foldable sections per dag node, coloured phases, and Azure Pipelines logging commands when a run is on an agent, so warnings reach the run summary.
- No secrets, no state. allez carries no credential: the git connection is made once with
fab mkdirand named inallez.yml; pipelines authenticate with workload identity federation. The only folder it owns beside your solution is.allez/: committed hooks, and a git-ignored id cache that serves--plan.
VS Code extension¶
-
vscode-allez, on the Marketplace. The audit's findings in the Problems panel at their file and line; quick fixes for an uncovered id, a missing environment and aconfig.ymlthe dag does not list; CodeLens above each rule and dag node, counting what the node publishes; schema help forallez.yml; and a Deployment view that draws the dag per environment with the id references between items, coloured by coverage, saying whichconfig.ymlkey excludes an item, with a find box that outlines the items whose<Name>.<Type>matches a regular expression (.Notebook,SemanticModel|Report) and dims or hides the rest, and an icon per hook step for the item type it acts on. It readsallez document, so it needs no Fabric login. Nothing requires it. Usage · Finding items.
Packaging and versions¶
-
pip install allez. The package on PyPI isallez, as are the import and the command. It depends on typer, PyYAML, rich andms-fabric-cli, so one install bringsfabandfabric-cicdwith it. Releases are built and published by release.yml from a tag, with PyPI's trusted publishing and a managed identity on the Marketplace publisher, so no token exists anywhere; the tag must agree with the version insrc/allez/__init__.py, whichpyproject.tomlreads, and in the extension'spackage.json. Install. - Pinned where it matters, floating where fabric-cicd floats. A solution repo pins allez by setting
allezVersionin its pipeline variables, and its templates runpip install allez==<version>and nothing else.ms-fabric-cliis bounded to<2and bringsfabric-cicd, so those two float within that bound and every deploy log prints the versions it got. This repo keeps one plainrequirements-dev.txtfor its own development and CI, compiled from thedevgroup inpyproject.toml. Python and the hosted image are pinned by the pipelines themselves. Deployment versions.
The sample¶
The solution in fabric/, which this repo deploys to its test tenant from GitHub Actions. The Azure Pipelines example a team starts from, with placeholders and the solution's own version, is allez-example. Both are a worked example; the CLI runs anywhere.
-
Three workspaces, four dag nodes.
allez-orchestration(a SQL database, published bypublish_sqlproj, and a data pipeline that reads it, runs the notebook and refreshes the model, published last by an overlay),allez-data(a warehouse whose schema the same hook pushes as itssqlprojdefinition, a lakehouse with a shortcut, a Spark environment in a Fabric folder, a notebook attached to all three, a scratch notebook the deploy skips throughpublish: exclude_regex, a dbt job) andallez-reporting(a semantic model and a report), withparameter.ymlrules,$alleztokens and a connection id per environment for the pipeline's Lookup and refresh that rebind every cross-workspace id. Sample.