gg_multi_core

Workspace model of the gg_multi tool family - the ocean/tickets/trash layout, organization folders, url parsing, git platforms, ticket metadata and state.

gg_multi manages multi-package workspaces and orchestrates editing, reviewing and publishing across all repos of a ticket. This package is the foundation the other members of the family (gg_multi_workspace, gg_multi_commit, gg_multi_do_publish) build on.

What it provides

  • Workspace layout (workspace_utils.dart, constants.dart, ocean_migration.dart, trash.dart): the three folders at a workspace root — .ocean/ (all registered repos), tickets/<id>/ (per-ticket clones) and .trash/<id>/ (closed tickets, moved rather than deleted, and swept after 30 days) — plus WorkspaceUtils.detectTicketPath(), which finds the context from any working directory, and the automatic .master → .ocean rename for legacy workspaces.
  • Organization folders (repo_folder_resolver.dart, workspace_migration.dart): the <workspace>/<org>/<repo> layout — destination, listing, resolving by name/manifest/remote url — and the migration that moves flat legacy workspaces into it.
  • Url parsing & git platforms (url_parser.dart, git_platform.dart, organization.dart, organization_utils.dart, repository.dart): every GitHub and Azure DevOps url shape the platforms hand out, fetchOrgRepos via the gh / az CLIs, and the organization-selection prompt for ambiguous repo names.
  • Ticket metadata & state (ticket_json.dart, ticket_state.dart, ticket_cleanup.dart): the local ticket.json (never committed), the ticket-level success cache in <ticket>/.gg.json, and cleanUpTicket, which deletes the remote feature branches and moves the whole ticket folder to the trash.
  • Ticket localization (ticket_localizer.dart, repo_dependencies.dart, graph_package_dirs.dart): TicketLocalizer keeps the references between the repos of a ticket pointing at their checkouts. check reports the refs that are not localized and the ocean repos that lie between two ticket repos (over regular dependency edges, dev ones are ignored) but are missing in the ticket; localizeUnlocalized fixes the refs, installs the dependencies again (installRepoDependencies, Flutter aware) and records only gg's own changes as #gg: commits — the user's work, including a hand-edited manifest, stays uncommitted. A missing repo never blocks (the ocean can be stale): it is a warning with the hint gg do add <repo>. graphPackageDirs lists the folders of the ticket-shadowed dependency graph (ticket repos + unshadowed ocean).
  • Git helpers (git_snapshot.dart): runGit and captureUncommitted, shared by the push and publish flows.
  • Process running (process_runner.dart): the family's single ProcessRunner typedef and defaultProcessRunner — one injectable process-runner type for every module and sub-package.
  • Publish skip check (publish_skip_check.dart): decides whether a repo needs a release at all — dependency bumps outside the published constraint, or manual (non-#gg:) changes since the last release.

License

gg_multi_core is licensed under the terms specified in the LICENSE file.

Libraries

gg_multi_core