Release: one job per platform, chained, so each fits the time limit #8

Merged
khyretos merged 1 commit from ci/release-jobs into main 2026-10-26 08:42:41 +01:00
Owner

Requested by Kees

The release run for v0.8.6-kk.2 was cancelled after 3 hours: one job built Linux, web, Windows and macOS back to back without a compile cache, and hit the job time limit.

The release is now one job per platform:

  • Linux with the smoke test, then web, Windows, macOS, then publish.
  • They are chained with needs:, so a release still uses one runner at a time and doesn't crowd the shared runners.
  • Each job has its own time limit and its own compile cache.
  • Each job uploads its package as an artifact, and the publish job downloads them all and publishes the release.

The converter download also gets the Lua timeline harness (tools/modport/*.lua, from the mods PR).

PR checks don't run the release workflow; it's tested by tagging v0.8.6-kk.3 after merge.

🤖 Generated with Claude Code

<!-- claude-projects-attribution: {"github_login":"Khyretos"} --> _Requested by **Kees**_ The release run for v0.8.6-kk.2 was cancelled after 3 hours: one job built Linux, web, Windows and macOS back to back without a compile cache, and hit the job time limit. The release is now one job per platform: - Linux with the smoke test, then web, Windows, macOS, then publish. - They are chained with `needs:`, so a release still uses one runner at a time and doesn't crowd the shared runners. - Each job has its own time limit and its own compile cache. - Each job uploads its package as an artifact, and the publish job downloads them all and publishes the release. The converter download also gets the Lua timeline harness (`tools/modport/*.lua`, from the mods PR). PR checks don't run the release workflow; it's tested by tagging `v0.8.6-kk.3` after merge. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Release: one job per platform, chained, so each fits the job time limit
All checks were successful
CI / all-checks (pull_request) Successful in 11m54s
f924353088
The single release job built Linux, web, Windows and macOS back to back and hit
the 3 hour limit (run 15 was cancelled). Jobs now run one after the other
(still one runner at a time), each with the compile cache for its target, and
pass their packages to a publish job as artifacts. The converter download also
gets the Lua timeline harness.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
First-time contributor

Title

Release: one job per platform, chained, so each fits the time limit


User description

Requested by Kees

The release run for v0.8.6-kk.2 was cancelled after 3 hours: one job built Linux, web, Windows and macOS back to back without a compile cache, and hit the job time limit.

The release is now one job per platform:

  • Linux with the smoke test, then web, Windows, macOS, then publish.
  • They are chained with needs:, so a release still uses one runner at a time and doesn't crowd the shared runners.
  • Each job has its own time limit and its own compile cache.
  • Each job uploads its package as an artifact, and the publish job downloads them all and publishes the release.

The converter download also gets the Lua timeline harness (tools/modport/*.lua, from the mods PR).

PR checks don't run the release workflow; it's tested by tagging v0.8.6-kk.3 after merge.

🤖 Generated with Claude Code


PR Type

Bug fix, Enhancement


Description

  • Split release into one job per platform to avoid time limits.

  • Chain jobs sequentially so only one runner is used at a time.

  • Add Lua timeline harness files to the converter download archive.


Diagram Walkthrough

flowchart TD
  A["Trigger Tag"] --> B["Linux Job"]
  B -->|"needs"| C["Web Job"]
  C -->|"needs"| D["Windows Job"]
  D -->|"needs"| E["macOS Job"]
  E -->|"needs"| F["Publish Job"]
  F -->|"Uploads"| G["Forgejo Release"]

File Walkthrough

Relevant files
Enhancement
release.yml
Refactor release workflow into chained platform-specific jobs

.forgejo/workflows/release.yml

  • Replaced single release job with four sequential jobs: linux, web,
    windows, macos.
  • Added needs dependencies to chain jobs and ensure only one runner is
    active at a time.
  • Reduced individual job timeouts (e.g., Linux to 120 minutes) to fit
    within limits.
  • Each platform job now packages its build and uploads it as an artifact
    for the final publish step.
  • Added a dedicated publish job that downloads all artifacts and runs
    the release script.
  • Updated cache keys to include platform-specific prefixes for better
    cache isolation.
+99/-11 
ci.sh
Include Lua timeline harness files in converter package   

tools/ci/ci.sh

  • Modified the package function to include Lua timeline harness files in
    the converter archive.
  • Added dynamic file inclusion using ls to capture .lua files from
    tools/modport/.
  • Added shellcheck disable comment for the dynamic command substitution.
+3/-1     
Documentation
RELEASING.md
Update release documentation for new workflow structure   

docs/RELEASING.md

  • Updated documentation to reflect the new multi-job release process.
  • Clarified that releases now use one job per platform chained
    sequentially.
  • Explained how each job uploads artifacts and the final job publishes
    them.
+3/-1     

## Title Release: one job per platform, chained, so each fits the time limit ___ ### **User description** <!-- claude-projects-attribution: {"github_login":"Khyretos"} --> _Requested by **Kees**_ The release run for v0.8.6-kk.2 was cancelled after 3 hours: one job built Linux, web, Windows and macOS back to back without a compile cache, and hit the job time limit. The release is now one job per platform: - Linux with the smoke test, then web, Windows, macOS, then publish. - They are chained with `needs:`, so a release still uses one runner at a time and doesn't crowd the shared runners. - Each job has its own time limit and its own compile cache. - Each job uploads its package as an artifact, and the publish job downloads them all and publishes the release. The converter download also gets the Lua timeline harness (`tools/modport/*.lua`, from the mods PR). PR checks don't run the release workflow; it's tested by tagging `v0.8.6-kk.3` after merge. 🤖 Generated with [Claude Code](https://claude.com/claude-code) ___ ### **PR Type** Bug fix, Enhancement ___ ### **Description** - Split release into one job per platform to avoid time limits. - Chain jobs sequentially so only one runner is used at a time. - Add Lua timeline harness files to the converter download archive. ___ ### Diagram Walkthrough ```mermaid flowchart TD A["Trigger Tag"] --> B["Linux Job"] B -->|"needs"| C["Web Job"] C -->|"needs"| D["Windows Job"] D -->|"needs"| E["macOS Job"] E -->|"needs"| F["Publish Job"] F -->|"Uploads"| G["Forgejo Release"] ``` <details> <summary><h3> File Walkthrough</h3></summary> <table><thead><tr><th></th><th align="left">Relevant files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><table> <tr> <td> <details> <summary><strong>release.yml</strong><dd><code>Refactor release workflow into chained platform-specific jobs</code></dd></summary> <hr> .forgejo/workflows/release.yml <ul><li>Replaced single <code>release</code> job with four sequential jobs: <code>linux</code>, <code>web</code>, <br><code>windows</code>, <code>macos</code>.<br> <li> Added <code>needs</code> dependencies to chain jobs and ensure only one runner is <br>active at a time.<br> <li> Reduced individual job timeouts (e.g., Linux to 120 minutes) to fit <br>within limits.<br> <li> Each platform job now packages its build and uploads it as an artifact <br>for the final publish step.<br> <li> Added a dedicated <code>publish</code> job that downloads all artifacts and runs <br>the release script.<br> <li> Updated cache keys to include platform-specific prefixes for better <br>cache isolation.</ul> </details> </td> <td><a href="https://git.kreative-kompas.com/khyretos/funkin/src/branch/ci/release-jobs/.forgejo/workflows/release.yml">+99/-11</a>&nbsp; </td> </tr> <tr> <td> <details> <summary><strong>ci.sh</strong><dd><code>Include Lua timeline harness files in converter package</code>&nbsp; &nbsp; </dd></summary> <hr> tools/ci/ci.sh <ul><li>Modified the <code>package</code> function to include Lua timeline harness files in <br>the converter archive.<br> <li> Added dynamic file inclusion using <code>ls</code> to capture <code>.lua</code> files from <br><code>tools/modport/</code>.<br> <li> Added shellcheck disable comment for the dynamic command substitution.</ul> </details> </td> <td><a href="https://git.kreative-kompas.com/khyretos/funkin/src/branch/ci/release-jobs/tools/ci/ci.sh">+3/-1</a>&nbsp; &nbsp; &nbsp; </td> </tr> </table></td></tr><tr><td><strong>Documentation</strong></td><td><table> <tr> <td> <details> <summary><strong>RELEASING.md</strong><dd><code>Update release documentation for new workflow structure</code>&nbsp; &nbsp; </dd></summary> <hr> docs/RELEASING.md <ul><li>Updated documentation to reflect the new multi-job release process.<br> <li> Clarified that releases now use one job per platform chained <br>sequentially.<br> <li> Explained how each job uploads artifacts and the final job publishes <br>them.</ul> </details> </td> <td><a href="https://git.kreative-kompas.com/khyretos/funkin/src/branch/ci/release-jobs/docs/RELEASING.md">+3/-1</a>&nbsp; &nbsp; &nbsp; </td> </tr> </table></td></tr></tr></tbody></table> </details> ___
First-time contributor

PR Reviewer Guide 🔍

Here are some key observations to aid the review process:

⏱️ Estimated effort to review: 2 🔵🔵⚪⚪⚪
🧪 No relevant tests
🔒 No security concerns identified
⚡ No major issues detected
## PR Reviewer Guide 🔍 <!-- pr-agent:review:full --> Here are some key observations to aid the review process: <table> <tr><td>⏱️&nbsp;<strong>Estimated effort to review</strong>: 2 🔵🔵⚪⚪⚪</td></tr> <tr><td>🧪&nbsp;<strong>No relevant tests</strong></td></tr> <tr><td>🔒&nbsp;<strong>No security concerns identified</strong></td></tr> <tr><td>⚡&nbsp;<strong>No major issues detected</strong></td></tr> </table>
First-time contributor

PR Code Suggestions ✨

No code suggestions found for the PR.

## PR Code Suggestions ✨ <!-- pr-agent:improve:no-suggestions --> No code suggestions found for the PR.
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
khyretos/funkin!8
No description provided.