Skip to content

feat(bot): add actions spend metric script#26463

Merged
gundermanc merged 6 commits intomainfrom
gundermanc/track-actions-usage
May 4, 2026
Merged

feat(bot): add actions spend metric script#26463
gundermanc merged 6 commits intomainfrom
gundermanc/track-actions-usage

Conversation

@gundermanc
Copy link
Copy Markdown
Member

Summary

Adds a new metric script to track total GitHub Actions spend. It fetches the last 1000 workflow runs, filters for those within the last 7 days, and calculates the total execution time in minutes.

Details

  • Uses gh run list to fetch workflow runs.
  • Calculates total spend in minutes over a rolling 7-day window.
  • Outputs the data in the MetricOutput JSON format used by the gemini-cli-bot.
  • Provides a per-workflow breakdown of the spent minutes.

Related Issues

None.

How to Validate

Run the script locally to see the metrics output:

npx tsx tools/gemini-cli-bot/metrics/scripts/actions_spend.ts

Pre-Merge Checklist

  • Updated relevant documentation and README (if needed)
  • Added/updated tests (if needed)
  • Noted breaking changes (if any)
  • Validated on required platforms/methods:
    • MacOS
      • npm run
      • npx
      • Docker
      • Podman
      • Seatbelt
    • Windows
      • npm run
      • npx
      • Docker
    • Linux
      • npm run
      • npx
      • Docker

@gundermanc gundermanc marked this pull request as ready for review May 4, 2026 20:06
@gundermanc gundermanc requested a review from a team as a code owner May 4, 2026 20:06
@gemini-code-assist
Copy link
Copy Markdown
Contributor

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request introduces a new utility to track and report GitHub Actions usage metrics. By analyzing recent workflow runs, the tool provides visibility into execution time, enabling better monitoring of resource consumption and potential cost optimization opportunities.

Highlights

  • New Metric Script: Added a TypeScript script to calculate and report GitHub Actions execution time over a rolling 7-day window.
  • Documentation Update: Updated the metrics documentation to include cost savings as a monitoring priority.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

@gundermanc gundermanc enabled auto-merge May 4, 2026 20:08
Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces a new metric for tracking GitHub Actions spend minutes and updates the metrics documentation to include cost savings as a priority. The implementation includes a script that queries the GitHub CLI for workflow run durations over the past seven days. Feedback from the review highlights several critical issues: the current data collection may be incomplete due to hardcoded limits, the cost calculation is inaccurate because it uses wall-clock time instead of billable job minutes (ignoring parallelism and rounding), and the detailed per-workflow breakdown is currently discarded by the metric runner.

Comment thread tools/gemini-cli-bot/metrics/scripts/actions_spend.ts Outdated
Comment on lines +31 to +34
if (start < sevenDaysAgo) continue;
const end = new Date(r.updatedAt).getTime();
const durationMinutes = (end - start) / (1000 * 60);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

The calculation of durationMinutes using the difference between updatedAt and startedAt reflects the wall-clock duration of the workflow run. This is an inaccurate proxy for "spend" for two critical reasons:

  1. Parallelism: GitHub Actions bills for the sum of the durations of all individual jobs. If a workflow runs 10 jobs in parallel for 5 minutes, the actual billable spend is 50 minutes, but this script will only report 5 minutes.
  2. Rounding: GitHub bills each job by rounding up to the nearest minute (e.g., a 10-second job costs 1 minute). This script calculates fractional minutes based on wall-clock time, further undercounting the actual cost.

