Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 24 additions & 3 deletions .github/workflows/platform-manifest.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,30 @@ on:
- cron: '17 6 * * *'
workflow_dispatch:
# Receiver for a component repository to announce its release immediately
# rather than waiting for the daily sweep. The sending side is a one-step
# `gh api repos/OpenAdaptAI/OpenAdapt/dispatches -f event_type=component-released`
# in openadapt-flow/-capture/-desktop's release workflow.
# rather than waiting for the daily sweep.
#
# NOT YET WIRED: as of 2026-07-28 no component repository sends this. None of
# openadapt-flow, -capture, or -desktop has a dispatch step in its release
# workflow, so the daily cron above is in practice the ONLY thing that
# notices a component release. That is how flow 1.25.0 and 1.25.1 published
# on 2026-07-27 after the manifest was regenerated at 15:42 that day and the
# manifest went stale again within hours, red on every PR until someone
# regenerated by hand.
#
# The sending side would be one step in each component's release workflow:
# gh api repos/OpenAdaptAI/OpenAdapt/dispatches -f event_type=component-released
# It cannot use that repository's default GITHUB_TOKEN, which is scoped to
# its own repository; cross-repository dispatch needs a token with `contents:
# write` on OpenAdaptAI/OpenAdapt stored as a secret in each component repo.
# Provisioning that secret is a credential decision, not a code change, so it
# is tracked outside this file rather than half-implemented here.
#
# Note that even a wired sender only makes DETECTION immediate. Repair stays
# manual: this workflow validates and files an issue, it does not regenerate.
# Auto-opening a fix PR is currently impossible anyway -- Actions is not
# permitted to create pull requests in this repository
# (`can_approve_pull_request_reviews: false`), so such a job would be
# permanently red rather than helpful.
repository_dispatch:
types: [component-released]

Expand Down
17 changes: 14 additions & 3 deletions docs/platform-manifest.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,9 +54,20 @@ python scripts/validate_platform_manifest.py

CI runs this on every pull request, on pushes to `main`, and DAILY
(`.github/workflows/platform-manifest.yml`), so drift between the committed
manifest and the actually published artifacts fails loudly. A component
repository can also trigger the check immediately via a
`component-released` `repository_dispatch`.
manifest and the actually published artifacts fails loudly.

The workflow also accepts a `component-released` `repository_dispatch` so a
component repository can trigger the check immediately. **No component
repository sends it yet.** `openadapt-flow`, `openadapt-capture`, and
`openadapt-desktop` have no dispatch step in their release workflows, so the
daily cron is in practice the only automatic detector, and a component release
can serve stale digests for up to a day. Wiring the sender needs a token with
`contents: write` on `OpenAdaptAI/OpenAdapt` stored as a secret in each
component repository; the component's own `GITHUB_TOKEN` cannot dispatch
across repositories.

Detection is not repair. Both the cron and a dispatched run validate and file
an issue; regenerating and committing the manifest remains a human step.

### Why the schedule is daily and why false reds are not tolerated

Expand Down
16 changes: 8 additions & 8 deletions platform-manifest.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"manifest_kind": "openadapt-platform-release-manifest",
"schema_version": "1.0.0",
"generated_at": "2026-07-27T15:42:27+00:00",
"generated_at": "2026-07-28T01:16:50+00:00",
"release_channel": "beta",
"components": {
"launcher": {
Expand All @@ -26,21 +26,21 @@
},
"flow": {
"package": "openadapt-flow",
"version": "1.24.0",
"version": "1.25.1",
"source": "pypi",
"requires_python": "<3.13,>=3.10",
"artifacts": [
{
"type": "bdist_wheel",
"filename": "openadapt_flow-1.24.0-py3-none-any.whl",
"url": "https://files.pythonhosted.org/packages/12/fb/86a58376c9bb7e587c45f3d1a149486053efb0ae86069b46d7581696983a/openadapt_flow-1.24.0-py3-none-any.whl",
"sha256": "170fdac154794292c99dc6eea6486e7a2c3fdf321bcd87976d924bccd3db4aef"
"filename": "openadapt_flow-1.25.1-py3-none-any.whl",
"url": "https://files.pythonhosted.org/packages/fa/b3/f68ec073b32374d9208fcc67faff70e90f974ed6ac327d3d2bd72cc4fdd4/openadapt_flow-1.25.1-py3-none-any.whl",
"sha256": "375c516837a44bc8bea87ba0429967f92561d6df92eef41e624f55c281bed9ae"
},
{
"type": "sdist",
"filename": "openadapt_flow-1.24.0.tar.gz",
"url": "https://files.pythonhosted.org/packages/4c/db/5b570f6511bcaed68134be094e9fc2b745f4f77c3cadf13a5d7518ac883f/openadapt_flow-1.24.0.tar.gz",
"sha256": "2d4702e5ccbdfed0f78063ca510dc82894a2833edbed71d77edffbd0ffebd67d"
"filename": "openadapt_flow-1.25.1.tar.gz",
"url": "https://files.pythonhosted.org/packages/f2/4a/b29ee9880970bc45bcf966dcee2dcacd1fc0412cf0581cb629011273ef14/openadapt_flow-1.25.1.tar.gz",
"sha256": "15393bb978283e87f043e6fa5f05d7b1d3fc0f9a497a4cf9561a23e8fc5f76ac"
}
]
},
Expand Down