From a96ff531dad735dfe5667f9aed13f17e289b90a6 Mon Sep 17 00:00:00 2001 From: Thomas Breland Date: Sun, 26 Oct 2025 11:52:18 -0400 Subject: [PATCH] Scale bundler install jobs with CPU count up to 8 The number of jobs should scale with the runner CPU count, up to a point. The bottleneck becomes network / disk I/O at very large numbers, and 8 seems like a reasonable maximum based on my experience at this time. --- bundler.js | 5 ++++- dist/index.js | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/bundler.js b/bundler.js index 8e30223..4d96bdd 100644 --- a/bundler.js +++ b/bundler.js @@ -1,4 +1,5 @@ const fs = require('fs') +const os = require('os') const path = require('path') const core = require('@actions/core') const exec = require('@actions/exec') @@ -193,8 +194,10 @@ export async function bundleInstall(gemfile, lockFile, platform, engine, rubyVer console.log(`Found cache for key: ${cachedKey}`) } + // Number of jobs should scale with runner, up to a point + const jobs = Math.min(os.cpus().length, 8) // Always run 'bundle install' to list the gems - await exec.exec('bundle', ['install', '--jobs', '4']) + await exec.exec('bundle', ['install', '--jobs', jobs]) // @actions/cache only allows to save for non-existing keys if (!common.isExactCacheKeyMatch(key, cachedKey)) { diff --git a/dist/index.js b/dist/index.js index 89aebb7..3b0e557 100644 --- a/dist/index.js +++ b/dist/index.js @@ -13,6 +13,7 @@ __nccwpck_require__.r(__webpack_exports__); /* harmony export */ installBundler: () => (/* binding */ installBundler) /* harmony export */ }); const fs = __nccwpck_require__(9896) +const os = __nccwpck_require__(857) const path = __nccwpck_require__(6928) const core = __nccwpck_require__(7484) const exec = __nccwpck_require__(5236) @@ -207,8 +208,10 @@ async function bundleInstall(gemfile, lockFile, platform, engine, rubyVersion, b console.log(`Found cache for key: ${cachedKey}`) } + // Number of jobs should scale with runner, up to a point + const jobs = Math.min(os.cpus().length, 8) // Always run 'bundle install' to list the gems - await exec.exec('bundle', ['install', '--jobs', '4']) + await exec.exec('bundle', ['install', '--jobs', jobs]) // @actions/cache only allows to save for non-existing keys if (!common.isExactCacheKeyMatch(key, cachedKey)) {