Since this metric is intended to drive "Cost Savings" recommendations (as per metrics.md), these discrepancies make the data misleading and ineffective for identifying real savings (e.g., optimizing a non-critical-path parallel job won't change this metric at all).

Comment thread tools/gemini-cli-bot/metrics/scripts/actions_spend.ts Outdated
@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 4, 2026

Size Change: -4 B (0%)

Total Size: 34 MB

Filename Size Change
./bundle/chunk-25PA6ZCZ.js 0 B -49.2 kB (removed) 🏆
./bundle/chunk-2VDGQMHK.js 0 B -2.73 MB (removed) 🏆
./bundle/chunk-47TLMYAQ.js 0 B -658 kB (removed) 🏆
./bundle/chunk-5JABCMPT.js 0 B -19.5 kB (removed) 🏆
./bundle/chunk-6JWJTMO6.js 0 B -3.43 kB (removed) 🏆
./bundle/chunk-BNUNY2QI.js 0 B -3.8 kB (removed) 🏆
./bundle/chunk-DNYELOPK.js 0 B -14.7 MB (removed) 🏆
./bundle/chunk-MKWBHJRV.js 0 B -12.5 kB (removed) 🏆
./bundle/core-OFNGLBVB.js 0 B -48.7 kB (removed) 🏆
./bundle/devtoolsService-Y4KH6CKG.js 0 B -28 kB (removed) 🏆
./bundle/gemini-76TBHO7B.js 0 B -583 kB (removed) 🏆
./bundle/interactiveCli-4NZJIIAY.js 0 B -1.33 MB (removed) 🏆
./bundle/liteRtServerManager-3LLW2C5U.js 0 B -2.11 kB (removed) 🏆
./bundle/oauth2-provider-Q7EVHKWV.js 0 B -9.16 kB (removed) 🏆
./bundle/chunk-3OG5TBWT.js 49.2 kB +49.2 kB (new file) 🆕
./bundle/chunk-7BWMBZDR.js 19.5 kB +19.5 kB (new file) 🆕
./bundle/chunk-GRMBJXCK.js 2.73 MB +2.73 MB (new file) 🆕
./bundle/chunk-JEXUXRX3.js 3.43 kB +3.43 kB (new file) 🆕
./bundle/chunk-JWHZNJE7.js 14.7 MB +14.7 MB (new file) 🆕
./bundle/chunk-UBRNI3VT.js 12.5 kB +12.5 kB (new file) 🆕
./bundle/chunk-YCW7XKSI.js 658 kB +658 kB (new file) 🆕
./bundle/chunk-YKEGUW4B.js 3.8 kB +3.8 kB (new file) 🆕
./bundle/core-OAJ2CBLL.js 48.7 kB +48.7 kB (new file) 🆕
./bundle/devtoolsService-TMCKRUY5.js 28 kB +28 kB (new file) 🆕
./bundle/gemini-2MIZFAEF.js 583 kB +583 kB (new file) 🆕
./bundle/interactiveCli-DGUVK756.js 1.33 MB +1.33 MB (new file) 🆕
./bundle/liteRtServerManager-KCANY3S3.js 2.11 kB +2.11 kB (new file) 🆕
./bundle/oauth2-provider-PH7MA2EH.js 9.16 kB +9.16 kB (new file) 🆕
ℹ️ View Unchanged
Filename Size Change
./bundle/bundled/third_party/index.js 8 MB 0 B
./bundle/chunk-34MYV7JD.js 2.45 kB 0 B
./bundle/chunk-5AUYMPVF.js 858 B 0 B
./bundle/chunk-5PS3AYFU.js 1.18 kB 0 B
./bundle/chunk-664ZODQF.js 124 kB 0 B
./bundle/chunk-DAHVX5MI.js 206 kB 0 B
./bundle/chunk-ECNYAST2.js 1.97 MB 0 B
./bundle/chunk-IUUIT4SU.js 56.5 kB 0 B
./bundle/chunk-RJTRUG2J.js 39.8 kB 0 B
./bundle/cleanup-O2JNPNF2.js 0 B -932 B (removed) 🏆
./bundle/devtools-36NN55EP.js 696 kB 0 B
./bundle/dist-T73EYRDX.js 356 B 0 B
./bundle/events-XB7DADIJ.js 418 B 0 B
./bundle/examples/hooks/scripts/on-start.js 188 B 0 B
./bundle/examples/mcp-server/example.js 1.43 kB 0 B
./bundle/gemini.js 5.1 kB 0 B
./bundle/getMachineId-bsd-TXG52NKR.js 1.55 kB 0 B
./bundle/getMachineId-darwin-7OE4DDZ6.js 1.55 kB 0 B
./bundle/getMachineId-linux-SHIFKOOX.js 1.34 kB 0 B
./bundle/getMachineId-unsupported-5U5DOEYY.js 1.06 kB 0 B
./bundle/getMachineId-win-6KLLGOI4.js 1.72 kB 0 B
./bundle/memoryDiscovery-FB7MMKTA.js 980 B 0 B
./bundle/multipart-parser-KPBZEGQU.js 11.7 kB 0 B
./bundle/node_modules/@google/gemini-cli-devtools/dist/client/main.js 222 kB 0 B
./bundle/node_modules/@google/gemini-cli-devtools/dist/src/_client-assets.js 229 kB 0 B
./bundle/node_modules/@google/gemini-cli-devtools/dist/src/index.js 13.4 kB 0 B
./bundle/node_modules/@google/gemini-cli-devtools/dist/src/types.js 132 B 0 B
./bundle/sandbox-macos-permissive-open.sb 890 B 0 B
./bundle/sandbox-macos-permissive-proxied.sb 1.31 kB 0 B
./bundle/sandbox-macos-restrictive-open.sb 3.36 kB 0 B
./bundle/sandbox-macos-restrictive-proxied.sb 3.56 kB 0 B
./bundle/sandbox-macos-strict-open.sb 4.82 kB 0 B
./bundle/sandbox-macos-strict-proxied.sb 5.02 kB 0 B
./bundle/src-QVCVGIUX.js 47 kB 0 B
./bundle/start-AGCD6OPP.js 0 B -652 B (removed) 🏆
./bundle/tree-sitter-7U6MW5PS.js 274 kB 0 B
./bundle/tree-sitter-bash-34ZGLXVX.js 1.84 MB 0 B
./bundle/cleanup-BMRJHJUN.js 932 B +932 B (new file) 🆕
./bundle/start-Z4CJMZIX.js 652 B +652 B (new file) 🆕

compressed-size-action

@gemini-cli gemini-cli Bot added the status/need-issue Pull requests that need to have an associated issue. label May 4, 2026
@gundermanc gundermanc added this pull request to the merge queue May 4, 2026
Merged via the queue into main with commit f87072f May 4, 2026
27 checks passed
@gundermanc gundermanc deleted the gundermanc/track-actions-usage branch May 4, 2026 21:16
TirthNaik-99 pushed a commit to TirthNaik-99/gemini-cli that referenced this pull request May 4, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

status/need-issue Pull requests that need to have an associated issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants