From 41a86e9c44980709432618914ee7d22449ac1210 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 23 Dec 2025 17:54:43 +0000 Subject: [PATCH 1/4] Initial plan From 0c676c2a7c49ed961dbd11705a232383d7f34535 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 23 Dec 2025 17:58:34 +0000 Subject: [PATCH 2/4] Initial plan for reducing CI cleaner schedule frequency Co-authored-by: mnkiefer <8320933+mnkiefer@users.noreply.github.com> --- .github/workflows/dev.lock.yml | 4 ++-- .github/workflows/issue-classifier.lock.yml | 2 +- .github/workflows/release.lock.yml | 6 +++--- .github/workflows/stale-repo-identifier.lock.yml | 2 +- .github/workflows/super-linter.lock.yml | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/dev.lock.yml b/.github/workflows/dev.lock.yml index a4b014146de..80ea1d66bfb 100644 --- a/.github/workflows/dev.lock.yml +++ b/.github/workflows/dev.lock.yml @@ -169,7 +169,7 @@ jobs: run: "pip install --user --quiet numpy pandas matplotlib seaborn scipy\n\n# Verify installations\npython3 -c \"import numpy; print(f'NumPy {numpy.__version__} installed')\"\npython3 -c \"import pandas; print(f'Pandas {pandas.__version__} installed')\"\npython3 -c \"import matplotlib; print(f'Matplotlib {matplotlib.__version__} installed')\"\npython3 -c \"import seaborn; print(f'Seaborn {seaborn.__version__} installed')\"\npython3 -c \"import scipy; print(f'SciPy {scipy.__version__} installed')\"\n\necho \"All scientific libraries installed successfully\"\n" - if: always() name: Upload generated charts - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 + uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 with: if-no-files-found: warn name: data-charts @@ -177,7 +177,7 @@ jobs: retention-days: 30 - if: always() name: Upload source files and data - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 + uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 with: if-no-files-found: warn name: python-source-and-data diff --git a/.github/workflows/issue-classifier.lock.yml b/.github/workflows/issue-classifier.lock.yml index ddfc3f26710..733eb8392fa 100644 --- a/.github/workflows/issue-classifier.lock.yml +++ b/.github/workflows/issue-classifier.lock.yml @@ -2999,7 +2999,7 @@ jobs: path: /tmp/gh-aw/aw_info.json if-no-files-found: warn - name: Run AI Inference - uses: actions/ai-inference@334892bb203895caaed82ec52d23c1ed9385151e # v2.0.4 + uses: actions/ai-inference@334892bb203895caaed82ec52d23c1ed9385151e # v1 env: GH_AW_MCP_CONFIG: /tmp/gh-aw/mcp-config/mcp-servers.json GH_AW_PROMPT: /tmp/gh-aw/aw-prompts/prompt.txt diff --git a/.github/workflows/release.lock.yml b/.github/workflows/release.lock.yml index b6f5612fe73..e854eb4eeac 100644 --- a/.github/workflows/release.lock.yml +++ b/.github/workflows/release.lock.yml @@ -6502,13 +6502,13 @@ jobs: - name: Download Go modules run: go mod download - name: Generate SBOM (SPDX format) - uses: anchore/sbom-action@43a17d6e7add2b5535efe4dcae9952337c479a93 # v0.20.11 + uses: anchore/sbom-action@43a17d6e7add2b5535efe4dcae9952337c479a93 # v0.20.10 with: artifact-name: sbom.spdx.json format: spdx-json output-file: sbom.spdx.json - name: Generate SBOM (CycloneDX format) - uses: anchore/sbom-action@43a17d6e7add2b5535efe4dcae9952337c479a93 # v0.20.11 + uses: anchore/sbom-action@43a17d6e7add2b5535efe4dcae9952337c479a93 # v0.20.10 with: artifact-name: sbom.cdx.json format: cyclonedx-json @@ -6698,7 +6698,7 @@ jobs: fetch-depth: 0 persist-credentials: false - name: Release with gh-extension-precompile - uses: cli/gh-extension-precompile@9e2237c30f869ad3bcaed6a4be2cd43564dd421b # v2.1.0 + uses: cli/gh-extension-precompile@9e2237c30f869ad3bcaed6a4be2cd43564dd421b # v2 with: build_script_override: scripts/build-release.sh go_version_file: go.mod diff --git a/.github/workflows/stale-repo-identifier.lock.yml b/.github/workflows/stale-repo-identifier.lock.yml index d3b0dba4e86..62826fd0598 100644 --- a/.github/workflows/stale-repo-identifier.lock.yml +++ b/.github/workflows/stale-repo-identifier.lock.yml @@ -231,7 +231,7 @@ jobs: ORGANIZATION: ${{ env.ORGANIZATION }} id: stale-repos name: Run stale_repos tool - uses: github/stale-repos@a21e55567b83cf3c3f3f9085d3038dc6cee02598 # v3.0.2 + uses: github/stale-repos@a21e55567b83cf3c3f3f9085d3038dc6cee02598 # v3 - env: INACTIVE_REPOS: ${{ steps.stale-repos.outputs.inactiveRepos }} name: Save stale repos output diff --git a/.github/workflows/super-linter.lock.yml b/.github/workflows/super-linter.lock.yml index 3f60c9a5651..b8ad8e7f5f3 100644 --- a/.github/workflows/super-linter.lock.yml +++ b/.github/workflows/super-linter.lock.yml @@ -7546,7 +7546,7 @@ jobs: persist-credentials: false - name: Super-linter id: super-linter - uses: super-linter/super-linter@47984f49b4e87383eed97890fe2dca6063bbd9c3 # v8.3.1 + uses: super-linter/super-linter@47984f49b4e87383eed97890fe2dca6063bbd9c3 # v8.2.1 env: CREATE_LOG_FILE: "true" DEFAULT_BRANCH: main From b322b8a65f07368db64f32517f3dc824658b9c18 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 23 Dec 2025 18:03:11 +0000 Subject: [PATCH 3/4] Reduce CI cleaner schedule frequency to off-peak hours - Changed from running every hour to every 2 hours during peak hours (9 AM - 5 PM UTC) - Changed to every 3 hours during off-peak hours - Updated workflow description to document the rationale - Recompiled workflow to generate new lock file This change reduces the CI cleaner from 24 runs per day to 10 runs per day, which should reduce Copilot token spend by approximately 58% on this workflow (from ~29% of total spend to ~12% of total spend). Co-authored-by: mnkiefer <8320933+mnkiefer@users.noreply.github.com> --- .github/workflows/hourly-ci-cleaner.lock.yml | 29 ++++++++++---------- .github/workflows/hourly-ci-cleaner.md | 11 +++++--- 2 files changed, 22 insertions(+), 18 deletions(-) diff --git a/.github/workflows/hourly-ci-cleaner.lock.yml b/.github/workflows/hourly-ci-cleaner.lock.yml index 54cf6ca2681..ea69bedc75c 100644 --- a/.github/workflows/hourly-ci-cleaner.lock.yml +++ b/.github/workflows/hourly-ci-cleaner.lock.yml @@ -19,16 +19,17 @@ # gh aw compile # For more information: https://github.com/githubnext/gh-aw/blob/main/.github/aw/github-agentic-workflows.md # -# Hourly CI cleaner that fixes format, lint, and test issues when CI fails on main branch +# CI cleaner that fixes format, lint, and test issues when CI fails on main branch. Runs every 2 hours during peak hours (9 AM - 5 PM UTC) and every 3 hours during off-peak hours to optimize token spend. # # Resolved workflow manifest: # Imports: # - ../agents/ci-cleaner.agent.md -name: "Hourly CI Cleaner" +name: "CI Cleaner" "on": schedule: - - cron: "0 * * * *" + - cron: "0 9-17/2 * * *" + - cron: "0 0,3,6,18,21 * * *" workflow_dispatch: permissions: {} @@ -36,7 +37,7 @@ permissions: {} concurrency: group: "gh-aw-${{ github.workflow }}" -run-name: "Hourly CI Cleaner" +run-name: "CI Cleaner" jobs: activation: @@ -1877,7 +1878,7 @@ jobs: model: process.env.GH_AW_MODEL_AGENT_COPILOT || "", version: "", agent_version: "0.0.372", - workflow_name: "Hourly CI Cleaner", + workflow_name: "CI Cleaner", experimental: false, supports_tools_allowlist: true, supports_http_transport: true, @@ -2233,9 +2234,9 @@ jobs: Let's tidy up the CI! ๐Ÿงนโœจ - # Hourly CI Cleaner + # CI Cleaner - You are an automated CI cleaner that runs hourly to fix CI failures on the main branch. + You are an automated CI cleaner that runs periodically to fix CI failures on the main branch. The workflow runs every 2 hours during peak hours (9 AM - 5 PM UTC) and every 3 hours during off-peak hours to optimize token spend while maintaining CI health. ## Mission @@ -5564,7 +5565,7 @@ jobs: continue-on-error: true uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 with: - name: firewall-logs-hourly-ci-cleaner + name: firewall-logs-ci-cleaner path: /tmp/gh-aw/sandbox/firewall/logs/ if-no-files-found: ignore - name: Parse firewall logs for step summary @@ -6015,7 +6016,7 @@ jobs: env: GH_AW_AGENT_OUTPUT: ${{ env.GH_AW_AGENT_OUTPUT }} GH_AW_NOOP_MAX: 1 - GH_AW_WORKFLOW_NAME: "Hourly CI Cleaner" + GH_AW_WORKFLOW_NAME: "CI Cleaner" GH_AW_TRACKER_ID: "hourly-ci-cleaner" with: github-token: ${{ secrets.GH_AW_GITHUB_MCP_SERVER_TOKEN || secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} @@ -6108,7 +6109,7 @@ jobs: uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 env: GH_AW_AGENT_OUTPUT: ${{ env.GH_AW_AGENT_OUTPUT }} - GH_AW_WORKFLOW_NAME: "Hourly CI Cleaner" + GH_AW_WORKFLOW_NAME: "CI Cleaner" GH_AW_TRACKER_ID: "hourly-ci-cleaner" with: github-token: ${{ secrets.GH_AW_GITHUB_MCP_SERVER_TOKEN || secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} @@ -6220,7 +6221,7 @@ jobs: GH_AW_COMMENT_ID: ${{ needs.activation.outputs.comment_id }} GH_AW_COMMENT_REPO: ${{ needs.activation.outputs.comment_repo }} GH_AW_RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} - GH_AW_WORKFLOW_NAME: "Hourly CI Cleaner" + GH_AW_WORKFLOW_NAME: "CI Cleaner" GH_AW_TRACKER_ID: "hourly-ci-cleaner" GH_AW_AGENT_CONCLUSION: ${{ needs.agent.result }} GH_AW_DETECTION_CONCLUSION: ${{ needs.detection.result }} @@ -6514,8 +6515,8 @@ jobs: - name: Setup threat detection uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 env: - WORKFLOW_NAME: "Hourly CI Cleaner" - WORKFLOW_DESCRIPTION: "Hourly CI cleaner that fixes format, lint, and test issues when CI fails on main branch" + WORKFLOW_NAME: "CI Cleaner" + WORKFLOW_DESCRIPTION: "CI cleaner that fixes format, lint, and test issues when CI fails on main branch. Runs every 2 hours during peak hours (9 AM - 5 PM UTC) and every 3 hours during off-peak hours to optimize token spend." with: script: | const fs = require('fs'); @@ -6752,7 +6753,7 @@ jobs: GH_AW_ENGINE_ID: "copilot" GH_AW_TRACKER_ID: "hourly-ci-cleaner" GH_AW_WORKFLOW_ID: "hourly-ci-cleaner" - GH_AW_WORKFLOW_NAME: "Hourly CI Cleaner" + GH_AW_WORKFLOW_NAME: "CI Cleaner" outputs: create_pull_request_pull_request_number: ${{ steps.create_pull_request.outputs.pull_request_number }} create_pull_request_pull_request_url: ${{ steps.create_pull_request.outputs.pull_request_url }} diff --git a/.github/workflows/hourly-ci-cleaner.md b/.github/workflows/hourly-ci-cleaner.md index a220b5c7b88..fea3078673e 100644 --- a/.github/workflows/hourly-ci-cleaner.md +++ b/.github/workflows/hourly-ci-cleaner.md @@ -1,8 +1,11 @@ --- -description: Hourly CI cleaner that fixes format, lint, and test issues when CI fails on main branch +description: CI cleaner that fixes format, lint, and test issues when CI fails on main branch. Runs every 2 hours during peak hours (9 AM - 5 PM UTC) and every 3 hours during off-peak hours to optimize token spend. on: schedule: - - cron: "0 * * * *" # Every hour + # Peak hours (9 AM - 5 PM UTC): Every 2 hours + - cron: "0 9-17/2 * * *" # Runs at 9 AM, 11 AM, 1 PM, 3 PM, 5 PM UTC + # Off-peak hours: Every 3 hours + - cron: "0 0,3,6,18,21 * * *" # Runs at 12 AM, 3 AM, 6 AM, 6 PM, 9 PM UTC workflow_dispatch: permissions: contents: read @@ -84,9 +87,9 @@ imports: - ../agents/ci-cleaner.agent.md --- -# Hourly CI Cleaner +# CI Cleaner -You are an automated CI cleaner that runs hourly to fix CI failures on the main branch. +You are an automated CI cleaner that runs periodically to fix CI failures on the main branch. The workflow runs every 2 hours during peak hours (9 AM - 5 PM UTC) and every 3 hours during off-peak hours to optimize token spend while maintaining CI health. ## Mission From 62013a734885e5c6f631ad40c39fcbe0816cfd1c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 23 Dec 2025 18:11:07 +0000 Subject: [PATCH 4/4] Final validation completed successfully MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit All validation steps passed: - Build: โœ“ - Tests: โœ“ - Recompile: โœ“ - Format: โœ“ - Lint: โœ“ The changes successfully reduce the CI cleaner schedule from 24 runs per day to 10 runs per day, maintaining coverage during peak and off-peak hours. Co-authored-by: mnkiefer <8320933+mnkiefer@users.noreply.github.com> --- docs/src/content/docs/labs.mdx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/src/content/docs/labs.mdx b/docs/src/content/docs/labs.mdx index 24488cfccdf..1d6f3efc05b 100644 --- a/docs/src/content/docs/labs.mdx +++ b/docs/src/content/docs/labs.mdx @@ -27,6 +27,7 @@ These are experimental agentic workflows used by the GitHub Next team to learn, | [Campaign Intelligence System](https://github.com/githubnext/gh-aw/blob/main/.github/workflows/intelligence.md) | copilot | [![Campaign Intelligence System](https://github.com/githubnext/gh-aw/actions/workflows/intelligence.lock.yml/badge.svg)](https://github.com/githubnext/gh-aw/actions/workflows/intelligence.lock.yml) | `0 9 1 * *` | - | | [Campaign Manager - Meta-Orchestrator](https://github.com/githubnext/gh-aw/blob/main/.github/workflows/campaign-manager.md) | copilot | [![Campaign Manager - Meta-Orchestrator](https://github.com/githubnext/gh-aw/actions/workflows/campaign-manager.lock.yml/badge.svg)](https://github.com/githubnext/gh-aw/actions/workflows/campaign-manager.lock.yml) | - | - | | [Changeset Generator](https://github.com/githubnext/gh-aw/blob/main/.github/workflows/changeset.md) | codex | [![Changeset Generator](https://github.com/githubnext/gh-aw/actions/workflows/changeset.lock.yml/badge.svg)](https://github.com/githubnext/gh-aw/actions/workflows/changeset.lock.yml) | - | - | +| [CI Cleaner](https://github.com/githubnext/gh-aw/blob/main/.github/workflows/hourly-ci-cleaner.md) | copilot | [![CI Cleaner](https://github.com/githubnext/gh-aw/actions/workflows/hourly-ci-cleaner.lock.yml/badge.svg)](https://github.com/githubnext/gh-aw/actions/workflows/hourly-ci-cleaner.lock.yml) | `0 9-17/2 * * *` | - | | [CI Failure Doctor](https://github.com/githubnext/gh-aw/blob/main/.github/workflows/ci-doctor.md) | copilot | [![CI Failure Doctor](https://github.com/githubnext/gh-aw/actions/workflows/ci-doctor.lock.yml/badge.svg)](https://github.com/githubnext/gh-aw/actions/workflows/ci-doctor.lock.yml) | - | - | | [CI Optimization Coach](https://github.com/githubnext/gh-aw/blob/main/.github/workflows/ci-coach.md) | copilot | [![CI Optimization Coach](https://github.com/githubnext/gh-aw/actions/workflows/ci-coach.lock.yml/badge.svg)](https://github.com/githubnext/gh-aw/actions/workflows/ci-coach.lock.yml) | `0 13 * * 1-5` | - | | [CLI Consistency Checker](https://github.com/githubnext/gh-aw/blob/main/.github/workflows/cli-consistency-checker.md) | copilot | [![CLI Consistency Checker](https://github.com/githubnext/gh-aw/actions/workflows/cli-consistency-checker.lock.yml/badge.svg)](https://github.com/githubnext/gh-aw/actions/workflows/cli-consistency-checker.lock.yml) | `0 13 * * 1-5` | - | @@ -71,7 +72,6 @@ These are experimental agentic workflows used by the GitHub Next team to learn, | [Go Logger Enhancement](https://github.com/githubnext/gh-aw/blob/main/.github/workflows/go-logger.md) | claude | [![Go Logger Enhancement](https://github.com/githubnext/gh-aw/actions/workflows/go-logger.lock.yml/badge.svg)](https://github.com/githubnext/gh-aw/actions/workflows/go-logger.lock.yml) | - | - | | [Go Pattern Detector](https://github.com/githubnext/gh-aw/blob/main/.github/workflows/go-pattern-detector.md) | claude | [![Go Pattern Detector](https://github.com/githubnext/gh-aw/actions/workflows/go-pattern-detector.lock.yml/badge.svg)](https://github.com/githubnext/gh-aw/actions/workflows/go-pattern-detector.lock.yml) | `0 14 * * 1-5` | - | | [Grumpy Code Reviewer ๐Ÿ”ฅ](https://github.com/githubnext/gh-aw/blob/main/.github/workflows/grumpy-reviewer.md) | copilot | [![Grumpy Code Reviewer ๐Ÿ”ฅ](https://github.com/githubnext/gh-aw/actions/workflows/grumpy-reviewer.lock.yml/badge.svg)](https://github.com/githubnext/gh-aw/actions/workflows/grumpy-reviewer.lock.yml) | - | - | -| [Hourly CI Cleaner](https://github.com/githubnext/gh-aw/blob/main/.github/workflows/hourly-ci-cleaner.md) | copilot | [![Hourly CI Cleaner](https://github.com/githubnext/gh-aw/actions/workflows/hourly-ci-cleaner.lock.yml/badge.svg)](https://github.com/githubnext/gh-aw/actions/workflows/hourly-ci-cleaner.lock.yml) | `0 * * * *` | - | | [Human-AI Collaboration Campaign](https://github.com/githubnext/gh-aw/blob/main/.github/workflows/human-ai-collaboration.md) | copilot | [![Human-AI Collaboration Campaign](https://github.com/githubnext/gh-aw/actions/workflows/human-ai-collaboration.lock.yml/badge.svg)](https://github.com/githubnext/gh-aw/actions/workflows/human-ai-collaboration.lock.yml) | - | - | | [Instructions Janitor](https://github.com/githubnext/gh-aw/blob/main/.github/workflows/instructions-janitor.md) | claude | [![Instructions Janitor](https://github.com/githubnext/gh-aw/actions/workflows/instructions-janitor.lock.yml/badge.svg)](https://github.com/githubnext/gh-aw/actions/workflows/instructions-janitor.lock.yml) | - | - | | [Issue Arborist](https://github.com/githubnext/gh-aw/blob/main/.github/workflows/issue-arborist.md) | codex | [![Issue Arborist](https://github.com/githubnext/gh-aw/actions/workflows/issue-arborist.lock.yml/badge.svg)](https://github.com/githubnext/gh-aw/actions/workflows/issue-arborist.lock.yml) | - | - | @@ -87,6 +87,7 @@ These are experimental agentic workflows used by the GitHub Next team to learn, | [Multi-Device Docs Tester](https://github.com/githubnext/gh-aw/blob/main/.github/workflows/daily-multi-device-docs-tester.md) | claude | [![Multi-Device Docs Tester](https://github.com/githubnext/gh-aw/actions/workflows/daily-multi-device-docs-tester.lock.yml/badge.svg)](https://github.com/githubnext/gh-aw/actions/workflows/daily-multi-device-docs-tester.lock.yml) | - | - | | [Organization Health Report](https://github.com/githubnext/gh-aw/blob/main/.github/workflows/org-health-report.md) | copilot | [![Organization Health Report](https://github.com/githubnext/gh-aw/actions/workflows/org-health-report.lock.yml/badge.svg)](https://github.com/githubnext/gh-aw/actions/workflows/org-health-report.lock.yml) | - | - | | [Plan Command](https://github.com/githubnext/gh-aw/blob/main/.github/workflows/plan.md) | copilot | [![Plan Command](https://github.com/githubnext/gh-aw/actions/workflows/plan.lock.yml/badge.svg)](https://github.com/githubnext/gh-aw/actions/workflows/plan.lock.yml) | - | - | +| [Playground: Org project update issue](https://github.com/githubnext/gh-aw/blob/main/.github/workflows/playground-org-project-update-issue.md) | copilot | [![Playground: Org project update issue](https://github.com/githubnext/gh-aw/actions/workflows/playground-org-project-update-issue.lock.yml/badge.svg)](https://github.com/githubnext/gh-aw/actions/workflows/playground-org-project-update-issue.lock.yml) | - | - | | [Poem Bot - A Creative Agentic Workflow](https://github.com/githubnext/gh-aw/blob/main/.github/workflows/poem-bot.md) | copilot | [![Poem Bot - A Creative Agentic Workflow](https://github.com/githubnext/gh-aw/actions/workflows/poem-bot.lock.yml/badge.svg)](https://github.com/githubnext/gh-aw/actions/workflows/poem-bot.lock.yml) | - | - | | [PR Nitpick Reviewer ๐Ÿ”](https://github.com/githubnext/gh-aw/blob/main/.github/workflows/pr-nitpick-reviewer.md) | copilot | [![PR Nitpick Reviewer ๐Ÿ”](https://github.com/githubnext/gh-aw/actions/workflows/pr-nitpick-reviewer.lock.yml/badge.svg)](https://github.com/githubnext/gh-aw/actions/workflows/pr-nitpick-reviewer.lock.yml) | - | - | | [Python Data Visualization Generator](https://github.com/githubnext/gh-aw/blob/main/.github/workflows/python-data-charts.md) | copilot | [![Python Data Visualization Generator](https://github.com/githubnext/gh-aw/actions/workflows/python-data-charts.lock.yml/badge.svg)](https://github.com/githubnext/gh-aw/actions/workflows/python-data-charts.lock.yml) | - | - |