SAIF.Platform.CLI¶
Description¶
The SAIF CLI is a console app that is published to a Nuget Feed and is installed using the dotnet cli. This CLI is used to automate processes that a developer might do manually like dotnet new, creating Azure DevOps Pipeline, creating Azure DevOps Repo, and many other automation processes.
Why we use it¶
We use it to give a single interface to do multiple operations across multiple cloud services. It will be used create all project in CIAM, so that every project is created with standard setup and naming.
Command model¶
The CLI nouns are layered deliberately. Understanding the layers explains why app and service look similar but are not redundant.
| Layer | Commands | Returns | Question it answers |
|---|---|---|---|
| Facet (raw lookups) | app, repo, pipeline, docs |
One row per underlying resource (e.g. one Entra app registration, one repo) | "Show me this specific registration / repo / build." |
| Aggregate (one domain, consolidated) | service |
A Service that groups app registrations by environment and correlates its repository |
"Show me everything about this service across its environments." |
| Federation (cross-domain) | search |
Merged hits from multiple domains (services + docs) | "Find anything matching this term." |
Key points:
appandserviceshare the same catalog (IServiceCatalog), not the same shape.appreturns rawCatalogServicerows (the facet tier);servicereturns the consolidatedServiceaggregate built byServiceGrouper+ repository correlation. The overlap is intentional reuse, not duplication.appis symmetric withrepo. Both are facet-level lookups that theserviceaggregate draws from. Just asservicecorrelates a repository whilerepo searchdoes the raw repo lookup,serviceconsolidates registrations whileapp searchdoes the raw registration lookup.appis not a strict subset ofservice. It powers the auth/token path (app search --audience/--app-id, used when resolving a JWTaud) and can surface registrations that are deliberately excluded fromservice(vendor/COTS/free-text apps without a known environment suffix). Those are only reachable throughapp.- Aggregate ≠ federation.
serviceconsolidates one domain across environments;searchfederates across domains. They are different aggregation axes, soserviceis not "a smallersearch". - Pipelines are keyed by repo, not service.
service describereports a pipeline count and a hint (saif pipeline list --repo <name>); there is no direct service→pipeline data coupling.
Practical guidance: use service describe <name> for the full topology of a known service, the facet commands (app, repo, pipeline) for targeted raw lookups, and search to discover across domains.
Installation and updates¶
Follow Install the SAIF CLI for prerequisites, NuGet feed authentication, installation, verification, and updates. That guide owns the setup instructions rather than duplicating them in this package README.
Use CLI workflows for token, publishing, repair, service-discovery, and documentation-retrieval behavior. The documentation build generates the command reference from the source-backed CLI manifest.