graph TD
A["Repository"] ==>|"workflow_dispatch"| B["Repository"]
C["Repository"] -.->|"workflow_call"| D["Repository"]
E["Repository"] -->|"push"| F[("Registry")]
F --> I(["Environment"])
G{{"GitHub App"}} ==> H["Repository"]
Cross-Repository Workflows
Repository relationships and workflow dispatch chains for the Posit container image ecosystem, including dogfooding and internal deployment paths.
Note
This document represents the desired future state of the cross-repo workflow architecture. Not all workflows shown here are implemented yet. See posit-dev/images-shared#302 for implementation status and open PRs.
Legend
| Symbol | Meaning |
|---|---|
| Thick line | workflow_dispatch — cross-repo trigger via GitHub App |
| Dashed line | workflow_call — reusable workflow (same CI run) |
| Thin line | Direct action: push, Flux sync, PR merge |
| Rectangle | Repository or workflow |
| Cylinder | Registry |
| Stadium | Environment |
| Hexagon | GitHub App identity |
GitHub Apps
| App | Installed on | Role |
|---|---|---|
| posit-connect-projects | posit-dev/connectposit-dev/images-connectrstudio/helm |
Dispatches downstream from Connect releases |
| workbench-ide-release | posit-dev/images-workbenchrstudio/rstudio-prorstudio/helm |
Dispatches downstream from Workbench releases |
| posit-package-manager-automation | posit-dev/images-package-managerrstudio/package-managerrstudio/helm |
Dispatches downstream from PPM releases |
| posit-platform | posit-dev/images-sharedrstudio/helm |
Platform team operations, centralized dispatch |
Product GitHub Apps own the dispatch chain from product release through to Helm chart update. posit-platform handles platform-team-owned operations (e.g., scheduled rebuilds, cache cleanup).
Production Release Flow
graph TD
subgraph "Product Repos"
CONNECT_PROD["connect"]
WORKBENCH_PROD["rstudio-pro"]
PPM_PROD["package-manager"]
end
CONNECT_PROD ==> IMG_CONNECT
WORKBENCH_PROD ==> IMG_WORKBENCH
PPM_PROD ==> IMG_PM
subgraph "Image Repos"
IMG_CONNECT["images-connect"]
IMG_WORKBENCH["images-workbench"]
IMG_PM["images-package-manager"]
end
IMG_CONNECT -.-> SHARED
IMG_WORKBENCH -.-> SHARED
IMG_PM -.-> SHARED
SHARED["images-shared"]
IMG_CONNECT --> REGISTRIES
IMG_WORKBENCH --> REGISTRIES
IMG_PM --> REGISTRIES
REGISTRIES[("Docker Hub + GHCR")]
IMG_CONNECT ==> HELM
IMG_WORKBENCH ==> HELM
IMG_PM ==> HELM
HELM["helm"] --> K8S(["K8s Dogfood Sites"])
Development / Preview Flow
graph TD
subgraph "Product Repos"
CONNECT_PROD["connect"]
WORKBENCH_PROD["rstudio-pro"]
PPM_PROD["package-manager"]
end
CONNECT_PROD ==> IMG_CONNECT
WORKBENCH_PROD ==> IMG_WORKBENCH
PPM_PROD ==> IMG_PM
subgraph "Image Repos"
IMG_CONNECT["images-connect"]
IMG_WORKBENCH["images-workbench"]
IMG_PM["images-package-manager"]
end
IMG_CONNECT -.-> SHARED
IMG_WORKBENCH -.-> SHARED
IMG_PM -.-> SHARED
SHARED["images-shared"]
IMG_CONNECT --> GHCR
IMG_WORKBENCH --> GHCR
IMG_PM --> GHCR
GHCR[("GHCR")]
GHCR --> K8S(["K8s Dogfood Sites"])
GHCR --> FUZZBUCKET(["Fuzzbucket"])
GHCR --> EKS_REF(["EKS Reference Architecture"])
Per-Product Diagrams
Connect
Production
graph TD
subgraph connect
SCRIPTS["release-scripts.yml<br/>publish_release.py"]
end
SCRIPTS ==> APP_REL{{"posit-connect-projects"}}
APP_REL ==> REL
subgraph images-connect
REL["release.yml<br/><i>version</i>"]
PROD_WF["production.yml<br/><i>dev-versions=exclude</i>"]
CONTENT["content.yml<br/><i>matrix-versions=only</i>"]
end
REL -.-> PRODUCT_REL
subgraph images-shared
PRODUCT_REL["product-release.yml<br/><i>version</i><br/><i>images</i>"]
SHARED["bakery-build-native.yml"]
end
REL -->|"PR merge"| PROD_WF
REL -->|"PR merge"| CONTENT
PROD_WF -.-> SHARED
CONTENT -.-> SHARED
PROD_WF -->|push| REGISTRIES[("Docker Hub + GHCR")]
CONTENT -->|push| REGISTRIES
PROD_WF ==> APP_HELM{{"posit-connect-projects"}}
APP_HELM ==> HELM_WF
subgraph helm
HELM_WF["product-release.yml<br/><i>product</i><br/><i>version</i>"]
end
HELM_WF --> K8S(["K8s Dogfood Sites"])
click SCRIPTS "https://github.com/posit-dev/connect/blob/main/.github/workflows/release-scripts.yml" _blank
click REL "https://github.com/posit-dev/images-connect/blob/main/.github/workflows/release.yml" _blank
click PROD_WF "https://github.com/posit-dev/images-connect/blob/main/.github/workflows/production.yml" _blank
click CONTENT "https://github.com/posit-dev/images-connect/blob/main/.github/workflows/content.yml" _blank
click PRODUCT_REL "https://github.com/posit-dev/images-shared/blob/main/.github/workflows/product-release.yml" _blank
click SHARED "https://github.com/posit-dev/images-shared/blob/main/.github/workflows/bakery-build-native.yml" _blank
click HELM_WF "https://github.com/rstudio/helm/blob/main/.github/workflows/product-release.yml" _blank
Development
graph TD
subgraph connect
CI["ci.yml"]
end
CI ==> APP{{"posit-connect-projects"}}
APP ==> DEV
subgraph images-connect
DEV["development.yml<br/><i>version</i>"]
end
DEV -.-> SHARED
subgraph images-shared
SHARED["bakery-build-native.yml<br/><i>dev-versions=only</i>"]
end
DEV -->|push| GHCR[("GHCR<br/>connect-preview")]
GHCR --> K8S(["K8s Dogfood Sites"])
click CI "https://github.com/posit-dev/connect/blob/main/.github/workflows/ci.yml" _blank
click DEV "https://github.com/posit-dev/images-connect/blob/main/.github/workflows/development.yml" _blank
click SHARED "https://github.com/posit-dev/images-shared/blob/main/.github/workflows/bakery-build-native.yml" _blank
Workbench
Production
graph TD
subgraph rstudio-pro
RELEASE_ALL["release-all.yml"]
UPDATE_IMG["release-update-images-workbench.yml"]
RELEASE_ALL --> UPDATE_IMG
end
UPDATE_IMG ==> APP_REL{{"workbench-ide-release"}}
APP_REL ==> REL
subgraph images-workbench
REL["release.yml<br/><i>version</i>"]
PROD_WF["production.yml<br/><i>dev-versions=exclude</i>"]
SESSION["session.yml<br/><i>matrix-versions=only</i>"]
end
REL -.-> PRODUCT_REL
subgraph images-shared
PRODUCT_REL["product-release.yml<br/><i>version</i><br/><i>images</i>"]
SHARED["bakery-build-native.yml"]
end
REL -->|"PR merge"| PROD_WF
REL -->|"PR merge"| SESSION
PROD_WF -.-> SHARED
SESSION -.-> SHARED
PROD_WF -->|push| REGISTRIES[("Docker Hub + GHCR")]
SESSION -->|push| REGISTRIES
PROD_WF ==> APP_HELM{{"workbench-ide-release"}}
APP_HELM ==> HELM_WF
subgraph helm
HELM_WF["product-release.yml<br/><i>product</i><br/><i>version</i>"]
end
HELM_WF --> K8S(["K8s Dogfood Sites"])
click RELEASE_ALL "https://github.com/rstudio/rstudio-pro/blob/main/.github/workflows/release-all.yml" _blank
click UPDATE_IMG "https://github.com/rstudio/rstudio-pro/blob/main/.github/workflows/release-update-images-workbench.yml" _blank
click REL "https://github.com/posit-dev/images-workbench/blob/main/.github/workflows/release.yml" _blank
click PROD_WF "https://github.com/posit-dev/images-workbench/blob/main/.github/workflows/production.yml" _blank
click SESSION "https://github.com/posit-dev/images-workbench/blob/main/.github/workflows/session.yml" _blank
click PRODUCT_REL "https://github.com/posit-dev/images-shared/blob/main/.github/workflows/product-release.yml" _blank
click SHARED "https://github.com/posit-dev/images-shared/blob/main/.github/workflows/bakery-build-native.yml" _blank
click HELM_WF "https://github.com/rstudio/helm/blob/main/.github/workflows/product-release.yml" _blank
Development
graph TD
subgraph rstudio-pro
NIGHTLY["release-nightly-test.yml"]
end
NIGHTLY ==> APP{{"workbench-ide-release"}}
APP ==> DEV
subgraph images-workbench
DEV["development.yml<br/><i>version</i><br/><i>stream</i>"]
end
DEV -.-> SHARED
subgraph images-shared
SHARED["bakery-build-native.yml<br/><i>dev-versions=only</i>"]
end
DEV -->|push| GHCR[("GHCR<br/>workbench-preview<br/>workbench-session-init-preview")]
GHCR --> K8S(["K8s Dogfood Sites"])
GHCR --> FUZZBUCKET(["Fuzzbucket"])
GHCR --> EKS_REF(["EKS Reference Architecture"])
click NIGHTLY "https://github.com/rstudio/rstudio-pro/blob/main/.github/workflows/release-nightly-test.yml" _blank
click DEV "https://github.com/posit-dev/images-workbench/blob/main/.github/workflows/development.yml" _blank
click SHARED "https://github.com/posit-dev/images-shared/blob/main/.github/workflows/bakery-build-native.yml" _blank
Package Manager
Production
graph TD
subgraph package-manager
CI["ci.yml (publish job)"]
end
CI ==> APP_REL{{"posit-package-manager-automation"}}
APP_REL ==> REL
subgraph images-package-manager
REL["release.yml<br/><i>version</i>"]
PROD_WF["production.yml<br/><i>dev-versions=exclude</i>"]
end
REL -.-> PRODUCT_REL
subgraph images-shared
PRODUCT_REL["product-release.yml<br/><i>version</i><br/><i>images</i>"]
SHARED["bakery-build-native.yml"]
end
REL -->|"PR merge"| PROD_WF
PROD_WF -.-> SHARED
PROD_WF -->|push| REGISTRIES[("Docker Hub + GHCR")]
PROD_WF ==> APP_HELM{{"posit-package-manager-automation"}}
APP_HELM ==> HELM_WF
subgraph helm
HELM_WF["product-release.yml<br/><i>product</i><br/><i>version</i>"]
end
HELM_WF --> K8S(["K8s Dogfood Sites"])
click CI "https://github.com/rstudio/package-manager/blob/main/.github/workflows/ci.yml" _blank
click REL "https://github.com/posit-dev/images-package-manager/blob/main/.github/workflows/release.yml" _blank
click PROD_WF "https://github.com/posit-dev/images-package-manager/blob/main/.github/workflows/production.yml" _blank
click PRODUCT_REL "https://github.com/posit-dev/images-shared/blob/main/.github/workflows/product-release.yml" _blank
click SHARED "https://github.com/posit-dev/images-shared/blob/main/.github/workflows/bakery-build-native.yml" _blank
click HELM_WF "https://github.com/rstudio/helm/blob/main/.github/workflows/product-release.yml" _blank
Development
graph TD
subgraph package-manager
CI["ci.yml (publish job)"]
end
CI ==> APP{{"posit-package-manager-automation"}}
APP ==> DEV
subgraph images-package-manager
DEV["development.yml<br/><i>version</i>"]
end
DEV -.-> SHARED
subgraph images-shared
SHARED["bakery-build-native.yml<br/><i>dev-versions=only</i>"]
end
DEV -->|push| GHCR[("GHCR<br/>package-manager-preview")]
GHCR --> K8S(["K8s Dogfood Sites"])
click CI "https://github.com/rstudio/package-manager/blob/main/.github/workflows/ci.yml" _blank
click DEV "https://github.com/posit-dev/images-package-manager/blob/main/.github/workflows/development.yml" _blank
click SHARED "https://github.com/posit-dev/images-shared/blob/main/.github/workflows/bakery-build-native.yml" _blank