Agentic Maintenance #1242
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
| # This file was automatically generated by pkg/workflow/maintenance_workflow.go (v0.87.4). DO NOT EDIT. To debug this workflow, load the skill at https://github.com/github/gh-aw/blob/main/debug.md | |
| # | |
| # ___ _ _ | |
| # / _ \ | | (_) | |
| # | |_| | __ _ ___ _ __ | |_ _ ___ | |
| # | _ |/ _` |/ _ \ '_ \| __| |/ __| | |
| # | | | | (_| | __/ | | | |_| | (__ | |
| # \_| |_/\__, |\___|_| |_|\__|_|\___| | |
| # __/ | | |
| # _ _ |___/ | |
| # | | | | / _| | | |
| # | | | | ___ _ __ _ __| |_| | _____ ____ | |
| # | |/\| |/ _ \ '__| |/ /| _| |/ _ \ \ /\ / / ___| | |
| # \ /\ / (_) | | | | ( | | | | (_) \ V V /\__ \ | |
| # \/ \/ \___/|_| |_|\_\|_| |_|\___/ \_/\_/ |___/ | |
| # | |
| # | |
| # To regenerate this workflow, run: | |
| # gh aw compile | |
| # Not all edits will cause changes to this file. | |
| # | |
| # For more information: https://github.github.com/gh-aw/introduction/overview/ | |
| # | |
| # This file defines the generated agentic maintenance workflow for this repository. | |
| # It runs scheduled cleanup for expiring safe outputs and supports manual maintenance operations. | |
| # | |
| # This workflow is generated automatically when workflows use expiring safe outputs | |
| # or when repository maintenance features are enabled in .github/workflows/aw.json. | |
| # | |
| # To disable maintenance workflow generation, set in .github/workflows/aw.json: | |
| # {"maintenance": false} | |
| # | |
| # Agentic maintenance docs: | |
| # https://github.github.com/gh-aw/reference/ephemerals/#manual-maintenance-operations | |
| # | |
| name: Agentic Maintenance | |
| on: | |
| schedule: | |
| - cron: "37 */2 * * *" # Every 2 hours (based on minimum expires: 1 days) | |
| workflow_dispatch: | |
| inputs: | |
| operation: | |
| description: 'Optional maintenance operation to run' | |
| required: false | |
| type: choice | |
| default: '' | |
| options: | |
| - '' | |
| - 'disable' | |
| - 'enable' | |
| - 'update' | |
| - 'upgrade' | |
| - 'safe_outputs' | |
| - 'create_labels' | |
| - 'activity_report' | |
| - 'close_agentic_workflows_issues' | |
| - 'clean_cache_memories' | |
| - 'update_pull_request_branches' | |
| - 'validate' | |
| - 'forecast' | |
| run_url: | |
| description: 'Run URL or run ID to replay safe outputs from (e.g. https://github.com/owner/repo/actions/runs/12345 or 12345). Required when operation is safe_outputs.' | |
| required: false | |
| type: string | |
| default: '' | |
| workflow_call: | |
| inputs: | |
| operation: | |
| description: 'Optional maintenance operation to run (disable, enable, update, upgrade, safe_outputs, create_labels, activity_report, close_agentic_workflows_issues, clean_cache_memories, update_pull_request_branches, validate, forecast)' | |
| required: false | |
| type: string | |
| default: '' | |
| run_url: | |
| description: 'Run URL or run ID to replay safe outputs from (e.g. https://github.com/owner/repo/actions/runs/12345 or 12345). Required when operation is safe_outputs.' | |
| required: false | |
| type: string | |
| default: '' | |
| outputs: | |
| operation_completed: | |
| description: 'The maintenance operation that was completed (empty when none ran or a scheduled job ran)' | |
| value: ${{ jobs.run_operation.outputs.operation || inputs.operation }} | |
| applied_run_url: | |
| description: 'The run URL that safe outputs were applied from' | |
| value: ${{ jobs.apply_safe_outputs.outputs.run_url }} | |
| permissions: {} | |
| jobs: | |
| close-expired-discussions: | |
| if: ${{ (!(github.event.repository.fork)) && github.event_name != 'push' && (github.event_name != 'workflow_dispatch' && github.event_name != 'workflow_call' || inputs.operation == '') }} | |
| runs-on: ubuntu-slim | |
| permissions: | |
| discussions: write | |
| steps: | |
| - name: Setup Scripts | |
| uses: github/gh-aw-actions/setup@ea4b911d44a5336c74325a122a5fd9110b45ff06 # v0.87.4 | |
| with: | |
| destination: ${{ runner.temp }}/gh-aw/actions | |
| - name: Close expired discussions | |
| uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 | |
| with: | |
| script: | | |
| const path = require('path'); | |
| const actionsDir = path.join(process.env.RUNNER_TEMP, 'gh-aw', 'actions'); | |
| const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); | |
| setupGlobals(core, github, context, exec, io, getOctokit); | |
| const { main } = require(path.join(actionsDir, 'close_expired_discussions.cjs')); | |
| await main(); | |
| close-expired-issues: | |
| if: ${{ (!(github.event.repository.fork)) && github.event_name != 'push' && (github.event_name != 'workflow_dispatch' && github.event_name != 'workflow_call' || inputs.operation == '') }} | |
| runs-on: ubuntu-slim | |
| permissions: | |
| issues: write | |
| steps: | |
| - name: Setup Scripts | |
| uses: github/gh-aw-actions/setup@ea4b911d44a5336c74325a122a5fd9110b45ff06 # v0.87.4 | |
| with: | |
| destination: ${{ runner.temp }}/gh-aw/actions | |
| - name: Close expired issues | |
| uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 | |
| with: | |
| script: | | |
| const path = require('path'); | |
| const actionsDir = path.join(process.env.RUNNER_TEMP, 'gh-aw', 'actions'); | |
| const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); | |
| setupGlobals(core, github, context, exec, io, getOctokit); | |
| const { main } = require(path.join(actionsDir, 'close_expired_issues.cjs')); | |
| await main(); | |
| close-expired-pull-requests: | |
| if: ${{ (!(github.event.repository.fork)) && github.event_name != 'push' && (github.event_name != 'workflow_dispatch' && github.event_name != 'workflow_call' || inputs.operation == '') }} | |
| runs-on: ubuntu-slim | |
| permissions: | |
| pull-requests: write | |
| steps: | |
| - name: Setup Scripts | |
| uses: github/gh-aw-actions/setup@ea4b911d44a5336c74325a122a5fd9110b45ff06 # v0.87.4 | |
| with: | |
| destination: ${{ runner.temp }}/gh-aw/actions | |
| - name: Close expired pull requests | |
| uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 | |
| with: | |
| script: | | |
| const path = require('path'); | |
| const actionsDir = path.join(process.env.RUNNER_TEMP, 'gh-aw', 'actions'); | |
| const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); | |
| setupGlobals(core, github, context, exec, io, getOctokit); | |
| const { main } = require(path.join(actionsDir, 'close_expired_pull_requests.cjs')); | |
| await main(); | |
| cleanup-cache-memory: | |
| if: ${{ (!(github.event.repository.fork)) && github.event_name != 'push' && (github.event_name != 'workflow_dispatch' && github.event_name != 'workflow_call' || inputs.operation == '' || inputs.operation == 'clean_cache_memories') }} | |
| runs-on: ubuntu-slim | |
| permissions: | |
| actions: write | |
| steps: | |
| - name: Setup Scripts | |
| uses: github/gh-aw-actions/setup@ea4b911d44a5336c74325a122a5fd9110b45ff06 # v0.87.4 | |
| with: | |
| destination: ${{ runner.temp }}/gh-aw/actions | |
| - name: Cleanup outdated cache-memory entries | |
| uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 | |
| with: | |
| script: | | |
| const path = require('path'); | |
| const actionsDir = path.join(process.env.RUNNER_TEMP, 'gh-aw', 'actions'); | |
| const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); | |
| setupGlobals(core, github, context, exec, io, getOctokit); | |
| const { main } = require(path.join(actionsDir, 'cleanup_cache_memory.cjs')); | |
| await main(); | |
| run_operation: | |
| if: ${{ (github.event_name == 'workflow_dispatch' || github.event_name == 'workflow_call') && inputs.operation != '' && inputs.operation != 'safe_outputs' && inputs.operation != 'create_labels' && inputs.operation != 'activity_report' && inputs.operation != 'close_agentic_workflows_issues' && inputs.operation != 'clean_cache_memories' && inputs.operation != 'update_pull_request_branches' && inputs.operation != 'validate' && inputs.operation != 'forecast' && (!(github.event.repository.fork)) }} | |
| runs-on: ubuntu-slim | |
| permissions: | |
| actions: write | |
| contents: write | |
| pull-requests: write | |
| outputs: | |
| operation: ${{ steps.record.outputs.operation }} | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - name: Setup Scripts | |
| uses: github/gh-aw-actions/setup@ea4b911d44a5336c74325a122a5fd9110b45ff06 # v0.87.4 | |
| with: | |
| destination: ${{ runner.temp }}/gh-aw/actions | |
| - name: Check admin/maintainer permissions | |
| uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 | |
| with: | |
| github-token: ${{ secrets.GITHUB_TOKEN }} | |
| script: | | |
| const path = require('path'); | |
| const actionsDir = path.join(process.env.RUNNER_TEMP, 'gh-aw', 'actions'); | |
| const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); | |
| setupGlobals(core, github, context, exec, io, getOctokit); | |
| const { main } = require(path.join(actionsDir, 'check_team_member.cjs')); | |
| await main(); | |
| - name: Install gh-aw | |
| uses: github/gh-aw-actions/setup-cli@ea4b911d44a5336c74325a122a5fd9110b45ff06 # v0.87.4 | |
| with: | |
| version: v0.87.4 | |
| - name: Run operation | |
| uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| GH_AW_OPERATION: ${{ inputs.operation }} | |
| GH_AW_CMD_PREFIX: gh aw | |
| with: | |
| github-token: ${{ secrets.GITHUB_TOKEN }} | |
| script: | | |
| const path = require('path'); | |
| const actionsDir = path.join(process.env.RUNNER_TEMP, 'gh-aw', 'actions'); | |
| const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); | |
| setupGlobals(core, github, context, exec, io, getOctokit); | |
| const { main } = require(path.join(actionsDir, 'run_operation_update_upgrade.cjs')); | |
| await main(); | |
| - name: Record outputs | |
| id: record | |
| env: | |
| GH_AW_OPERATION: ${{ inputs.operation }} | |
| run: echo "operation=$GH_AW_OPERATION" >> "$GITHUB_OUTPUT" | |
| update_pull_request_branches: | |
| if: ${{ (github.event_name == 'workflow_dispatch' || github.event_name == 'workflow_call') && inputs.operation == 'update_pull_request_branches' && (!(github.event.repository.fork)) }} | |
| runs-on: ubuntu-slim | |
| permissions: | |
| contents: write | |
| pull-requests: write | |
| steps: | |
| - name: Setup Scripts | |
| uses: github/gh-aw-actions/setup@ea4b911d44a5336c74325a122a5fd9110b45ff06 # v0.87.4 | |
| with: | |
| destination: ${{ runner.temp }}/gh-aw/actions | |
| - name: Check admin/maintainer permissions | |
| uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 | |
| with: | |
| github-token: ${{ secrets.GITHUB_TOKEN }} | |
| script: | | |
| const path = require('path'); | |
| const actionsDir = path.join(process.env.RUNNER_TEMP, 'gh-aw', 'actions'); | |
| const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); | |
| setupGlobals(core, github, context, exec, io, getOctokit); | |
| const { main } = require(path.join(actionsDir, 'check_team_member.cjs')); | |
| await main(); | |
| - name: Update pull request branches | |
| uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| with: | |
| github-token: ${{ secrets.GITHUB_TOKEN }} | |
| script: | | |
| const path = require('path'); | |
| const actionsDir = path.join(process.env.RUNNER_TEMP, 'gh-aw', 'actions'); | |
| const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); | |
| setupGlobals(core, github, context, exec, io, getOctokit); | |
| const { main } = require(path.join(actionsDir, 'update_pull_request_branches.cjs')); | |
| await main(); | |
| apply_safe_outputs: | |
| if: ${{ (github.event_name == 'workflow_dispatch' || github.event_name == 'workflow_call') && inputs.operation == 'safe_outputs' && (!(github.event.repository.fork)) }} | |
| runs-on: ubuntu-slim | |
| permissions: | |
| actions: read | |
| contents: write | |
| discussions: write | |
| issues: write | |
| pull-requests: write | |
| outputs: | |
| run_url: ${{ steps.record.outputs.run_url }} | |
| steps: | |
| - name: Checkout actions folder | |
| uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| sparse-checkout: | | |
| actions | |
| clean: false | |
| persist-credentials: false | |
| - name: Setup Scripts | |
| uses: github/gh-aw-actions/setup@ea4b911d44a5336c74325a122a5fd9110b45ff06 # v0.87.4 | |
| with: | |
| destination: ${{ runner.temp }}/gh-aw/actions | |
| - name: Check admin/maintainer permissions | |
| uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 | |
| with: | |
| github-token: ${{ secrets.GITHUB_TOKEN }} | |
| script: | | |
| const path = require('path'); | |
| const actionsDir = path.join(process.env.RUNNER_TEMP, 'gh-aw', 'actions'); | |
| const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); | |
| setupGlobals(core, github, context, exec, io, getOctokit); | |
| const { main } = require(path.join(actionsDir, 'check_team_member.cjs')); | |
| await main(); | |
| - name: Apply Safe Outputs | |
| uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| GH_AW_RUN_URL: ${{ inputs.run_url }} | |
| with: | |
| github-token: ${{ secrets.GITHUB_TOKEN }} | |
| script: | | |
| const path = require('path'); | |
| const actionsDir = path.join(process.env.RUNNER_TEMP, 'gh-aw', 'actions'); | |
| const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); | |
| setupGlobals(core, github, context, exec, io, getOctokit); | |
| const { main } = require(path.join(actionsDir, 'apply_safe_outputs_replay.cjs')); | |
| await main(); | |
| - name: Record outputs | |
| id: record | |
| env: | |
| GH_AW_RUN_URL: ${{ inputs.run_url }} | |
| run: echo "run_url=$GH_AW_RUN_URL" >> "$GITHUB_OUTPUT" | |
| create_labels: | |
| if: ${{ (github.event_name == 'workflow_dispatch' || github.event_name == 'workflow_call') && inputs.operation == 'create_labels' && (!(github.event.repository.fork)) }} | |
| runs-on: ubuntu-slim | |
| permissions: | |
| contents: read | |
| issues: write | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - name: Setup Scripts | |
| uses: github/gh-aw-actions/setup@ea4b911d44a5336c74325a122a5fd9110b45ff06 # v0.87.4 | |
| with: | |
| destination: ${{ runner.temp }}/gh-aw/actions | |
| - name: Check admin/maintainer permissions | |
| uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 | |
| with: | |
| github-token: ${{ secrets.GITHUB_TOKEN }} | |
| script: | | |
| const path = require('path'); | |
| const actionsDir = path.join(process.env.RUNNER_TEMP, 'gh-aw', 'actions'); | |
| const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); | |
| setupGlobals(core, github, context, exec, io, getOctokit); | |
| const { main } = require(path.join(actionsDir, 'check_team_member.cjs')); | |
| await main(); | |
| - name: Install gh-aw | |
| uses: github/gh-aw-actions/setup-cli@ea4b911d44a5336c74325a122a5fd9110b45ff06 # v0.87.4 | |
| with: | |
| version: v0.87.4 | |
| - name: Create missing labels | |
| uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 | |
| env: | |
| GH_AW_CMD_PREFIX: gh aw | |
| with: | |
| github-token: ${{ secrets.GITHUB_TOKEN }} | |
| script: | | |
| const path = require('path'); | |
| const actionsDir = path.join(process.env.RUNNER_TEMP, 'gh-aw', 'actions'); | |
| const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); | |
| setupGlobals(core, github, context, exec, io, getOctokit); | |
| const { main } = require(path.join(actionsDir, 'create_labels.cjs')); | |
| await main(); | |
| activity_report: | |
| if: ${{ (github.event_name == 'workflow_dispatch' || github.event_name == 'workflow_call') && inputs.operation == 'activity_report' && (!(github.event.repository.fork)) }} | |
| runs-on: ubuntu-slim | |
| timeout-minutes: 120 | |
| permissions: | |
| actions: read | |
| contents: read | |
| issues: write | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - name: Setup Scripts | |
| uses: github/gh-aw-actions/setup@ea4b911d44a5336c74325a122a5fd9110b45ff06 # v0.87.4 | |
| with: | |
| destination: ${{ runner.temp }}/gh-aw/actions | |
| - name: Check admin/maintainer permissions | |
| uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 | |
| with: | |
| github-token: ${{ secrets.GITHUB_TOKEN }} | |
| script: | | |
| const path = require('path'); | |
| const actionsDir = path.join(process.env.RUNNER_TEMP, 'gh-aw', 'actions'); | |
| const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); | |
| setupGlobals(core, github, context, exec, io, getOctokit); | |
| const { main } = require(path.join(actionsDir, 'check_team_member.cjs')); | |
| await main(); | |
| - name: Install gh-aw | |
| uses: github/gh-aw-actions/setup-cli@ea4b911d44a5336c74325a122a5fd9110b45ff06 # v0.87.4 | |
| with: | |
| version: v0.87.4 | |
| - name: Restore activity report logs cache | |
| id: activity_report_logs_cache | |
| uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 | |
| with: | |
| path: ./.cache/gh-aw/activity-report-logs | |
| key: ${{ runner.os }}-activity-report-logs-${{ github.repository }}-${{ github.ref_name }}-${{ github.run_id }} | |
| restore-keys: | | |
| ${{ runner.os }}-activity-report-logs-${{ github.repository }}- | |
| ${{ runner.os }}-activity-report-logs- | |
| - name: Download activity report logs | |
| timeout-minutes: 20 | |
| shell: bash | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| GH_AW_CMD_PREFIX: gh aw | |
| run: | | |
| ${GH_AW_CMD_PREFIX} logs \ | |
| --repo "$GITHUB_REPOSITORY" \ | |
| --start-date -1w \ | |
| --count 500 \ | |
| --output ./.cache/gh-aw/activity-report-logs \ | |
| --format markdown \ | |
| --report-file ./.cache/gh-aw/activity-report-logs/report.md | |
| - name: Save activity report logs cache | |
| if: ${{ always() }} | |
| uses: actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 | |
| with: | |
| path: ./.cache/gh-aw/activity-report-logs | |
| key: ${{ steps.activity_report_logs_cache.outputs.cache-primary-key }} | |
| - name: Generate activity report issue | |
| uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 | |
| with: | |
| github-token: ${{ secrets.GITHUB_TOKEN }} | |
| script: | | |
| const fs = require('node:fs'); | |
| const reportPath = './.cache/gh-aw/activity-report-logs/report.md'; | |
| if (!fs.existsSync(reportPath)) { | |
| core.warning('Activity report markdown not found at ' + reportPath + '; skipping issue creation.'); | |
| return; | |
| } | |
| let reportBody = ''; | |
| try { | |
| reportBody = fs.readFileSync(reportPath, 'utf8').trim(); | |
| } catch (error) { | |
| core.warning('Failed to read activity report markdown at ' + reportPath + ': ' + error.message); | |
| return; | |
| } | |
| if (!reportBody) { | |
| core.warning('Activity report markdown is empty at ' + reportPath + '; skipping issue creation.'); | |
| return; | |
| } | |
| const repoSlug = context.repo.owner + '/' + context.repo.repo; | |
| const body = [ | |
| '### Agentic workflow activity report', | |
| '', | |
| 'Repository: ' + repoSlug, | |
| 'Generated at: ' + new Date().toISOString(), | |
| '', | |
| reportBody, | |
| ].join('\n'); | |
| const createdIssue = await github.rest.issues.create({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| title: '[aw] agentic status report', | |
| body, | |
| labels: ['agentic-workflows'], | |
| }); | |
| core.info('Created issue #' + createdIssue.data.number + ': ' + createdIssue.data.html_url); | |
| forecast_report: | |
| if: ${{ (github.event_name == 'workflow_dispatch' || github.event_name == 'workflow_call') && inputs.operation == 'forecast' && (!(github.event.repository.fork)) }} | |
| runs-on: ubuntu-slim | |
| timeout-minutes: 60 | |
| permissions: | |
| actions: read | |
| contents: read | |
| issues: write | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - name: Setup Scripts | |
| uses: github/gh-aw-actions/setup@ea4b911d44a5336c74325a122a5fd9110b45ff06 # v0.87.4 | |
| with: | |
| destination: ${{ runner.temp }}/gh-aw/actions | |
| - name: Check admin/maintainer permissions | |
| uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 | |
| with: | |
| github-token: ${{ secrets.GITHUB_TOKEN }} | |
| script: | | |
| const path = require('path'); | |
| const actionsDir = path.join(process.env.RUNNER_TEMP, 'gh-aw', 'actions'); | |
| const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); | |
| setupGlobals(core, github, context, exec, io, getOctokit); | |
| const { main } = require(path.join(actionsDir, 'check_team_member.cjs')); | |
| await main(); | |
| - name: Install gh-aw | |
| uses: github/gh-aw-actions/setup-cli@ea4b911d44a5336c74325a122a5fd9110b45ff06 # v0.87.4 | |
| with: | |
| version: v0.87.4 | |
| - name: Restore forecast report logs cache | |
| id: forecast_report_logs_cache | |
| uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 | |
| with: | |
| path: ./.github/aw/logs | |
| key: ${{ runner.os }}-forecast-report-logs-${{ github.repository }}-${{ github.ref_name }}-${{ github.run_id }} | |
| restore-keys: | | |
| ${{ runner.os }}-forecast-report-logs-${{ github.repository }}- | |
| ${{ runner.os }}-forecast-report-logs- | |
| - name: Generate forecast report | |
| id: generate_forecast_report | |
| timeout-minutes: 30 | |
| shell: bash | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| DEBUG: "*" | |
| GH_AW_CMD_PREFIX: gh aw | |
| run: | | |
| mkdir -p ./.cache/gh-aw/forecast | |
| set +e | |
| ${GH_AW_CMD_PREFIX} forecast --repo "$GITHUB_REPOSITORY" --timeout 30 --verbose --json > ./.cache/gh-aw/forecast/report.json | |
| forecast_exit_code=$? | |
| set -e | |
| if [ "${forecast_exit_code}" -eq 124 ]; then | |
| echo '{"outcome":"timeout","message":"Forecast computation timed out after 30 minutes."}' > ./.cache/gh-aw/forecast/error.json | |
| echo "::error::Forecast computation timed out after 30 minutes." | |
| exit 1 | |
| fi | |
| if [ "${forecast_exit_code}" -ne 0 ]; then | |
| echo '{"outcome":"error","message":"Forecast computation failed before producing a report."}' > ./.cache/gh-aw/forecast/error.json | |
| echo "::error::Forecast computation failed with exit code ${forecast_exit_code}." | |
| exit 1 | |
| fi | |
| - name: Debug forecast logs folder | |
| if: ${{ always() }} | |
| shell: bash | |
| run: | | |
| if [ ! -d ./.github/aw/logs ]; then | |
| echo "Logs directory not found: ./.github/aw/logs" | |
| exit 0 | |
| fi | |
| echo "Files under ./.github/aw/logs:" | |
| find ./.github/aw/logs -type f | sort | |
| - name: Save forecast report logs cache | |
| if: ${{ always() }} | |
| uses: actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 | |
| with: | |
| path: ./.github/aw/logs | |
| key: ${{ runner.os }}-forecast-report-logs-${{ github.repository }}-${{ github.ref_name }}-${{ github.run_id }} | |
| - name: Generate forecast issue | |
| if: ${{ always() }} | |
| uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 | |
| env: | |
| FORECAST_STEP_OUTCOME: ${{ steps.generate_forecast_report.outcome }} | |
| with: | |
| github-token: ${{ secrets.GITHUB_TOKEN }} | |
| script: | | |
| const path = require('path'); | |
| const actionsDir = path.join(process.env.RUNNER_TEMP, 'gh-aw', 'actions'); | |
| const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); | |
| setupGlobals(core, github, context, exec, io, getOctokit); | |
| const { main } = require(path.join(actionsDir, 'create_forecast_issue.cjs')); | |
| await main(); | |
| close_agentic_workflows_issues: | |
| if: ${{ (github.event_name == 'workflow_dispatch' || github.event_name == 'workflow_call') && inputs.operation == 'close_agentic_workflows_issues' && (!(github.event.repository.fork)) }} | |
| runs-on: ubuntu-slim | |
| permissions: | |
| issues: write | |
| steps: | |
| - name: Setup Scripts | |
| uses: github/gh-aw-actions/setup@ea4b911d44a5336c74325a122a5fd9110b45ff06 # v0.87.4 | |
| with: | |
| destination: ${{ runner.temp }}/gh-aw/actions | |
| - name: Check admin/maintainer permissions | |
| uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 | |
| with: | |
| github-token: ${{ secrets.GITHUB_TOKEN }} | |
| script: | | |
| const path = require('path'); | |
| const actionsDir = path.join(process.env.RUNNER_TEMP, 'gh-aw', 'actions'); | |
| const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); | |
| setupGlobals(core, github, context, exec, io, getOctokit); | |
| const { main } = require(path.join(actionsDir, 'check_team_member.cjs')); | |
| await main(); | |
| - name: Close no-repro agentic-workflows issues | |
| uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 | |
| with: | |
| github-token: ${{ secrets.GITHUB_TOKEN }} | |
| script: | | |
| const path = require('path'); | |
| const actionsDir = path.join(process.env.RUNNER_TEMP, 'gh-aw', 'actions'); | |
| const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); | |
| setupGlobals(core, github, context, exec, io, getOctokit); | |
| const { main } = require(path.join(actionsDir, 'close_agentic_workflows_issues.cjs')); | |
| await main(); | |
| validate_workflows: | |
| if: ${{ (github.event_name == 'workflow_dispatch' || github.event_name == 'workflow_call') && inputs.operation == 'validate' && (!(github.event.repository.fork)) }} | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: read | |
| issues: write | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - name: Setup Scripts | |
| uses: github/gh-aw-actions/setup@ea4b911d44a5336c74325a122a5fd9110b45ff06 # v0.87.4 | |
| with: | |
| destination: ${{ runner.temp }}/gh-aw/actions | |
| - name: Check admin/maintainer permissions | |
| uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 | |
| with: | |
| github-token: ${{ secrets.GITHUB_TOKEN }} | |
| script: | | |
| const path = require('path'); | |
| const actionsDir = path.join(process.env.RUNNER_TEMP, 'gh-aw', 'actions'); | |
| const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); | |
| setupGlobals(core, github, context, exec, io, getOctokit); | |
| const { main } = require(path.join(actionsDir, 'check_team_member.cjs')); | |
| await main(); | |
| - name: Install gh-aw | |
| uses: github/gh-aw-actions/setup-cli@ea4b911d44a5336c74325a122a5fd9110b45ff06 # v0.87.4 | |
| with: | |
| version: v0.87.4 | |
| - name: Validate workflows and file issue on findings | |
| uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 | |
| env: | |
| GH_AW_CMD_PREFIX: gh aw | |
| with: | |
| github-token: ${{ secrets.GITHUB_TOKEN }} | |
| script: | | |
| const path = require('path'); | |
| const actionsDir = path.join(process.env.RUNNER_TEMP, 'gh-aw', 'actions'); | |
| const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); | |
| setupGlobals(core, github, context, exec, io, getOctokit); | |
| const { main } = require(path.join(actionsDir, 'run_validate_workflows.cjs')); | |
| await main(); |