Know what's in any given product build at any time including versions, SHAs, bits locations, etc. making the process as seamless as possible and usable by devs and other tools.
The main goal of this set of tools is to centralize the way we maintain the bootstrapping scripts in sync across participating repos and at the same time have a single way of updating the dependencies on each repo, keeping track of what’s in each product at all times.
Maestro++ and Darc will drive the operations in which versions and dependencies are maintained in sync across repos subscribed to arcade. Darc will serve commands coming from Maestro++ as well as from a dev in a local repo. Maestro++ will call Darc when it is triggered by an action that could be: schedule, change in a file or manually.
Here I list the top level scenarios which come to mind and try to describe the required steps to accomplish them:
Dev generates a change in arcade by adding, updating or removing a script. Depending on the operation there is a version which needs to be updated in participating repos.
For each participant repo:
- Dev uses Darc to update a dependency in current repo
- Dev uses Darc to commit and push the update
- Dev uses Darc to create the Auto-PR
- Auto-PR is approved and merged by dev
- Maestro++ is triggered by actions such as package publishing and/or GitHub webhooks monitoring changes in files like bootstrapping scripts or even when manually triggered
- Maestro++ uses Darc to determine which files in which repos need to be updated
- For each repo which needs the update, Maestro++:
- Uses Darc to update a dependency in current repo
- Uses Darc to commit and push the update
- Auto-PR is approved and merged. Initially even though a PR is created by Maestro++ it will require a human to approve
- Dev/Maestro++ uses Darc to query for package n
- Dev/Maestro++ uses Darc to query for package n’s versions
- Dev/Maestro++ uses Darc to query for build version v
- Darc returns the dependency graph under build v
A command line tool which performs version operations on .NET Core repos subscribed to arcade. Darc knows how to execute git commands on a repo, such as, clone, commit, push, create a PR, etc. And also the mechanics of reading and writing version information in a repo as well as to query and update the global version reporting store. Its functionality is:
- Query dependencies in
Version.Details.xml
- Query SHA+repositories for dependencies in
Version.Details.xml
- Update an entry in
Version.Details.xml
to move a dependency to a new version - Query the reporting system for SHAs+repositories in which a versioned item was used
- Query the reporting system for SHAs+repository that produced a versioned item
- Query locations of official assets for a versioned item
You can find more information about dependency descriptions here
- Query versioned items in repo's
Version.Details.xml
- Query SHAs+repositories for dependencies in the repo's
Version.Details.xml
- Query SHAs+repositories for all downstream dependencies
- Alter the package+version+SHA+repository information in
Version.Details.xml
- Add new dependency
- Change existing dependency
- Remove dependency
- Query reporting system for versioned items produced by SHA+repository
- Query reporting system for versioned items in which this SHA+repository is referenced
- Query reporting system for SHAs+repositories in which this SHA+repository is referenced
- Query binary (if known format) for SHA+repository
- Create source layout for matching versions in repo dependency tree.
- Download product+tools of official build for matching versions, SHA+repository, package+version
Mestro++ based on times or triggers (i.e. a change in a file) flows the new dependency into subscribed repos using Darc. Main Maestro++ scenario is:
- Identify when there is an update in Arcade’s scripts/dependencies and
- Add new dependency (using Darc for versions)
- Change existing dependency (using Darc for versions)
- Remove dependency (using Darc for versions) for each participating repo depending on each repo’s subscriptions