ci: add timeout-minutes to release jobs - #1070
Open
devsy-app[bot] wants to merge 1 commit into
Open
Conversation
## Summary
Adds `timeout-minutes` guards to all 6 jobs in `.github/workflows/release.yml`. None of these jobs previously had a timeout, so a hung build/publish step could consume the full 6-hour GitHub Actions job cap before being killed. Each value is set with headroom above observed run durations.
## Runs inspected
Inspected recent **Release** workflow runs (workflow_dispatch / release triggered) via `gh run list` / `gh run view`. Observed job durations: the longest job (`build-desktop`, macOS signing) ran ~19m20s; the remaining jobs ran well under 10 minutes. No job exceeded ~20 minutes, so the chosen values provide ample headroom.
## Problem
`release.yml` defines 6 jobs (`build-cli`, `build-desktop`, `deploy-update-metadata`, `build-flatpak`, `publish-homebrew`, `prerelease`) with no `timeout-minutes` set. A stuck step (e.g. a hung macOS notarization, a stalled `git push`, a wedged flatpak build) would run until GitHub's default 360-minute job limit, wasting release CI minutes and delaying the release pipeline.
## Change
Added `timeout-minutes` to each job (placed immediately after `runs-on:`, matching the convention already established in the repo's other workflows):
| Job | timeout-minutes | Rationale |
|-----|-----------------|-----------|
| `build-cli` | 45 | matrix over linux/macos/windows; go build + cross-compile |
| `build-desktop` | 45 | electron-builder + macOS signing/notarization (slowest observed) |
| `deploy-update-metadata` | 15 | metadata deploy + git push |
| `build-flatpak` | 30 | flatpak build in privileged container |
| `publish-homebrew` | 15 | formula/cask publish |
| `prerelease` | 5 | release notes publish only |
No behavioral change beyond the timeout guard; no new dependencies; no trigger/path changes.
## Validation
- Re-read `release.yml` end-to-end to confirm each `timeout-minutes` is placed directly after `runs-on:` and indentation matches surrounding keys.
- `python3 -c "import yaml; yaml.safe_load(open('.github/workflows/release.yml'))"` � **YAML OK**
- `act --list -W .github/workflows/release.yml` � enumerates all 6 jobs correctly (act/docker available).
- Formatting gate: `task cli:format` clean; `task cli:lint:ci` � 0 issues; `task cli:test` � pass (only the known pre-existing `pkg/git` `TestRepoClone*` failure on origin/main, unrelated to this YAML-only change � git-lfs absent in sandbox).
This PR was created by an AI agent as part of an automated daily CI optimization job.
✅ Deploy Preview for devsydev canceled.
|
✅ Deploy Preview for images-devsy-sh canceled.
|
Up to standards ✅🟢 Issues
|
skevetter
marked this pull request as ready for review
August 17, 2026 07:04
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds
timeout-minutesguards to all 6 jobs in.github/workflows/release.yml. None of these jobs previously had a timeout, so a hung build/publish step could consume the full 6-hour GitHub Actions job cap before being killed. Each value is set with headroom above observed run durations.Runs inspected
Inspected recent Release workflow runs (workflow_dispatch / release triggered) via
gh run list/gh run view. Observed job durations: the longest job (build-desktop, macOS signing) ran ~19m20s; the remaining jobs ran well under 10 minutes. No job exceeded ~20 minutes, so the chosen values provide ample headroom.Problem
release.ymldefines 6 jobs (build-cli,build-desktop,deploy-update-metadata,build-flatpak,publish-homebrew,prerelease) with notimeout-minutesset. A stuck step (e.g. a hung macOS notarization, a stalledgit push, a wedged flatpak build) would run until GitHub's default 360-minute job limit, wasting release CI minutes and delaying the release pipeline.Change
Added
timeout-minutesto each job (placed immediately afterruns-on:, matching the convention already established in the repo's other workflows):build-clibuild-desktopdeploy-update-metadatabuild-flatpakpublish-homebrewprereleaseNo behavioral change beyond the timeout guard; no new dependencies; no trigger/path changes.
Validation
release.ymlend-to-end to confirm eachtimeout-minutesis placed directly afterruns-on:and indentation matches surrounding keys.python3 -c "import yaml; yaml.safe_load(open('.github/workflows/release.yml'))"� YAML OKact --list -W .github/workflows/release.yml� enumerates all 6 jobs correctly (act/docker available).task cli:formatclean;task cli:lint:ci� 0 issues;task cli:test� pass (only the known pre-existingpkg/gitTestRepoClone*failure on origin/main, unrelated to this YAML-only change � git-lfs absent in sandbox).This PR was created by an AI agent as part of an automated daily CI optimization job.