You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
README: split auto-expiration into its own section
Addresses @raboof review feedback on #714:
- Pull the `expires_at` + `remove_expired.yml` explanation out of the
"Updating Version" section into its own "Automatic Expiration of Old
Versions" subsection between "Manual Version Addition" and "Removing a
Version Manually", with its own mini mermaid graph showing the daily
cleanup edge that was previously a self-loop on the updating diagram.
- Apply the line-288 wording suggestion: the manual-removal intro now
says the manual path is needed only when you "can't wait for the entry
to expire" rather than "the next daily run" — the daily cadence is a
detail of the new section, not of the manual flow.
Rebased onto current main; no content changes beyond the review feedback.
Generated-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
In most cases, new versions are automatically added through Dependabot:
132
132
- Dependabot opens PRs against `.github/actions/for-dependabot-triggered-reviews/action.yml` to update actions to the newest releases
133
133
- **`verify_dependabot_action.yml`** runs on each such PR, rebuilds the action's compiled JavaScript in Docker, and diffs it against the published version (see [Automated Verification in CI](#automated-verification-in-ci))
134
134
- Once a reviewer merges the PR, **`update_actions.yml`** reflects the new commit SHAs back into `actions.yml` and regenerates `approved_patterns.yml`
135
-
- The previously approved version is marked with an `expires_at` date 3 months out, giving projects a grace period to update their workflows
136
-
- Once that date passes, the daily **`remove_expired.yml`** workflow (02:04 UTC) deletes the entry and regenerates `approved_patterns.yml` — no manual PR needed
135
+
- The previously approved version is marked with an `expires_at` date 3 months out, giving projects a grace period to update their workflows; see [Automatic Expiration of Old Versions](#automatic-expiration-of-old-versions) for how the cleanup runs
137
136
138
137
Projects are encouraged to help review updates to actions they use. Please have a look at the diff and mention in your approval what you have checked and why you think the action is safe.
139
138
@@ -283,9 +282,27 @@ If you add older version of the action and want to set an expiration date for it
283
282
> [!WARNING]
284
283
> Older versions may contain security vulnerabilities or performance issues. Always evaluate if using the latest version is possible before requesting older versions.
Routine cleanup of superseded versions is automated:
295
+
296
+
- Any entry in `actions.yml` with an `expires_at: YYYY-MM-DD` field is a candidate for removal.
297
+
- Dependabot-driven updates (see [Updating Version of Already Approved Action](#updating-version-of-already-approved-action)) set `expires_at` to **3 months out** on the previously approved version. For manually added older versions, set `expires_at` explicitly (see [Manual Addition of Specific Versions](#manual-addition-of-specific-versions)).
298
+
- The **`remove_expired.yml`** workflow runs daily at **02:04 UTC**. Every entry whose `expires_at` date has passed is deleted from `actions.yml`; the workflow then commits the change and lets `update_composite_action.yml` regenerate `approved_patterns.yml` and the dependabot composite.
299
+
- Entries without `expires_at` (for example, `keep: true` wildcards and the current approved version) are never auto-removed — removal of those requires a manual PR.
300
+
301
+
No human action is required for the routine case: projects get a 3-month grace window after a version bump, and the old entry disappears on its own afterwards.
302
+
286
303
### Removing a version manually
287
304
288
-
Routine removal is already automated: set `expires_at` on the entry and the daily `remove_expired.yml` workflow will delete it once the date passes. Use the manual process below only when you need an immediate removal that can't wait for the next daily run.
305
+
Routine removal is already automated: set `expires_at` on the entry and the daily `remove_expired.yml` workflow will delete it once the date passes. Use the manual process below only when you need an immediate removal that can't wait for the entry to expire.
289
306
290
307
> [!IMPORTANT]
291
308
> If a version or entire action needs to be removed immediately due to a security vulnerability:
0 commit comments