From 9fffea973ee989a7a8398ae8d64aaca26907d55f Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Sat, 9 May 2026 10:27:50 +0800 Subject: [PATCH 01/25] feat: add agentic workflows for issue triage and auto fix --- .github/workflows/auto-code.lock.yml | 1179 +++++++++++++++++++++++ .github/workflows/auto-code.md | 88 ++ .github/workflows/issue-triage.lock.yml | 1097 +++++++++++++++++++++ .github/workflows/issue-triage.md | 68 ++ 4 files changed, 2432 insertions(+) create mode 100644 .github/workflows/auto-code.lock.yml create mode 100644 .github/workflows/auto-code.md create mode 100644 .github/workflows/issue-triage.lock.yml create mode 100644 .github/workflows/issue-triage.md diff --git a/.github/workflows/auto-code.lock.yml b/.github/workflows/auto-code.lock.yml new file mode 100644 index 0000000..919efe7 --- /dev/null +++ b/.github/workflows/auto-code.lock.yml @@ -0,0 +1,1179 @@ +# gh-aw-metadata: {"schema_version":"v3","frontmatter_hash":"158e10df0b3421742ed672f7a5667899e0977be63eed6a6fa996ccb9de250211","compiler_version":"v0.71.5","agent_id":"copilot"} +# gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_TOKEN","GH_AW_CI_TRIGGER_TOKEN","GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GITHUB_TOKEN","OPENAI_API_KEY"],"actions":[{"repo":"actions/checkout","sha":"de0fac2e4500dabe0009e67214ff5f5447ce83dd","version":"v6.0.2"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"},{"repo":"github/gh-aw-actions/setup","sha":"b8068426813005612b960b5ab0b8bd2c27142323","version":"v0.71.5"}],"containers":[{"image":"ghcr.io/github/github-mcp-server:v1.0.3","digest":"sha256:2ac27ef03461ef2b877031b838a7d1fd7f12b12d4ace7796d8cad91446d55959","pinned_image":"ghcr.io/github/github-mcp-server:v1.0.3@sha256:2ac27ef03461ef2b877031b838a7d1fd7f12b12d4ace7796d8cad91446d55959"},{"image":"node:lts-alpine","digest":"sha256:d1b3b4da11eefd5941e7f0b9cf17783fc99d9c6fc34884a665f40a06dbdfc94f","pinned_image":"node:lts-alpine@sha256:d1b3b4da11eefd5941e7f0b9cf17783fc99d9c6fc34884a665f40a06dbdfc94f"}]} +# ___ _ _ +# / _ \ | | (_) +# | |_| | __ _ ___ _ __ | |_ _ ___ +# | _ |/ _` |/ _ \ '_ \| __| |/ __| +# | | | | (_| | __/ | | | |_| | (__ +# \_| |_/\__, |\___|_| |_|\__|_|\___| +# __/ | +# _ _ |___/ +# | | | | / _| | +# | | | | ___ _ __ _ __| |_| | _____ ____ +# | |/\| |/ _ \ '__| |/ /| _| |/ _ \ \ /\ / / ___| +# \ /\ / (_) | | | | ( | | | | (_) \ V V /\__ \ +# \/ \/ \___/|_| |_|\_\|_| |_|\___/ \_/\_/ |___/ +# +# This file was automatically generated by gh-aw (v0.71.5). DO NOT EDIT. +# +# To update this file, edit the corresponding .md file and run: +# gh aw compile +# Not all edits will cause changes to this file. +# +# For more information: https://github.github.com/gh-aw/introduction/overview/ +# +# +# Secrets used: +# - COPILOT_GITHUB_TOKEN +# - GH_AW_CI_TRIGGER_TOKEN +# - GH_AW_GITHUB_MCP_SERVER_TOKEN +# - GH_AW_GITHUB_TOKEN +# - GITHUB_TOKEN +# - OPENAI_API_KEY +# +# Custom actions used: +# - actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 +# - actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 +# - actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 +# - actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 +# - github/gh-aw-actions/setup@b8068426813005612b960b5ab0b8bd2c27142323 # v0.71.5 +# +# Container images used: +# - ghcr.io/github/github-mcp-server:v1.0.3@sha256:2ac27ef03461ef2b877031b838a7d1fd7f12b12d4ace7796d8cad91446d55959 +# - node:lts-alpine@sha256:d1b3b4da11eefd5941e7f0b9cf17783fc99d9c6fc34884a665f40a06dbdfc94f + +name: "自动处理 Issue" +"on": + issues: + types: + - labeled + +permissions: {} + +concurrency: + group: "gh-aw-${{ github.workflow }}-${{ github.event.issue.number || github.run_id }}" + +run-name: "自动处理 Issue" + +jobs: + activation: + needs: pre_activation + if: needs.pre_activation.outputs.activated == 'true' + runs-on: ubuntu-slim + permissions: + actions: read + contents: read + outputs: + body: ${{ steps.sanitized.outputs.body }} + comment_id: "" + comment_repo: "" + engine_id: ${{ steps.generate_aw_info.outputs.engine_id }} + lockdown_check_failed: ${{ steps.generate_aw_info.outputs.lockdown_check_failed == 'true' }} + model: ${{ steps.generate_aw_info.outputs.model }} + setup-trace-id: ${{ steps.setup.outputs.trace-id }} + stale_lock_file_failed: ${{ steps.check-lock-file.outputs.stale_lock_file_failed == 'true' }} + text: ${{ steps.sanitized.outputs.text }} + title: ${{ steps.sanitized.outputs.title }} + steps: + - name: Setup Scripts + id: setup + uses: github/gh-aw-actions/setup@b8068426813005612b960b5ab0b8bd2c27142323 # v0.71.5 + with: + destination: ${{ runner.temp }}/gh-aw/actions + job-name: ${{ github.job }} + trace-id: ${{ needs.pre_activation.outputs.setup-trace-id }} + env: + GH_AW_SETUP_WORKFLOW_NAME: "自动处理 Issue" + GH_AW_CURRENT_WORKFLOW_REF: ${{ github.repository }}/.github/workflows/auto-code.lock.yml@${{ github.ref }} + GH_AW_INFO_VERSION: "1.0.40" + - name: Generate agentic run info + id: generate_aw_info + env: + GH_AW_INFO_ENGINE_ID: "copilot" + GH_AW_INFO_ENGINE_NAME: "GitHub Copilot CLI" + GH_AW_INFO_MODEL: ${{ vars.GH_AW_MODEL_AGENT_COPILOT || 'claude-sonnet-4.6' }} + GH_AW_INFO_VERSION: "1.0.40" + GH_AW_INFO_AGENT_VERSION: "1.0.40" + GH_AW_INFO_CLI_VERSION: "v0.71.5" + GH_AW_INFO_WORKFLOW_NAME: "自动处理 Issue" + GH_AW_INFO_EXPERIMENTAL: "false" + GH_AW_INFO_SUPPORTS_TOOLS_ALLOWLIST: "true" + GH_AW_INFO_STAGED: "false" + GH_AW_INFO_ALLOWED_DOMAINS: '["defaults","ark.cn-beijing.volces.com"]' + GH_AW_INFO_FIREWALL_ENABLED: "false" + GH_AW_INFO_AWF_VERSION: "" + GH_AW_INFO_AWMG_VERSION: "" + GH_AW_INFO_FIREWALL_TYPE: "" + GH_AW_COMPILED_STRICT: "false" + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io, getOctokit); + const { main } = require('${{ runner.temp }}/gh-aw/actions/generate_aw_info.cjs'); + await main(core, context); + - name: Checkout .github and .agents folders + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false + sparse-checkout: | + .github + .agents + .claude + .codex + .crush + .gemini + .opencode + .pi + sparse-checkout-cone-mode: true + fetch-depth: 1 + - name: Save agent config folders for base branch restoration + env: + GH_AW_AGENT_FOLDERS: ".agents .claude .codex .crush .gemini .github .opencode .pi" + GH_AW_AGENT_FILES: ".crush.json AGENTS.md CLAUDE.md GEMINI.md PI.md opencode.jsonc" + # poutine:ignore untrusted_checkout_exec + run: bash "${RUNNER_TEMP}/gh-aw/actions/save_base_github_folders.sh" + - name: Check workflow lock file + id: check-lock-file + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 + env: + GH_AW_WORKFLOW_FILE: "auto-code.lock.yml" + GH_AW_CONTEXT_WORKFLOW_REF: "${{ github.workflow_ref }}" + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io, getOctokit); + const { main } = require('${{ runner.temp }}/gh-aw/actions/check_workflow_timestamp_api.cjs'); + await main(); + - name: Check compile-agentic version + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 + env: + GH_AW_COMPILED_VERSION: "v0.71.5" + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io, getOctokit); + const { main } = require('${{ runner.temp }}/gh-aw/actions/check_version_updates.cjs'); + await main(); + - name: Compute current body text + id: sanitized + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 + env: + GH_AW_ALLOWED_DOMAINS: "api.business.githubcopilot.com,api.enterprise.githubcopilot.com,api.github.com,api.githubcopilot.com,api.individual.githubcopilot.com,api.snapcraft.io,archive.ubuntu.com,ark.cn-beijing.volces.com,azure.archive.ubuntu.com,crl.geotrust.com,crl.globalsign.com,crl.identrust.com,crl.sectigo.com,crl.thawte.com,crl.usertrust.com,crl.verisign.com,crl3.digicert.com,crl4.digicert.com,crls.ssl.com,github.com,host.docker.internal,json-schema.org,json.schemastore.org,keyserver.ubuntu.com,ocsp.digicert.com,ocsp.geotrust.com,ocsp.globalsign.com,ocsp.identrust.com,ocsp.sectigo.com,ocsp.ssl.com,ocsp.thawte.com,ocsp.usertrust.com,ocsp.verisign.com,packagecloud.io,packages.cloud.google.com,packages.microsoft.com,ppa.launchpad.net,raw.githubusercontent.com,registry.npmjs.org,s.symcb.com,s.symcd.com,security.ubuntu.com,telemetry.enterprise.githubcopilot.com,ts-crl.ws.symantec.com,ts-ocsp.ws.symantec.com,www.googleapis.com" + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io, getOctokit); + const { main } = require('${{ runner.temp }}/gh-aw/actions/compute_text.cjs'); + await main(); + - name: Create prompt with built-in context + env: + GH_AW_PROMPT: /tmp/gh-aw/aw-prompts/prompt.txt + GH_AW_SAFE_OUTPUTS: ${{ runner.temp }}/gh-aw/safeoutputs/outputs.jsonl + GH_AW_GITHUB_ACTOR: ${{ github.actor }} + GH_AW_GITHUB_EVENT_COMMENT_ID: ${{ github.event.comment.id }} + GH_AW_GITHUB_EVENT_DISCUSSION_NUMBER: ${{ github.event.discussion.number }} + GH_AW_GITHUB_EVENT_ISSUE_NUMBER: ${{ github.event.issue.number }} + GH_AW_GITHUB_EVENT_PULL_REQUEST_NUMBER: ${{ github.event.pull_request.number }} + GH_AW_GITHUB_REPOSITORY: ${{ github.repository }} + GH_AW_GITHUB_RUN_ID: ${{ github.run_id }} + GH_AW_GITHUB_WORKSPACE: ${{ github.workspace }} + # poutine:ignore untrusted_checkout_exec + run: | + bash "${RUNNER_TEMP}/gh-aw/actions/create_prompt_first.sh" + { + cat << 'GH_AW_PROMPT_de410bcdbc8f0b37_EOF' + + GH_AW_PROMPT_de410bcdbc8f0b37_EOF + cat "${RUNNER_TEMP}/gh-aw/prompts/xpia.md" + cat "${RUNNER_TEMP}/gh-aw/prompts/temp_folder_prompt.md" + cat "${RUNNER_TEMP}/gh-aw/prompts/markdown.md" + cat "${RUNNER_TEMP}/gh-aw/prompts/safe_outputs_prompt.md" + cat << 'GH_AW_PROMPT_de410bcdbc8f0b37_EOF' + + Tools: add_comment, create_pull_request, missing_tool, missing_data, noop + GH_AW_PROMPT_de410bcdbc8f0b37_EOF + cat "${RUNNER_TEMP}/gh-aw/prompts/safe_outputs_create_pull_request.md" + cat << 'GH_AW_PROMPT_de410bcdbc8f0b37_EOF' + + GH_AW_PROMPT_de410bcdbc8f0b37_EOF + cat "${RUNNER_TEMP}/gh-aw/prompts/mcp_cli_tools_prompt.md" + cat << 'GH_AW_PROMPT_de410bcdbc8f0b37_EOF' + + The following GitHub context information is available for this workflow: + {{#if __GH_AW_GITHUB_ACTOR__ }} + - **actor**: __GH_AW_GITHUB_ACTOR__ + {{/if}} + {{#if __GH_AW_GITHUB_REPOSITORY__ }} + - **repository**: __GH_AW_GITHUB_REPOSITORY__ + {{/if}} + {{#if __GH_AW_GITHUB_WORKSPACE__ }} + - **workspace**: __GH_AW_GITHUB_WORKSPACE__ + {{/if}} + {{#if __GH_AW_GITHUB_EVENT_ISSUE_NUMBER__ }} + - **issue-number**: #__GH_AW_GITHUB_EVENT_ISSUE_NUMBER__ + {{/if}} + {{#if __GH_AW_GITHUB_EVENT_DISCUSSION_NUMBER__ }} + - **discussion-number**: #__GH_AW_GITHUB_EVENT_DISCUSSION_NUMBER__ + {{/if}} + {{#if __GH_AW_GITHUB_EVENT_PULL_REQUEST_NUMBER__ }} + - **pull-request-number**: #__GH_AW_GITHUB_EVENT_PULL_REQUEST_NUMBER__ + {{/if}} + {{#if __GH_AW_GITHUB_EVENT_COMMENT_ID__ }} + - **comment-id**: __GH_AW_GITHUB_EVENT_COMMENT_ID__ + {{/if}} + {{#if __GH_AW_GITHUB_RUN_ID__ }} + - **workflow-run-id**: __GH_AW_GITHUB_RUN_ID__ + {{/if}} + + + GH_AW_PROMPT_de410bcdbc8f0b37_EOF + cat "${RUNNER_TEMP}/gh-aw/prompts/github_mcp_tools_with_safeoutputs_prompt.md" + cat << 'GH_AW_PROMPT_de410bcdbc8f0b37_EOF' + + {{#runtime-import .github/workflows/auto-code.md}} + GH_AW_PROMPT_de410bcdbc8f0b37_EOF + } > "$GH_AW_PROMPT" + - name: Interpolate variables and render templates + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 + env: + GH_AW_PROMPT: /tmp/gh-aw/aw-prompts/prompt.txt + GH_AW_ENGINE_ID: "copilot" + GH_AW_GITHUB_EVENT_ISSUE_NUMBER: ${{ github.event.issue.number }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io, getOctokit); + const { main } = require('${{ runner.temp }}/gh-aw/actions/interpolate_prompt.cjs'); + await main(); + - name: Substitute placeholders + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 + env: + GH_AW_PROMPT: /tmp/gh-aw/aw-prompts/prompt.txt + GH_AW_GITHUB_ACTOR: ${{ github.actor }} + GH_AW_GITHUB_EVENT_COMMENT_ID: ${{ github.event.comment.id }} + GH_AW_GITHUB_EVENT_DISCUSSION_NUMBER: ${{ github.event.discussion.number }} + GH_AW_GITHUB_EVENT_ISSUE_NUMBER: ${{ github.event.issue.number }} + GH_AW_GITHUB_EVENT_PULL_REQUEST_NUMBER: ${{ github.event.pull_request.number }} + GH_AW_GITHUB_REPOSITORY: ${{ github.repository }} + GH_AW_GITHUB_RUN_ID: ${{ github.run_id }} + GH_AW_GITHUB_WORKSPACE: ${{ github.workspace }} + GH_AW_MCP_CLI_SERVERS_LIST: '- `safeoutputs` — run `safeoutputs --help` to see available tools' + GH_AW_NEEDS_PRE_ACTIVATION_OUTPUTS_ACTIVATED: ${{ needs.pre_activation.outputs.activated }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io, getOctokit); + + const substitutePlaceholders = require('${{ runner.temp }}/gh-aw/actions/substitute_placeholders.cjs'); + + // Call the substitution function + return await substitutePlaceholders({ + file: process.env.GH_AW_PROMPT, + substitutions: { + GH_AW_GITHUB_ACTOR: process.env.GH_AW_GITHUB_ACTOR, + GH_AW_GITHUB_EVENT_COMMENT_ID: process.env.GH_AW_GITHUB_EVENT_COMMENT_ID, + GH_AW_GITHUB_EVENT_DISCUSSION_NUMBER: process.env.GH_AW_GITHUB_EVENT_DISCUSSION_NUMBER, + GH_AW_GITHUB_EVENT_ISSUE_NUMBER: process.env.GH_AW_GITHUB_EVENT_ISSUE_NUMBER, + GH_AW_GITHUB_EVENT_PULL_REQUEST_NUMBER: process.env.GH_AW_GITHUB_EVENT_PULL_REQUEST_NUMBER, + GH_AW_GITHUB_REPOSITORY: process.env.GH_AW_GITHUB_REPOSITORY, + GH_AW_GITHUB_RUN_ID: process.env.GH_AW_GITHUB_RUN_ID, + GH_AW_GITHUB_WORKSPACE: process.env.GH_AW_GITHUB_WORKSPACE, + GH_AW_MCP_CLI_SERVERS_LIST: process.env.GH_AW_MCP_CLI_SERVERS_LIST, + GH_AW_NEEDS_PRE_ACTIVATION_OUTPUTS_ACTIVATED: process.env.GH_AW_NEEDS_PRE_ACTIVATION_OUTPUTS_ACTIVATED + } + }); + - name: Validate prompt placeholders + env: + GH_AW_PROMPT: /tmp/gh-aw/aw-prompts/prompt.txt + # poutine:ignore untrusted_checkout_exec + run: bash "${RUNNER_TEMP}/gh-aw/actions/validate_prompt_placeholders.sh" + - name: Print prompt + env: + GH_AW_PROMPT: /tmp/gh-aw/aw-prompts/prompt.txt + # poutine:ignore untrusted_checkout_exec + run: bash "${RUNNER_TEMP}/gh-aw/actions/print_prompt_summary.sh" + - name: Upload activation artifact + if: success() + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 + with: + name: activation + include-hidden-files: true + path: | + /tmp/gh-aw/aw_info.json + /tmp/gh-aw/aw-prompts/prompt.txt + /tmp/gh-aw/github_rate_limits.jsonl + /tmp/gh-aw/base + if-no-files-found: ignore + retention-days: 1 + + agent: + needs: activation + runs-on: ubuntu-latest + permissions: + contents: read + issues: read + pull-requests: read + env: + DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} + GH_AW_ASSETS_ALLOWED_EXTS: "" + GH_AW_ASSETS_BRANCH: "" + GH_AW_ASSETS_MAX_SIZE_KB: 0 + GH_AW_MCP_LOG_DIR: /tmp/gh-aw/mcp-logs/safeoutputs + GH_AW_WORKFLOW_ID_SANITIZED: autocode + outputs: + agentic_engine_timeout: ${{ steps.detect-copilot-errors.outputs.agentic_engine_timeout || 'false' }} + checkout_pr_success: ${{ steps.checkout-pr.outputs.checkout_pr_success || 'true' }} + effective_tokens: ${{ steps.parse-mcp-gateway.outputs.effective_tokens }} + has_patch: ${{ steps.collect_output.outputs.has_patch }} + inference_access_error: ${{ steps.detect-copilot-errors.outputs.inference_access_error || 'false' }} + mcp_policy_error: ${{ steps.detect-copilot-errors.outputs.mcp_policy_error || 'false' }} + model: ${{ needs.activation.outputs.model }} + model_not_supported_error: ${{ steps.detect-copilot-errors.outputs.model_not_supported_error || 'false' }} + output: ${{ steps.collect_output.outputs.output }} + output_types: ${{ steps.collect_output.outputs.output_types }} + setup-trace-id: ${{ steps.setup.outputs.trace-id }} + steps: + - name: Setup Scripts + id: setup + uses: github/gh-aw-actions/setup@b8068426813005612b960b5ab0b8bd2c27142323 # v0.71.5 + with: + destination: ${{ runner.temp }}/gh-aw/actions + job-name: ${{ github.job }} + trace-id: ${{ needs.activation.outputs.setup-trace-id }} + env: + GH_AW_SETUP_WORKFLOW_NAME: "自动处理 Issue" + GH_AW_CURRENT_WORKFLOW_REF: ${{ github.repository }}/.github/workflows/auto-code.lock.yml@${{ github.ref }} + GH_AW_INFO_VERSION: "1.0.40" + - name: Set runtime paths + id: set-runtime-paths + run: | + { + echo "GH_AW_SAFE_OUTPUTS=${RUNNER_TEMP}/gh-aw/safeoutputs/outputs.jsonl" + echo "GH_AW_SAFE_OUTPUTS_CONFIG_PATH=${RUNNER_TEMP}/gh-aw/safeoutputs/config.json" + echo "GH_AW_SAFE_OUTPUTS_TOOLS_PATH=${RUNNER_TEMP}/gh-aw/safeoutputs/tools.json" + } >> "$GITHUB_OUTPUT" + - name: Checkout repository + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false + - name: Create gh-aw temp directory + run: bash "${RUNNER_TEMP}/gh-aw/actions/create_gh_aw_tmp_dir.sh" + - name: Configure gh CLI for GitHub Enterprise + run: bash "${RUNNER_TEMP}/gh-aw/actions/configure_gh_for_ghe.sh" + env: + GH_TOKEN: ${{ github.token }} + - name: Configure Git credentials + env: + REPO_NAME: ${{ github.repository }} + SERVER_URL: ${{ github.server_url }} + GITHUB_TOKEN: ${{ github.token }} + run: | + git config --global user.email "github-actions[bot]@users.noreply.github.com" + git config --global user.name "github-actions[bot]" + git config --global am.keepcr true + # Re-authenticate git with GitHub token + SERVER_URL_STRIPPED="${SERVER_URL#https://}" + git remote set-url origin "https://x-access-token:${GITHUB_TOKEN}@${SERVER_URL_STRIPPED}/${REPO_NAME}.git" + echo "Git configured with standard GitHub Actions identity" + - name: Checkout PR branch + id: checkout-pr + if: | + github.event.pull_request || github.event.issue.pull_request + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 + env: + GH_TOKEN: ${{ secrets.GH_AW_GITHUB_MCP_SERVER_TOKEN || secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} + with: + github-token: ${{ secrets.GH_AW_GITHUB_MCP_SERVER_TOKEN || secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io, getOctokit); + const { main } = require('${{ runner.temp }}/gh-aw/actions/checkout_pr_branch.cjs'); + await main(); + - name: Install GitHub Copilot CLI + run: bash "${RUNNER_TEMP}/gh-aw/actions/install_copilot_cli.sh" 1.0.40 + env: + GH_HOST: github.com + - name: Parse integrity filter lists + id: parse-guard-vars + env: + GH_AW_BLOCKED_USERS_VAR: ${{ vars.GH_AW_GITHUB_BLOCKED_USERS || '' }} + GH_AW_TRUSTED_USERS_VAR: ${{ vars.GH_AW_GITHUB_TRUSTED_USERS || '' }} + GH_AW_APPROVAL_LABELS_VAR: ${{ vars.GH_AW_GITHUB_APPROVAL_LABELS || '' }} + run: bash "${RUNNER_TEMP}/gh-aw/actions/parse_guard_list.sh" + - name: Download activation artifact + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 + with: + name: activation + path: /tmp/gh-aw + - name: Restore agent config folders from base branch + if: steps.checkout-pr.outcome == 'success' + env: + GH_AW_AGENT_FOLDERS: ".agents .claude .codex .crush .gemini .github .opencode .pi" + GH_AW_AGENT_FILES: ".crush.json AGENTS.md CLAUDE.md GEMINI.md PI.md opencode.jsonc" + run: bash "${RUNNER_TEMP}/gh-aw/actions/restore_base_github_folders.sh" + - name: Download container images + run: bash "${RUNNER_TEMP}/gh-aw/actions/download_docker_images.sh" ghcr.io/github/github-mcp-server:v1.0.3@sha256:2ac27ef03461ef2b877031b838a7d1fd7f12b12d4ace7796d8cad91446d55959 node:lts-alpine@sha256:d1b3b4da11eefd5941e7f0b9cf17783fc99d9c6fc34884a665f40a06dbdfc94f + - name: Generate Safe Outputs Config + run: | + mkdir -p "${RUNNER_TEMP}/gh-aw/safeoutputs" + mkdir -p /tmp/gh-aw/safeoutputs + mkdir -p /tmp/gh-aw/mcp-logs/safeoutputs + cat > "${RUNNER_TEMP}/gh-aw/safeoutputs/config.json" << 'GH_AW_SAFE_OUTPUTS_CONFIG_982fd4401303461a_EOF' + {"add_comment":{"max":1},"create_pull_request":{"base_branch":"develop","max":1,"max_patch_files":100,"max_patch_size":1024,"protect_top_level_dot_folders":true,"protected_files":["package.json","bun.lockb","bunfig.toml","deno.json","deno.jsonc","deno.lock","global.json","NuGet.Config","Directory.Packages.props","mix.exs","mix.lock","go.mod","go.sum","stack.yaml","stack.yaml.lock","pom.xml","build.gradle","build.gradle.kts","settings.gradle","settings.gradle.kts","gradle.properties","package-lock.json","yarn.lock","pnpm-lock.yaml","npm-shrinkwrap.json","requirements.txt","Pipfile","Pipfile.lock","pyproject.toml","setup.py","setup.cfg","Gemfile","Gemfile.lock","uv.lock","CODEOWNERS","DESIGN.md","README.md","CONTRIBUTING.md","CHANGELOG.md","SECURITY.md","CODE_OF_CONDUCT.md","AGENTS.md","CLAUDE.md","GEMINI.md"]},"create_report_incomplete_issue":{},"missing_data":{},"missing_tool":{},"noop":{"max":1,"report-as-issue":"true"},"report_incomplete":{}} + GH_AW_SAFE_OUTPUTS_CONFIG_982fd4401303461a_EOF + - name: Generate Safe Outputs Tools + env: + GH_AW_TOOLS_META_JSON: | + { + "description_suffixes": { + "add_comment": " CONSTRAINTS: Maximum 1 comment(s) can be added. Supports reply_to_id for discussion threading.", + "create_pull_request": " CONSTRAINTS: Maximum 1 pull request(s) can be created." + }, + "repo_params": {}, + "dynamic_tools": [] + } + GH_AW_VALIDATION_JSON: | + { + "add_comment": { + "defaultMax": 1, + "fields": { + "body": { + "required": true, + "type": "string", + "sanitize": true, + "maxLength": 65000 + }, + "item_number": { + "issueOrPRNumber": true + }, + "reply_to_id": { + "type": "string", + "maxLength": 256 + }, + "repo": { + "type": "string", + "maxLength": 256 + } + } + }, + "create_pull_request": { + "defaultMax": 1, + "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, + "body": { + "required": true, + "type": "string", + "sanitize": true, + "maxLength": 65000 + }, + "branch": { + "required": true, + "type": "string", + "sanitize": true, + "maxLength": 256 + }, + "draft": { + "type": "boolean" + }, + "labels": { + "type": "array", + "itemType": "string", + "itemSanitize": true, + "itemMaxLength": 128 + }, + "repo": { + "type": "string", + "maxLength": 256 + }, + "title": { + "required": true, + "type": "string", + "sanitize": true, + "maxLength": 128 + } + } + }, + "missing_data": { + "defaultMax": 20, + "fields": { + "alternatives": { + "type": "string", + "sanitize": true, + "maxLength": 256 + }, + "context": { + "type": "string", + "sanitize": true, + "maxLength": 256 + }, + "data_type": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, + "reason": { + "type": "string", + "sanitize": true, + "maxLength": 256 + } + } + }, + "missing_tool": { + "defaultMax": 20, + "fields": { + "alternatives": { + "type": "string", + "sanitize": true, + "maxLength": 512 + }, + "reason": { + "required": true, + "type": "string", + "sanitize": true, + "maxLength": 256 + }, + "tool": { + "type": "string", + "sanitize": true, + "maxLength": 128 + } + } + }, + "noop": { + "defaultMax": 1, + "fields": { + "message": { + "required": true, + "type": "string", + "sanitize": true, + "maxLength": 65000 + } + } + }, + "report_incomplete": { + "defaultMax": 5, + "fields": { + "details": { + "type": "string", + "sanitize": true, + "maxLength": 65000 + }, + "reason": { + "required": true, + "type": "string", + "sanitize": true, + "maxLength": 1024 + } + } + } + } + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io, getOctokit); + const { main } = require('${{ runner.temp }}/gh-aw/actions/generate_safe_outputs_tools.cjs'); + await main(); + - name: Generate Safe Outputs MCP Server Config + id: safe-outputs-config + run: | + # Generate a secure random API key (360 bits of entropy, 40+ chars) + # Mask immediately to prevent timing vulnerabilities + API_KEY=$(openssl rand -base64 45 | tr -d '/+=') + echo "::add-mask::${API_KEY}" + + PORT=3001 + + # Set outputs for next steps + { + echo "safe_outputs_api_key=${API_KEY}" + echo "safe_outputs_port=${PORT}" + } >> "$GITHUB_OUTPUT" + + echo "Safe Outputs MCP server will run on port ${PORT}" + + - name: Start Safe Outputs MCP HTTP Server + id: safe-outputs-start + env: + DEBUG: '*' + GH_AW_SAFE_OUTPUTS: ${{ steps.set-runtime-paths.outputs.GH_AW_SAFE_OUTPUTS }} + GH_AW_SAFE_OUTPUTS_PORT: ${{ steps.safe-outputs-config.outputs.safe_outputs_port }} + GH_AW_SAFE_OUTPUTS_API_KEY: ${{ steps.safe-outputs-config.outputs.safe_outputs_api_key }} + GH_AW_SAFE_OUTPUTS_TOOLS_PATH: ${{ runner.temp }}/gh-aw/safeoutputs/tools.json + GH_AW_SAFE_OUTPUTS_CONFIG_PATH: ${{ runner.temp }}/gh-aw/safeoutputs/config.json + GH_AW_MCP_LOG_DIR: /tmp/gh-aw/mcp-logs/safeoutputs + run: | + # Environment variables are set above to prevent template injection + export DEBUG + export GH_AW_SAFE_OUTPUTS + export GH_AW_SAFE_OUTPUTS_PORT + export GH_AW_SAFE_OUTPUTS_API_KEY + export GH_AW_SAFE_OUTPUTS_TOOLS_PATH + export GH_AW_SAFE_OUTPUTS_CONFIG_PATH + export GH_AW_MCP_LOG_DIR + + bash "${RUNNER_TEMP}/gh-aw/actions/start_safe_outputs_server.sh" + + - name: Start MCP Gateway + id: start-mcp-gateway + env: + GH_AW_SAFE_OUTPUTS: ${{ steps.set-runtime-paths.outputs.GH_AW_SAFE_OUTPUTS }} + GH_AW_SAFE_OUTPUTS_API_KEY: ${{ steps.safe-outputs-start.outputs.api_key }} + GH_AW_SAFE_OUTPUTS_PORT: ${{ steps.safe-outputs-start.outputs.port }} + GITHUB_MCP_SERVER_TOKEN: ${{ secrets.GH_AW_GITHUB_MCP_SERVER_TOKEN || secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} + run: | + set -eo pipefail + mkdir -p "${RUNNER_TEMP}/gh-aw/mcp-config" + + # Export gateway environment variables for MCP config and gateway script + export MCP_GATEWAY_PORT="8080" + export MCP_GATEWAY_DOMAIN="localhost" + export MCP_GATEWAY_HOST_DOMAIN="localhost" + MCP_GATEWAY_API_KEY=$(openssl rand -base64 45 | tr -d '/+=') + echo "::add-mask::${MCP_GATEWAY_API_KEY}" + export MCP_GATEWAY_API_KEY + export MCP_GATEWAY_PAYLOAD_DIR="/tmp/gh-aw/mcp-payloads" + mkdir -p "${MCP_GATEWAY_PAYLOAD_DIR}" + export MCP_GATEWAY_PAYLOAD_SIZE_THRESHOLD="524288" + export DEBUG="*" + + export GH_AW_ENGINE="copilot" + MCP_GATEWAY_UID=$(id -u 2>/dev/null || echo '0') + MCP_GATEWAY_GID=$(id -g 2>/dev/null || echo '0') + DOCKER_SOCK_GID=$(stat -c '%g' /var/run/docker.sock 2>/dev/null || echo '0') + export MCP_GATEWAY_DOCKER_COMMAND='docker run -i --rm --network host --add-host host.docker.internal:127.0.0.1 --user '"${MCP_GATEWAY_UID}"':'"${MCP_GATEWAY_GID}"' --group-add '"${DOCKER_SOCK_GID}"' -v /var/run/docker.sock:/var/run/docker.sock -e MCP_GATEWAY_PORT -e MCP_GATEWAY_DOMAIN -e MCP_GATEWAY_API_KEY -e MCP_GATEWAY_PAYLOAD_DIR -e MCP_GATEWAY_PAYLOAD_SIZE_THRESHOLD -e DEBUG -e MCP_GATEWAY_LOG_DIR -e GH_AW_MCP_LOG_DIR -e GH_AW_SAFE_OUTPUTS -e GH_AW_SAFE_OUTPUTS_CONFIG_PATH -e GH_AW_SAFE_OUTPUTS_TOOLS_PATH -e GH_AW_ASSETS_BRANCH -e GH_AW_ASSETS_MAX_SIZE_KB -e GH_AW_ASSETS_ALLOWED_EXTS -e DEFAULT_BRANCH -e GITHUB_MCP_SERVER_TOKEN -e GITHUB_MCP_GUARD_MIN_INTEGRITY -e GITHUB_MCP_GUARD_REPOS -e GITHUB_REPOSITORY -e GITHUB_SERVER_URL -e GITHUB_SHA -e GITHUB_WORKSPACE -e GITHUB_TOKEN -e GITHUB_RUN_ID -e GITHUB_RUN_NUMBER -e GITHUB_RUN_ATTEMPT -e GITHUB_JOB -e GITHUB_ACTION -e GITHUB_EVENT_NAME -e GITHUB_EVENT_PATH -e GITHUB_ACTOR -e GITHUB_ACTOR_ID -e GITHUB_TRIGGERING_ACTOR -e GITHUB_WORKFLOW -e GITHUB_WORKFLOW_REF -e GITHUB_WORKFLOW_SHA -e GITHUB_REF -e GITHUB_REF_NAME -e GITHUB_REF_TYPE -e GITHUB_HEAD_REF -e GITHUB_BASE_REF -e GH_AW_SAFE_OUTPUTS_PORT -e GH_AW_SAFE_OUTPUTS_API_KEY -v /tmp/gh-aw/mcp-payloads:/tmp/gh-aw/mcp-payloads:rw -v /opt:/opt:ro -v /tmp:/tmp:rw -v '"${GITHUB_WORKSPACE}"':'"${GITHUB_WORKSPACE}"':rw ghcr.io/github/gh-aw-mcpg:v0.3.6' + + mkdir -p /home/runner/.copilot + GH_AW_NODE=$(which node 2>/dev/null || command -v node 2>/dev/null || echo node) + cat << GH_AW_MCP_CONFIG_01a7963a8b9bf043_EOF | "$GH_AW_NODE" "${RUNNER_TEMP}/gh-aw/actions/start_mcp_gateway.cjs" + { + "mcpServers": { + "github": { + "type": "stdio", + "container": "ghcr.io/github/github-mcp-server:v1.0.3", + "env": { + "GITHUB_HOST": "\${GITHUB_SERVER_URL}", + "GITHUB_PERSONAL_ACCESS_TOKEN": "\${GITHUB_MCP_SERVER_TOKEN}", + "GITHUB_READ_ONLY": "1", + "GITHUB_TOOLSETS": "context,repos,issues,pull_requests" + }, + "guard-policies": { + "allow-only": { + "approval-labels": ${{ steps.parse-guard-vars.outputs.approval_labels }}, + "blocked-users": ${{ steps.parse-guard-vars.outputs.blocked_users }}, + "min-integrity": "none", + "repos": "all", + "trusted-users": ${{ steps.parse-guard-vars.outputs.trusted_users }} + } + } + }, + "safeoutputs": { + "type": "http", + "url": "http://localhost:$GH_AW_SAFE_OUTPUTS_PORT", + "headers": { + "Authorization": "\${GH_AW_SAFE_OUTPUTS_API_KEY}" + }, + "guard-policies": { + "write-sink": { + "accept": [ + "*" + ] + } + } + } + }, + "gateway": { + "port": $MCP_GATEWAY_PORT, + "domain": "${MCP_GATEWAY_DOMAIN}", + "apiKey": "${MCP_GATEWAY_API_KEY}", + "payloadDir": "${MCP_GATEWAY_PAYLOAD_DIR}" + } + } + GH_AW_MCP_CONFIG_01a7963a8b9bf043_EOF + - name: Mount MCP servers as CLIs + id: mount-mcp-clis + continue-on-error: true + env: + MCP_GATEWAY_API_KEY: ${{ steps.start-mcp-gateway.outputs.gateway-api-key }} + MCP_GATEWAY_DOMAIN: ${{ steps.start-mcp-gateway.outputs.gateway-domain }} + MCP_GATEWAY_PORT: ${{ steps.start-mcp-gateway.outputs.gateway-port }} + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/mount_mcp_as_cli.cjs'); + await main(); + - name: Clean credentials + continue-on-error: true + run: bash "${RUNNER_TEMP}/gh-aw/actions/clean_git_credentials.sh" + - name: Audit pre-agent workspace + id: pre_agent_audit + continue-on-error: true + run: bash "${RUNNER_TEMP}/gh-aw/actions/audit_pre_agent_workspace.sh" + - name: Execute GitHub Copilot CLI + id: agentic_execution + # Copilot CLI tool arguments (sorted): + # --allow-tool github + # --allow-tool safeoutputs + # --allow-tool shell(cat) + # --allow-tool shell(date) + # --allow-tool shell(echo) + # --allow-tool shell(git add:*) + # --allow-tool shell(git branch:*) + # --allow-tool shell(git checkout:*) + # --allow-tool shell(git commit:*) + # --allow-tool shell(git merge:*) + # --allow-tool shell(git rm:*) + # --allow-tool shell(git status) + # --allow-tool shell(git switch:*) + # --allow-tool shell(grep) + # --allow-tool shell(head) + # --allow-tool shell(ls) + # --allow-tool shell(pwd) + # --allow-tool shell(safeoutputs:*) + # --allow-tool shell(sort) + # --allow-tool shell(tail) + # --allow-tool shell(uniq) + # --allow-tool shell(wc) + # --allow-tool shell(yq) + # --allow-tool write + timeout-minutes: 20 + run: | + set -o pipefail + touch /tmp/gh-aw/agent-step-summary.md + (umask 177 && touch /tmp/gh-aw/agent-stdio.log) + mkdir -p /tmp/ + mkdir -p /tmp/gh-aw/ + mkdir -p /tmp/gh-aw/agent/ + mkdir -p /tmp/gh-aw/sandbox/agent/logs/ + GH_AW_NODE_EXEC="${GH_AW_NODE_BIN:-}"; if [ -z "$GH_AW_NODE_EXEC" ] || [ ! -x "$GH_AW_NODE_EXEC" ]; then GH_AW_NODE_EXEC="$(command -v node 2>/dev/null || echo node)"; fi; "$GH_AW_NODE_EXEC" ${RUNNER_TEMP}/gh-aw/actions/copilot_harness.cjs copilot --add-dir /tmp/ --add-dir /tmp/gh-aw/ --add-dir /tmp/gh-aw/agent/ --log-level all --log-dir /tmp/gh-aw/sandbox/agent/logs/ --disable-builtin-mcps --no-ask-user --allow-tool github --allow-tool safeoutputs --allow-tool 'shell(cat)' --allow-tool 'shell(date)' --allow-tool 'shell(echo)' --allow-tool 'shell(git add:*)' --allow-tool 'shell(git branch:*)' --allow-tool 'shell(git checkout:*)' --allow-tool 'shell(git commit:*)' --allow-tool 'shell(git merge:*)' --allow-tool 'shell(git rm:*)' --allow-tool 'shell(git status)' --allow-tool 'shell(git switch:*)' --allow-tool 'shell(grep)' --allow-tool 'shell(head)' --allow-tool 'shell(ls)' --allow-tool 'shell(pwd)' --allow-tool 'shell(safeoutputs:*)' --allow-tool 'shell(sort)' --allow-tool 'shell(tail)' --allow-tool 'shell(uniq)' --allow-tool 'shell(wc)' --allow-tool 'shell(yq)' --allow-tool write --allow-all-paths --prompt-file /tmp/gh-aw/aw-prompts/prompt.txt 2>&1 | tee /tmp/gh-aw/agent-stdio.log + env: + COPILOT_AGENT_RUNNER_TYPE: STANDALONE + COPILOT_API_KEY: dummy-byok-key-for-offline-mode + COPILOT_GITHUB_TOKEN: ${{ secrets.COPILOT_GITHUB_TOKEN }} + COPILOT_MODEL: doubao-seed-2-0-code-preview-260215 + COPILOT_PROVIDER_API_KEY: ${{ secrets.OPENAI_API_KEY }} + COPILOT_PROVIDER_BASE_URL: https://ark.cn-beijing.volces.com/api/v3 + COPILOT_PROVIDER_TYPE: openai + GH_AW_MCP_CONFIG: /home/runner/.copilot/mcp-config.json + GH_AW_PHASE: agent + GH_AW_PROMPT: /tmp/gh-aw/aw-prompts/prompt.txt + GH_AW_SAFE_OUTPUTS: ${{ steps.set-runtime-paths.outputs.GH_AW_SAFE_OUTPUTS }} + GH_AW_VERSION: v0.71.5 + GITHUB_API_URL: ${{ github.api_url }} + GITHUB_AW: true + GITHUB_COPILOT_INTEGRATION_ID: agentic-workflows + GITHUB_HEAD_REF: ${{ github.head_ref }} + GITHUB_MCP_SERVER_TOKEN: ${{ secrets.GH_AW_GITHUB_MCP_SERVER_TOKEN || secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} + GITHUB_REF_NAME: ${{ github.ref_name }} + GITHUB_SERVER_URL: ${{ github.server_url }} + GITHUB_STEP_SUMMARY: /tmp/gh-aw/agent-step-summary.md + GITHUB_WORKSPACE: ${{ github.workspace }} + XDG_CONFIG_HOME: /home/runner + - name: Detect Copilot errors + id: detect-copilot-errors + if: always() + continue-on-error: true + run: node "${RUNNER_TEMP}/gh-aw/actions/detect_copilot_errors.cjs" + - name: Configure Git credentials + env: + REPO_NAME: ${{ github.repository }} + SERVER_URL: ${{ github.server_url }} + GITHUB_TOKEN: ${{ github.token }} + run: | + git config --global user.email "github-actions[bot]@users.noreply.github.com" + git config --global user.name "github-actions[bot]" + git config --global am.keepcr true + # Re-authenticate git with GitHub token + SERVER_URL_STRIPPED="${SERVER_URL#https://}" + git remote set-url origin "https://x-access-token:${GITHUB_TOKEN}@${SERVER_URL_STRIPPED}/${REPO_NAME}.git" + echo "Git configured with standard GitHub Actions identity" + - name: Copy Copilot session state files to logs + if: always() + continue-on-error: true + run: bash "${RUNNER_TEMP}/gh-aw/actions/copy_copilot_session_state.sh" + - name: Stop MCP Gateway + if: always() + continue-on-error: true + env: + MCP_GATEWAY_PORT: ${{ steps.start-mcp-gateway.outputs.gateway-port }} + MCP_GATEWAY_API_KEY: ${{ steps.start-mcp-gateway.outputs.gateway-api-key }} + GATEWAY_PID: ${{ steps.start-mcp-gateway.outputs.gateway-pid }} + run: | + bash "${RUNNER_TEMP}/gh-aw/actions/stop_mcp_gateway.sh" "$GATEWAY_PID" + - name: Redact secrets in logs + if: always() + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io, getOctokit); + const { main } = require('${{ runner.temp }}/gh-aw/actions/redact_secrets.cjs'); + await main(); + env: + GH_AW_SECRET_NAMES: 'COPILOT_GITHUB_TOKEN,GH_AW_GITHUB_MCP_SERVER_TOKEN,GH_AW_GITHUB_TOKEN,GITHUB_TOKEN,OPENAI_API_KEY' + SECRET_COPILOT_GITHUB_TOKEN: ${{ secrets.COPILOT_GITHUB_TOKEN }} + SECRET_GH_AW_GITHUB_MCP_SERVER_TOKEN: ${{ secrets.GH_AW_GITHUB_MCP_SERVER_TOKEN }} + SECRET_GH_AW_GITHUB_TOKEN: ${{ secrets.GH_AW_GITHUB_TOKEN }} + SECRET_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + SECRET_OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} + - name: Append agent step summary + if: always() + run: bash "${RUNNER_TEMP}/gh-aw/actions/append_agent_step_summary.sh" + - name: Copy Safe Outputs + if: always() + env: + GH_AW_SAFE_OUTPUTS: ${{ steps.set-runtime-paths.outputs.GH_AW_SAFE_OUTPUTS }} + run: | + mkdir -p /tmp/gh-aw + cp "$GH_AW_SAFE_OUTPUTS" /tmp/gh-aw/safeoutputs.jsonl 2>/dev/null || true + - name: Ingest agent output + id: collect_output + if: always() + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 + env: + GH_AW_SAFE_OUTPUTS: ${{ steps.set-runtime-paths.outputs.GH_AW_SAFE_OUTPUTS }} + GH_AW_ALLOWED_DOMAINS: "api.business.githubcopilot.com,api.enterprise.githubcopilot.com,api.github.com,api.githubcopilot.com,api.individual.githubcopilot.com,api.snapcraft.io,archive.ubuntu.com,ark.cn-beijing.volces.com,azure.archive.ubuntu.com,crl.geotrust.com,crl.globalsign.com,crl.identrust.com,crl.sectigo.com,crl.thawte.com,crl.usertrust.com,crl.verisign.com,crl3.digicert.com,crl4.digicert.com,crls.ssl.com,github.com,host.docker.internal,json-schema.org,json.schemastore.org,keyserver.ubuntu.com,ocsp.digicert.com,ocsp.geotrust.com,ocsp.globalsign.com,ocsp.identrust.com,ocsp.sectigo.com,ocsp.ssl.com,ocsp.thawte.com,ocsp.usertrust.com,ocsp.verisign.com,packagecloud.io,packages.cloud.google.com,packages.microsoft.com,ppa.launchpad.net,raw.githubusercontent.com,registry.npmjs.org,s.symcb.com,s.symcd.com,security.ubuntu.com,telemetry.enterprise.githubcopilot.com,ts-crl.ws.symantec.com,ts-ocsp.ws.symantec.com,www.googleapis.com" + GITHUB_SERVER_URL: ${{ github.server_url }} + GITHUB_API_URL: ${{ github.api_url }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io, getOctokit); + const { main } = require('${{ runner.temp }}/gh-aw/actions/collect_ndjson_output.cjs'); + await main(); + - name: Parse agent logs for step summary + if: always() + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 + env: + GH_AW_AGENT_OUTPUT: /tmp/gh-aw/sandbox/agent/logs/ + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io, getOctokit); + const { main } = require('${{ runner.temp }}/gh-aw/actions/parse_copilot_log.cjs'); + await main(); + - name: Parse MCP Gateway logs for step summary + if: always() + id: parse-mcp-gateway + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io, getOctokit); + const { main } = require('${{ runner.temp }}/gh-aw/actions/parse_mcp_gateway_log.cjs'); + await main(); + - name: Write agent output placeholder if missing + if: always() + run: | + if [ ! -f /tmp/gh-aw/agent_output.json ]; then + echo '{"items":[]}' > /tmp/gh-aw/agent_output.json + fi + - name: Upload agent artifacts + if: always() + continue-on-error: true + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 + with: + name: agent + path: | + /tmp/gh-aw/aw-prompts/prompt.txt + /tmp/gh-aw/sandbox/agent/logs/ + /tmp/gh-aw/redacted-urls.log + /tmp/gh-aw/mcp-logs/ + /tmp/gh-aw/proxy-logs/ + !/tmp/gh-aw/proxy-logs/proxy-tls/ + /tmp/gh-aw/agent-stdio.log + /tmp/gh-aw/pre-agent-audit.txt + /tmp/gh-aw/agent/ + /tmp/gh-aw/github_rate_limits.jsonl + /tmp/gh-aw/safeoutputs.jsonl + /tmp/gh-aw/agent_output.json + /tmp/gh-aw/aw-*.patch + /tmp/gh-aw/aw-*.bundle + if-no-files-found: ignore + + conclusion: + needs: + - activation + - agent + - safe_outputs + if: > + always() && (needs.agent.result != 'skipped' || needs.activation.outputs.lockdown_check_failed == 'true' || + needs.activation.outputs.stale_lock_file_failed == 'true') + runs-on: ubuntu-slim + permissions: + contents: write + discussions: write + issues: write + pull-requests: write + concurrency: + group: "gh-aw-conclusion-auto-code" + cancel-in-progress: false + outputs: + incomplete_count: ${{ steps.report_incomplete.outputs.incomplete_count }} + noop_message: ${{ steps.noop.outputs.noop_message }} + tools_reported: ${{ steps.missing_tool.outputs.tools_reported }} + total_count: ${{ steps.missing_tool.outputs.total_count }} + steps: + - name: Setup Scripts + id: setup + uses: github/gh-aw-actions/setup@b8068426813005612b960b5ab0b8bd2c27142323 # v0.71.5 + with: + destination: ${{ runner.temp }}/gh-aw/actions + job-name: ${{ github.job }} + trace-id: ${{ needs.activation.outputs.setup-trace-id }} + env: + GH_AW_SETUP_WORKFLOW_NAME: "自动处理 Issue" + GH_AW_CURRENT_WORKFLOW_REF: ${{ github.repository }}/.github/workflows/auto-code.lock.yml@${{ github.ref }} + GH_AW_INFO_VERSION: "1.0.40" + - name: Download agent output artifact + id: download-agent-output + continue-on-error: true + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 + with: + name: agent + path: /tmp/gh-aw/ + - name: Setup agent output environment variable + id: setup-agent-output-env + if: steps.download-agent-output.outcome == 'success' + run: | + mkdir -p /tmp/gh-aw/ + find "/tmp/gh-aw/" -type f -print + echo "GH_AW_AGENT_OUTPUT=/tmp/gh-aw/agent_output.json" >> "$GITHUB_OUTPUT" + - name: Process no-op messages + id: noop + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 + env: + GH_AW_AGENT_OUTPUT: ${{ steps.setup-agent-output-env.outputs.GH_AW_AGENT_OUTPUT }} + GH_AW_NOOP_MAX: "1" + GH_AW_WORKFLOW_NAME: "自动处理 Issue" + GH_AW_RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} + GH_AW_AGENT_CONCLUSION: ${{ needs.agent.result }} + GH_AW_NOOP_REPORT_AS_ISSUE: "true" + with: + github-token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io, getOctokit); + const { main } = require('${{ runner.temp }}/gh-aw/actions/handle_noop_message.cjs'); + await main(); + - name: Record missing tool + id: missing_tool + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 + env: + GH_AW_AGENT_OUTPUT: ${{ steps.setup-agent-output-env.outputs.GH_AW_AGENT_OUTPUT }} + GH_AW_MISSING_TOOL_CREATE_ISSUE: "true" + GH_AW_WORKFLOW_NAME: "自动处理 Issue" + with: + github-token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io, getOctokit); + const { main } = require('${{ runner.temp }}/gh-aw/actions/missing_tool.cjs'); + await main(); + - name: Record incomplete + id: report_incomplete + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 + env: + GH_AW_AGENT_OUTPUT: ${{ steps.setup-agent-output-env.outputs.GH_AW_AGENT_OUTPUT }} + GH_AW_REPORT_INCOMPLETE_CREATE_ISSUE: "true" + GH_AW_WORKFLOW_NAME: "自动处理 Issue" + with: + github-token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io, getOctokit); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_incomplete_handler.cjs'); + await main(); + - name: Handle agent failure + id: handle_agent_failure + if: always() + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 + env: + GH_AW_AGENT_OUTPUT: ${{ steps.setup-agent-output-env.outputs.GH_AW_AGENT_OUTPUT }} + GH_AW_WORKFLOW_NAME: "自动处理 Issue" + GH_AW_RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} + GH_AW_AGENT_CONCLUSION: ${{ needs.agent.result }} + GH_AW_WORKFLOW_ID: "auto-code" + GH_AW_ACTION_FAILURE_ISSUE_EXPIRES_HOURS: "168" + GH_AW_ENGINE_ID: "copilot" + GH_AW_CHECKOUT_PR_SUCCESS: ${{ needs.agent.outputs.checkout_pr_success }} + GH_AW_INFERENCE_ACCESS_ERROR: ${{ needs.agent.outputs.inference_access_error }} + GH_AW_MCP_POLICY_ERROR: ${{ needs.agent.outputs.mcp_policy_error }} + GH_AW_AGENTIC_ENGINE_TIMEOUT: ${{ needs.agent.outputs.agentic_engine_timeout }} + GH_AW_MODEL_NOT_SUPPORTED_ERROR: ${{ needs.agent.outputs.model_not_supported_error }} + GH_AW_ENGINE_API_HOSTS: "api.enterprise.githubcopilot.com,api.githubcopilot.com,api.business.githubcopilot.com,api.individual.githubcopilot.com" + GH_AW_CODE_PUSH_FAILURE_ERRORS: ${{ needs.safe_outputs.outputs.code_push_failure_errors }} + GH_AW_CODE_PUSH_FAILURE_COUNT: ${{ needs.safe_outputs.outputs.code_push_failure_count }} + GH_AW_LOCKDOWN_CHECK_FAILED: ${{ needs.activation.outputs.lockdown_check_failed }} + GH_AW_STALE_LOCK_FILE_FAILED: ${{ needs.activation.outputs.stale_lock_file_failed }} + GH_AW_GROUP_REPORTS: "false" + GH_AW_FAILURE_REPORT_AS_ISSUE: "true" + GH_AW_MISSING_TOOL_REPORT_AS_FAILURE: "true" + GH_AW_MISSING_DATA_REPORT_AS_FAILURE: "true" + GH_AW_TIMEOUT_MINUTES: "20" + with: + github-token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io, getOctokit); + const { main } = require('${{ runner.temp }}/gh-aw/actions/handle_agent_failure.cjs'); + await main(); + + pre_activation: + runs-on: ubuntu-slim + outputs: + activated: ${{ steps.check_membership.outputs.is_team_member == 'true' }} + matched_command: '' + setup-trace-id: ${{ steps.setup.outputs.trace-id }} + steps: + - name: Setup Scripts + id: setup + uses: github/gh-aw-actions/setup@b8068426813005612b960b5ab0b8bd2c27142323 # v0.71.5 + with: + destination: ${{ runner.temp }}/gh-aw/actions + job-name: ${{ github.job }} + env: + GH_AW_SETUP_WORKFLOW_NAME: "自动处理 Issue" + GH_AW_CURRENT_WORKFLOW_REF: ${{ github.repository }}/.github/workflows/auto-code.lock.yml@${{ github.ref }} + GH_AW_INFO_VERSION: "1.0.40" + - name: Check team membership for workflow + id: check_membership + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 + env: + GH_AW_REQUIRED_ROLES: "admin,maintainer,write" + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io, getOctokit); + const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); + await main(); + + safe_outputs: + needs: + - activation + - agent + if: (!cancelled()) && needs.agent.result != 'skipped' + runs-on: ubuntu-slim + permissions: + contents: write + discussions: write + issues: write + pull-requests: write + timeout-minutes: 15 + env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/auto-code" + GH_AW_EFFECTIVE_TOKENS: ${{ needs.agent.outputs.effective_tokens }} + GH_AW_ENGINE_ID: "copilot" + GH_AW_ENGINE_MODEL: ${{ needs.agent.outputs.model }} + GH_AW_ENGINE_VERSION: "1.0.40" + GH_AW_WORKFLOW_ID: "auto-code" + GH_AW_WORKFLOW_NAME: "自动处理 Issue" + outputs: + code_push_failure_count: ${{ steps.process_safe_outputs.outputs.code_push_failure_count }} + code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }} + comment_id: ${{ steps.process_safe_outputs.outputs.comment_id }} + comment_url: ${{ steps.process_safe_outputs.outputs.comment_url }} + create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }} + create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }} + created_pr_number: ${{ steps.process_safe_outputs.outputs.created_pr_number }} + created_pr_url: ${{ steps.process_safe_outputs.outputs.created_pr_url }} + process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }} + process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }} + steps: + - name: Setup Scripts + id: setup + uses: github/gh-aw-actions/setup@b8068426813005612b960b5ab0b8bd2c27142323 # v0.71.5 + with: + destination: ${{ runner.temp }}/gh-aw/actions + job-name: ${{ github.job }} + trace-id: ${{ needs.activation.outputs.setup-trace-id }} + env: + GH_AW_SETUP_WORKFLOW_NAME: "自动处理 Issue" + GH_AW_CURRENT_WORKFLOW_REF: ${{ github.repository }}/.github/workflows/auto-code.lock.yml@${{ github.ref }} + GH_AW_INFO_VERSION: "1.0.40" + - name: Download agent output artifact + id: download-agent-output + continue-on-error: true + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 + with: + name: agent + path: /tmp/gh-aw/ + - name: Setup agent output environment variable + id: setup-agent-output-env + if: steps.download-agent-output.outcome == 'success' + run: | + mkdir -p /tmp/gh-aw/ + find "/tmp/gh-aw/" -type f -print + echo "GH_AW_AGENT_OUTPUT=/tmp/gh-aw/agent_output.json" >> "$GITHUB_OUTPUT" + - name: Download patch artifact + continue-on-error: true + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 + with: + name: agent + path: /tmp/gh-aw/ + - name: Checkout repository + if: (!cancelled()) && needs.agent.result != 'skipped' && contains(needs.agent.outputs.output_types, 'create_pull_request') + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + ref: develop + token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} + persist-credentials: false + fetch-depth: 1 + - name: Configure Git credentials + if: (!cancelled()) && needs.agent.result != 'skipped' && contains(needs.agent.outputs.output_types, 'create_pull_request') + env: + REPO_NAME: ${{ github.repository }} + SERVER_URL: ${{ github.server_url }} + GIT_TOKEN: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} + run: | + git config --global user.email "github-actions[bot]@users.noreply.github.com" + git config --global user.name "github-actions[bot]" + git config --global am.keepcr true + # Re-authenticate git with GitHub token + SERVER_URL_STRIPPED="${SERVER_URL#https://}" + git remote set-url origin "https://x-access-token:${GIT_TOKEN}@${SERVER_URL_STRIPPED}/${REPO_NAME}.git" + echo "Git configured with standard GitHub Actions identity" + - name: Configure GH_HOST for enterprise compatibility + id: ghes-host-config + shell: bash + run: | + # Derive GH_HOST from GITHUB_SERVER_URL so the gh CLI targets the correct + # GitHub instance (GHES/GHEC). On github.com this is a harmless no-op. + GH_HOST="${GITHUB_SERVER_URL#https://}" + GH_HOST="${GH_HOST#http://}" + echo "GH_HOST=${GH_HOST}" >> "$GITHUB_ENV" + - name: Process Safe Outputs + id: process_safe_outputs + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 + env: + GH_AW_AGENT_OUTPUT: ${{ steps.setup-agent-output-env.outputs.GH_AW_AGENT_OUTPUT }} + GH_AW_ALLOWED_DOMAINS: "api.business.githubcopilot.com,api.enterprise.githubcopilot.com,api.github.com,api.githubcopilot.com,api.individual.githubcopilot.com,api.snapcraft.io,archive.ubuntu.com,ark.cn-beijing.volces.com,azure.archive.ubuntu.com,crl.geotrust.com,crl.globalsign.com,crl.identrust.com,crl.sectigo.com,crl.thawte.com,crl.usertrust.com,crl.verisign.com,crl3.digicert.com,crl4.digicert.com,crls.ssl.com,github.com,host.docker.internal,json-schema.org,json.schemastore.org,keyserver.ubuntu.com,ocsp.digicert.com,ocsp.geotrust.com,ocsp.globalsign.com,ocsp.identrust.com,ocsp.sectigo.com,ocsp.ssl.com,ocsp.thawte.com,ocsp.usertrust.com,ocsp.verisign.com,packagecloud.io,packages.cloud.google.com,packages.microsoft.com,ppa.launchpad.net,raw.githubusercontent.com,registry.npmjs.org,s.symcb.com,s.symcd.com,security.ubuntu.com,telemetry.enterprise.githubcopilot.com,ts-crl.ws.symantec.com,ts-ocsp.ws.symantec.com,www.googleapis.com" + GITHUB_SERVER_URL: ${{ github.server_url }} + GITHUB_API_URL: ${{ github.api_url }} + GH_AW_SAFE_OUTPUTS_HANDLER_CONFIG: "{\"add_comment\":{\"max\":1},\"create_pull_request\":{\"base_branch\":\"develop\",\"max\":1,\"max_patch_files\":100,\"max_patch_size\":1024,\"protect_top_level_dot_folders\":true,\"protected_files\":[\"package.json\",\"bun.lockb\",\"bunfig.toml\",\"deno.json\",\"deno.jsonc\",\"deno.lock\",\"global.json\",\"NuGet.Config\",\"Directory.Packages.props\",\"mix.exs\",\"mix.lock\",\"go.mod\",\"go.sum\",\"stack.yaml\",\"stack.yaml.lock\",\"pom.xml\",\"build.gradle\",\"build.gradle.kts\",\"settings.gradle\",\"settings.gradle.kts\",\"gradle.properties\",\"package-lock.json\",\"yarn.lock\",\"pnpm-lock.yaml\",\"npm-shrinkwrap.json\",\"requirements.txt\",\"Pipfile\",\"Pipfile.lock\",\"pyproject.toml\",\"setup.py\",\"setup.cfg\",\"Gemfile\",\"Gemfile.lock\",\"uv.lock\",\"CODEOWNERS\",\"DESIGN.md\",\"README.md\",\"CONTRIBUTING.md\",\"CHANGELOG.md\",\"SECURITY.md\",\"CODE_OF_CONDUCT.md\",\"AGENTS.md\",\"CLAUDE.md\",\"GEMINI.md\"]},\"create_report_incomplete_issue\":{},\"missing_data\":{},\"missing_tool\":{},\"noop\":{\"max\":1,\"report-as-issue\":\"true\"},\"report_incomplete\":{}}" + GH_AW_CI_TRIGGER_TOKEN: ${{ secrets.GH_AW_CI_TRIGGER_TOKEN }} + with: + github-token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io, getOctokit); + const { main } = require('${{ runner.temp }}/gh-aw/actions/safe_output_handler_manager.cjs'); + await main(); + - name: Upload Safe Outputs Items + if: always() + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 + with: + name: safe-outputs-items + path: | + /tmp/gh-aw/safe-output-items.jsonl + /tmp/gh-aw/temporary-id-map.json + if-no-files-found: ignore + diff --git a/.github/workflows/auto-code.md b/.github/workflows/auto-code.md new file mode 100644 index 0000000..84eb125 --- /dev/null +++ b/.github/workflows/auto-code.md @@ -0,0 +1,88 @@ +--- +on: + issues: + types: [labeled] + +engine: + id: copilot + env: + COPILOT_PROVIDER_BASE_URL: "https://ark.cn-beijing.volces.com/api/v3" + COPILOT_MODEL: doubao-seed-2-0-code-preview-260215 + COPILOT_PROVIDER_API_KEY: ${{ secrets.OPENAI_API_KEY }} + COPILOT_PROVIDER_TYPE: openai + +network: + allowed: + - defaults + - ark.cn-beijing.volces.com + +sandbox: + agent: false +strict: false + +tools: + github: + min-integrity: none + +permissions: + contents: read + issues: read + pull-requests: read + +safe-outputs: + threat-detection: false + create-pull-request: + base-branch: develop + add-comment: + max: 1 +--- + +# 自动处理 Issue + +当 Issue 被打上 `bug` 或 `enhancement` 标签时触发。其他标签直接退出,不做任何操作。 + +## 判断任务类型 + +读取 Issue #${{ github.event.issue.number }} 当前的标签: +- 如果包含 `bug` 标签 → 执行【Bug 修复流程】 +- 如果包含 `enhancement` 标签 → 执行【新功能开发流程】 +- 其他情况 → 直接退出 + +--- + +## Bug 修复流程 + +1. 阅读 Issue 的完整标题和正文,理解问题现象 +2. 浏览仓库代码和文档,定位问题所在的文件和函数 +3. 分析根本原因 +4. 实现修复方案,注意: + - 保持与现有代码风格一致 + - 只修改必要的部分,不做无关改动 +5. 创建 Pull Request,标题格式:`fix: `,描述中说明: + - 问题根因 + - 修复方式 + - 如何验证 +6. 在原 Issue 下用中文回复,说明已提交 PR 及修复思路 + +如果问题过于复杂或信息不足,在 Issue 下用中文说明原因,不创建 PR。 + +--- + +## 新功能开发流程 + +1. 阅读 Issue 的完整标题和正文,理解需求目标 +2. 浏览仓库现有代码结构和文档,找到最相关的模块和文件 +3. 制定实现方案: + - 需要新增哪些文件或函数 + - 需要修改哪些现有文件 +4. 按方案实现代码,注意: + - 保持与现有代码风格一致 + - 新增函数/类需要添加注释 + - 如果涉及接口变更,同步更新相关调用方 +5. 创建 Pull Request,标题格式:`feat: `,描述中说明: + - 实现了哪些功能 + - 涉及哪些文件改动 + - 如何验证/测试 +6. 在原 Issue 下用中文回复,说明已提交 PR、实现思路和测试建议 + +如果需求描述不清晰或实现风险过大,在 Issue 下用中文说明原因,不创建 PR。 \ No newline at end of file diff --git a/.github/workflows/issue-triage.lock.yml b/.github/workflows/issue-triage.lock.yml new file mode 100644 index 0000000..4dd0549 --- /dev/null +++ b/.github/workflows/issue-triage.lock.yml @@ -0,0 +1,1097 @@ +# gh-aw-metadata: {"schema_version":"v3","frontmatter_hash":"49f1529d95cbf3c8e3d0da1df4b6cee935245532511b98ca9ecd7a44f1d0bb68","compiler_version":"v0.71.5","agent_id":"copilot"} +# gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_TOKEN","GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GITHUB_TOKEN","OPENAI_API_KEY"],"actions":[{"repo":"actions/checkout","sha":"de0fac2e4500dabe0009e67214ff5f5447ce83dd","version":"v6.0.2"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"},{"repo":"github/gh-aw-actions/setup","sha":"b8068426813005612b960b5ab0b8bd2c27142323","version":"v0.71.5"}],"containers":[{"image":"ghcr.io/github/github-mcp-server:v1.0.3","digest":"sha256:2ac27ef03461ef2b877031b838a7d1fd7f12b12d4ace7796d8cad91446d55959","pinned_image":"ghcr.io/github/github-mcp-server:v1.0.3@sha256:2ac27ef03461ef2b877031b838a7d1fd7f12b12d4ace7796d8cad91446d55959"},{"image":"node:lts-alpine","digest":"sha256:d1b3b4da11eefd5941e7f0b9cf17783fc99d9c6fc34884a665f40a06dbdfc94f","pinned_image":"node:lts-alpine@sha256:d1b3b4da11eefd5941e7f0b9cf17783fc99d9c6fc34884a665f40a06dbdfc94f"}]} +# ___ _ _ +# / _ \ | | (_) +# | |_| | __ _ ___ _ __ | |_ _ ___ +# | _ |/ _` |/ _ \ '_ \| __| |/ __| +# | | | | (_| | __/ | | | |_| | (__ +# \_| |_/\__, |\___|_| |_|\__|_|\___| +# __/ | +# _ _ |___/ +# | | | | / _| | +# | | | | ___ _ __ _ __| |_| | _____ ____ +# | |/\| |/ _ \ '__| |/ /| _| |/ _ \ \ /\ / / ___| +# \ /\ / (_) | | | | ( | | | | (_) \ V V /\__ \ +# \/ \/ \___/|_| |_|\_\|_| |_|\___/ \_/\_/ |___/ +# +# This file was automatically generated by gh-aw (v0.71.5). DO NOT EDIT. +# +# To update this file, edit the corresponding .md file and run: +# gh aw compile +# Not all edits will cause changes to this file. +# +# For more information: https://github.github.com/gh-aw/introduction/overview/ +# +# +# Secrets used: +# - COPILOT_GITHUB_TOKEN +# - GH_AW_GITHUB_MCP_SERVER_TOKEN +# - GH_AW_GITHUB_TOKEN +# - GITHUB_TOKEN +# - OPENAI_API_KEY +# +# Custom actions used: +# - actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 +# - actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 +# - actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 +# - actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 +# - github/gh-aw-actions/setup@b8068426813005612b960b5ab0b8bd2c27142323 # v0.71.5 +# +# Container images used: +# - ghcr.io/github/github-mcp-server:v1.0.3@sha256:2ac27ef03461ef2b877031b838a7d1fd7f12b12d4ace7796d8cad91446d55959 +# - node:lts-alpine@sha256:d1b3b4da11eefd5941e7f0b9cf17783fc99d9c6fc34884a665f40a06dbdfc94f + +name: "Issue 自动分类与回复" +"on": + issues: + types: + - opened + - reopened + +permissions: {} + +concurrency: + group: "gh-aw-${{ github.workflow }}-${{ github.event.issue.number || github.run_id }}" + +run-name: "Issue 自动分类与回复" + +jobs: + activation: + needs: pre_activation + if: needs.pre_activation.outputs.activated == 'true' + runs-on: ubuntu-slim + permissions: + actions: read + contents: read + outputs: + body: ${{ steps.sanitized.outputs.body }} + comment_id: "" + comment_repo: "" + engine_id: ${{ steps.generate_aw_info.outputs.engine_id }} + lockdown_check_failed: ${{ steps.generate_aw_info.outputs.lockdown_check_failed == 'true' }} + model: ${{ steps.generate_aw_info.outputs.model }} + setup-trace-id: ${{ steps.setup.outputs.trace-id }} + stale_lock_file_failed: ${{ steps.check-lock-file.outputs.stale_lock_file_failed == 'true' }} + text: ${{ steps.sanitized.outputs.text }} + title: ${{ steps.sanitized.outputs.title }} + steps: + - name: Setup Scripts + id: setup + uses: github/gh-aw-actions/setup@b8068426813005612b960b5ab0b8bd2c27142323 # v0.71.5 + with: + destination: ${{ runner.temp }}/gh-aw/actions + job-name: ${{ github.job }} + trace-id: ${{ needs.pre_activation.outputs.setup-trace-id }} + env: + GH_AW_SETUP_WORKFLOW_NAME: "Issue 自动分类与回复" + GH_AW_CURRENT_WORKFLOW_REF: ${{ github.repository }}/.github/workflows/issue-triage.lock.yml@${{ github.ref }} + GH_AW_INFO_VERSION: "1.0.40" + - name: Generate agentic run info + id: generate_aw_info + env: + GH_AW_INFO_ENGINE_ID: "copilot" + GH_AW_INFO_ENGINE_NAME: "GitHub Copilot CLI" + GH_AW_INFO_MODEL: ${{ vars.GH_AW_MODEL_AGENT_COPILOT || 'claude-sonnet-4.6' }} + GH_AW_INFO_VERSION: "1.0.40" + GH_AW_INFO_AGENT_VERSION: "1.0.40" + GH_AW_INFO_CLI_VERSION: "v0.71.5" + GH_AW_INFO_WORKFLOW_NAME: "Issue 自动分类与回复" + GH_AW_INFO_EXPERIMENTAL: "false" + GH_AW_INFO_SUPPORTS_TOOLS_ALLOWLIST: "true" + GH_AW_INFO_STAGED: "false" + GH_AW_INFO_ALLOWED_DOMAINS: '["defaults","ark.cn-beijing.volces.com"]' + GH_AW_INFO_FIREWALL_ENABLED: "false" + GH_AW_INFO_AWF_VERSION: "" + GH_AW_INFO_AWMG_VERSION: "" + GH_AW_INFO_FIREWALL_TYPE: "" + GH_AW_COMPILED_STRICT: "false" + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io, getOctokit); + const { main } = require('${{ runner.temp }}/gh-aw/actions/generate_aw_info.cjs'); + await main(core, context); + - name: Checkout .github and .agents folders + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false + sparse-checkout: | + .github + .agents + .claude + .codex + .crush + .gemini + .opencode + .pi + sparse-checkout-cone-mode: true + fetch-depth: 1 + - name: Save agent config folders for base branch restoration + env: + GH_AW_AGENT_FOLDERS: ".agents .claude .codex .crush .gemini .github .opencode .pi" + GH_AW_AGENT_FILES: ".crush.json AGENTS.md CLAUDE.md GEMINI.md PI.md opencode.jsonc" + # poutine:ignore untrusted_checkout_exec + run: bash "${RUNNER_TEMP}/gh-aw/actions/save_base_github_folders.sh" + - name: Check workflow lock file + id: check-lock-file + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 + env: + GH_AW_WORKFLOW_FILE: "issue-triage.lock.yml" + GH_AW_CONTEXT_WORKFLOW_REF: "${{ github.workflow_ref }}" + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io, getOctokit); + const { main } = require('${{ runner.temp }}/gh-aw/actions/check_workflow_timestamp_api.cjs'); + await main(); + - name: Check compile-agentic version + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 + env: + GH_AW_COMPILED_VERSION: "v0.71.5" + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io, getOctokit); + const { main } = require('${{ runner.temp }}/gh-aw/actions/check_version_updates.cjs'); + await main(); + - name: Compute current body text + id: sanitized + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 + env: + GH_AW_ALLOWED_DOMAINS: "api.business.githubcopilot.com,api.enterprise.githubcopilot.com,api.github.com,api.githubcopilot.com,api.individual.githubcopilot.com,api.snapcraft.io,archive.ubuntu.com,ark.cn-beijing.volces.com,azure.archive.ubuntu.com,crl.geotrust.com,crl.globalsign.com,crl.identrust.com,crl.sectigo.com,crl.thawte.com,crl.usertrust.com,crl.verisign.com,crl3.digicert.com,crl4.digicert.com,crls.ssl.com,github.com,host.docker.internal,json-schema.org,json.schemastore.org,keyserver.ubuntu.com,ocsp.digicert.com,ocsp.geotrust.com,ocsp.globalsign.com,ocsp.identrust.com,ocsp.sectigo.com,ocsp.ssl.com,ocsp.thawte.com,ocsp.usertrust.com,ocsp.verisign.com,packagecloud.io,packages.cloud.google.com,packages.microsoft.com,ppa.launchpad.net,raw.githubusercontent.com,registry.npmjs.org,s.symcb.com,s.symcd.com,security.ubuntu.com,telemetry.enterprise.githubcopilot.com,ts-crl.ws.symantec.com,ts-ocsp.ws.symantec.com,www.googleapis.com" + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io, getOctokit); + const { main } = require('${{ runner.temp }}/gh-aw/actions/compute_text.cjs'); + await main(); + - name: Create prompt with built-in context + env: + GH_AW_PROMPT: /tmp/gh-aw/aw-prompts/prompt.txt + GH_AW_SAFE_OUTPUTS: ${{ runner.temp }}/gh-aw/safeoutputs/outputs.jsonl + GH_AW_GITHUB_ACTOR: ${{ github.actor }} + GH_AW_GITHUB_EVENT_COMMENT_ID: ${{ github.event.comment.id }} + GH_AW_GITHUB_EVENT_DISCUSSION_NUMBER: ${{ github.event.discussion.number }} + GH_AW_GITHUB_EVENT_ISSUE_NUMBER: ${{ github.event.issue.number }} + GH_AW_GITHUB_EVENT_PULL_REQUEST_NUMBER: ${{ github.event.pull_request.number }} + GH_AW_GITHUB_REPOSITORY: ${{ github.repository }} + GH_AW_GITHUB_RUN_ID: ${{ github.run_id }} + GH_AW_GITHUB_WORKSPACE: ${{ github.workspace }} + # poutine:ignore untrusted_checkout_exec + run: | + bash "${RUNNER_TEMP}/gh-aw/actions/create_prompt_first.sh" + { + cat << 'GH_AW_PROMPT_1857816c8098cba9_EOF' + + GH_AW_PROMPT_1857816c8098cba9_EOF + cat "${RUNNER_TEMP}/gh-aw/prompts/xpia.md" + cat "${RUNNER_TEMP}/gh-aw/prompts/temp_folder_prompt.md" + cat "${RUNNER_TEMP}/gh-aw/prompts/markdown.md" + cat "${RUNNER_TEMP}/gh-aw/prompts/safe_outputs_prompt.md" + cat << 'GH_AW_PROMPT_1857816c8098cba9_EOF' + + Tools: add_comment, add_labels, missing_tool, missing_data, noop + + GH_AW_PROMPT_1857816c8098cba9_EOF + cat "${RUNNER_TEMP}/gh-aw/prompts/mcp_cli_tools_prompt.md" + cat << 'GH_AW_PROMPT_1857816c8098cba9_EOF' + + The following GitHub context information is available for this workflow: + {{#if __GH_AW_GITHUB_ACTOR__ }} + - **actor**: __GH_AW_GITHUB_ACTOR__ + {{/if}} + {{#if __GH_AW_GITHUB_REPOSITORY__ }} + - **repository**: __GH_AW_GITHUB_REPOSITORY__ + {{/if}} + {{#if __GH_AW_GITHUB_WORKSPACE__ }} + - **workspace**: __GH_AW_GITHUB_WORKSPACE__ + {{/if}} + {{#if __GH_AW_GITHUB_EVENT_ISSUE_NUMBER__ }} + - **issue-number**: #__GH_AW_GITHUB_EVENT_ISSUE_NUMBER__ + {{/if}} + {{#if __GH_AW_GITHUB_EVENT_DISCUSSION_NUMBER__ }} + - **discussion-number**: #__GH_AW_GITHUB_EVENT_DISCUSSION_NUMBER__ + {{/if}} + {{#if __GH_AW_GITHUB_EVENT_PULL_REQUEST_NUMBER__ }} + - **pull-request-number**: #__GH_AW_GITHUB_EVENT_PULL_REQUEST_NUMBER__ + {{/if}} + {{#if __GH_AW_GITHUB_EVENT_COMMENT_ID__ }} + - **comment-id**: __GH_AW_GITHUB_EVENT_COMMENT_ID__ + {{/if}} + {{#if __GH_AW_GITHUB_RUN_ID__ }} + - **workflow-run-id**: __GH_AW_GITHUB_RUN_ID__ + {{/if}} + + + GH_AW_PROMPT_1857816c8098cba9_EOF + cat "${RUNNER_TEMP}/gh-aw/prompts/github_mcp_tools_with_safeoutputs_prompt.md" + cat << 'GH_AW_PROMPT_1857816c8098cba9_EOF' + + {{#runtime-import .github/workflows/issue-triage.md}} + GH_AW_PROMPT_1857816c8098cba9_EOF + } > "$GH_AW_PROMPT" + - name: Interpolate variables and render templates + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 + env: + GH_AW_PROMPT: /tmp/gh-aw/aw-prompts/prompt.txt + GH_AW_ENGINE_ID: "copilot" + GH_AW_GITHUB_REPOSITORY: ${{ github.repository }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io, getOctokit); + const { main } = require('${{ runner.temp }}/gh-aw/actions/interpolate_prompt.cjs'); + await main(); + - name: Substitute placeholders + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 + env: + GH_AW_PROMPT: /tmp/gh-aw/aw-prompts/prompt.txt + GH_AW_GITHUB_ACTOR: ${{ github.actor }} + GH_AW_GITHUB_EVENT_COMMENT_ID: ${{ github.event.comment.id }} + GH_AW_GITHUB_EVENT_DISCUSSION_NUMBER: ${{ github.event.discussion.number }} + GH_AW_GITHUB_EVENT_ISSUE_NUMBER: ${{ github.event.issue.number }} + GH_AW_GITHUB_EVENT_PULL_REQUEST_NUMBER: ${{ github.event.pull_request.number }} + GH_AW_GITHUB_REPOSITORY: ${{ github.repository }} + GH_AW_GITHUB_RUN_ID: ${{ github.run_id }} + GH_AW_GITHUB_WORKSPACE: ${{ github.workspace }} + GH_AW_MCP_CLI_SERVERS_LIST: '- `safeoutputs` — run `safeoutputs --help` to see available tools' + GH_AW_NEEDS_PRE_ACTIVATION_OUTPUTS_ACTIVATED: ${{ needs.pre_activation.outputs.activated }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io, getOctokit); + + const substitutePlaceholders = require('${{ runner.temp }}/gh-aw/actions/substitute_placeholders.cjs'); + + // Call the substitution function + return await substitutePlaceholders({ + file: process.env.GH_AW_PROMPT, + substitutions: { + GH_AW_GITHUB_ACTOR: process.env.GH_AW_GITHUB_ACTOR, + GH_AW_GITHUB_EVENT_COMMENT_ID: process.env.GH_AW_GITHUB_EVENT_COMMENT_ID, + GH_AW_GITHUB_EVENT_DISCUSSION_NUMBER: process.env.GH_AW_GITHUB_EVENT_DISCUSSION_NUMBER, + GH_AW_GITHUB_EVENT_ISSUE_NUMBER: process.env.GH_AW_GITHUB_EVENT_ISSUE_NUMBER, + GH_AW_GITHUB_EVENT_PULL_REQUEST_NUMBER: process.env.GH_AW_GITHUB_EVENT_PULL_REQUEST_NUMBER, + GH_AW_GITHUB_REPOSITORY: process.env.GH_AW_GITHUB_REPOSITORY, + GH_AW_GITHUB_RUN_ID: process.env.GH_AW_GITHUB_RUN_ID, + GH_AW_GITHUB_WORKSPACE: process.env.GH_AW_GITHUB_WORKSPACE, + GH_AW_MCP_CLI_SERVERS_LIST: process.env.GH_AW_MCP_CLI_SERVERS_LIST, + GH_AW_NEEDS_PRE_ACTIVATION_OUTPUTS_ACTIVATED: process.env.GH_AW_NEEDS_PRE_ACTIVATION_OUTPUTS_ACTIVATED + } + }); + - name: Validate prompt placeholders + env: + GH_AW_PROMPT: /tmp/gh-aw/aw-prompts/prompt.txt + # poutine:ignore untrusted_checkout_exec + run: bash "${RUNNER_TEMP}/gh-aw/actions/validate_prompt_placeholders.sh" + - name: Print prompt + env: + GH_AW_PROMPT: /tmp/gh-aw/aw-prompts/prompt.txt + # poutine:ignore untrusted_checkout_exec + run: bash "${RUNNER_TEMP}/gh-aw/actions/print_prompt_summary.sh" + - name: Upload activation artifact + if: success() + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 + with: + name: activation + include-hidden-files: true + path: | + /tmp/gh-aw/aw_info.json + /tmp/gh-aw/aw-prompts/prompt.txt + /tmp/gh-aw/github_rate_limits.jsonl + /tmp/gh-aw/base + if-no-files-found: ignore + retention-days: 1 + + agent: + needs: activation + runs-on: ubuntu-latest + permissions: + contents: read + issues: read + pull-requests: read + env: + DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} + GH_AW_ASSETS_ALLOWED_EXTS: "" + GH_AW_ASSETS_BRANCH: "" + GH_AW_ASSETS_MAX_SIZE_KB: 0 + GH_AW_MCP_LOG_DIR: /tmp/gh-aw/mcp-logs/safeoutputs + GH_AW_WORKFLOW_ID_SANITIZED: issuetriage + outputs: + agentic_engine_timeout: ${{ steps.detect-copilot-errors.outputs.agentic_engine_timeout || 'false' }} + checkout_pr_success: ${{ steps.checkout-pr.outputs.checkout_pr_success || 'true' }} + effective_tokens: ${{ steps.parse-mcp-gateway.outputs.effective_tokens }} + has_patch: ${{ steps.collect_output.outputs.has_patch }} + inference_access_error: ${{ steps.detect-copilot-errors.outputs.inference_access_error || 'false' }} + mcp_policy_error: ${{ steps.detect-copilot-errors.outputs.mcp_policy_error || 'false' }} + model: ${{ needs.activation.outputs.model }} + model_not_supported_error: ${{ steps.detect-copilot-errors.outputs.model_not_supported_error || 'false' }} + output: ${{ steps.collect_output.outputs.output }} + output_types: ${{ steps.collect_output.outputs.output_types }} + setup-trace-id: ${{ steps.setup.outputs.trace-id }} + steps: + - name: Setup Scripts + id: setup + uses: github/gh-aw-actions/setup@b8068426813005612b960b5ab0b8bd2c27142323 # v0.71.5 + with: + destination: ${{ runner.temp }}/gh-aw/actions + job-name: ${{ github.job }} + trace-id: ${{ needs.activation.outputs.setup-trace-id }} + env: + GH_AW_SETUP_WORKFLOW_NAME: "Issue 自动分类与回复" + GH_AW_CURRENT_WORKFLOW_REF: ${{ github.repository }}/.github/workflows/issue-triage.lock.yml@${{ github.ref }} + GH_AW_INFO_VERSION: "1.0.40" + - name: Set runtime paths + id: set-runtime-paths + run: | + { + echo "GH_AW_SAFE_OUTPUTS=${RUNNER_TEMP}/gh-aw/safeoutputs/outputs.jsonl" + echo "GH_AW_SAFE_OUTPUTS_CONFIG_PATH=${RUNNER_TEMP}/gh-aw/safeoutputs/config.json" + echo "GH_AW_SAFE_OUTPUTS_TOOLS_PATH=${RUNNER_TEMP}/gh-aw/safeoutputs/tools.json" + } >> "$GITHUB_OUTPUT" + - name: Checkout repository + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false + - name: Create gh-aw temp directory + run: bash "${RUNNER_TEMP}/gh-aw/actions/create_gh_aw_tmp_dir.sh" + - name: Configure gh CLI for GitHub Enterprise + run: bash "${RUNNER_TEMP}/gh-aw/actions/configure_gh_for_ghe.sh" + env: + GH_TOKEN: ${{ github.token }} + - name: Configure Git credentials + env: + REPO_NAME: ${{ github.repository }} + SERVER_URL: ${{ github.server_url }} + GITHUB_TOKEN: ${{ github.token }} + run: | + git config --global user.email "github-actions[bot]@users.noreply.github.com" + git config --global user.name "github-actions[bot]" + git config --global am.keepcr true + # Re-authenticate git with GitHub token + SERVER_URL_STRIPPED="${SERVER_URL#https://}" + git remote set-url origin "https://x-access-token:${GITHUB_TOKEN}@${SERVER_URL_STRIPPED}/${REPO_NAME}.git" + echo "Git configured with standard GitHub Actions identity" + - name: Checkout PR branch + id: checkout-pr + if: | + github.event.pull_request || github.event.issue.pull_request + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 + env: + GH_TOKEN: ${{ secrets.GH_AW_GITHUB_MCP_SERVER_TOKEN || secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} + with: + github-token: ${{ secrets.GH_AW_GITHUB_MCP_SERVER_TOKEN || secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io, getOctokit); + const { main } = require('${{ runner.temp }}/gh-aw/actions/checkout_pr_branch.cjs'); + await main(); + - name: Install GitHub Copilot CLI + run: bash "${RUNNER_TEMP}/gh-aw/actions/install_copilot_cli.sh" 1.0.40 + env: + GH_HOST: github.com + - name: Parse integrity filter lists + id: parse-guard-vars + env: + GH_AW_BLOCKED_USERS_VAR: ${{ vars.GH_AW_GITHUB_BLOCKED_USERS || '' }} + GH_AW_TRUSTED_USERS_VAR: ${{ vars.GH_AW_GITHUB_TRUSTED_USERS || '' }} + GH_AW_APPROVAL_LABELS_VAR: ${{ vars.GH_AW_GITHUB_APPROVAL_LABELS || '' }} + run: bash "${RUNNER_TEMP}/gh-aw/actions/parse_guard_list.sh" + - name: Download activation artifact + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 + with: + name: activation + path: /tmp/gh-aw + - name: Restore agent config folders from base branch + if: steps.checkout-pr.outcome == 'success' + env: + GH_AW_AGENT_FOLDERS: ".agents .claude .codex .crush .gemini .github .opencode .pi" + GH_AW_AGENT_FILES: ".crush.json AGENTS.md CLAUDE.md GEMINI.md PI.md opencode.jsonc" + run: bash "${RUNNER_TEMP}/gh-aw/actions/restore_base_github_folders.sh" + - name: Download container images + run: bash "${RUNNER_TEMP}/gh-aw/actions/download_docker_images.sh" ghcr.io/github/github-mcp-server:v1.0.3@sha256:2ac27ef03461ef2b877031b838a7d1fd7f12b12d4ace7796d8cad91446d55959 node:lts-alpine@sha256:d1b3b4da11eefd5941e7f0b9cf17783fc99d9c6fc34884a665f40a06dbdfc94f + - name: Generate Safe Outputs Config + run: | + mkdir -p "${RUNNER_TEMP}/gh-aw/safeoutputs" + mkdir -p /tmp/gh-aw/safeoutputs + mkdir -p /tmp/gh-aw/mcp-logs/safeoutputs + cat > "${RUNNER_TEMP}/gh-aw/safeoutputs/config.json" << 'GH_AW_SAFE_OUTPUTS_CONFIG_18efef56cd5f6986_EOF' + {"add_comment":{"max":1},"add_labels":{"allowed":["bug","feature","enhancement","documentation","question","duplicate","invalid"]},"create_report_incomplete_issue":{},"missing_data":{},"missing_tool":{},"noop":{"max":1,"report-as-issue":"true"},"report_incomplete":{}} + GH_AW_SAFE_OUTPUTS_CONFIG_18efef56cd5f6986_EOF + - name: Generate Safe Outputs Tools + env: + GH_AW_TOOLS_META_JSON: | + { + "description_suffixes": { + "add_comment": " CONSTRAINTS: Maximum 1 comment(s) can be added. Supports reply_to_id for discussion threading.", + "add_labels": " CONSTRAINTS: Only these labels are allowed: [\"bug\" \"feature\" \"enhancement\" \"documentation\" \"question\" \"duplicate\" \"invalid\"]." + }, + "repo_params": {}, + "dynamic_tools": [] + } + GH_AW_VALIDATION_JSON: | + { + "add_comment": { + "defaultMax": 1, + "fields": { + "body": { + "required": true, + "type": "string", + "sanitize": true, + "maxLength": 65000 + }, + "item_number": { + "issueOrPRNumber": true + }, + "reply_to_id": { + "type": "string", + "maxLength": 256 + }, + "repo": { + "type": "string", + "maxLength": 256 + } + } + }, + "add_labels": { + "defaultMax": 5, + "fields": { + "item_number": { + "issueNumberOrTemporaryId": true + }, + "labels": { + "required": true, + "type": "array", + "itemType": "string", + "itemSanitize": true, + "itemMaxLength": 128 + }, + "repo": { + "type": "string", + "maxLength": 256 + } + } + }, + "missing_data": { + "defaultMax": 20, + "fields": { + "alternatives": { + "type": "string", + "sanitize": true, + "maxLength": 256 + }, + "context": { + "type": "string", + "sanitize": true, + "maxLength": 256 + }, + "data_type": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, + "reason": { + "type": "string", + "sanitize": true, + "maxLength": 256 + } + } + }, + "missing_tool": { + "defaultMax": 20, + "fields": { + "alternatives": { + "type": "string", + "sanitize": true, + "maxLength": 512 + }, + "reason": { + "required": true, + "type": "string", + "sanitize": true, + "maxLength": 256 + }, + "tool": { + "type": "string", + "sanitize": true, + "maxLength": 128 + } + } + }, + "noop": { + "defaultMax": 1, + "fields": { + "message": { + "required": true, + "type": "string", + "sanitize": true, + "maxLength": 65000 + } + } + }, + "report_incomplete": { + "defaultMax": 5, + "fields": { + "details": { + "type": "string", + "sanitize": true, + "maxLength": 65000 + }, + "reason": { + "required": true, + "type": "string", + "sanitize": true, + "maxLength": 1024 + } + } + } + } + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io, getOctokit); + const { main } = require('${{ runner.temp }}/gh-aw/actions/generate_safe_outputs_tools.cjs'); + await main(); + - name: Generate Safe Outputs MCP Server Config + id: safe-outputs-config + run: | + # Generate a secure random API key (360 bits of entropy, 40+ chars) + # Mask immediately to prevent timing vulnerabilities + API_KEY=$(openssl rand -base64 45 | tr -d '/+=') + echo "::add-mask::${API_KEY}" + + PORT=3001 + + # Set outputs for next steps + { + echo "safe_outputs_api_key=${API_KEY}" + echo "safe_outputs_port=${PORT}" + } >> "$GITHUB_OUTPUT" + + echo "Safe Outputs MCP server will run on port ${PORT}" + + - name: Start Safe Outputs MCP HTTP Server + id: safe-outputs-start + env: + DEBUG: '*' + GH_AW_SAFE_OUTPUTS: ${{ steps.set-runtime-paths.outputs.GH_AW_SAFE_OUTPUTS }} + GH_AW_SAFE_OUTPUTS_PORT: ${{ steps.safe-outputs-config.outputs.safe_outputs_port }} + GH_AW_SAFE_OUTPUTS_API_KEY: ${{ steps.safe-outputs-config.outputs.safe_outputs_api_key }} + GH_AW_SAFE_OUTPUTS_TOOLS_PATH: ${{ runner.temp }}/gh-aw/safeoutputs/tools.json + GH_AW_SAFE_OUTPUTS_CONFIG_PATH: ${{ runner.temp }}/gh-aw/safeoutputs/config.json + GH_AW_MCP_LOG_DIR: /tmp/gh-aw/mcp-logs/safeoutputs + run: | + # Environment variables are set above to prevent template injection + export DEBUG + export GH_AW_SAFE_OUTPUTS + export GH_AW_SAFE_OUTPUTS_PORT + export GH_AW_SAFE_OUTPUTS_API_KEY + export GH_AW_SAFE_OUTPUTS_TOOLS_PATH + export GH_AW_SAFE_OUTPUTS_CONFIG_PATH + export GH_AW_MCP_LOG_DIR + + bash "${RUNNER_TEMP}/gh-aw/actions/start_safe_outputs_server.sh" + + - name: Start MCP Gateway + id: start-mcp-gateway + env: + GH_AW_SAFE_OUTPUTS: ${{ steps.set-runtime-paths.outputs.GH_AW_SAFE_OUTPUTS }} + GH_AW_SAFE_OUTPUTS_API_KEY: ${{ steps.safe-outputs-start.outputs.api_key }} + GH_AW_SAFE_OUTPUTS_PORT: ${{ steps.safe-outputs-start.outputs.port }} + GITHUB_MCP_SERVER_TOKEN: ${{ secrets.GH_AW_GITHUB_MCP_SERVER_TOKEN || secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} + run: | + set -eo pipefail + mkdir -p "${RUNNER_TEMP}/gh-aw/mcp-config" + + # Export gateway environment variables for MCP config and gateway script + export MCP_GATEWAY_PORT="8080" + export MCP_GATEWAY_DOMAIN="localhost" + export MCP_GATEWAY_HOST_DOMAIN="localhost" + MCP_GATEWAY_API_KEY=$(openssl rand -base64 45 | tr -d '/+=') + echo "::add-mask::${MCP_GATEWAY_API_KEY}" + export MCP_GATEWAY_API_KEY + export MCP_GATEWAY_PAYLOAD_DIR="/tmp/gh-aw/mcp-payloads" + mkdir -p "${MCP_GATEWAY_PAYLOAD_DIR}" + export MCP_GATEWAY_PAYLOAD_SIZE_THRESHOLD="524288" + export DEBUG="*" + + export GH_AW_ENGINE="copilot" + MCP_GATEWAY_UID=$(id -u 2>/dev/null || echo '0') + MCP_GATEWAY_GID=$(id -g 2>/dev/null || echo '0') + DOCKER_SOCK_GID=$(stat -c '%g' /var/run/docker.sock 2>/dev/null || echo '0') + export MCP_GATEWAY_DOCKER_COMMAND='docker run -i --rm --network host --add-host host.docker.internal:127.0.0.1 --user '"${MCP_GATEWAY_UID}"':'"${MCP_GATEWAY_GID}"' --group-add '"${DOCKER_SOCK_GID}"' -v /var/run/docker.sock:/var/run/docker.sock -e MCP_GATEWAY_PORT -e MCP_GATEWAY_DOMAIN -e MCP_GATEWAY_API_KEY -e MCP_GATEWAY_PAYLOAD_DIR -e MCP_GATEWAY_PAYLOAD_SIZE_THRESHOLD -e DEBUG -e MCP_GATEWAY_LOG_DIR -e GH_AW_MCP_LOG_DIR -e GH_AW_SAFE_OUTPUTS -e GH_AW_SAFE_OUTPUTS_CONFIG_PATH -e GH_AW_SAFE_OUTPUTS_TOOLS_PATH -e GH_AW_ASSETS_BRANCH -e GH_AW_ASSETS_MAX_SIZE_KB -e GH_AW_ASSETS_ALLOWED_EXTS -e DEFAULT_BRANCH -e GITHUB_MCP_SERVER_TOKEN -e GITHUB_MCP_GUARD_MIN_INTEGRITY -e GITHUB_MCP_GUARD_REPOS -e GITHUB_REPOSITORY -e GITHUB_SERVER_URL -e GITHUB_SHA -e GITHUB_WORKSPACE -e GITHUB_TOKEN -e GITHUB_RUN_ID -e GITHUB_RUN_NUMBER -e GITHUB_RUN_ATTEMPT -e GITHUB_JOB -e GITHUB_ACTION -e GITHUB_EVENT_NAME -e GITHUB_EVENT_PATH -e GITHUB_ACTOR -e GITHUB_ACTOR_ID -e GITHUB_TRIGGERING_ACTOR -e GITHUB_WORKFLOW -e GITHUB_WORKFLOW_REF -e GITHUB_WORKFLOW_SHA -e GITHUB_REF -e GITHUB_REF_NAME -e GITHUB_REF_TYPE -e GITHUB_HEAD_REF -e GITHUB_BASE_REF -e GH_AW_SAFE_OUTPUTS_PORT -e GH_AW_SAFE_OUTPUTS_API_KEY -v /tmp/gh-aw/mcp-payloads:/tmp/gh-aw/mcp-payloads:rw -v /opt:/opt:ro -v /tmp:/tmp:rw -v '"${GITHUB_WORKSPACE}"':'"${GITHUB_WORKSPACE}"':rw ghcr.io/github/gh-aw-mcpg:v0.3.6' + + mkdir -p /home/runner/.copilot + GH_AW_NODE=$(which node 2>/dev/null || command -v node 2>/dev/null || echo node) + cat << GH_AW_MCP_CONFIG_0138aecd21cfde50_EOF | "$GH_AW_NODE" "${RUNNER_TEMP}/gh-aw/actions/start_mcp_gateway.cjs" + { + "mcpServers": { + "github": { + "type": "stdio", + "container": "ghcr.io/github/github-mcp-server:v1.0.3", + "env": { + "GITHUB_HOST": "\${GITHUB_SERVER_URL}", + "GITHUB_PERSONAL_ACCESS_TOKEN": "\${GITHUB_MCP_SERVER_TOKEN}", + "GITHUB_READ_ONLY": "1", + "GITHUB_TOOLSETS": "context,repos,issues,pull_requests" + }, + "guard-policies": { + "allow-only": { + "approval-labels": ${{ steps.parse-guard-vars.outputs.approval_labels }}, + "blocked-users": ${{ steps.parse-guard-vars.outputs.blocked_users }}, + "min-integrity": "none", + "repos": "all", + "trusted-users": ${{ steps.parse-guard-vars.outputs.trusted_users }} + } + } + }, + "safeoutputs": { + "type": "http", + "url": "http://localhost:$GH_AW_SAFE_OUTPUTS_PORT", + "headers": { + "Authorization": "\${GH_AW_SAFE_OUTPUTS_API_KEY}" + }, + "guard-policies": { + "write-sink": { + "accept": [ + "*" + ] + } + } + } + }, + "gateway": { + "port": $MCP_GATEWAY_PORT, + "domain": "${MCP_GATEWAY_DOMAIN}", + "apiKey": "${MCP_GATEWAY_API_KEY}", + "payloadDir": "${MCP_GATEWAY_PAYLOAD_DIR}" + } + } + GH_AW_MCP_CONFIG_0138aecd21cfde50_EOF + - name: Mount MCP servers as CLIs + id: mount-mcp-clis + continue-on-error: true + env: + MCP_GATEWAY_API_KEY: ${{ steps.start-mcp-gateway.outputs.gateway-api-key }} + MCP_GATEWAY_DOMAIN: ${{ steps.start-mcp-gateway.outputs.gateway-domain }} + MCP_GATEWAY_PORT: ${{ steps.start-mcp-gateway.outputs.gateway-port }} + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/mount_mcp_as_cli.cjs'); + await main(); + - name: Clean credentials + continue-on-error: true + run: bash "${RUNNER_TEMP}/gh-aw/actions/clean_git_credentials.sh" + - name: Audit pre-agent workspace + id: pre_agent_audit + continue-on-error: true + run: bash "${RUNNER_TEMP}/gh-aw/actions/audit_pre_agent_workspace.sh" + - name: Execute GitHub Copilot CLI + id: agentic_execution + # Copilot CLI tool arguments (sorted): + # --allow-tool github + # --allow-tool safeoutputs + timeout-minutes: 20 + run: | + set -o pipefail + touch /tmp/gh-aw/agent-step-summary.md + (umask 177 && touch /tmp/gh-aw/agent-stdio.log) + mkdir -p /tmp/ + mkdir -p /tmp/gh-aw/ + mkdir -p /tmp/gh-aw/agent/ + mkdir -p /tmp/gh-aw/sandbox/agent/logs/ + GH_AW_NODE_EXEC="${GH_AW_NODE_BIN:-}"; if [ -z "$GH_AW_NODE_EXEC" ] || [ ! -x "$GH_AW_NODE_EXEC" ]; then GH_AW_NODE_EXEC="$(command -v node 2>/dev/null || echo node)"; fi; "$GH_AW_NODE_EXEC" ${RUNNER_TEMP}/gh-aw/actions/copilot_harness.cjs copilot --add-dir /tmp/ --add-dir /tmp/gh-aw/ --add-dir /tmp/gh-aw/agent/ --log-level all --log-dir /tmp/gh-aw/sandbox/agent/logs/ --disable-builtin-mcps --no-ask-user --allow-tool github --allow-tool safeoutputs --prompt-file /tmp/gh-aw/aw-prompts/prompt.txt 2>&1 | tee /tmp/gh-aw/agent-stdio.log + env: + COPILOT_AGENT_RUNNER_TYPE: STANDALONE + COPILOT_API_KEY: dummy-byok-key-for-offline-mode + COPILOT_GITHUB_TOKEN: ${{ secrets.COPILOT_GITHUB_TOKEN }} + COPILOT_MODEL: doubao-seed-2-0-code-preview-260215 + COPILOT_PROVIDER_API_KEY: ${{ secrets.OPENAI_API_KEY }} + COPILOT_PROVIDER_BASE_URL: https://ark.cn-beijing.volces.com/api/v3 + COPILOT_PROVIDER_TYPE: openai + GH_AW_MCP_CONFIG: /home/runner/.copilot/mcp-config.json + GH_AW_PHASE: agent + GH_AW_PROMPT: /tmp/gh-aw/aw-prompts/prompt.txt + GH_AW_SAFE_OUTPUTS: ${{ steps.set-runtime-paths.outputs.GH_AW_SAFE_OUTPUTS }} + GH_AW_VERSION: v0.71.5 + GITHUB_API_URL: ${{ github.api_url }} + GITHUB_AW: true + GITHUB_COPILOT_INTEGRATION_ID: agentic-workflows + GITHUB_HEAD_REF: ${{ github.head_ref }} + GITHUB_MCP_SERVER_TOKEN: ${{ secrets.GH_AW_GITHUB_MCP_SERVER_TOKEN || secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} + GITHUB_REF_NAME: ${{ github.ref_name }} + GITHUB_SERVER_URL: ${{ github.server_url }} + GITHUB_STEP_SUMMARY: /tmp/gh-aw/agent-step-summary.md + GITHUB_WORKSPACE: ${{ github.workspace }} + XDG_CONFIG_HOME: /home/runner + - name: Detect Copilot errors + id: detect-copilot-errors + if: always() + continue-on-error: true + run: node "${RUNNER_TEMP}/gh-aw/actions/detect_copilot_errors.cjs" + - name: Configure Git credentials + env: + REPO_NAME: ${{ github.repository }} + SERVER_URL: ${{ github.server_url }} + GITHUB_TOKEN: ${{ github.token }} + run: | + git config --global user.email "github-actions[bot]@users.noreply.github.com" + git config --global user.name "github-actions[bot]" + git config --global am.keepcr true + # Re-authenticate git with GitHub token + SERVER_URL_STRIPPED="${SERVER_URL#https://}" + git remote set-url origin "https://x-access-token:${GITHUB_TOKEN}@${SERVER_URL_STRIPPED}/${REPO_NAME}.git" + echo "Git configured with standard GitHub Actions identity" + - name: Copy Copilot session state files to logs + if: always() + continue-on-error: true + run: bash "${RUNNER_TEMP}/gh-aw/actions/copy_copilot_session_state.sh" + - name: Stop MCP Gateway + if: always() + continue-on-error: true + env: + MCP_GATEWAY_PORT: ${{ steps.start-mcp-gateway.outputs.gateway-port }} + MCP_GATEWAY_API_KEY: ${{ steps.start-mcp-gateway.outputs.gateway-api-key }} + GATEWAY_PID: ${{ steps.start-mcp-gateway.outputs.gateway-pid }} + run: | + bash "${RUNNER_TEMP}/gh-aw/actions/stop_mcp_gateway.sh" "$GATEWAY_PID" + - name: Redact secrets in logs + if: always() + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io, getOctokit); + const { main } = require('${{ runner.temp }}/gh-aw/actions/redact_secrets.cjs'); + await main(); + env: + GH_AW_SECRET_NAMES: 'COPILOT_GITHUB_TOKEN,GH_AW_GITHUB_MCP_SERVER_TOKEN,GH_AW_GITHUB_TOKEN,GITHUB_TOKEN,OPENAI_API_KEY' + SECRET_COPILOT_GITHUB_TOKEN: ${{ secrets.COPILOT_GITHUB_TOKEN }} + SECRET_GH_AW_GITHUB_MCP_SERVER_TOKEN: ${{ secrets.GH_AW_GITHUB_MCP_SERVER_TOKEN }} + SECRET_GH_AW_GITHUB_TOKEN: ${{ secrets.GH_AW_GITHUB_TOKEN }} + SECRET_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + SECRET_OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} + - name: Append agent step summary + if: always() + run: bash "${RUNNER_TEMP}/gh-aw/actions/append_agent_step_summary.sh" + - name: Copy Safe Outputs + if: always() + env: + GH_AW_SAFE_OUTPUTS: ${{ steps.set-runtime-paths.outputs.GH_AW_SAFE_OUTPUTS }} + run: | + mkdir -p /tmp/gh-aw + cp "$GH_AW_SAFE_OUTPUTS" /tmp/gh-aw/safeoutputs.jsonl 2>/dev/null || true + - name: Ingest agent output + id: collect_output + if: always() + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 + env: + GH_AW_SAFE_OUTPUTS: ${{ steps.set-runtime-paths.outputs.GH_AW_SAFE_OUTPUTS }} + GH_AW_ALLOWED_DOMAINS: "api.business.githubcopilot.com,api.enterprise.githubcopilot.com,api.github.com,api.githubcopilot.com,api.individual.githubcopilot.com,api.snapcraft.io,archive.ubuntu.com,ark.cn-beijing.volces.com,azure.archive.ubuntu.com,crl.geotrust.com,crl.globalsign.com,crl.identrust.com,crl.sectigo.com,crl.thawte.com,crl.usertrust.com,crl.verisign.com,crl3.digicert.com,crl4.digicert.com,crls.ssl.com,github.com,host.docker.internal,json-schema.org,json.schemastore.org,keyserver.ubuntu.com,ocsp.digicert.com,ocsp.geotrust.com,ocsp.globalsign.com,ocsp.identrust.com,ocsp.sectigo.com,ocsp.ssl.com,ocsp.thawte.com,ocsp.usertrust.com,ocsp.verisign.com,packagecloud.io,packages.cloud.google.com,packages.microsoft.com,ppa.launchpad.net,raw.githubusercontent.com,registry.npmjs.org,s.symcb.com,s.symcd.com,security.ubuntu.com,telemetry.enterprise.githubcopilot.com,ts-crl.ws.symantec.com,ts-ocsp.ws.symantec.com,www.googleapis.com" + GITHUB_SERVER_URL: ${{ github.server_url }} + GITHUB_API_URL: ${{ github.api_url }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io, getOctokit); + const { main } = require('${{ runner.temp }}/gh-aw/actions/collect_ndjson_output.cjs'); + await main(); + - name: Parse agent logs for step summary + if: always() + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 + env: + GH_AW_AGENT_OUTPUT: /tmp/gh-aw/sandbox/agent/logs/ + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io, getOctokit); + const { main } = require('${{ runner.temp }}/gh-aw/actions/parse_copilot_log.cjs'); + await main(); + - name: Parse MCP Gateway logs for step summary + if: always() + id: parse-mcp-gateway + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io, getOctokit); + const { main } = require('${{ runner.temp }}/gh-aw/actions/parse_mcp_gateway_log.cjs'); + await main(); + - name: Write agent output placeholder if missing + if: always() + run: | + if [ ! -f /tmp/gh-aw/agent_output.json ]; then + echo '{"items":[]}' > /tmp/gh-aw/agent_output.json + fi + - name: Upload agent artifacts + if: always() + continue-on-error: true + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 + with: + name: agent + path: | + /tmp/gh-aw/aw-prompts/prompt.txt + /tmp/gh-aw/sandbox/agent/logs/ + /tmp/gh-aw/redacted-urls.log + /tmp/gh-aw/mcp-logs/ + /tmp/gh-aw/proxy-logs/ + !/tmp/gh-aw/proxy-logs/proxy-tls/ + /tmp/gh-aw/agent-stdio.log + /tmp/gh-aw/pre-agent-audit.txt + /tmp/gh-aw/agent/ + /tmp/gh-aw/github_rate_limits.jsonl + /tmp/gh-aw/safeoutputs.jsonl + /tmp/gh-aw/agent_output.json + if-no-files-found: ignore + + conclusion: + needs: + - activation + - agent + - safe_outputs + if: > + always() && (needs.agent.result != 'skipped' || needs.activation.outputs.lockdown_check_failed == 'true' || + needs.activation.outputs.stale_lock_file_failed == 'true') + runs-on: ubuntu-slim + permissions: + contents: read + discussions: write + issues: write + pull-requests: write + concurrency: + group: "gh-aw-conclusion-issue-triage" + cancel-in-progress: false + outputs: + incomplete_count: ${{ steps.report_incomplete.outputs.incomplete_count }} + noop_message: ${{ steps.noop.outputs.noop_message }} + tools_reported: ${{ steps.missing_tool.outputs.tools_reported }} + total_count: ${{ steps.missing_tool.outputs.total_count }} + steps: + - name: Setup Scripts + id: setup + uses: github/gh-aw-actions/setup@b8068426813005612b960b5ab0b8bd2c27142323 # v0.71.5 + with: + destination: ${{ runner.temp }}/gh-aw/actions + job-name: ${{ github.job }} + trace-id: ${{ needs.activation.outputs.setup-trace-id }} + env: + GH_AW_SETUP_WORKFLOW_NAME: "Issue 自动分类与回复" + GH_AW_CURRENT_WORKFLOW_REF: ${{ github.repository }}/.github/workflows/issue-triage.lock.yml@${{ github.ref }} + GH_AW_INFO_VERSION: "1.0.40" + - name: Download agent output artifact + id: download-agent-output + continue-on-error: true + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 + with: + name: agent + path: /tmp/gh-aw/ + - name: Setup agent output environment variable + id: setup-agent-output-env + if: steps.download-agent-output.outcome == 'success' + run: | + mkdir -p /tmp/gh-aw/ + find "/tmp/gh-aw/" -type f -print + echo "GH_AW_AGENT_OUTPUT=/tmp/gh-aw/agent_output.json" >> "$GITHUB_OUTPUT" + - name: Process no-op messages + id: noop + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 + env: + GH_AW_AGENT_OUTPUT: ${{ steps.setup-agent-output-env.outputs.GH_AW_AGENT_OUTPUT }} + GH_AW_NOOP_MAX: "1" + GH_AW_WORKFLOW_NAME: "Issue 自动分类与回复" + GH_AW_RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} + GH_AW_AGENT_CONCLUSION: ${{ needs.agent.result }} + GH_AW_NOOP_REPORT_AS_ISSUE: "true" + with: + github-token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io, getOctokit); + const { main } = require('${{ runner.temp }}/gh-aw/actions/handle_noop_message.cjs'); + await main(); + - name: Record missing tool + id: missing_tool + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 + env: + GH_AW_AGENT_OUTPUT: ${{ steps.setup-agent-output-env.outputs.GH_AW_AGENT_OUTPUT }} + GH_AW_MISSING_TOOL_CREATE_ISSUE: "true" + GH_AW_WORKFLOW_NAME: "Issue 自动分类与回复" + with: + github-token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io, getOctokit); + const { main } = require('${{ runner.temp }}/gh-aw/actions/missing_tool.cjs'); + await main(); + - name: Record incomplete + id: report_incomplete + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 + env: + GH_AW_AGENT_OUTPUT: ${{ steps.setup-agent-output-env.outputs.GH_AW_AGENT_OUTPUT }} + GH_AW_REPORT_INCOMPLETE_CREATE_ISSUE: "true" + GH_AW_WORKFLOW_NAME: "Issue 自动分类与回复" + with: + github-token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io, getOctokit); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_incomplete_handler.cjs'); + await main(); + - name: Handle agent failure + id: handle_agent_failure + if: always() + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 + env: + GH_AW_AGENT_OUTPUT: ${{ steps.setup-agent-output-env.outputs.GH_AW_AGENT_OUTPUT }} + GH_AW_WORKFLOW_NAME: "Issue 自动分类与回复" + GH_AW_RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} + GH_AW_AGENT_CONCLUSION: ${{ needs.agent.result }} + GH_AW_WORKFLOW_ID: "issue-triage" + GH_AW_ACTION_FAILURE_ISSUE_EXPIRES_HOURS: "168" + GH_AW_ENGINE_ID: "copilot" + GH_AW_CHECKOUT_PR_SUCCESS: ${{ needs.agent.outputs.checkout_pr_success }} + GH_AW_INFERENCE_ACCESS_ERROR: ${{ needs.agent.outputs.inference_access_error }} + GH_AW_MCP_POLICY_ERROR: ${{ needs.agent.outputs.mcp_policy_error }} + GH_AW_AGENTIC_ENGINE_TIMEOUT: ${{ needs.agent.outputs.agentic_engine_timeout }} + GH_AW_MODEL_NOT_SUPPORTED_ERROR: ${{ needs.agent.outputs.model_not_supported_error }} + GH_AW_ENGINE_API_HOSTS: "api.enterprise.githubcopilot.com,api.githubcopilot.com,api.business.githubcopilot.com,api.individual.githubcopilot.com" + GH_AW_LOCKDOWN_CHECK_FAILED: ${{ needs.activation.outputs.lockdown_check_failed }} + GH_AW_STALE_LOCK_FILE_FAILED: ${{ needs.activation.outputs.stale_lock_file_failed }} + GH_AW_GROUP_REPORTS: "false" + GH_AW_FAILURE_REPORT_AS_ISSUE: "true" + GH_AW_MISSING_TOOL_REPORT_AS_FAILURE: "true" + GH_AW_MISSING_DATA_REPORT_AS_FAILURE: "true" + GH_AW_TIMEOUT_MINUTES: "20" + with: + github-token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io, getOctokit); + const { main } = require('${{ runner.temp }}/gh-aw/actions/handle_agent_failure.cjs'); + await main(); + + pre_activation: + runs-on: ubuntu-slim + outputs: + activated: ${{ steps.check_membership.outputs.is_team_member == 'true' }} + matched_command: '' + setup-trace-id: ${{ steps.setup.outputs.trace-id }} + steps: + - name: Setup Scripts + id: setup + uses: github/gh-aw-actions/setup@b8068426813005612b960b5ab0b8bd2c27142323 # v0.71.5 + with: + destination: ${{ runner.temp }}/gh-aw/actions + job-name: ${{ github.job }} + env: + GH_AW_SETUP_WORKFLOW_NAME: "Issue 自动分类与回复" + GH_AW_CURRENT_WORKFLOW_REF: ${{ github.repository }}/.github/workflows/issue-triage.lock.yml@${{ github.ref }} + GH_AW_INFO_VERSION: "1.0.40" + - name: Check team membership for workflow + id: check_membership + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 + env: + GH_AW_REQUIRED_ROLES: "admin,maintainer,write" + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io, getOctokit); + const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); + await main(); + + safe_outputs: + needs: + - activation + - agent + if: (!cancelled()) && needs.agent.result != 'skipped' + runs-on: ubuntu-slim + permissions: + contents: read + discussions: write + issues: write + pull-requests: write + timeout-minutes: 15 + env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/issue-triage" + GH_AW_EFFECTIVE_TOKENS: ${{ needs.agent.outputs.effective_tokens }} + GH_AW_ENGINE_ID: "copilot" + GH_AW_ENGINE_MODEL: ${{ needs.agent.outputs.model }} + GH_AW_ENGINE_VERSION: "1.0.40" + GH_AW_WORKFLOW_ID: "issue-triage" + GH_AW_WORKFLOW_NAME: "Issue 自动分类与回复" + outputs: + code_push_failure_count: ${{ steps.process_safe_outputs.outputs.code_push_failure_count }} + code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }} + comment_id: ${{ steps.process_safe_outputs.outputs.comment_id }} + comment_url: ${{ steps.process_safe_outputs.outputs.comment_url }} + create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }} + create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }} + process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }} + process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }} + steps: + - name: Setup Scripts + id: setup + uses: github/gh-aw-actions/setup@b8068426813005612b960b5ab0b8bd2c27142323 # v0.71.5 + with: + destination: ${{ runner.temp }}/gh-aw/actions + job-name: ${{ github.job }} + trace-id: ${{ needs.activation.outputs.setup-trace-id }} + env: + GH_AW_SETUP_WORKFLOW_NAME: "Issue 自动分类与回复" + GH_AW_CURRENT_WORKFLOW_REF: ${{ github.repository }}/.github/workflows/issue-triage.lock.yml@${{ github.ref }} + GH_AW_INFO_VERSION: "1.0.40" + - name: Download agent output artifact + id: download-agent-output + continue-on-error: true + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 + with: + name: agent + path: /tmp/gh-aw/ + - name: Setup agent output environment variable + id: setup-agent-output-env + if: steps.download-agent-output.outcome == 'success' + run: | + mkdir -p /tmp/gh-aw/ + find "/tmp/gh-aw/" -type f -print + echo "GH_AW_AGENT_OUTPUT=/tmp/gh-aw/agent_output.json" >> "$GITHUB_OUTPUT" + - name: Configure GH_HOST for enterprise compatibility + id: ghes-host-config + shell: bash + run: | + # Derive GH_HOST from GITHUB_SERVER_URL so the gh CLI targets the correct + # GitHub instance (GHES/GHEC). On github.com this is a harmless no-op. + GH_HOST="${GITHUB_SERVER_URL#https://}" + GH_HOST="${GH_HOST#http://}" + echo "GH_HOST=${GH_HOST}" >> "$GITHUB_ENV" + - name: Process Safe Outputs + id: process_safe_outputs + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 + env: + GH_AW_AGENT_OUTPUT: ${{ steps.setup-agent-output-env.outputs.GH_AW_AGENT_OUTPUT }} + GH_AW_ALLOWED_DOMAINS: "api.business.githubcopilot.com,api.enterprise.githubcopilot.com,api.github.com,api.githubcopilot.com,api.individual.githubcopilot.com,api.snapcraft.io,archive.ubuntu.com,ark.cn-beijing.volces.com,azure.archive.ubuntu.com,crl.geotrust.com,crl.globalsign.com,crl.identrust.com,crl.sectigo.com,crl.thawte.com,crl.usertrust.com,crl.verisign.com,crl3.digicert.com,crl4.digicert.com,crls.ssl.com,github.com,host.docker.internal,json-schema.org,json.schemastore.org,keyserver.ubuntu.com,ocsp.digicert.com,ocsp.geotrust.com,ocsp.globalsign.com,ocsp.identrust.com,ocsp.sectigo.com,ocsp.ssl.com,ocsp.thawte.com,ocsp.usertrust.com,ocsp.verisign.com,packagecloud.io,packages.cloud.google.com,packages.microsoft.com,ppa.launchpad.net,raw.githubusercontent.com,registry.npmjs.org,s.symcb.com,s.symcd.com,security.ubuntu.com,telemetry.enterprise.githubcopilot.com,ts-crl.ws.symantec.com,ts-ocsp.ws.symantec.com,www.googleapis.com" + GITHUB_SERVER_URL: ${{ github.server_url }} + GITHUB_API_URL: ${{ github.api_url }} + GH_AW_SAFE_OUTPUTS_HANDLER_CONFIG: "{\"add_comment\":{\"max\":1},\"add_labels\":{\"allowed\":[\"bug\",\"feature\",\"enhancement\",\"documentation\",\"question\",\"duplicate\",\"invalid\"]},\"create_report_incomplete_issue\":{},\"missing_data\":{},\"missing_tool\":{},\"noop\":{\"max\":1,\"report-as-issue\":\"true\"},\"report_incomplete\":{}}" + with: + github-token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io, getOctokit); + const { main } = require('${{ runner.temp }}/gh-aw/actions/safe_output_handler_manager.cjs'); + await main(); + - name: Upload Safe Outputs Items + if: always() + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 + with: + name: safe-outputs-items + path: | + /tmp/gh-aw/safe-output-items.jsonl + /tmp/gh-aw/temporary-id-map.json + if-no-files-found: ignore + diff --git a/.github/workflows/issue-triage.md b/.github/workflows/issue-triage.md new file mode 100644 index 0000000..0b491b1 --- /dev/null +++ b/.github/workflows/issue-triage.md @@ -0,0 +1,68 @@ +--- +on: + issues: + types: [opened, reopened] + +engine: + id: copilot + env: + COPILOT_PROVIDER_BASE_URL: "https://ark.cn-beijing.volces.com/api/v3" + COPILOT_MODEL: doubao-seed-2-0-code-preview-260215 + COPILOT_PROVIDER_API_KEY: ${{ secrets.OPENAI_API_KEY }} + COPILOT_PROVIDER_TYPE: openai + +network: + allowed: + - defaults + - ark.cn-beijing.volces.com + +sandbox: + agent: false +strict: false + +tools: + github: + min-integrity: none + +permissions: + issues: read + contents: read + pull-requests: read + +safe-outputs: + threat-detection: false + add-comment: + max: 1 + add-labels: + allowed: + - bug + - feature + - enhancement + - documentation + - question + - duplicate + - invalid +--- + +# Issue 自动分类与回复 + +分析仓库 ${{ github.repository }} 中新开的 Issue。 + +## 任务 + +1. 阅读 Issue 的标题和正文 +2. 判断类型,添加合适的标签: + - `bug`:程序出错、功能异常 + - `feature`:新功能请求 + - `enhancement`:改进现有功能 + - `documentation`:文档问题 + - `question`:使用疑问 + - `duplicate`:与已有 Issue 重复 + - `invalid`:信息不完整或无效 + +3. 用中文回复一条友好的评论,包含: + - 感谢用户提交 Issue + - 说明你打的标签和原因 + - 如果是 bug,请用户补充:复现步骤、环境信息、错误日志 + - 如果是 question,尝试根据仓库代码和文档给出初步解答 + - 预计处理时间(普通问题 3 个工作日内) \ No newline at end of file From 1a8868974de4cf9d4a697118e4041daf47b9f4b2 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Sat, 9 May 2026 10:31:12 +0800 Subject: [PATCH 02/25] ci:delete cppcheck.yml and issue-translator.yml --- .github/workflows/cppcheck.yml | 35 -------------------------- .github/workflows/issue-translator.yml | 15 ----------- 2 files changed, 50 deletions(-) delete mode 100644 .github/workflows/cppcheck.yml delete mode 100644 .github/workflows/issue-translator.yml diff --git a/.github/workflows/cppcheck.yml b/.github/workflows/cppcheck.yml deleted file mode 100644 index 279b03f..0000000 --- a/.github/workflows/cppcheck.yml +++ /dev/null @@ -1,35 +0,0 @@ -name: cpp check workflows - -on: - push: - branches: - - 'develop' - paths: - - 'XEngine_Source/**' - - 'XEngine_Release/**' - - '.github/**' - -jobs: - build: - runs-on: ubuntu-latest - - steps: - - name: Checkout main repository code - uses: actions/checkout@v4 - with: - ref: 'develop' - - - name: Create static_analysis directory - run: mkdir -p static_analysis - - - name: Run Cppcheck - run: | - sudo apt-get install -y cppcheck - cppcheck --enable=all --language=c++ --std=c++20 ./XEngine_Source/ --output-file=static_analysis/log.xml --xml - continue-on-error: true - - - name: Upload Cppcheck Results - uses: actions/upload-artifact@v4 - with: - name: cppcheck_results - path: static_analysis/log.xml \ No newline at end of file diff --git a/.github/workflows/issue-translator.yml b/.github/workflows/issue-translator.yml deleted file mode 100644 index d9fdac8..0000000 --- a/.github/workflows/issue-translator.yml +++ /dev/null @@ -1,15 +0,0 @@ -name: Issue Translator -on: - issue_comment: - types: [created] - issues: - types: [opened] - -jobs: - build: - runs-on: ubuntu-latest - steps: - - uses: usthe/issues-translate-action@v2.7 - with: - IS_MODIFY_TITLE: false - CUSTOM_BOT_NOTE: Bot detected the issue body's language is not English, translate it automatically. \ No newline at end of file From b3dc47a830f06da7b534507d9ba64d53ae01da0f Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Sat, 9 May 2026 10:34:50 +0800 Subject: [PATCH 03/25] ci:update last version --- .github/workflows/Alma_build.yml | 8 ++++---- .github/workflows/Centos_build.yml | 8 ++++---- .github/workflows/Rocky_build.yml | 8 ++++---- .github/workflows/Ubuntu_build.yml | 12 ++++++------ .github/workflows/debian_build.yml | 8 ++++---- .github/workflows/fedora_build.yml | 13 +++++++++---- .github/workflows/macbuild.yml | 8 ++++---- .github/workflows/msbuild.yml | 12 ++++++------ .github/workflows/release.yml | 20 ++++++++++---------- 9 files changed, 51 insertions(+), 46 deletions(-) diff --git a/.github/workflows/Alma_build.yml b/.github/workflows/Alma_build.yml index 67d8f22..0e4494f 100644 --- a/.github/workflows/Alma_build.yml +++ b/.github/workflows/Alma_build.yml @@ -44,16 +44,16 @@ jobs: steps: - name: Checkout main repository code - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Checkout dependency repository (xengine) - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: repository: libxengine/libxengine path: libxengine - name: sub module checkout (opensource) - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: repository: libxengine/XEngine_OPenSource path: XEngine_Source/XEngine_DependLibrary @@ -89,7 +89,7 @@ jobs: ./XEngine_MQServiceApp -t - name: Upload folder as artifact - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: XEngine_MQServiceApp-AlmaLinux_${{ matrix.version }}_${{ matrix.artifact }} path: XEngine_Release/ \ No newline at end of file diff --git a/.github/workflows/Centos_build.yml b/.github/workflows/Centos_build.yml index d68d0ff..0be115f 100644 --- a/.github/workflows/Centos_build.yml +++ b/.github/workflows/Centos_build.yml @@ -48,16 +48,16 @@ jobs: steps: - name: Checkout main repository code - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Checkout dependency repository (xengine) - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: repository: libxengine/libxengine path: libxengine - name: sub module checkout (opensource) - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: repository: libxengine/XEngine_OPenSource path: XEngine_Source/XEngine_DependLibrary @@ -95,7 +95,7 @@ jobs: ./XEngine_MQServiceApp -t - name: Upload folder as artifact with CentOS - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: XEngine_MQServiceApp-CentOS_${{ matrix.version }}_${{ matrix.artifact }} path: XEngine_Release/ diff --git a/.github/workflows/Rocky_build.yml b/.github/workflows/Rocky_build.yml index 50aa58f..601c610 100644 --- a/.github/workflows/Rocky_build.yml +++ b/.github/workflows/Rocky_build.yml @@ -44,18 +44,18 @@ jobs: steps: - name: Checkout main repository code - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: ref: 'develop' - name: Checkout dependency repository (xengine) - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: repository: libxengine/libxengine path: libxengine - name: sub module checkout (opensource) - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: repository: libxengine/XEngine_OPenSource path: XEngine_Source/XEngine_DependLibrary @@ -95,7 +95,7 @@ jobs: ./XEngine_MQServiceApp -t - name: Upload folder as artifact with CentOS - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: XEngine_MQServiceApp-RockyLinux_${{ matrix.version }}_${{ matrix.artifact }} path: XEngine_Release/ diff --git a/.github/workflows/Ubuntu_build.yml b/.github/workflows/Ubuntu_build.yml index 6138309..1f03e85 100644 --- a/.github/workflows/Ubuntu_build.yml +++ b/.github/workflows/Ubuntu_build.yml @@ -23,12 +23,12 @@ jobs: steps: - name: Checkout main repository code - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: ref: 'develop' - name: Checkout dependency repository (xengine) - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: repository: libxengine/libxengine path: libxengine @@ -96,28 +96,28 @@ jobs: - name: Upload folder as artifact with ubuntu22.04 x86-64 if: matrix.os == 'ubuntu-22.04' - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: XEngine_MQServiceApp-Ubuntu_22.04_x86_64 path: XEngine_Release/ retention-days: 1 - name: Upload folder as artifact with ubuntu24.04 x86-64 if: matrix.os == 'ubuntu-24.04' - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: XEngine_MQServiceApp-Ubuntu_24.04_x86_64 path: XEngine_Release/ retention-days: 1 - name: Upload folder as artifact with ubuntu22.04 Arm64 if: matrix.os == 'ubuntu-22.04-arm' - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: XEngine_MQServiceApp-Ubuntu_22.04_Arm64 path: XEngine_Release/ retention-days: 1 - name: Upload folder as artifact with ubuntu24.04 Arm64 if: matrix.os == 'ubuntu-24.04-arm' - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: XEngine_MQServiceApp-Ubuntu_24.04_Arm64 path: XEngine_Release/ diff --git a/.github/workflows/debian_build.yml b/.github/workflows/debian_build.yml index 70a6da1..10bed10 100644 --- a/.github/workflows/debian_build.yml +++ b/.github/workflows/debian_build.yml @@ -36,16 +36,16 @@ jobs: steps: - name: Checkout main repository code - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Checkout dependency repository (xengine) - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: repository: libxengine/libxengine path: libxengine - name: sub module checkout (opensource) - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: repository: libxengine/XEngine_OPenSource path: XEngine_Source/XEngine_DependLibrary @@ -81,7 +81,7 @@ jobs: ./XEngine_MQServiceApp -t - name: Upload folder as artifact - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: XEngine_MQServiceApp-Debian_${{ matrix.version }}_x86-64 path: XEngine_Release/ diff --git a/.github/workflows/fedora_build.yml b/.github/workflows/fedora_build.yml index 2c2f61c..9510f44 100644 --- a/.github/workflows/fedora_build.yml +++ b/.github/workflows/fedora_build.yml @@ -21,6 +21,11 @@ jobs: strategy: matrix: include: + - arch: amd64 + runner: ubuntu-24.04 + platform: linux/amd64 + fedora-version: 43 + artifact: x86-64 - arch: amd64 runner: ubuntu-24.04 platform: linux/amd64 @@ -34,16 +39,16 @@ jobs: steps: - name: Checkout main repository code - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Checkout dependency repository (xengine) - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: repository: libxengine/libxengine path: libxengine - name: sub module checkout (opensource) - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: repository: libxengine/XEngine_OPenSource path: XEngine_Source/XEngine_DependLibrary @@ -82,7 +87,7 @@ jobs: ./XEngine_MQServiceApp -t - name: Upload folder as artifact - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: XEngine_MQServiceApp-Fedora_${{ matrix.fedora-version }}_${{ matrix.artifact }} path: XEngine_Release/ diff --git a/.github/workflows/macbuild.yml b/.github/workflows/macbuild.yml index b975c7c..b999a94 100644 --- a/.github/workflows/macbuild.yml +++ b/.github/workflows/macbuild.yml @@ -20,12 +20,12 @@ jobs: steps: - name: Checkout main repository code - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: ref: 'develop' - name: Checkout dependency repository (xengine) - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: repository: libxengine/libxengine path: libxengine @@ -77,14 +77,14 @@ jobs: - name: Upload folder as artifact with mac x64 if: matrix.os == 'macos-15-intel' - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: XEngine_MQServiceApp-Mac_x86_64 path: XEngine_Release/ retention-days: 1 - name: Upload folder as artifact with mac arm if: matrix.os == 'macos-15' - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: XEngine_MQServiceApp-Mac_Arm64 path: XEngine_Release/ diff --git a/.github/workflows/msbuild.yml b/.github/workflows/msbuild.yml index bdf78ef..884d6fd 100644 --- a/.github/workflows/msbuild.yml +++ b/.github/workflows/msbuild.yml @@ -21,12 +21,12 @@ jobs: steps: - name: Checkout main repository code - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: ref: 'develop' - name: Checkout dependency repository (xengine) - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: repository: libxengine/libxengine path: libxengine @@ -73,7 +73,7 @@ jobs: shell: pwsh - name: Setup MSBuild - uses: microsoft/setup-msbuild@v2 + uses: microsoft/setup-msbuild@v3 - name: Build Solution run: msbuild XEngine_Source/XEngine_MQServiceApp.sln /p:Configuration=${{ matrix.configuration }} /p:Platform=${{ matrix.platform }} @@ -109,21 +109,21 @@ jobs: - name: Upload folder as artifact with x86 if: matrix.configuration == 'Release' && matrix.platform == 'x86' - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: XEngine_MQServiceApp-Windows_x86_32 path: XEngine_Release/ retention-days: 1 - name: Upload folder as artifact with x64 if: matrix.configuration == 'Release' && matrix.platform == 'x64' - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: XEngine_MQServiceApp-Windows_x86_64 path: XEngine_Release/ retention-days: 1 - name: Upload folder as artifact with Arm64 if: matrix.configuration == 'Release' && matrix.platform == 'Arm64' - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: XEngine_MQServiceApp-Windows_Arm64 path: XEngine_Release/ diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index dfd1818..996e6aa 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -12,12 +12,12 @@ jobs: steps: # 检出代码并包含标签 - name: Checkout code - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: fetch-depth: 0 - name: Download ubuntu build - uses: dawidd6/action-download-artifact@v6 + uses: dawidd6/action-download-artifact@v21 with: workflow: Ubuntu_build.yml workflow_conclusion: success @@ -26,7 +26,7 @@ jobs: if_no_artifact_found: fail path: ./XRelease/ - name: Download fedora build - uses: dawidd6/action-download-artifact@v6 + uses: dawidd6/action-download-artifact@v21 with: workflow: fedora_build.yml workflow_conclusion: success @@ -35,7 +35,7 @@ jobs: if_no_artifact_found: fail path: ./XRelease/ - name: Download debian build - uses: dawidd6/action-download-artifact@v6 + uses: dawidd6/action-download-artifact@v21 with: workflow: debian_build.yml workflow_conclusion: success @@ -44,7 +44,7 @@ jobs: if_no_artifact_found: fail path: ./XRelease/ - name: Download Rockylinux - uses: dawidd6/action-download-artifact@v6 + uses: dawidd6/action-download-artifact@v21 with: workflow: Rocky_build.yml workflow_conclusion: success @@ -53,7 +53,7 @@ jobs: if_no_artifact_found: fail path: ./XRelease/ - name: Download CentOS - uses: dawidd6/action-download-artifact@v6 + uses: dawidd6/action-download-artifact@v21 with: workflow: Centos_build.yml workflow_conclusion: success @@ -62,7 +62,7 @@ jobs: if_no_artifact_found: fail path: ./XRelease/ - name: Download Alma - uses: dawidd6/action-download-artifact@v6 + uses: dawidd6/action-download-artifact@v21 with: workflow: Alma_build.yml workflow_conclusion: success @@ -71,7 +71,7 @@ jobs: if_no_artifact_found: fail path: ./XRelease/ - name: Download macbuild - uses: dawidd6/action-download-artifact@v6 + uses: dawidd6/action-download-artifact@v21 with: workflow: macbuild.yml workflow_conclusion: success @@ -80,7 +80,7 @@ jobs: if_no_artifact_found: fail path: ./XRelease/ - name: Download msbuild - uses: dawidd6/action-download-artifact@v6 + uses: dawidd6/action-download-artifact@v21 with: workflow: msbuild.yml workflow_conclusion: success @@ -122,7 +122,7 @@ jobs: echo "$release_notes" > release_notes.txt - name: Release - uses: softprops/action-gh-release@v2 + uses: softprops/action-gh-release@v3 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: From 6e7d617317efb62b1d8a39d7e83345b53fbfa653 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Sat, 9 May 2026 10:35:12 +0800 Subject: [PATCH 04/25] ci update --- .github/workflows/auto-code.md | 4 ++-- .github/workflows/issue-triage.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/auto-code.md b/.github/workflows/auto-code.md index 84eb125..5a51003 100644 --- a/.github/workflows/auto-code.md +++ b/.github/workflows/auto-code.md @@ -83,6 +83,6 @@ safe-outputs: - 实现了哪些功能 - 涉及哪些文件改动 - 如何验证/测试 -6. 在原 Issue 下用中文回复,说明已提交 PR、实现思路和测试建议 +6. 在原 Issue 下用用户提问的语言进行回复,说明已提交 PR、实现思路和测试建议 -如果需求描述不清晰或实现风险过大,在 Issue 下用中文说明原因,不创建 PR。 \ No newline at end of file +如果需求描述不清晰或实现风险过大,在 Issue 下用用户提问的语言说明原因,不创建 PR。 \ No newline at end of file diff --git a/.github/workflows/issue-triage.md b/.github/workflows/issue-triage.md index 0b491b1..f384730 100644 --- a/.github/workflows/issue-triage.md +++ b/.github/workflows/issue-triage.md @@ -60,7 +60,7 @@ safe-outputs: - `duplicate`:与已有 Issue 重复 - `invalid`:信息不完整或无效 -3. 用中文回复一条友好的评论,包含: +3. 根据用户的提问语言按照用户语言回复一条友好的评论,包含: - 感谢用户提交 Issue - 说明你打的标签和原因 - 如果是 bug,请用户补充:复现步骤、环境信息、错误日志 From c3bbad6f20b1117abc0022c54574fa886bf7a9e3 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Sat, 9 May 2026 10:43:39 +0800 Subject: [PATCH 05/25] ci:delete codeql.yml --- .github/workflows/codeql.yml | 65 ------------------------------------ 1 file changed, 65 deletions(-) delete mode 100644 .github/workflows/codeql.yml diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml deleted file mode 100644 index 30a3ccf..0000000 --- a/.github/workflows/codeql.yml +++ /dev/null @@ -1,65 +0,0 @@ -name: CodeQL Advanced - -on: - push: - branches: - - 'develop' - paths: - - 'XEngine_Source/**' - - 'XEngine_Release/**' - - '.github/**' - -jobs: - analyze: - runs-on: ubuntu-24.04 - permissions: - security-events: write - packages: read - actions: read - contents: read - - strategy: - fail-fast: false - matrix: - include: - - language: c-cpp - steps: - - name: Checkout repository - uses: actions/checkout@v4 - with: - ref: 'develop' - - - name: Checkout dependency repository (xengine) - uses: actions/checkout@v4 - with: - repository: libxengine/libxengine - path: libxengine - - - name: sub module checkout (opensource) - run: | - git submodule init - git submodule update - - - name: Set TERM variable - run: echo "TERM=xterm" >> $GITHUB_ENV - - - name: Set up Dependency Environment - run: | - cd libxengine - chmod +x ./XEngine_LINEnv.sh - sudo ./XEngine_LINEnv.sh -i 3 - - - name: Initialize CodeQL - uses: github/codeql-action/init@v3 - with: - languages: ${{ matrix.language }} - - - name: make - run: | - cd XEngine_Source - make - - - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v3 - with: - category: "/language:${{ matrix.language }}" From f6c93ec3e74654f35dffdb189c96f601cc4d6a81 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Sat, 9 May 2026 10:47:12 +0800 Subject: [PATCH 06/25] update:make file --- XEngine_Source/Makefile | 16 ++++++++++++++-- .../XEngine_MQServiceApp/MQService_Net.cpp | 1 + 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/XEngine_Source/Makefile b/XEngine_Source/Makefile index 1d9a4bd..697a235 100644 --- a/XEngine_Source/Makefile +++ b/XEngine_Source/Makefile @@ -1,6 +1,7 @@ RELEASE = 0 UNICODE = 0 PLATFORM=linux +BUILDTYPE=0 FLAGS= #要编译的模块 BASE_THIRDPART_JSONCPP = ./XEngine_DependLibrary/XEngine_Module/jsoncpp @@ -24,10 +25,21 @@ else ifeq ($(PLATFORM),mac) FILEEXT = dylib endif -XENGINE_MODULES = libjsoncpp.so libXEngine_InfoReport.so libXEngine_Token.so libXEngine_Verification.so libXEngine_MSGNotify.so \ - libMQCore_ConfigModule.so libMQCore_ProtocolModule.so libMQCore_SessionModule.so libMQCore_MemoryCache.so libMQCore_DBModule.so libMQCore_HelpModule.so \ +# 第三方库模块 +MODULES_THIRD = libjsoncpp.so libXEngine_InfoReport.so libXEngine_Token.so libXEngine_Verification.so libXEngine_MSGNotify.so +# 业务模块 + 应用 +MODULES_APP = libMQCore_ConfigModule.so libMQCore_ProtocolModule.so libMQCore_SessionModule.so libMQCore_MemoryCache.so libMQCore_DBModule.so libMQCore_HelpModule.so \ XEngine_MQServiceApp.exe +# 根据 BUILDTYPE 决定编译目标 +ifeq ($(BUILDTYPE),0) + XENGINE_MODULES = $(MODULES_THIRD) $(MODULES_APP) +else ifeq ($(BUILDTYPE),1) + XENGINE_MODULES = $(MODULES_THIRD) +else ifeq ($(BUILDTYPE),2) + XENGINE_MODULES = $(MODULES_APP) +endif + .PHONY:MakeAll MakeAll:$(XENGINE_MODULES) diff --git a/XEngine_Source/XEngine_MQServiceApp/MQService_Net.cpp b/XEngine_Source/XEngine_MQServiceApp/MQService_Net.cpp index ce409db..312bbab 100644 --- a/XEngine_Source/XEngine_MQServiceApp/MQService_Net.cpp +++ b/XEngine_Source/XEngine_MQServiceApp/MQService_Net.cpp @@ -23,6 +23,7 @@ void XCALLBACK MessageQueue_Callback_TCPLeave(LPCXSTR lpszClientAddr, XSOCKET hS bool XCALLBACK MessageQueue_Callback_MQTTLogin(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam) { MQTTProtocol_Parse_Insert(lpszClientAddr); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("MQTT客户端:%s 链接到服务器"), lpszClientAddr); return true; } void XCALLBACK MessageQueue_Callback_MQTTRecv(LPCXSTR lpszClientAddr, XSOCKET hSocket, LPCXSTR lpszRecvMsg, int nMsgLen, XPVOID lParam) From e3b71c414d790b510c03255b28521850bb642026 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Sat, 9 May 2026 10:48:01 +0800 Subject: [PATCH 07/25] Update issue templates --- .github/ISSUE_TEMPLATE/custom.md | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/custom.md diff --git a/.github/ISSUE_TEMPLATE/custom.md b/.github/ISSUE_TEMPLATE/custom.md new file mode 100644 index 0000000..48d5f81 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/custom.md @@ -0,0 +1,10 @@ +--- +name: Custom issue template +about: Describe this issue template's purpose here. +title: '' +labels: '' +assignees: '' + +--- + + From ffdbb99b88e8b99b2c7c0de660ed75b6afd96412 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Sat, 9 May 2026 10:59:35 +0800 Subject: [PATCH 08/25] Update CodeQL workflow for improved analysis --- .github/workflows/codeql.yml | 71 ++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 .github/workflows/codeql.yml diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml new file mode 100644 index 0000000..98088d5 --- /dev/null +++ b/.github/workflows/codeql.yml @@ -0,0 +1,71 @@ +name: CodeQL Advanced + +on: + push: + branches: + - 'develop' + paths: + - 'XEngine_Source/**' + - 'XEngine_Release/**' + - '.github/**' + +jobs: + analyze: + runs-on: ubuntu-latest + permissions: + security-events: write + packages: read + actions: read + contents: read + + strategy: + fail-fast: false + matrix: + include: + - language: c-cpp + build-mode: manual + steps: + - name: Checkout repository + uses: actions/checkout@v6 + + - name: Checkout dependency repository (xengine) + uses: actions/checkout@v6 + with: + repository: libxengine/libxengine + path: libxengine + + - name: sub module checkout (opensource) + run: | + git submodule init + git submodule update + + - name: Set TERM variable + run: echo "TERM=xterm" >> $GITHUB_ENV + + - name: Set up Dependency Environment + run: | + cd libxengine + chmod +x ./XEngine_LINEnv.sh + sudo ./XEngine_LINEnv.sh -i 3 + + - name: make pre + run: | + cd XEngine_Source + make BUILDTYPE=1 + + - name: Initialize CodeQL + uses: github/codeql-action/init@v4 + with: + languages: ${{ matrix.language }} + build-mode: manual + queries: security-and-quality + + - name: make check + run: | + cd XEngine_Source + make BUILDTYPE=2 + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v4 + with: + category: "/language:${{ matrix.language }}" From a3f4d10c51c3607cd527c8132621ffa46899f1ac Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Sat, 9 May 2026 11:02:26 +0800 Subject: [PATCH 09/25] update:depend library --- XEngine_Source/XEngine_DependLibrary | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/XEngine_Source/XEngine_DependLibrary b/XEngine_Source/XEngine_DependLibrary index adf48e2..e388b23 160000 --- a/XEngine_Source/XEngine_DependLibrary +++ b/XEngine_Source/XEngine_DependLibrary @@ -1 +1 @@ -Subproject commit adf48e22d68f741ec52f299945f8f8f8fb3df9d2 +Subproject commit e388b2353f5530dd9dfde647a0c7b9a6c3666163 From 8851e5d7984c4e08a17f9dcae5b368d0ff7dc45a Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Sat, 9 May 2026 11:29:49 +0800 Subject: [PATCH 10/25] added:mint build support and codeql to pr --- .github/workflows/Mintbuild.yml | 73 ++++++++++ .github/workflows/codeql-to-commit.yml | 194 +++++++++++++++++++++++++ .github/workflows/release.yml | 9 ++ 3 files changed, 276 insertions(+) create mode 100644 .github/workflows/Mintbuild.yml create mode 100644 .github/workflows/codeql-to-commit.yml diff --git a/.github/workflows/Mintbuild.yml b/.github/workflows/Mintbuild.yml new file mode 100644 index 0000000..80b24f6 --- /dev/null +++ b/.github/workflows/Mintbuild.yml @@ -0,0 +1,73 @@ +name: MintLinux build workflows + +on: + push: + branches: + - 'develop' + paths: + - 'XEngine_Source/**' + - 'XEngine_Release/**' + - '.github/**' + +permissions: + contents: read + +jobs: + build: + runs-on: ${{ matrix.runner }} + container: + image: ${{ matrix.name }} + options: --platform ${{ matrix.platform }} + strategy: + matrix: + include: + - arch: amd64 + runner: ubuntu-24.04 + platform: linux/amd64 + artifact: x86-64 + name: linuxmintd/mint22-amd64 + version: 22 + + steps: + - name: Checkout main repository code + uses: actions/checkout@v6 + + - name: Checkout dependency repository (xengine) + uses: actions/checkout@v6 + with: + repository: libxengine/libxengine + path: libxengine + + - name: sub module checkout (opensource) + uses: actions/checkout@v6 + with: + repository: libxengine/XEngine_OPenSource + path: XEngine_Source/XEngine_DependLibrary + + - name: Set TERM variable + run: echo "TERM=xterm" >> $GITHUB_ENV + + - name: Set up Dependency ubuntu24.04 Environment + run: | + cd libxengine + chmod 777 * + sudo ./XEngine_LINEnv.sh -i 3 + + - name: make + run: | + cd XEngine_Source + make RELEASE=1 + make FLAGS=InstallAll + make FLAGS=CleanAll + cd .. + - name: test + run: | + cd XEngine_Release + ./XEngine_MQServiceApp -t + + - name: Upload folder as artifact + uses: actions/upload-artifact@v7 + with: + name: XEngine_MQServiceApp-MintLinux_${{ matrix.version }}_x86-64 + path: XEngine_Release/ + retention-days: 1 \ No newline at end of file diff --git a/.github/workflows/codeql-to-commit.yml b/.github/workflows/codeql-to-commit.yml new file mode 100644 index 0000000..d297c94 --- /dev/null +++ b/.github/workflows/codeql-to-commit.yml @@ -0,0 +1,194 @@ +name: Auto Copilot Autofix (High & Medium Only) + +on: + workflow_dispatch: + workflow_run: + workflows: ["CodeQL Advanced"] + types: [completed] + +jobs: + auto-fix: + runs-on: ubuntu-latest + if: ${{ github.event_name == 'workflow_dispatch' || github.event.workflow_run.conclusion == 'success' }} + permissions: + security-events: read + contents: write + pull-requests: write + + steps: + - name: Trigger Autofix for High & Medium alerts + env: + GH_TOKEN: ${{ secrets.AUTOFIX_TOKEN }} + OWNER: ${{ github.repository_owner }} + REPO: ${{ github.event.repository.name }} + run: | + set +e + DEFAULT_BRANCH=$(gh api /repos/$OWNER/$REPO --jq '.default_branch') + echo "Default branch: $DEFAULT_BRANCH" + + ALERTS=$(gh api "/repos/$OWNER/$REPO/code-scanning/alerts?state=open&per_page=100" \ + --jq '[.[] | select(.rule.security_severity_level == "high" or .rule.security_severity_level == "medium" or .rule.severity == "warning") | {number: .number, level: (.rule.security_severity_level // .rule.severity)}]') + + COUNT=$(echo $ALERTS | jq 'length') + echo "Found $COUNT alerts with high / medium / warning" + echo "$ALERTS" | jq -r '.[] | " Alert #\(.number) [\(.level)]"' + + if [ "$COUNT" -eq 0 ]; then + echo "No alerts to process, exiting." + exit 0 + fi + + for ROW in $(echo $ALERTS | jq -r '.[] | @base64'); do + _jq() { echo "$ROW" | base64 -d | jq -r "$1"; } + + NUMBER=$(_jq '.number') + SEC_LEVEL=$(_jq '.level') + BRANCH="autofix/${SEC_LEVEL}/alert-${NUMBER}" + + echo "--- Alert #$NUMBER [$SEC_LEVEL] ---" + + # 检查是否已有 autofix + EXISTING=$(gh api \ + /repos/$OWNER/$REPO/code-scanning/alerts/$NUMBER/autofix \ + --jq '.status' 2>/dev/null || echo "none") + + if [ "$EXISTING" = "success" ]; then + echo "✅ Fix already exists" + else + echo "⏳ Generating fix..." + gh api -X POST \ + /repos/$OWNER/$REPO/code-scanning/alerts/$NUMBER/autofix || { + echo "⚠️ Failed to trigger autofix for #$NUMBER, skipping" + continue + } + + for i in 1 2 3; do + sleep 30 + EXISTING=$(gh api \ + /repos/$OWNER/$REPO/code-scanning/alerts/$NUMBER/autofix \ + --jq '.status' 2>/dev/null || echo "none") + echo " Attempt $i: status = $EXISTING" + [ "$EXISTING" = "success" ] && break + done + fi + + if [ "$EXISTING" != "success" ]; then + echo "⚠️ Autofix not available for alert #$NUMBER (status: $EXISTING), skipping" + continue + fi + + # 检查分支是否已存在 + BRANCH_STATUS=$(gh api \ + /repos/$OWNER/$REPO/git/refs/heads/$BRANCH \ + --silent 2>/dev/null && echo "exists" || echo "not_found") + echo "DEBUG branch status: $BRANCH_STATUS" + + if [ "$BRANCH_STATUS" = "not_found" ]; then + # 创建分支 + SHA=$(gh api /repos/$OWNER/$REPO/git/refs/heads/$DEFAULT_BRANCH \ + --jq '.object.sha') + + gh api -X POST /repos/$OWNER/$REPO/git/refs \ + -f ref="refs/heads/$BRANCH" \ + -f sha="$SHA" 2>/dev/null || true + echo "🌿 Created branch: $BRANCH" + + # 提交 fix + COMMIT_RESULT=$(gh api -X POST \ + /repos/$OWNER/$REPO/code-scanning/alerts/$NUMBER/autofix/commits \ + -f target_ref="$BRANCH" 2>&1) + echo "DEBUG commit result: $COMMIT_RESULT" + + if echo "$COMMIT_RESULT" | grep -q "target_ref"; then + echo "✅ Committed fix to branch: $BRANCH" + else + echo "⚠️ No code changes generated, deleting branch and skipping" + gh api -X DELETE \ + /repos/$OWNER/$REPO/git/refs/heads/$BRANCH 2>/dev/null || true + continue + fi + else + # 分支已存在,检查是否已有 open PR + EXISTING_PR=$(gh pr list \ + --repo "$OWNER/$REPO" \ + --head "$BRANCH" \ + --state open \ + --json number \ + --jq '.[0].number // empty') + + if [ -n "$EXISTING_PR" ]; then + echo "⏭️ PR #$EXISTING_PR already exists, skipping" + continue + fi + + echo "🌿 Branch exists, creating PR with existing branch" + fi + + # 获取 alert 详情 + ALERT_INFO=$(gh api \ + /repos/$OWNER/$REPO/code-scanning/alerts/$NUMBER) + + ALERT_TITLE=$(echo $ALERT_INFO | jq -r '.rule.description') + ALERT_HELP=$(echo $ALERT_INFO | jq -r '.rule.help // "暂无详细说明"' | head -c 800) + ALERT_TAGS=$(echo $ALERT_INFO | jq -r '.rule.tags // [] | join(", ")') + ALERT_FILE=$(echo $ALERT_INFO | jq -r '.most_recent_instance.location.path // "未知文件"') + ALERT_LINE=$(echo $ALERT_INFO | jq -r '.most_recent_instance.location.start_line // "未知行"') + ALERT_URL=$(echo $ALERT_INFO | jq -r '.html_url') + CWE_TAGS=$(echo $ALERT_INFO | jq -r '[.rule.tags[] | select(startswith("external/cwe/"))] | join(", ")') + + AUTOFIX_DESC=$(gh api \ + /repos/$OWNER/$REPO/code-scanning/alerts/$NUMBER/autofix \ + --jq '.description // "暂无 AI 修复说明"') + + # 创建 Draft PR + gh pr create \ + --repo "$OWNER/$REPO" \ + --base "$DEFAULT_BRANCH" \ + --head "$BRANCH" \ + --draft \ + --title "[Autofix][$SEC_LEVEL] Alert #$NUMBER: $ALERT_TITLE" \ + --body "## 🤖 Copilot Autofix 自动修复报告 + + --- + + ### 📋 基本信息 + + | 字段 | 内容 | + |------|------| + | **Alert ID** | [#$NUMBER]($ALERT_URL) | + | **安全级别** | $SEC_LEVEL | + | **规则名称** | $ALERT_TITLE | + | **问题文件** | \`$ALERT_FILE\` 第 $ALERT_LINE 行 | + | **CWE 分类** | $CWE_TAGS | + | **规则标签** | $ALERT_TAGS | + + --- + + ### 🔍 问题说明 + + $ALERT_HELP + + --- + + ### 🤖 AI 修复思路 + + $AUTOFIX_DESC + + --- + + ### ✅ Review 检查清单 + + - [ ] 理解了漏洞的成因和影响范围 + - [ ] 确认 AI 修复逻辑正确,没有遗漏边界情况 + - [ ] 确认修复没有改变原有业务逻辑 + - [ ] 确认没有引入新的安全问题 + - [ ] CI / 单元测试全部通过 + - [ ] 如有必要,已补充对应的测试用例 + + --- + + > 此 PR 由 GitHub Copilot Autofix 自动生成,请仔细审核后再 merge。" && \ + echo "🎉 PR created for alert #$NUMBER" || \ + echo "❌ Failed to create PR for alert #$NUMBER" + + done diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 996e6aa..ff73ab2 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -25,6 +25,15 @@ jobs: skip_unpack: true if_no_artifact_found: fail path: ./XRelease/ + - name: Download Mint build + uses: dawidd6/action-download-artifact@v21 + with: + workflow: Mintbuild.yml + workflow_conclusion: success + check_artifacts: false + skip_unpack: true + if_no_artifact_found: fail + path: ./XRelease/ - name: Download fedora build uses: dawidd6/action-download-artifact@v21 with: From 5073e412856c426dd5a0409d91208b6432486c72 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Sat, 9 May 2026 03:33:20 +0000 Subject: [PATCH 11/25] Potential fix for code scanning alert no. 43 Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com> --- .../ProtocolModule_Parse/ProtocolModule_Parse.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/XEngine_Source/MQCore_ProtocolModule/ProtocolModule_Parse/ProtocolModule_Parse.cpp b/XEngine_Source/MQCore_ProtocolModule/ProtocolModule_Parse/ProtocolModule_Parse.cpp index 48993cb..49ef3c1 100644 --- a/XEngine_Source/MQCore_ProtocolModule/ProtocolModule_Parse/ProtocolModule_Parse.cpp +++ b/XEngine_Source/MQCore_ProtocolModule/ProtocolModule_Parse/ProtocolModule_Parse.cpp @@ -55,14 +55,18 @@ CProtocolModule_Parse::~CProtocolModule_Parse() *********************************************************************/ bool CProtocolModule_Parse::ProtocolModule_Parse_Websocket(LPCXSTR lpszMsgBuffer, int nMsgLen, XENGINE_PROTOCOLHDR* pSt_ProtocolHdr, XCHAR* ptszMsgBuffer, int* pInt_MsgLen) { + // 初始化错误状态;本函数任何失败路径都会设置统一错误码后返回 false。 Protocol_IsErrorOccur = false; + // 基础参数校验:输入缓冲区必须有效。 if (NULL == lpszMsgBuffer) { Protocol_IsErrorOccur = true; Protocol_dwErrorCode = ERROR_MQ_MODULE_PROTOCOL_PARAMENT; return false; } + + // 第一步:将 WebSocket 文本消息解析为 JSON 根对象。 Json::Value st_JsonRoot; JSONCPP_STRING st_JsonError; Json::CharReaderBuilder st_ReaderBuilder; @@ -75,6 +79,8 @@ bool CProtocolModule_Parse::ProtocolModule_Parse_Websocket(LPCXSTR lpszMsgBuffer return false; } + // 第二步:提取公共协议头字段(按字段是否存在进行兼容性读取)。 + // pSt_ProtocolHdr 允许为空;为空时只执行消息体解析流程。 if (NULL != pSt_ProtocolHdr) { if (!st_JsonRoot["unOperatorType"].isNull()) @@ -103,6 +109,7 @@ bool CProtocolModule_Parse::ProtocolModule_Parse_Websocket(LPCXSTR lpszMsgBuffer } } + // 第三步:初始化消息体解析上下文,后续根据操作类型解析具体业务字段。 int nPos = 0; *pInt_MsgLen = 0; XENGINE_PROTOCOL_XMQ st_MQProtocol; From b7b316830b11154947d42bd90d0874b3d4516d87 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Sat, 9 May 2026 03:33:55 +0000 Subject: [PATCH 12/25] Potential fix for code scanning alert no. 42 Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com> --- .../MQCore_DBModule/DBModule_MQData/DBModule_MQData.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/XEngine_Source/MQCore_DBModule/DBModule_MQData/DBModule_MQData.cpp b/XEngine_Source/MQCore_DBModule/DBModule_MQData/DBModule_MQData.cpp index f44c265..2ab7b05 100644 --- a/XEngine_Source/MQCore_DBModule/DBModule_MQData/DBModule_MQData.cpp +++ b/XEngine_Source/MQCore_DBModule/DBModule_MQData/DBModule_MQData.cpp @@ -196,11 +196,18 @@ bool CDBModule_MQData::DBModule_MQData_Delete(XENGINE_DBMESSAGEQUEUE* pSt_DBInfo 类型:逻辑型 意思:是否成功 备注: + 查询流程说明: + 1) 参数校验:输入结构必须有效,否则设置统一错误码并返回失败; + 2) 缓存优先:当启用查询缓存时先查内存,命中则直接返回成功; + 3) 数据库查询:缓存未命中后拼接并执行 SQL,从结果集中填充输出结构; + 4) 缓存回填:数据库查询成功后,将结果写回缓存以加速后续查询; + 5) 错误语义:任一阶段失败均通过 DBModule_IsErrorOccur/DBModule_dwErrorCode 上报。 *********************************************************************/ bool CDBModule_MQData::DBModule_MQData_Query(XENGINE_DBMESSAGEQUEUE* pSt_DBInfo) { DBModule_IsErrorOccur = false; + // [阶段1] 输入参数校验:查询条件与输出承载结构均依赖 pSt_DBInfo。 if (NULL == pSt_DBInfo) { DBModule_IsErrorOccur = true; @@ -208,6 +215,7 @@ bool CDBModule_MQData::DBModule_MQData_Query(XENGINE_DBMESSAGEQUEUE* pSt_DBInfo) return false; } + // [阶段2] 查询缓存优先:命中则直接返回,避免访问数据库。 if (m_bMemoryQuery) { if (MemoryCache_DBData_DataQuery(pSt_DBInfo)) @@ -215,6 +223,7 @@ bool CDBModule_MQData::DBModule_MQData_Query(XENGINE_DBMESSAGEQUEUE* pSt_DBInfo) return true; } } + // [阶段3] 缓存未命中,执行数据库查询。 //查询 XNETHANDLE xhTable = 0; __int64u nllLine = 0; From a7210e73b3ae621dad740ca1f29813b35c2b4540 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Sat, 9 May 2026 03:34:31 +0000 Subject: [PATCH 13/25] Potential fix for code scanning alert no. 41 Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com> --- .../Config_Json/Config_Json.cpp | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/XEngine_Source/MQCore_ConfigModule/Config_Json/Config_Json.cpp b/XEngine_Source/MQCore_ConfigModule/Config_Json/Config_Json.cpp index b5111bc..f65fd89 100644 --- a/XEngine_Source/MQCore_ConfigModule/Config_Json/Config_Json.cpp +++ b/XEngine_Source/MQCore_ConfigModule/Config_Json/Config_Json.cpp @@ -22,10 +22,28 @@ CConfig_Json::~CConfig_Json() ////////////////////////////////////////////////////////////////////////// // 公用函数 ////////////////////////////////////////////////////////////////////////// +// 函数名称: Config_Json_File +// 功能说明: +// 读取指定 JSON 配置文件,并将结果填充到 XENGINE_SERVERCONFIG 结构体中。 +// 函数按“参数校验 -> 文件读取 -> JSON 解析 -> 字段映射”流程执行。 +// +// 参数: +// lpszConfigFile [in] 配置文件路径 +// pSt_ServerConfig [out] 配置输出结构体,不能为空 +// +// 返回值: +// true : 读取并解析成功 +// false : 失败(同时设置 Config_IsErrorOccur / Config_dwErrorCode) +// +// 错误处理: +// - 参数或文件打开失败: ERROR_MQ_MODULE_CONFIG_JSON_PARAMENT +// - JSON 解析失败 : ERROR_MQ_MODULE_CONFIG_JSON_PARSE bool CConfig_Json::Config_Json_File(LPCXSTR lpszConfigFile,XENGINE_SERVERCONFIG *pSt_ServerConfig) { + // 初始化错误状态,默认本次调用无错误 Config_IsErrorOccur = false; + // 1) 参数有效性校验 if ((NULL == lpszConfigFile) || (NULL == pSt_ServerConfig)) { Config_IsErrorOccur = true; @@ -36,6 +54,7 @@ bool CConfig_Json::Config_Json_File(LPCXSTR lpszConfigFile,XENGINE_SERVERCONFIG Json::Value st_JsonRoot; Json::CharReaderBuilder st_JsonBuilder; + // 2) 打开并读取配置文件内容 FILE* pSt_File = _xtfopen(lpszConfigFile, _X("rb")); if (NULL == pSt_File) { @@ -47,6 +66,7 @@ bool CConfig_Json::Config_Json_File(LPCXSTR lpszConfigFile,XENGINE_SERVERCONFIG size_t nSize = fread(tszMsgBuffer, 1, sizeof(tszMsgBuffer), pSt_File); fclose(pSt_File); + // 3) 解析 JSON 文本 std::unique_ptr const pSt_JsonReader(st_JsonBuilder.newCharReader()); if (!pSt_JsonReader->parse(tszMsgBuffer, tszMsgBuffer + nSize, &st_JsonRoot, &st_JsonError)) { @@ -54,6 +74,7 @@ bool CConfig_Json::Config_Json_File(LPCXSTR lpszConfigFile,XENGINE_SERVERCONFIG Config_dwErrorCode = ERROR_MQ_MODULE_CONFIG_JSON_PARSE; return false; } + // 4) 将 JSON 字段映射到配置结构体 _tcsxcpy(pSt_ServerConfig->tszIPAddr,st_JsonRoot["tszIPAddr"].asCString()); _tcsxcpy(pSt_ServerConfig->tszTopic, st_JsonRoot["tszTopic"].asCString()); pSt_ServerConfig->bDeamon = st_JsonRoot["bDeamon"].asInt(); From 25db5ea6832632ccda72459654a720b52054f058 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Mon, 6 Jul 2026 15:33:56 +0800 Subject: [PATCH 14/25] update:vs to 2026 --- XEngine_Source/MQCore_ConfigModule/MQCore_ConfigModule.vcxproj | 2 +- XEngine_Source/MQCore_DBModule/MQCore_DBModule.vcxproj | 2 +- XEngine_Source/MQCore_HelpModule/MQCore_HelpModule.vcxproj | 2 +- XEngine_Source/MQCore_MemoryCache/MQCore_MemoryCache.vcxproj | 2 +- .../MQCore_ProtocolModule/MQCore_ProtocolModule.vcxproj | 2 +- .../MQCore_SessionModule/MQCore_SessionModule.vcxproj | 2 +- XEngine_Source/XEngine_DependLibrary | 2 +- .../XEngine_MQServiceApp/XEngine_MQServiceApp.vcxproj | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/XEngine_Source/MQCore_ConfigModule/MQCore_ConfigModule.vcxproj b/XEngine_Source/MQCore_ConfigModule/MQCore_ConfigModule.vcxproj index 6bc93e2..c5d011a 100644 --- a/XEngine_Source/MQCore_ConfigModule/MQCore_ConfigModule.vcxproj +++ b/XEngine_Source/MQCore_ConfigModule/MQCore_ConfigModule.vcxproj @@ -37,7 +37,7 @@ DynamicLibrary true - v143 + v145 Unicode diff --git a/XEngine_Source/MQCore_DBModule/MQCore_DBModule.vcxproj b/XEngine_Source/MQCore_DBModule/MQCore_DBModule.vcxproj index 48bf97f..291e008 100644 --- a/XEngine_Source/MQCore_DBModule/MQCore_DBModule.vcxproj +++ b/XEngine_Source/MQCore_DBModule/MQCore_DBModule.vcxproj @@ -37,7 +37,7 @@ DynamicLibrary true - v143 + v145 Unicode diff --git a/XEngine_Source/MQCore_HelpModule/MQCore_HelpModule.vcxproj b/XEngine_Source/MQCore_HelpModule/MQCore_HelpModule.vcxproj index b3a8417..826fef1 100644 --- a/XEngine_Source/MQCore_HelpModule/MQCore_HelpModule.vcxproj +++ b/XEngine_Source/MQCore_HelpModule/MQCore_HelpModule.vcxproj @@ -37,7 +37,7 @@ DynamicLibrary true - v143 + v145 Unicode diff --git a/XEngine_Source/MQCore_MemoryCache/MQCore_MemoryCache.vcxproj b/XEngine_Source/MQCore_MemoryCache/MQCore_MemoryCache.vcxproj index cb25f8b..ec65175 100644 --- a/XEngine_Source/MQCore_MemoryCache/MQCore_MemoryCache.vcxproj +++ b/XEngine_Source/MQCore_MemoryCache/MQCore_MemoryCache.vcxproj @@ -37,7 +37,7 @@ DynamicLibrary true - v143 + v145 Unicode diff --git a/XEngine_Source/MQCore_ProtocolModule/MQCore_ProtocolModule.vcxproj b/XEngine_Source/MQCore_ProtocolModule/MQCore_ProtocolModule.vcxproj index 39d5e37..4d37441 100644 --- a/XEngine_Source/MQCore_ProtocolModule/MQCore_ProtocolModule.vcxproj +++ b/XEngine_Source/MQCore_ProtocolModule/MQCore_ProtocolModule.vcxproj @@ -37,7 +37,7 @@ DynamicLibrary true - v143 + v145 Unicode diff --git a/XEngine_Source/MQCore_SessionModule/MQCore_SessionModule.vcxproj b/XEngine_Source/MQCore_SessionModule/MQCore_SessionModule.vcxproj index 7bd7aa5..18aadc9 100644 --- a/XEngine_Source/MQCore_SessionModule/MQCore_SessionModule.vcxproj +++ b/XEngine_Source/MQCore_SessionModule/MQCore_SessionModule.vcxproj @@ -37,7 +37,7 @@ DynamicLibrary true - v143 + v145 Unicode diff --git a/XEngine_Source/XEngine_DependLibrary b/XEngine_Source/XEngine_DependLibrary index e388b23..237be58 160000 --- a/XEngine_Source/XEngine_DependLibrary +++ b/XEngine_Source/XEngine_DependLibrary @@ -1 +1 @@ -Subproject commit e388b2353f5530dd9dfde647a0c7b9a6c3666163 +Subproject commit 237be589ec33bba0bf3405c095db470c1d3766b3 diff --git a/XEngine_Source/XEngine_MQServiceApp/XEngine_MQServiceApp.vcxproj b/XEngine_Source/XEngine_MQServiceApp/XEngine_MQServiceApp.vcxproj index 63e0c4d..7950519 100644 --- a/XEngine_Source/XEngine_MQServiceApp/XEngine_MQServiceApp.vcxproj +++ b/XEngine_Source/XEngine_MQServiceApp/XEngine_MQServiceApp.vcxproj @@ -37,7 +37,7 @@ Application true - v143 + v145 Unicode From 922b05aee0272d0fa587ad14c17499047b8f73f7 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Mon, 6 Jul 2026 15:37:25 +0800 Subject: [PATCH 15/25] feat: add agentic workflows for issue triage and auto fix --- .github/workflows/agentics-maintenance.yml | 607 +++++++++++++++++++++ .github/workflows/auto-code.lock.yml | 334 ++++++++---- .github/workflows/auto-code.md | 61 ++- .github/workflows/issue-triage.lock.yml | 306 ++++++++--- .github/workflows/issue-triage.md | 18 +- 5 files changed, 1123 insertions(+), 203 deletions(-) create mode 100644 .github/workflows/agentics-maintenance.yml diff --git a/.github/workflows/agentics-maintenance.yml b/.github/workflows/agentics-maintenance.yml new file mode 100644 index 0000000..6bd015f --- /dev/null +++ b/.github/workflows/agentics-maintenance.yml @@ -0,0 +1,607 @@ +# ___ _ _ +# / _ \ | | (_) +# | |_| | __ _ ___ _ __ | |_ _ ___ +# | _ |/ _` |/ _ \ '_ \| __| |/ __| +# | | | | (_| | __/ | | | |_| | (__ +# \_| |_/\__, |\___|_| |_|\__|_|\___| +# __/ | +# _ _ |___/ +# | | | | / _| | +# | | | | ___ _ __ _ __| |_| | _____ ____ +# | |/\| |/ _ \ '__| |/ /| _| |/ _ \ \ /\ / / ___| +# \ /\ / (_) | | | | ( | | | | (_) \ V V /\__ \ +# \/ \/ \___/|_| |_|\_\|_| |_|\___/ \_/\_/ |___/ +# +# This file was automatically generated by pkg/workflow/maintenance_workflow.go (v0.79.6). DO NOT EDIT. +# +# 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/ +# +# Alternative regeneration methods: +# make recompile +# +# Or use the gh-aw CLI directly: +# ./gh-aw compile --validate --verbose +# +# The workflow is generated when any workflow uses the 'expires' field +# in create-discussions, create-issues, or create-pull-request safe-outputs configuration. +# Schedule frequency is automatically determined by the shortest expiration time. +# +name: Agentic Maintenance + +on: + schedule: + - cron: "37 0 * * *" # Daily (based on minimum expires: 30 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-entities: + 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 + issues: write + pull-requests: write + steps: + - name: Setup Scripts + uses: github/gh-aw-actions/setup@5c2fe865bb4dc46e1450f6ee0d0541d759aea73a # v0.79.6 + with: + destination: ${{ runner.temp }}/gh-aw/actions + + - name: Close expired discussions + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io, getOctokit); + const { main } = require('${{ runner.temp }}/gh-aw/actions/close_expired_discussions.cjs'); + await main(); + + - name: Close expired issues + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io, getOctokit); + const { main } = require('${{ runner.temp }}/gh-aw/actions/close_expired_issues.cjs'); + await main(); + + - name: Close expired pull requests + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io, getOctokit); + const { main } = require('${{ runner.temp }}/gh-aw/actions/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@5c2fe865bb4dc46e1450f6ee0d0541d759aea73a # v0.79.6 + with: + destination: ${{ runner.temp }}/gh-aw/actions + + - name: Cleanup outdated cache-memory entries + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io, getOctokit); + const { main } = require('${{ runner.temp }}/gh-aw/actions/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@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + with: + persist-credentials: false + + - name: Setup Scripts + uses: github/gh-aw-actions/setup@5c2fe865bb4dc46e1450f6ee0d0541d759aea73a # v0.79.6 + 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 { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io, getOctokit); + const { main } = require('${{ runner.temp }}/gh-aw/actions/check_team_member.cjs'); + await main(); + + - name: Install gh-aw + uses: github/gh-aw-actions/setup-cli@5c2fe865bb4dc46e1450f6ee0d0541d759aea73a # v0.79.6 + with: + version: v0.79.6 + + - 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 { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io, getOctokit); + const { main } = require('${{ runner.temp }}/gh-aw/actions/run_operation_update_upgrade.cjs'); + await main(); + + - name: Record outputs + id: record + run: echo "operation=${{ inputs.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@5c2fe865bb4dc46e1450f6ee0d0541d759aea73a # v0.79.6 + 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 { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io, getOctokit); + const { main } = require('${{ runner.temp }}/gh-aw/actions/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 { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io, getOctokit); + const { main } = require('${{ runner.temp }}/gh-aw/actions/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@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + with: + sparse-checkout: | + actions + persist-credentials: false + + - name: Setup Scripts + uses: github/gh-aw-actions/setup@5c2fe865bb4dc46e1450f6ee0d0541d759aea73a # v0.79.6 + 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 { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io, getOctokit); + const { main } = require('${{ runner.temp }}/gh-aw/actions/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 { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io, getOctokit); + const { main } = require('${{ runner.temp }}/gh-aw/actions/apply_safe_outputs_replay.cjs'); + await main(); + + - name: Record outputs + id: record + run: echo "run_url=${{ inputs.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@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + with: + persist-credentials: false + + - name: Setup Scripts + uses: github/gh-aw-actions/setup@5c2fe865bb4dc46e1450f6ee0d0541d759aea73a # v0.79.6 + 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 { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io, getOctokit); + const { main } = require('${{ runner.temp }}/gh-aw/actions/check_team_member.cjs'); + await main(); + + - name: Install gh-aw + uses: github/gh-aw-actions/setup-cli@5c2fe865bb4dc46e1450f6ee0d0541d759aea73a # v0.79.6 + with: + version: v0.79.6 + + - 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 { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io, getOctokit); + const { main } = require('${{ runner.temp }}/gh-aw/actions/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@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + with: + persist-credentials: false + + - name: Setup Scripts + uses: github/gh-aw-actions/setup@5c2fe865bb4dc46e1450f6ee0d0541d759aea73a # v0.79.6 + 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 { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io, getOctokit); + const { main } = require('${{ runner.temp }}/gh-aw/actions/check_team_member.cjs'); + await main(); + + - name: Install gh-aw + uses: github/gh-aw-actions/setup-cli@5c2fe865bb4dc46e1450f6ee0d0541d759aea73a # v0.79.6 + with: + version: v0.79.6 + + - name: Restore activity report logs cache + id: activity_report_logs_cache + uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 + 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 100 \ + --output ./.cache/gh-aw/activity-report-logs \ + --format markdown \ + > ./.cache/gh-aw/activity-report-logs/report.md + + - name: Save activity report logs cache + if: ${{ always() }} + uses: actions/cache/save@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 + 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@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + with: + persist-credentials: false + + - name: Setup Scripts + uses: github/gh-aw-actions/setup@5c2fe865bb4dc46e1450f6ee0d0541d759aea73a # v0.79.6 + 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 { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io, getOctokit); + const { main } = require('${{ runner.temp }}/gh-aw/actions/check_team_member.cjs'); + await main(); + + - name: Install gh-aw + uses: github/gh-aw-actions/setup-cli@5c2fe865bb4dc46e1450f6ee0d0541d759aea73a # v0.79.6 + with: + version: v0.79.6 + + - name: Restore forecast report logs cache + id: forecast_report_logs_cache + uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 + 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@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 + 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 { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io, getOctokit); + const { main } = require('${{ runner.temp }}/gh-aw/actions/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@5c2fe865bb4dc46e1450f6ee0d0541d759aea73a # v0.79.6 + 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 { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io, getOctokit); + const { main } = require('${{ runner.temp }}/gh-aw/actions/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 { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io, getOctokit); + const { main } = require('${{ runner.temp }}/gh-aw/actions/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@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + with: + persist-credentials: false + + - name: Setup Scripts + uses: github/gh-aw-actions/setup@5c2fe865bb4dc46e1450f6ee0d0541d759aea73a # v0.79.6 + 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 { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io, getOctokit); + const { main } = require('${{ runner.temp }}/gh-aw/actions/check_team_member.cjs'); + await main(); + + - name: Install gh-aw + uses: github/gh-aw-actions/setup-cli@5c2fe865bb4dc46e1450f6ee0d0541d759aea73a # v0.79.6 + with: + version: v0.79.6 + + - 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 { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io, getOctokit); + const { main } = require('${{ runner.temp }}/gh-aw/actions/run_validate_workflows.cjs'); + await main(); diff --git a/.github/workflows/auto-code.lock.yml b/.github/workflows/auto-code.lock.yml index 919efe7..2a10a78 100644 --- a/.github/workflows/auto-code.lock.yml +++ b/.github/workflows/auto-code.lock.yml @@ -1,5 +1,5 @@ -# gh-aw-metadata: {"schema_version":"v3","frontmatter_hash":"158e10df0b3421742ed672f7a5667899e0977be63eed6a6fa996ccb9de250211","compiler_version":"v0.71.5","agent_id":"copilot"} -# gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_TOKEN","GH_AW_CI_TRIGGER_TOKEN","GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GITHUB_TOKEN","OPENAI_API_KEY"],"actions":[{"repo":"actions/checkout","sha":"de0fac2e4500dabe0009e67214ff5f5447ce83dd","version":"v6.0.2"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"},{"repo":"github/gh-aw-actions/setup","sha":"b8068426813005612b960b5ab0b8bd2c27142323","version":"v0.71.5"}],"containers":[{"image":"ghcr.io/github/github-mcp-server:v1.0.3","digest":"sha256:2ac27ef03461ef2b877031b838a7d1fd7f12b12d4ace7796d8cad91446d55959","pinned_image":"ghcr.io/github/github-mcp-server:v1.0.3@sha256:2ac27ef03461ef2b877031b838a7d1fd7f12b12d4ace7796d8cad91446d55959"},{"image":"node:lts-alpine","digest":"sha256:d1b3b4da11eefd5941e7f0b9cf17783fc99d9c6fc34884a665f40a06dbdfc94f","pinned_image":"node:lts-alpine@sha256:d1b3b4da11eefd5941e7f0b9cf17783fc99d9c6fc34884a665f40a06dbdfc94f"}]} +# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"2db2d71c8e339e852eac5725e4d115b95a5f802b476179caca5c78d07e99d221","body_hash":"f4631eca0387739bc44c8ad08d5c0670c98c72198743c2ea9240d97915dca04e","compiler_version":"v0.79.6","agent_id":"copilot","engine_versions":{"copilot":"1.0.60"}} +# gh-aw-manifest: {"version":1,"secrets":["GH_AW_CI_TRIGGER_TOKEN","GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GITHUB_TOKEN","OPENAI_API_KEY"],"actions":[{"repo":"actions/checkout","sha":"df4cb1c069e1874edd31b4311f1884172cec0e10","version":"v6.0.3"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"},{"repo":"github/gh-aw-actions/setup","sha":"5c2fe865bb4dc46e1450f6ee0d0541d759aea73a","version":"v0.79.6"}],"containers":[{"image":"ghcr.io/github/github-mcp-server:v1.1.2","digest":"sha256:30197479d8036c7811892bc07e06f9a05c9ef3cdd79bc59f256d50647f95788c","pinned_image":"ghcr.io/github/github-mcp-server:v1.1.2@sha256:30197479d8036c7811892bc07e06f9a05c9ef3cdd79bc59f256d50647f95788c"}]} # ___ _ _ # / _ \ | | (_) # | |_| | __ _ ___ _ __ | |_ _ ___ @@ -14,7 +14,7 @@ # \ /\ / (_) | | | | ( | | | | (_) \ V V /\__ \ # \/ \/ \___/|_| |_|\_\|_| |_|\___/ \_/\_/ |___/ # -# This file was automatically generated by gh-aw (v0.71.5). DO NOT EDIT. +# This file was automatically generated by gh-aw (v0.79.6). DO NOT EDIT. # # To update this file, edit the corresponding .md file and run: # gh aw compile @@ -24,7 +24,6 @@ # # # Secrets used: -# - COPILOT_GITHUB_TOKEN # - GH_AW_CI_TRIGGER_TOKEN # - GH_AW_GITHUB_MCP_SERVER_TOKEN # - GH_AW_GITHUB_TOKEN @@ -32,18 +31,17 @@ # - OPENAI_API_KEY # # Custom actions used: -# - actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 +# - actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 # - actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 # - actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 # - actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 -# - github/gh-aw-actions/setup@b8068426813005612b960b5ab0b8bd2c27142323 # v0.71.5 +# - github/gh-aw-actions/setup@5c2fe865bb4dc46e1450f6ee0d0541d759aea73a # v0.79.6 # # Container images used: -# - ghcr.io/github/github-mcp-server:v1.0.3@sha256:2ac27ef03461ef2b877031b838a7d1fd7f12b12d4ace7796d8cad91446d55959 -# - node:lts-alpine@sha256:d1b3b4da11eefd5941e7f0b9cf17783fc99d9c6fc34884a665f40a06dbdfc94f +# - ghcr.io/github/github-mcp-server:v1.1.2@sha256:30197479d8036c7811892bc07e06f9a05c9ef3cdd79bc59f256d50647f95788c name: "自动处理 Issue" -"on": +on: issues: types: - labeled @@ -63,13 +61,20 @@ jobs: permissions: actions: read contents: read + env: + GH_AW_MAX_DAILY_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_DAILY_AI_CREDITS || '5000' }} outputs: body: ${{ steps.sanitized.outputs.body }} comment_id: "" comment_repo: "" + daily_effective_workflow_exceeded: ${{ steps.daily-effective-workflow-guardrail.outputs.daily_effective_workflow_exceeded == 'true' }} + daily_effective_workflow_threshold: ${{ steps.daily-effective-workflow-guardrail.outputs.daily_effective_workflow_threshold || '' }} + daily_effective_workflow_total_effective_tokens: ${{ steps.daily-effective-workflow-guardrail.outputs.daily_effective_workflow_total_effective_tokens || '' }} engine_id: ${{ steps.generate_aw_info.outputs.engine_id }} lockdown_check_failed: ${{ steps.generate_aw_info.outputs.lockdown_check_failed == 'true' }} model: ${{ steps.generate_aw_info.outputs.model }} + setup-parent-span-id: ${{ steps.setup.outputs.parent-span-id || steps.setup.outputs.span-id }} + setup-span-id: ${{ steps.setup.outputs.span-id }} setup-trace-id: ${{ steps.setup.outputs.trace-id }} stale_lock_file_failed: ${{ steps.check-lock-file.outputs.stale_lock_file_failed == 'true' }} text: ${{ steps.sanitized.outputs.text }} @@ -77,24 +82,27 @@ jobs: steps: - name: Setup Scripts id: setup - uses: github/gh-aw-actions/setup@b8068426813005612b960b5ab0b8bd2c27142323 # v0.71.5 + uses: github/gh-aw-actions/setup@5c2fe865bb4dc46e1450f6ee0d0541d759aea73a # v0.79.6 with: destination: ${{ runner.temp }}/gh-aw/actions job-name: ${{ github.job }} trace-id: ${{ needs.pre_activation.outputs.setup-trace-id }} + parent-span-id: ${{ needs.pre_activation.outputs.setup-parent-span-id || needs.pre_activation.outputs.setup-span-id }} + safe-output-artifact-client: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} env: GH_AW_SETUP_WORKFLOW_NAME: "自动处理 Issue" GH_AW_CURRENT_WORKFLOW_REF: ${{ github.repository }}/.github/workflows/auto-code.lock.yml@${{ github.ref }} - GH_AW_INFO_VERSION: "1.0.40" + GH_AW_INFO_VERSION: "1.0.60" + GH_AW_INFO_ENGINE_ID: "copilot" - name: Generate agentic run info id: generate_aw_info env: GH_AW_INFO_ENGINE_ID: "copilot" GH_AW_INFO_ENGINE_NAME: "GitHub Copilot CLI" - GH_AW_INFO_MODEL: ${{ vars.GH_AW_MODEL_AGENT_COPILOT || 'claude-sonnet-4.6' }} - GH_AW_INFO_VERSION: "1.0.40" - GH_AW_INFO_AGENT_VERSION: "1.0.40" - GH_AW_INFO_CLI_VERSION: "v0.71.5" + GH_AW_INFO_MODEL: ${{ vars.GH_AW_MODEL_AGENT_COPILOT || vars.GH_AW_DEFAULT_MODEL_COPILOT || 'claude-sonnet-4.6' }} + GH_AW_INFO_VERSION: "1.0.60" + GH_AW_INFO_AGENT_VERSION: "1.0.60" + GH_AW_INFO_CLI_VERSION: "v0.79.6" GH_AW_INFO_WORKFLOW_NAME: "自动处理 Issue" GH_AW_INFO_EXPERIMENTAL: "false" GH_AW_INFO_SUPPORTS_TOOLS_ALLOWLIST: "true" @@ -112,13 +120,32 @@ jobs: setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require('${{ runner.temp }}/gh-aw/actions/generate_aw_info.cjs'); await main(core, context); + - name: Check daily workflow token guardrail + id: daily-effective-workflow-guardrail + if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 + env: + GH_AW_WORKFLOW_NAME: "自动处理 Issue" + GH_AW_WORKFLOW_ID: "auto-code" + GH_AW_RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} + GH_AW_WORKFLOW_DISPATCH_AW_CONTEXT: ${{ github.event.inputs.aw_context || '' }} + GH_AW_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GH_AW_MAX_DAILY_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_DAILY_AI_CREDITS || '5000' }} + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io, getOctokit); + const { main } = require('${{ runner.temp }}/gh-aw/actions/check_daily_aic_workflow_guardrail.cjs'); + await main(); - name: Checkout .github and .agents folders - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 with: persist-credentials: false sparse-checkout: | .github .agents + .antigravity .claude .codex .crush @@ -129,8 +156,8 @@ jobs: fetch-depth: 1 - name: Save agent config folders for base branch restoration env: - GH_AW_AGENT_FOLDERS: ".agents .claude .codex .crush .gemini .github .opencode .pi" - GH_AW_AGENT_FILES: ".crush.json AGENTS.md CLAUDE.md GEMINI.md PI.md opencode.jsonc" + GH_AW_AGENT_FOLDERS: ".agents .antigravity .claude .codex .crush .gemini .github .opencode .pi" + GH_AW_AGENT_FILES: ".crush.json AGENTS.md ANTIGRAVITY.md CLAUDE.md GEMINI.md PI.md opencode.jsonc" # poutine:ignore untrusted_checkout_exec run: bash "${RUNNER_TEMP}/gh-aw/actions/save_base_github_folders.sh" - name: Check workflow lock file @@ -148,7 +175,7 @@ jobs: - name: Check compile-agentic version uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 env: - GH_AW_COMPILED_VERSION: "v0.71.5" + GH_AW_COMPILED_VERSION: "v0.79.6" with: script: | const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); @@ -170,11 +197,12 @@ jobs: env: GH_AW_PROMPT: /tmp/gh-aw/aw-prompts/prompt.txt GH_AW_SAFE_OUTPUTS: ${{ runner.temp }}/gh-aw/safeoutputs/outputs.jsonl + GH_AW_EXPR_1A3A194A: ${{ github.event.discussion.number || (fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_type == 'discussion' && fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_number) }} + GH_AW_EXPR_463A214A: ${{ github.event.pull_request.number || (fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_type == 'pull_request' && fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_number) }} + GH_AW_EXPR_802A9F6A: ${{ github.event.issue.number || (fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_type == 'issue' && fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_number) }} + GH_AW_EXPR_FF1D34CE: ${{ github.event.comment.id || fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').comment_id }} GH_AW_GITHUB_ACTOR: ${{ github.actor }} - GH_AW_GITHUB_EVENT_COMMENT_ID: ${{ github.event.comment.id }} - GH_AW_GITHUB_EVENT_DISCUSSION_NUMBER: ${{ github.event.discussion.number }} GH_AW_GITHUB_EVENT_ISSUE_NUMBER: ${{ github.event.issue.number }} - GH_AW_GITHUB_EVENT_PULL_REQUEST_NUMBER: ${{ github.event.pull_request.number }} GH_AW_GITHUB_REPOSITORY: ${{ github.repository }} GH_AW_GITHUB_RUN_ID: ${{ github.run_id }} GH_AW_GITHUB_WORKSPACE: ${{ github.workspace }} @@ -182,57 +210,57 @@ jobs: run: | bash "${RUNNER_TEMP}/gh-aw/actions/create_prompt_first.sh" { - cat << 'GH_AW_PROMPT_de410bcdbc8f0b37_EOF' + cat << 'GH_AW_PROMPT_791c723be483e095_EOF' - GH_AW_PROMPT_de410bcdbc8f0b37_EOF + GH_AW_PROMPT_791c723be483e095_EOF cat "${RUNNER_TEMP}/gh-aw/prompts/xpia.md" cat "${RUNNER_TEMP}/gh-aw/prompts/temp_folder_prompt.md" cat "${RUNNER_TEMP}/gh-aw/prompts/markdown.md" cat "${RUNNER_TEMP}/gh-aw/prompts/safe_outputs_prompt.md" - cat << 'GH_AW_PROMPT_de410bcdbc8f0b37_EOF' + cat << 'GH_AW_PROMPT_791c723be483e095_EOF' Tools: add_comment, create_pull_request, missing_tool, missing_data, noop - GH_AW_PROMPT_de410bcdbc8f0b37_EOF + GH_AW_PROMPT_791c723be483e095_EOF cat "${RUNNER_TEMP}/gh-aw/prompts/safe_outputs_create_pull_request.md" - cat << 'GH_AW_PROMPT_de410bcdbc8f0b37_EOF' + cat << 'GH_AW_PROMPT_791c723be483e095_EOF' - GH_AW_PROMPT_de410bcdbc8f0b37_EOF + GH_AW_PROMPT_791c723be483e095_EOF cat "${RUNNER_TEMP}/gh-aw/prompts/mcp_cli_tools_prompt.md" - cat << 'GH_AW_PROMPT_de410bcdbc8f0b37_EOF' + cat << 'GH_AW_PROMPT_791c723be483e095_EOF' The following GitHub context information is available for this workflow: - {{#if __GH_AW_GITHUB_ACTOR__ }} + {{#if github.actor}} - **actor**: __GH_AW_GITHUB_ACTOR__ {{/if}} - {{#if __GH_AW_GITHUB_REPOSITORY__ }} + {{#if github.repository}} - **repository**: __GH_AW_GITHUB_REPOSITORY__ {{/if}} - {{#if __GH_AW_GITHUB_WORKSPACE__ }} + {{#if github.workspace}} - **workspace**: __GH_AW_GITHUB_WORKSPACE__ {{/if}} - {{#if __GH_AW_GITHUB_EVENT_ISSUE_NUMBER__ }} - - **issue-number**: #__GH_AW_GITHUB_EVENT_ISSUE_NUMBER__ + {{#if github.event.issue.number || (github.aw.context.item_type == 'issue' && github.aw.context.item_number)}} + - **issue-number**: #__GH_AW_EXPR_802A9F6A__ {{/if}} - {{#if __GH_AW_GITHUB_EVENT_DISCUSSION_NUMBER__ }} - - **discussion-number**: #__GH_AW_GITHUB_EVENT_DISCUSSION_NUMBER__ + {{#if github.event.discussion.number || (github.aw.context.item_type == 'discussion' && github.aw.context.item_number)}} + - **discussion-number**: #__GH_AW_EXPR_1A3A194A__ {{/if}} - {{#if __GH_AW_GITHUB_EVENT_PULL_REQUEST_NUMBER__ }} - - **pull-request-number**: #__GH_AW_GITHUB_EVENT_PULL_REQUEST_NUMBER__ + {{#if github.event.pull_request.number || (github.aw.context.item_type == 'pull_request' && github.aw.context.item_number)}} + - **pull-request-number**: #__GH_AW_EXPR_463A214A__ {{/if}} - {{#if __GH_AW_GITHUB_EVENT_COMMENT_ID__ }} - - **comment-id**: __GH_AW_GITHUB_EVENT_COMMENT_ID__ + {{#if github.event.comment.id || github.aw.context.comment_id}} + - **comment-id**: __GH_AW_EXPR_FF1D34CE__ {{/if}} - {{#if __GH_AW_GITHUB_RUN_ID__ }} + {{#if github.run_id}} - **workflow-run-id**: __GH_AW_GITHUB_RUN_ID__ {{/if}} - GH_AW_PROMPT_de410bcdbc8f0b37_EOF + GH_AW_PROMPT_791c723be483e095_EOF cat "${RUNNER_TEMP}/gh-aw/prompts/github_mcp_tools_with_safeoutputs_prompt.md" - cat << 'GH_AW_PROMPT_de410bcdbc8f0b37_EOF' + cat << 'GH_AW_PROMPT_791c723be483e095_EOF' {{#runtime-import .github/workflows/auto-code.md}} - GH_AW_PROMPT_de410bcdbc8f0b37_EOF + GH_AW_PROMPT_791c723be483e095_EOF } > "$GH_AW_PROMPT" - name: Interpolate variables and render templates uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 @@ -250,11 +278,12 @@ jobs: uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 env: GH_AW_PROMPT: /tmp/gh-aw/aw-prompts/prompt.txt + GH_AW_EXPR_1A3A194A: ${{ github.event.discussion.number || (fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_type == 'discussion' && fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_number) }} + GH_AW_EXPR_463A214A: ${{ github.event.pull_request.number || (fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_type == 'pull_request' && fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_number) }} + GH_AW_EXPR_802A9F6A: ${{ github.event.issue.number || (fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_type == 'issue' && fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_number) }} + GH_AW_EXPR_FF1D34CE: ${{ github.event.comment.id || fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').comment_id }} GH_AW_GITHUB_ACTOR: ${{ github.actor }} - GH_AW_GITHUB_EVENT_COMMENT_ID: ${{ github.event.comment.id }} - GH_AW_GITHUB_EVENT_DISCUSSION_NUMBER: ${{ github.event.discussion.number }} GH_AW_GITHUB_EVENT_ISSUE_NUMBER: ${{ github.event.issue.number }} - GH_AW_GITHUB_EVENT_PULL_REQUEST_NUMBER: ${{ github.event.pull_request.number }} GH_AW_GITHUB_REPOSITORY: ${{ github.repository }} GH_AW_GITHUB_RUN_ID: ${{ github.run_id }} GH_AW_GITHUB_WORKSPACE: ${{ github.workspace }} @@ -271,11 +300,12 @@ jobs: return await substitutePlaceholders({ file: process.env.GH_AW_PROMPT, substitutions: { + GH_AW_EXPR_1A3A194A: process.env.GH_AW_EXPR_1A3A194A, + GH_AW_EXPR_463A214A: process.env.GH_AW_EXPR_463A214A, + GH_AW_EXPR_802A9F6A: process.env.GH_AW_EXPR_802A9F6A, + GH_AW_EXPR_FF1D34CE: process.env.GH_AW_EXPR_FF1D34CE, GH_AW_GITHUB_ACTOR: process.env.GH_AW_GITHUB_ACTOR, - GH_AW_GITHUB_EVENT_COMMENT_ID: process.env.GH_AW_GITHUB_EVENT_COMMENT_ID, - GH_AW_GITHUB_EVENT_DISCUSSION_NUMBER: process.env.GH_AW_GITHUB_EVENT_DISCUSSION_NUMBER, GH_AW_GITHUB_EVENT_ISSUE_NUMBER: process.env.GH_AW_GITHUB_EVENT_ISSUE_NUMBER, - GH_AW_GITHUB_EVENT_PULL_REQUEST_NUMBER: process.env.GH_AW_GITHUB_EVENT_PULL_REQUEST_NUMBER, GH_AW_GITHUB_REPOSITORY: process.env.GH_AW_GITHUB_REPOSITORY, GH_AW_GITHUB_RUN_ID: process.env.GH_AW_GITHUB_RUN_ID, GH_AW_GITHUB_WORKSPACE: process.env.GH_AW_GITHUB_WORKSPACE, @@ -301,17 +331,25 @@ jobs: include-hidden-files: true path: | /tmp/gh-aw/aw_info.json + /tmp/gh-aw/model_multipliers.json + /tmp/gh-aw/models.json /tmp/gh-aw/aw-prompts/prompt.txt + /tmp/gh-aw/aw-prompts/prompt-template.txt + /tmp/gh-aw/aw-prompts/prompt-import-tree.json /tmp/gh-aw/github_rate_limits.jsonl /tmp/gh-aw/base + /tmp/gh-aw/.github/agents + /tmp/gh-aw/.github/skills if-no-files-found: ignore retention-days: 1 agent: needs: activation + if: needs.activation.outputs.daily_effective_workflow_exceeded != 'true' runs-on: ubuntu-latest permissions: contents: read + copilot-requests: write issues: read pull-requests: read env: @@ -322,29 +360,37 @@ jobs: GH_AW_MCP_LOG_DIR: /tmp/gh-aw/mcp-logs/safeoutputs GH_AW_WORKFLOW_ID_SANITIZED: autocode outputs: - agentic_engine_timeout: ${{ steps.detect-copilot-errors.outputs.agentic_engine_timeout || 'false' }} + agentic_engine_timeout: ${{ steps.detect-agent-errors.outputs.agentic_engine_timeout || 'false' }} + ai_credits_rate_limit_error: ${{ steps.parse-mcp-gateway.outputs.ai_credits_rate_limit_error || 'false' }} + aic: ${{ steps.parse-mcp-gateway.outputs.aic }} + ambient_context: ${{ steps.parse-mcp-gateway.outputs.ambient_context }} checkout_pr_success: ${{ steps.checkout-pr.outputs.checkout_pr_success || 'true' }} effective_tokens: ${{ steps.parse-mcp-gateway.outputs.effective_tokens }} has_patch: ${{ steps.collect_output.outputs.has_patch }} - inference_access_error: ${{ steps.detect-copilot-errors.outputs.inference_access_error || 'false' }} - mcp_policy_error: ${{ steps.detect-copilot-errors.outputs.mcp_policy_error || 'false' }} + inference_access_error: ${{ steps.detect-agent-errors.outputs.inference_access_error || 'false' }} + mcp_policy_error: ${{ steps.detect-agent-errors.outputs.mcp_policy_error || 'false' }} model: ${{ needs.activation.outputs.model }} - model_not_supported_error: ${{ steps.detect-copilot-errors.outputs.model_not_supported_error || 'false' }} + model_not_supported_error: ${{ steps.detect-agent-errors.outputs.model_not_supported_error || 'false' }} output: ${{ steps.collect_output.outputs.output }} output_types: ${{ steps.collect_output.outputs.output_types }} + setup-parent-span-id: ${{ steps.setup.outputs.parent-span-id || steps.setup.outputs.span-id }} + setup-span-id: ${{ steps.setup.outputs.span-id }} setup-trace-id: ${{ steps.setup.outputs.trace-id }} + unknown_model_ai_credits: ${{ steps.parse-mcp-gateway.outputs.unknown_model_ai_credits || 'false' }} steps: - name: Setup Scripts id: setup - uses: github/gh-aw-actions/setup@b8068426813005612b960b5ab0b8bd2c27142323 # v0.71.5 + uses: github/gh-aw-actions/setup@5c2fe865bb4dc46e1450f6ee0d0541d759aea73a # v0.79.6 with: destination: ${{ runner.temp }}/gh-aw/actions job-name: ${{ github.job }} trace-id: ${{ needs.activation.outputs.setup-trace-id }} + parent-span-id: ${{ needs.activation.outputs.setup-parent-span-id || needs.activation.outputs.setup-span-id }} env: GH_AW_SETUP_WORKFLOW_NAME: "自动处理 Issue" GH_AW_CURRENT_WORKFLOW_REF: ${{ github.repository }}/.github/workflows/auto-code.lock.yml@${{ github.ref }} - GH_AW_INFO_VERSION: "1.0.40" + GH_AW_INFO_VERSION: "1.0.60" + GH_AW_INFO_ENGINE_ID: "copilot" - name: Set runtime paths id: set-runtime-paths run: | @@ -354,7 +400,7 @@ jobs: echo "GH_AW_SAFE_OUTPUTS_TOOLS_PATH=${RUNNER_TEMP}/gh-aw/safeoutputs/tools.json" } >> "$GITHUB_OUTPUT" - name: Checkout repository - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 with: persist-credentials: false - name: Create gh-aw temp directory @@ -379,7 +425,7 @@ jobs: - name: Checkout PR branch id: checkout-pr if: | - github.event.pull_request || github.event.issue.pull_request + github.event.pull_request || github.event.issue.pull_request || github.event_name == 'workflow_dispatch' && fromJSON(github.event.inputs.aw_context || '{}').item_type == 'pull_request' uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 env: GH_TOKEN: ${{ secrets.GH_AW_GITHUB_MCP_SERVER_TOKEN || secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} @@ -391,7 +437,7 @@ jobs: const { main } = require('${{ runner.temp }}/gh-aw/actions/checkout_pr_branch.cjs'); await main(); - name: Install GitHub Copilot CLI - run: bash "${RUNNER_TEMP}/gh-aw/actions/install_copilot_cli.sh" 1.0.40 + run: bash "${RUNNER_TEMP}/gh-aw/actions/install_copilot_cli.sh" 1.0.60 env: GH_HOST: github.com - name: Parse integrity filter lists @@ -409,19 +455,28 @@ jobs: - name: Restore agent config folders from base branch if: steps.checkout-pr.outcome == 'success' env: - GH_AW_AGENT_FOLDERS: ".agents .claude .codex .crush .gemini .github .opencode .pi" - GH_AW_AGENT_FILES: ".crush.json AGENTS.md CLAUDE.md GEMINI.md PI.md opencode.jsonc" + GH_AW_AGENT_FOLDERS: ".agents .antigravity .claude .codex .crush .gemini .github .opencode .pi" + GH_AW_AGENT_FILES: ".crush.json AGENTS.md ANTIGRAVITY.md CLAUDE.md GEMINI.md PI.md opencode.jsonc" run: bash "${RUNNER_TEMP}/gh-aw/actions/restore_base_github_folders.sh" + - name: Restore inline sub-agents from activation artifact + env: + GH_AW_SUB_AGENT_DIR: ".github/agents" + GH_AW_SUB_AGENT_EXT: ".agent.md" + run: bash "${RUNNER_TEMP}/gh-aw/actions/restore_inline_sub_agents.sh" + - name: Restore inline skills from activation artifact + env: + GH_AW_SKILL_DIR: ".github/skills" + run: bash "${RUNNER_TEMP}/gh-aw/actions/restore_inline_skills.sh" - name: Download container images - run: bash "${RUNNER_TEMP}/gh-aw/actions/download_docker_images.sh" ghcr.io/github/github-mcp-server:v1.0.3@sha256:2ac27ef03461ef2b877031b838a7d1fd7f12b12d4ace7796d8cad91446d55959 node:lts-alpine@sha256:d1b3b4da11eefd5941e7f0b9cf17783fc99d9c6fc34884a665f40a06dbdfc94f + run: bash "${RUNNER_TEMP}/gh-aw/actions/download_docker_images.sh" ghcr.io/github/github-mcp-server:v1.1.2@sha256:30197479d8036c7811892bc07e06f9a05c9ef3cdd79bc59f256d50647f95788c - name: Generate Safe Outputs Config run: | mkdir -p "${RUNNER_TEMP}/gh-aw/safeoutputs" mkdir -p /tmp/gh-aw/safeoutputs mkdir -p /tmp/gh-aw/mcp-logs/safeoutputs - cat > "${RUNNER_TEMP}/gh-aw/safeoutputs/config.json" << 'GH_AW_SAFE_OUTPUTS_CONFIG_982fd4401303461a_EOF' - {"add_comment":{"max":1},"create_pull_request":{"base_branch":"develop","max":1,"max_patch_files":100,"max_patch_size":1024,"protect_top_level_dot_folders":true,"protected_files":["package.json","bun.lockb","bunfig.toml","deno.json","deno.jsonc","deno.lock","global.json","NuGet.Config","Directory.Packages.props","mix.exs","mix.lock","go.mod","go.sum","stack.yaml","stack.yaml.lock","pom.xml","build.gradle","build.gradle.kts","settings.gradle","settings.gradle.kts","gradle.properties","package-lock.json","yarn.lock","pnpm-lock.yaml","npm-shrinkwrap.json","requirements.txt","Pipfile","Pipfile.lock","pyproject.toml","setup.py","setup.cfg","Gemfile","Gemfile.lock","uv.lock","CODEOWNERS","DESIGN.md","README.md","CONTRIBUTING.md","CHANGELOG.md","SECURITY.md","CODE_OF_CONDUCT.md","AGENTS.md","CLAUDE.md","GEMINI.md"]},"create_report_incomplete_issue":{},"missing_data":{},"missing_tool":{},"noop":{"max":1,"report-as-issue":"true"},"report_incomplete":{}} - GH_AW_SAFE_OUTPUTS_CONFIG_982fd4401303461a_EOF + cat > "${RUNNER_TEMP}/gh-aw/safeoutputs/config.json" << 'GH_AW_SAFE_OUTPUTS_CONFIG_b5dafa3335f30723_EOF' + {"add_comment":{"max":1},"create_pull_request":{"base_branch":"develop","max":1,"max_patch_files":100,"max_patch_size":1024,"protect_top_level_dot_folders":true,"protected_files":["package.json","bun.lockb","bunfig.toml","deno.json","deno.jsonc","deno.lock","global.json","NuGet.Config","Directory.Packages.props","mix.exs","mix.lock","go.mod","go.sum","stack.yaml","stack.yaml.lock","pom.xml","build.gradle","build.gradle.kts","settings.gradle","settings.gradle.kts","gradle.properties","package-lock.json","yarn.lock","pnpm-lock.yaml","npm-shrinkwrap.json","requirements.txt","Pipfile","Pipfile.lock","pyproject.toml","setup.py","setup.cfg","Gemfile","Gemfile.lock","uv.lock","CODEOWNERS","DESIGN.md","README.md","CONTRIBUTING.md","CHANGELOG.md","SECURITY.md","CODE_OF_CONDUCT.md","AGENTS.md","CLAUDE.md","GEMINI.md"],"protected_files_policy":"allowed"},"create_report_incomplete_issue":{},"missing_data":{},"missing_tool":{},"noop":{"max":1,"report-as-issue":"true"},"report_incomplete":{}} + GH_AW_SAFE_OUTPUTS_CONFIG_b5dafa3335f30723_EOF - name: Generate Safe Outputs Tools env: GH_AW_TOOLS_META_JSON: | @@ -645,17 +700,22 @@ jobs: export GH_AW_ENGINE="copilot" MCP_GATEWAY_UID=$(id -u 2>/dev/null || echo '0') MCP_GATEWAY_GID=$(id -g 2>/dev/null || echo '0') - DOCKER_SOCK_GID=$(stat -c '%g' /var/run/docker.sock 2>/dev/null || echo '0') - export MCP_GATEWAY_DOCKER_COMMAND='docker run -i --rm --network host --add-host host.docker.internal:127.0.0.1 --user '"${MCP_GATEWAY_UID}"':'"${MCP_GATEWAY_GID}"' --group-add '"${DOCKER_SOCK_GID}"' -v /var/run/docker.sock:/var/run/docker.sock -e MCP_GATEWAY_PORT -e MCP_GATEWAY_DOMAIN -e MCP_GATEWAY_API_KEY -e MCP_GATEWAY_PAYLOAD_DIR -e MCP_GATEWAY_PAYLOAD_SIZE_THRESHOLD -e DEBUG -e MCP_GATEWAY_LOG_DIR -e GH_AW_MCP_LOG_DIR -e GH_AW_SAFE_OUTPUTS -e GH_AW_SAFE_OUTPUTS_CONFIG_PATH -e GH_AW_SAFE_OUTPUTS_TOOLS_PATH -e GH_AW_ASSETS_BRANCH -e GH_AW_ASSETS_MAX_SIZE_KB -e GH_AW_ASSETS_ALLOWED_EXTS -e DEFAULT_BRANCH -e GITHUB_MCP_SERVER_TOKEN -e GITHUB_MCP_GUARD_MIN_INTEGRITY -e GITHUB_MCP_GUARD_REPOS -e GITHUB_REPOSITORY -e GITHUB_SERVER_URL -e GITHUB_SHA -e GITHUB_WORKSPACE -e GITHUB_TOKEN -e GITHUB_RUN_ID -e GITHUB_RUN_NUMBER -e GITHUB_RUN_ATTEMPT -e GITHUB_JOB -e GITHUB_ACTION -e GITHUB_EVENT_NAME -e GITHUB_EVENT_PATH -e GITHUB_ACTOR -e GITHUB_ACTOR_ID -e GITHUB_TRIGGERING_ACTOR -e GITHUB_WORKFLOW -e GITHUB_WORKFLOW_REF -e GITHUB_WORKFLOW_SHA -e GITHUB_REF -e GITHUB_REF_NAME -e GITHUB_REF_TYPE -e GITHUB_HEAD_REF -e GITHUB_BASE_REF -e GH_AW_SAFE_OUTPUTS_PORT -e GH_AW_SAFE_OUTPUTS_API_KEY -v /tmp/gh-aw/mcp-payloads:/tmp/gh-aw/mcp-payloads:rw -v /opt:/opt:ro -v /tmp:/tmp:rw -v '"${GITHUB_WORKSPACE}"':'"${GITHUB_WORKSPACE}"':rw ghcr.io/github/gh-aw-mcpg:v0.3.6' + case "${DOCKER_HOST:-}" in + unix://* ) DOCKER_SOCK_PATH="${DOCKER_HOST#unix://}" ;; + /* ) DOCKER_SOCK_PATH="$DOCKER_HOST" ;; + * ) DOCKER_SOCK_PATH=/var/run/docker.sock ;; + esac + DOCKER_SOCK_GID=$(stat -c '%g' "$DOCKER_SOCK_PATH" 2>/dev/null || echo '0') + export MCP_GATEWAY_DOCKER_COMMAND='docker run -i --rm --network host --add-host host.docker.internal:127.0.0.1 --user '"${MCP_GATEWAY_UID}"':'"${MCP_GATEWAY_GID}"' --group-add '"${DOCKER_SOCK_GID}"' -v '"${DOCKER_SOCK_PATH}"':/var/run/docker.sock -e MCP_GATEWAY_PORT -e MCP_GATEWAY_DOMAIN -e MCP_GATEWAY_API_KEY -e MCP_GATEWAY_PAYLOAD_DIR -e MCP_GATEWAY_PAYLOAD_SIZE_THRESHOLD -e DOCKER_HOST=unix:///var/run/docker.sock -e DEBUG -e MCP_GATEWAY_LOG_DIR -e GH_AW_MCP_LOG_DIR -e GH_AW_SAFE_OUTPUTS -e GH_AW_SAFE_OUTPUTS_CONFIG_PATH -e GH_AW_SAFE_OUTPUTS_TOOLS_PATH -e GH_AW_ASSETS_BRANCH -e GH_AW_ASSETS_MAX_SIZE_KB -e GH_AW_ASSETS_ALLOWED_EXTS -e DEFAULT_BRANCH -e GITHUB_MCP_SERVER_TOKEN -e GITHUB_MCP_GUARD_MIN_INTEGRITY -e GITHUB_MCP_GUARD_REPOS -e GITHUB_REPOSITORY -e GITHUB_SERVER_URL -e GITHUB_SHA -e GITHUB_WORKSPACE -e GITHUB_TOKEN -e GITHUB_RUN_ID -e GITHUB_RUN_NUMBER -e GITHUB_RUN_ATTEMPT -e GITHUB_JOB -e GITHUB_ACTION -e GITHUB_EVENT_NAME -e GITHUB_EVENT_PATH -e GITHUB_ACTOR -e GITHUB_ACTOR_ID -e GITHUB_TRIGGERING_ACTOR -e GITHUB_WORKFLOW -e GITHUB_WORKFLOW_REF -e GITHUB_WORKFLOW_SHA -e GITHUB_REF -e GITHUB_REF_NAME -e GITHUB_REF_TYPE -e GITHUB_HEAD_REF -e GITHUB_BASE_REF -e GH_AW_SAFE_OUTPUTS_PORT -e GH_AW_SAFE_OUTPUTS_API_KEY -v /tmp/gh-aw/mcp-payloads:/tmp/gh-aw/mcp-payloads:rw -v /opt:/opt:ro -v /tmp:/tmp:rw -v '"${GITHUB_WORKSPACE}"':'"${GITHUB_WORKSPACE}"':rw ghcr.io/github/gh-aw-mcpg:v0.3.25' mkdir -p /home/runner/.copilot GH_AW_NODE=$(which node 2>/dev/null || command -v node 2>/dev/null || echo node) - cat << GH_AW_MCP_CONFIG_01a7963a8b9bf043_EOF | "$GH_AW_NODE" "${RUNNER_TEMP}/gh-aw/actions/start_mcp_gateway.cjs" + cat << GH_AW_MCP_CONFIG_f41962abaffbda74_EOF | "$GH_AW_NODE" "${RUNNER_TEMP}/gh-aw/actions/start_mcp_gateway.cjs" { "mcpServers": { "github": { "type": "stdio", - "container": "ghcr.io/github/github-mcp-server:v1.0.3", + "container": "ghcr.io/github/github-mcp-server:v1.1.2", "env": { "GITHUB_HOST": "\${GITHUB_SERVER_URL}", "GITHUB_PERSONAL_ACCESS_TOKEN": "\${GITHUB_MCP_SERVER_TOKEN}", @@ -694,7 +754,7 @@ jobs: "payloadDir": "${MCP_GATEWAY_PAYLOAD_DIR}" } } - GH_AW_MCP_CONFIG_01a7963a8b9bf043_EOF + GH_AW_MCP_CONFIG_f41962abaffbda74_EOF - name: Mount MCP servers as CLIs id: mount-mcp-clis continue-on-error: true @@ -735,6 +795,7 @@ jobs: # --allow-tool shell(grep) # --allow-tool shell(head) # --allow-tool shell(ls) + # --allow-tool shell(printf) # --allow-tool shell(pwd) # --allow-tool shell(safeoutputs:*) # --allow-tool shell(sort) @@ -746,26 +807,31 @@ jobs: timeout-minutes: 20 run: | set -o pipefail + printf '%s' "$(date +%s%3N)" > /tmp/gh-aw/agent_cli_start_ms.txt touch /tmp/gh-aw/agent-step-summary.md (umask 177 && touch /tmp/gh-aw/agent-stdio.log) + trap 'rm -f /home/runner/.copilot/settings.json' EXIT + mkdir -p /home/runner/.copilot + printf '%s' '{"builtInAgents":{"rubberDuck":false}}' > /home/runner/.copilot/settings.json mkdir -p /tmp/ mkdir -p /tmp/gh-aw/ mkdir -p /tmp/gh-aw/agent/ mkdir -p /tmp/gh-aw/sandbox/agent/logs/ - GH_AW_NODE_EXEC="${GH_AW_NODE_BIN:-}"; if [ -z "$GH_AW_NODE_EXEC" ] || [ ! -x "$GH_AW_NODE_EXEC" ]; then GH_AW_NODE_EXEC="$(command -v node 2>/dev/null || echo node)"; fi; "$GH_AW_NODE_EXEC" ${RUNNER_TEMP}/gh-aw/actions/copilot_harness.cjs copilot --add-dir /tmp/ --add-dir /tmp/gh-aw/ --add-dir /tmp/gh-aw/agent/ --log-level all --log-dir /tmp/gh-aw/sandbox/agent/logs/ --disable-builtin-mcps --no-ask-user --allow-tool github --allow-tool safeoutputs --allow-tool 'shell(cat)' --allow-tool 'shell(date)' --allow-tool 'shell(echo)' --allow-tool 'shell(git add:*)' --allow-tool 'shell(git branch:*)' --allow-tool 'shell(git checkout:*)' --allow-tool 'shell(git commit:*)' --allow-tool 'shell(git merge:*)' --allow-tool 'shell(git rm:*)' --allow-tool 'shell(git status)' --allow-tool 'shell(git switch:*)' --allow-tool 'shell(grep)' --allow-tool 'shell(head)' --allow-tool 'shell(ls)' --allow-tool 'shell(pwd)' --allow-tool 'shell(safeoutputs:*)' --allow-tool 'shell(sort)' --allow-tool 'shell(tail)' --allow-tool 'shell(uniq)' --allow-tool 'shell(wc)' --allow-tool 'shell(yq)' --allow-tool write --allow-all-paths --prompt-file /tmp/gh-aw/aw-prompts/prompt.txt 2>&1 | tee /tmp/gh-aw/agent-stdio.log + GH_AW_NODE_EXEC="${GH_AW_NODE_BIN:-}"; if [ -z "$GH_AW_NODE_EXEC" ] || [ ! -x "$GH_AW_NODE_EXEC" ]; then GH_AW_NODE_EXEC="$(command -v node 2>/dev/null || true)"; fi; if [ -z "$GH_AW_NODE_EXEC" ]; then echo "node runtime missing on this runner — check runtimes.node in workflow YAML" >&2; exit 127; fi; GH_AW_NPM_GLOBAL_ROOT="$(npm root -g 2>/dev/null || true)"; if [ -n "$GH_AW_NPM_GLOBAL_ROOT" ]; then export NODE_PATH="${GH_AW_NPM_GLOBAL_ROOT}${NODE_PATH:+:${NODE_PATH}}"; fi; "$GH_AW_NODE_EXEC" ${RUNNER_TEMP}/gh-aw/actions/copilot_harness.cjs copilot --add-dir /tmp/ --add-dir /tmp/gh-aw/ --add-dir /tmp/gh-aw/agent/ --log-level all --log-dir /tmp/gh-aw/sandbox/agent/logs/ --disable-builtin-mcps --no-ask-user --allow-tool github --allow-tool safeoutputs --allow-tool 'shell(cat)' --allow-tool 'shell(date)' --allow-tool 'shell(echo)' --allow-tool 'shell(git add:*)' --allow-tool 'shell(git branch:*)' --allow-tool 'shell(git checkout:*)' --allow-tool 'shell(git commit:*)' --allow-tool 'shell(git merge:*)' --allow-tool 'shell(git rm:*)' --allow-tool 'shell(git status)' --allow-tool 'shell(git switch:*)' --allow-tool 'shell(grep)' --allow-tool 'shell(head)' --allow-tool 'shell(ls)' --allow-tool 'shell(printf)' --allow-tool 'shell(pwd)' --allow-tool 'shell(safeoutputs:*)' --allow-tool 'shell(sort)' --allow-tool 'shell(tail)' --allow-tool 'shell(uniq)' --allow-tool 'shell(wc)' --allow-tool 'shell(yq)' --allow-tool write --allow-all-paths --prompt-file /tmp/gh-aw/aw-prompts/prompt.txt 2>&1 | tee /tmp/gh-aw/agent-stdio.log env: COPILOT_AGENT_RUNNER_TYPE: STANDALONE - COPILOT_API_KEY: dummy-byok-key-for-offline-mode - COPILOT_GITHUB_TOKEN: ${{ secrets.COPILOT_GITHUB_TOKEN }} - COPILOT_MODEL: doubao-seed-2-0-code-preview-260215 - COPILOT_PROVIDER_API_KEY: ${{ secrets.OPENAI_API_KEY }} + COPILOT_MODEL: doubao-seed-evolving COPILOT_PROVIDER_BASE_URL: https://ark.cn-beijing.volces.com/api/v3 + COPILOT_PROVIDER_BEARER_TOKEN: ${{ secrets.OPENAI_API_KEY }} COPILOT_PROVIDER_TYPE: openai + COPILOT_PROVIDER_WIRE_API: responses + GH_AW_MAX_TURNS: ${{ vars.GH_AW_DEFAULT_MAX_TURNS || '' }} GH_AW_MCP_CONFIG: /home/runner/.copilot/mcp-config.json GH_AW_PHASE: agent GH_AW_PROMPT: /tmp/gh-aw/aw-prompts/prompt.txt GH_AW_SAFE_OUTPUTS: ${{ steps.set-runtime-paths.outputs.GH_AW_SAFE_OUTPUTS }} - GH_AW_VERSION: v0.71.5 + GH_AW_TIMEOUT_MINUTES: 20 + GH_AW_VERSION: v0.79.6 GITHUB_API_URL: ${{ github.api_url }} GITHUB_AW: true GITHUB_COPILOT_INTEGRATION_ID: agentic-workflows @@ -775,12 +841,14 @@ jobs: GITHUB_SERVER_URL: ${{ github.server_url }} GITHUB_STEP_SUMMARY: /tmp/gh-aw/agent-step-summary.md GITHUB_WORKSPACE: ${{ github.workspace }} + RUNNER_TEMP: ${{ runner.temp }} + S2STOKENS: true XDG_CONFIG_HOME: /home/runner - - name: Detect Copilot errors - id: detect-copilot-errors + - name: Detect agent errors if: always() + id: detect-agent-errors continue-on-error: true - run: node "${RUNNER_TEMP}/gh-aw/actions/detect_copilot_errors.cjs" + run: node "${RUNNER_TEMP}/gh-aw/actions/detect_agent_errors.cjs" - name: Configure Git credentials env: REPO_NAME: ${{ github.repository }} @@ -817,8 +885,7 @@ jobs: const { main } = require('${{ runner.temp }}/gh-aw/actions/redact_secrets.cjs'); await main(); env: - GH_AW_SECRET_NAMES: 'COPILOT_GITHUB_TOKEN,GH_AW_GITHUB_MCP_SERVER_TOKEN,GH_AW_GITHUB_TOKEN,GITHUB_TOKEN,OPENAI_API_KEY' - SECRET_COPILOT_GITHUB_TOKEN: ${{ secrets.COPILOT_GITHUB_TOKEN }} + GH_AW_SECRET_NAMES: 'GH_AW_GITHUB_MCP_SERVER_TOKEN,GH_AW_GITHUB_TOKEN,GITHUB_TOKEN,OPENAI_API_KEY' SECRET_GH_AW_GITHUB_MCP_SERVER_TOKEN: ${{ secrets.GH_AW_GITHUB_MCP_SERVER_TOKEN }} SECRET_GH_AW_GITHUB_TOKEN: ${{ secrets.GH_AW_GITHUB_TOKEN }} SECRET_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -905,7 +972,7 @@ jobs: - safe_outputs if: > always() && (needs.agent.result != 'skipped' || needs.activation.outputs.lockdown_check_failed == 'true' || - needs.activation.outputs.stale_lock_file_failed == 'true') + needs.activation.outputs.stale_lock_file_failed == 'true' || needs.activation.outputs.daily_effective_workflow_exceeded == 'true') runs-on: ubuntu-slim permissions: contents: write @@ -915,6 +982,7 @@ jobs: concurrency: group: "gh-aw-conclusion-auto-code" cancel-in-progress: false + queue: max outputs: incomplete_count: ${{ steps.report_incomplete.outputs.incomplete_count }} noop_message: ${{ steps.noop.outputs.noop_message }} @@ -923,15 +991,17 @@ jobs: steps: - name: Setup Scripts id: setup - uses: github/gh-aw-actions/setup@b8068426813005612b960b5ab0b8bd2c27142323 # v0.71.5 + uses: github/gh-aw-actions/setup@5c2fe865bb4dc46e1450f6ee0d0541d759aea73a # v0.79.6 with: destination: ${{ runner.temp }}/gh-aw/actions job-name: ${{ github.job }} trace-id: ${{ needs.activation.outputs.setup-trace-id }} + parent-span-id: ${{ needs.activation.outputs.setup-parent-span-id || needs.activation.outputs.setup-span-id }} env: GH_AW_SETUP_WORKFLOW_NAME: "自动处理 Issue" GH_AW_CURRENT_WORKFLOW_REF: ${{ github.repository }}/.github/workflows/auto-code.lock.yml@${{ github.ref }} - GH_AW_INFO_VERSION: "1.0.40" + GH_AW_INFO_VERSION: "1.0.60" + GH_AW_INFO_ENGINE_ID: "copilot" - name: Download agent output artifact id: download-agent-output continue-on-error: true @@ -946,6 +1016,40 @@ jobs: mkdir -p /tmp/gh-aw/ find "/tmp/gh-aw/" -type f -print echo "GH_AW_AGENT_OUTPUT=/tmp/gh-aw/agent_output.json" >> "$GITHUB_OUTPUT" + - name: Collect usage artifact files + if: always() + continue-on-error: true + run: | + mkdir -p /tmp/gh-aw/usage/agent /tmp/gh-aw/usage/detection + echo "Usage artifact source file status:" + for file in /tmp/gh-aw/aw-info.jsonl /tmp/gh-aw/agent_usage.jsonl /tmp/gh-aw/detection_usage.jsonl /tmp/gh-aw/sandbox/firewall-audit-logs/api-proxy-logs/token-usage.jsonl /tmp/gh-aw/sandbox/firewall/logs/api-proxy-logs/token-usage.jsonl /tmp/gh-aw/sandbox/firewall/audit/api-proxy-logs/token-usage.jsonl /tmp/gh-aw/threat-detection/sandbox/firewall-audit-logs/api-proxy-logs/token-usage.jsonl /tmp/gh-aw/threat-detection/sandbox/firewall/logs/api-proxy-logs/token-usage.jsonl /tmp/gh-aw/threat-detection/sandbox/firewall/audit/api-proxy-logs/token-usage.jsonl; do + [ -f "$file" ] && echo "FOUND: $file" || echo "MISSING: $file" + done + [ -f /tmp/gh-aw/aw-info.jsonl ] && cp /tmp/gh-aw/aw-info.jsonl /tmp/gh-aw/usage/aw-info.jsonl || true + [ -f /tmp/gh-aw/agent_usage.jsonl ] && cp /tmp/gh-aw/agent_usage.jsonl /tmp/gh-aw/usage/agent_usage.jsonl || true + [ -f /tmp/gh-aw/detection_usage.jsonl ] && cp /tmp/gh-aw/detection_usage.jsonl /tmp/gh-aw/usage/detection_usage.jsonl || true + [ -f /tmp/gh-aw/sandbox/firewall-audit-logs/api-proxy-logs/token-usage.jsonl ] && cp /tmp/gh-aw/sandbox/firewall-audit-logs/api-proxy-logs/token-usage.jsonl /tmp/gh-aw/usage/agent/token_usage.jsonl || true + [ -f /tmp/gh-aw/sandbox/firewall/logs/api-proxy-logs/token-usage.jsonl ] && cp /tmp/gh-aw/sandbox/firewall/logs/api-proxy-logs/token-usage.jsonl /tmp/gh-aw/usage/agent/token_usage.jsonl || true + [ -f /tmp/gh-aw/sandbox/firewall/audit/api-proxy-logs/token-usage.jsonl ] && cp /tmp/gh-aw/sandbox/firewall/audit/api-proxy-logs/token-usage.jsonl /tmp/gh-aw/usage/agent/token_usage.jsonl || true + [ -f /tmp/gh-aw/threat-detection/sandbox/firewall-audit-logs/api-proxy-logs/token-usage.jsonl ] && cp /tmp/gh-aw/threat-detection/sandbox/firewall-audit-logs/api-proxy-logs/token-usage.jsonl /tmp/gh-aw/usage/detection/token_usage.jsonl || true + [ -f /tmp/gh-aw/threat-detection/sandbox/firewall/logs/api-proxy-logs/token-usage.jsonl ] && cp /tmp/gh-aw/threat-detection/sandbox/firewall/logs/api-proxy-logs/token-usage.jsonl /tmp/gh-aw/usage/detection/token_usage.jsonl || true + [ -f /tmp/gh-aw/threat-detection/sandbox/firewall/audit/api-proxy-logs/token-usage.jsonl ] && cp /tmp/gh-aw/threat-detection/sandbox/firewall/audit/api-proxy-logs/token-usage.jsonl /tmp/gh-aw/usage/detection/token_usage.jsonl || true + [ -f /tmp/gh-aw/usage/agent/token_usage.jsonl ] || : > /tmp/gh-aw/usage/agent/token_usage.jsonl + [ -f /tmp/gh-aw/usage/detection/token_usage.jsonl ] || : > /tmp/gh-aw/usage/detection/token_usage.jsonl + find /tmp/gh-aw/usage -type f -print | sort + - name: Upload usage artifact + if: always() + continue-on-error: true + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 + with: + name: usage + path: | + /tmp/gh-aw/usage/aw-info.jsonl + /tmp/gh-aw/usage/agent_usage.jsonl + /tmp/gh-aw/usage/detection_usage.jsonl + /tmp/gh-aw/usage/agent/token_usage.jsonl + /tmp/gh-aw/usage/detection/token_usage.jsonl + if-no-files-found: ignore - name: Process no-op messages id: noop uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 @@ -953,9 +1057,13 @@ jobs: GH_AW_AGENT_OUTPUT: ${{ steps.setup-agent-output-env.outputs.GH_AW_AGENT_OUTPUT }} GH_AW_NOOP_MAX: "1" GH_AW_WORKFLOW_NAME: "自动处理 Issue" + GH_AW_WORKFLOW_SOURCE_URL: "${{ github.server_url }}/${{ github.repository }}/blob/${{ github.ref_name }}/.github/workflows/auto-code.md" GH_AW_RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} GH_AW_AGENT_CONCLUSION: ${{ needs.agent.result }} GH_AW_NOOP_REPORT_AS_ISSUE: "true" + GH_AW_AIC: ${{ needs.agent.outputs.aic }} + GH_AW_AMBIENT_CONTEXT: ${{ needs.agent.outputs.ambient_context }} + GH_AW_WORKFLOW_ID: "auto-code" with: github-token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} script: | @@ -970,6 +1078,7 @@ jobs: GH_AW_AGENT_OUTPUT: ${{ steps.setup-agent-output-env.outputs.GH_AW_AGENT_OUTPUT }} GH_AW_MISSING_TOOL_CREATE_ISSUE: "true" GH_AW_WORKFLOW_NAME: "自动处理 Issue" + GH_AW_WORKFLOW_SOURCE_URL: "${{ github.server_url }}/${{ github.repository }}/blob/${{ github.ref_name }}/.github/workflows/auto-code.md" with: github-token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} script: | @@ -984,6 +1093,7 @@ jobs: GH_AW_AGENT_OUTPUT: ${{ steps.setup-agent-output-env.outputs.GH_AW_AGENT_OUTPUT }} GH_AW_REPORT_INCOMPLETE_CREATE_ISSUE: "true" GH_AW_WORKFLOW_NAME: "自动处理 Issue" + GH_AW_WORKFLOW_SOURCE_URL: "${{ github.server_url }}/${{ github.repository }}/blob/${{ github.ref_name }}/.github/workflows/auto-code.md" with: github-token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} script: | @@ -998,12 +1108,18 @@ jobs: env: GH_AW_AGENT_OUTPUT: ${{ steps.setup-agent-output-env.outputs.GH_AW_AGENT_OUTPUT }} GH_AW_WORKFLOW_NAME: "自动处理 Issue" + GH_AW_WORKFLOW_SOURCE_URL: "${{ github.server_url }}/${{ github.repository }}/blob/${{ github.ref_name }}/.github/workflows/auto-code.md" GH_AW_RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} GH_AW_AGENT_CONCLUSION: ${{ needs.agent.result }} GH_AW_WORKFLOW_ID: "auto-code" GH_AW_ACTION_FAILURE_ISSUE_EXPIRES_HOURS: "168" GH_AW_ENGINE_ID: "copilot" GH_AW_CHECKOUT_PR_SUCCESS: ${{ needs.agent.outputs.checkout_pr_success }} + GH_AW_EFFECTIVE_TOKENS: ${{ needs.agent.outputs.effective_tokens || '' }} + GH_AW_AI_CREDITS_RATE_LIMIT_ERROR: ${{ needs.agent.outputs.ai_credits_rate_limit_error || 'false' }} + GH_AW_UNKNOWN_MODEL_AI_CREDITS: ${{ needs.agent.outputs.unknown_model_ai_credits || 'false' }} + GH_AW_AIC: ${{ needs.agent.outputs.aic }} + GH_AW_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFERENCE_ACCESS_ERROR: ${{ needs.agent.outputs.inference_access_error }} GH_AW_MCP_POLICY_ERROR: ${{ needs.agent.outputs.mcp_policy_error }} GH_AW_AGENTIC_ENGINE_TIMEOUT: ${{ needs.agent.outputs.agentic_engine_timeout }} @@ -1013,6 +1129,9 @@ jobs: GH_AW_CODE_PUSH_FAILURE_COUNT: ${{ needs.safe_outputs.outputs.code_push_failure_count }} GH_AW_LOCKDOWN_CHECK_FAILED: ${{ needs.activation.outputs.lockdown_check_failed }} GH_AW_STALE_LOCK_FILE_FAILED: ${{ needs.activation.outputs.stale_lock_file_failed }} + GH_AW_DAILY_EFFECTIVE_WORKFLOW_EXCEEDED: ${{ needs.activation.outputs.daily_effective_workflow_exceeded }} + GH_AW_DAILY_EFFECTIVE_WORKFLOW_TOTAL_EFFECTIVE_TOKENS: ${{ needs.activation.outputs.daily_effective_workflow_total_effective_tokens }} + GH_AW_DAILY_EFFECTIVE_WORKFLOW_THRESHOLD: ${{ needs.activation.outputs.daily_effective_workflow_threshold }} GH_AW_GROUP_REPORTS: "false" GH_AW_FAILURE_REPORT_AS_ISSUE: "true" GH_AW_MISSING_TOOL_REPORT_AS_FAILURE: "true" @@ -1031,18 +1150,21 @@ jobs: outputs: activated: ${{ steps.check_membership.outputs.is_team_member == 'true' }} matched_command: '' + setup-parent-span-id: ${{ steps.setup.outputs.parent-span-id || steps.setup.outputs.span-id }} + setup-span-id: ${{ steps.setup.outputs.span-id }} setup-trace-id: ${{ steps.setup.outputs.trace-id }} steps: - name: Setup Scripts id: setup - uses: github/gh-aw-actions/setup@b8068426813005612b960b5ab0b8bd2c27142323 # v0.71.5 + uses: github/gh-aw-actions/setup@5c2fe865bb4dc46e1450f6ee0d0541d759aea73a # v0.79.6 with: destination: ${{ runner.temp }}/gh-aw/actions job-name: ${{ github.job }} env: GH_AW_SETUP_WORKFLOW_NAME: "自动处理 Issue" GH_AW_CURRENT_WORKFLOW_REF: ${{ github.repository }}/.github/workflows/auto-code.lock.yml@${{ github.ref }} - GH_AW_INFO_VERSION: "1.0.40" + GH_AW_INFO_VERSION: "1.0.60" + GH_AW_INFO_ENGINE_ID: "copilot" - name: Check team membership for workflow id: check_membership uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 @@ -1067,15 +1189,19 @@ jobs: discussions: write issues: write pull-requests: write - timeout-minutes: 15 + timeout-minutes: 45 env: + GH_AW_AGENT_AIC: ${{ needs.agent.outputs.aic }} + GH_AW_AIC: ${{ needs.agent.outputs.aic }} + GH_AW_AMBIENT_CONTEXT: ${{ needs.agent.outputs.ambient_context }} GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/auto-code" GH_AW_EFFECTIVE_TOKENS: ${{ needs.agent.outputs.effective_tokens }} GH_AW_ENGINE_ID: "copilot" GH_AW_ENGINE_MODEL: ${{ needs.agent.outputs.model }} - GH_AW_ENGINE_VERSION: "1.0.40" + GH_AW_ENGINE_VERSION: "1.0.60" GH_AW_WORKFLOW_ID: "auto-code" GH_AW_WORKFLOW_NAME: "自动处理 Issue" + GH_AW_WORKFLOW_SOURCE_URL: "${{ github.server_url }}/${{ github.repository }}/blob/${{ github.ref_name }}/.github/workflows/auto-code.md" outputs: code_push_failure_count: ${{ steps.process_safe_outputs.outputs.code_push_failure_count }} code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }} @@ -1090,15 +1216,17 @@ jobs: steps: - name: Setup Scripts id: setup - uses: github/gh-aw-actions/setup@b8068426813005612b960b5ab0b8bd2c27142323 # v0.71.5 + uses: github/gh-aw-actions/setup@5c2fe865bb4dc46e1450f6ee0d0541d759aea73a # v0.79.6 with: destination: ${{ runner.temp }}/gh-aw/actions job-name: ${{ github.job }} trace-id: ${{ needs.activation.outputs.setup-trace-id }} + parent-span-id: ${{ needs.activation.outputs.setup-parent-span-id || needs.activation.outputs.setup-span-id }} env: GH_AW_SETUP_WORKFLOW_NAME: "自动处理 Issue" GH_AW_CURRENT_WORKFLOW_REF: ${{ github.repository }}/.github/workflows/auto-code.lock.yml@${{ github.ref }} - GH_AW_INFO_VERSION: "1.0.40" + GH_AW_INFO_VERSION: "1.0.60" + GH_AW_INFO_ENGINE_ID: "copilot" - name: Download agent output artifact id: download-agent-output continue-on-error: true @@ -1119,9 +1247,27 @@ jobs: with: name: agent path: /tmp/gh-aw/ + - name: Extract base branch from agent output + id: extract-base-branch + if: steps.download-agent-output.outcome == 'success' + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io, getOctokit); + const { main } = require('${{ runner.temp }}/gh-aw/actions/extract_base_branch_from_agent_output.cjs'); + await main(); + - name: Checkout repository (trusted default branch for comment events) + if: (!cancelled()) && needs.agent.result != 'skipped' && contains(needs.agent.outputs.output_types, 'create_pull_request') && (github.event_name == 'issue_comment' || github.event_name == 'pull_request_review_comment') + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + with: + ref: ${{ github.event.repository.default_branch }} + token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} + persist-credentials: false + fetch-depth: 1 - name: Checkout repository - if: (!cancelled()) && needs.agent.result != 'skipped' && contains(needs.agent.outputs.output_types, 'create_pull_request') - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + if: (!cancelled()) && needs.agent.result != 'skipped' && contains(needs.agent.outputs.output_types, 'create_pull_request') && github.event_name != 'issue_comment' && github.event_name != 'pull_request_review_comment' + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 with: ref: develop token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} @@ -1144,6 +1290,7 @@ jobs: - name: Configure GH_HOST for enterprise compatibility id: ghes-host-config shell: bash + # zizmor: ignore[github-env] - GITHUB_SERVER_URL is set by GitHub Actions, not user input. run: | # Derive GH_HOST from GITHUB_SERVER_URL so the gh CLI targets the correct # GitHub instance (GHES/GHEC). On github.com this is a harmless no-op. @@ -1155,10 +1302,11 @@ jobs: uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 env: GH_AW_AGENT_OUTPUT: ${{ steps.setup-agent-output-env.outputs.GH_AW_AGENT_OUTPUT }} + GH_AW_COMMENT_ID: ${{ needs.activation.outputs.comment_id }} GH_AW_ALLOWED_DOMAINS: "api.business.githubcopilot.com,api.enterprise.githubcopilot.com,api.github.com,api.githubcopilot.com,api.individual.githubcopilot.com,api.snapcraft.io,archive.ubuntu.com,ark.cn-beijing.volces.com,azure.archive.ubuntu.com,crl.geotrust.com,crl.globalsign.com,crl.identrust.com,crl.sectigo.com,crl.thawte.com,crl.usertrust.com,crl.verisign.com,crl3.digicert.com,crl4.digicert.com,crls.ssl.com,github.com,host.docker.internal,json-schema.org,json.schemastore.org,keyserver.ubuntu.com,ocsp.digicert.com,ocsp.geotrust.com,ocsp.globalsign.com,ocsp.identrust.com,ocsp.sectigo.com,ocsp.ssl.com,ocsp.thawte.com,ocsp.usertrust.com,ocsp.verisign.com,packagecloud.io,packages.cloud.google.com,packages.microsoft.com,ppa.launchpad.net,raw.githubusercontent.com,registry.npmjs.org,s.symcb.com,s.symcd.com,security.ubuntu.com,telemetry.enterprise.githubcopilot.com,ts-crl.ws.symantec.com,ts-ocsp.ws.symantec.com,www.googleapis.com" GITHUB_SERVER_URL: ${{ github.server_url }} GITHUB_API_URL: ${{ github.api_url }} - GH_AW_SAFE_OUTPUTS_HANDLER_CONFIG: "{\"add_comment\":{\"max\":1},\"create_pull_request\":{\"base_branch\":\"develop\",\"max\":1,\"max_patch_files\":100,\"max_patch_size\":1024,\"protect_top_level_dot_folders\":true,\"protected_files\":[\"package.json\",\"bun.lockb\",\"bunfig.toml\",\"deno.json\",\"deno.jsonc\",\"deno.lock\",\"global.json\",\"NuGet.Config\",\"Directory.Packages.props\",\"mix.exs\",\"mix.lock\",\"go.mod\",\"go.sum\",\"stack.yaml\",\"stack.yaml.lock\",\"pom.xml\",\"build.gradle\",\"build.gradle.kts\",\"settings.gradle\",\"settings.gradle.kts\",\"gradle.properties\",\"package-lock.json\",\"yarn.lock\",\"pnpm-lock.yaml\",\"npm-shrinkwrap.json\",\"requirements.txt\",\"Pipfile\",\"Pipfile.lock\",\"pyproject.toml\",\"setup.py\",\"setup.cfg\",\"Gemfile\",\"Gemfile.lock\",\"uv.lock\",\"CODEOWNERS\",\"DESIGN.md\",\"README.md\",\"CONTRIBUTING.md\",\"CHANGELOG.md\",\"SECURITY.md\",\"CODE_OF_CONDUCT.md\",\"AGENTS.md\",\"CLAUDE.md\",\"GEMINI.md\"]},\"create_report_incomplete_issue\":{},\"missing_data\":{},\"missing_tool\":{},\"noop\":{\"max\":1,\"report-as-issue\":\"true\"},\"report_incomplete\":{}}" + GH_AW_SAFE_OUTPUTS_HANDLER_CONFIG: "{\"add_comment\":{\"max\":1},\"create_pull_request\":{\"base_branch\":\"develop\",\"max\":1,\"max_patch_files\":100,\"max_patch_size\":1024,\"protect_top_level_dot_folders\":true,\"protected_files\":[\"package.json\",\"bun.lockb\",\"bunfig.toml\",\"deno.json\",\"deno.jsonc\",\"deno.lock\",\"global.json\",\"NuGet.Config\",\"Directory.Packages.props\",\"mix.exs\",\"mix.lock\",\"go.mod\",\"go.sum\",\"stack.yaml\",\"stack.yaml.lock\",\"pom.xml\",\"build.gradle\",\"build.gradle.kts\",\"settings.gradle\",\"settings.gradle.kts\",\"gradle.properties\",\"package-lock.json\",\"yarn.lock\",\"pnpm-lock.yaml\",\"npm-shrinkwrap.json\",\"requirements.txt\",\"Pipfile\",\"Pipfile.lock\",\"pyproject.toml\",\"setup.py\",\"setup.cfg\",\"Gemfile\",\"Gemfile.lock\",\"uv.lock\",\"CODEOWNERS\",\"DESIGN.md\",\"README.md\",\"CONTRIBUTING.md\",\"CHANGELOG.md\",\"SECURITY.md\",\"CODE_OF_CONDUCT.md\",\"AGENTS.md\",\"CLAUDE.md\",\"GEMINI.md\"],\"protected_files_policy\":\"allowed\"},\"create_report_incomplete_issue\":{},\"missing_data\":{},\"missing_tool\":{},\"noop\":{\"max\":1,\"report-as-issue\":\"true\"},\"report_incomplete\":{}}" GH_AW_CI_TRIGGER_TOKEN: ${{ secrets.GH_AW_CI_TRIGGER_TOKEN }} with: github-token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/auto-code.md b/.github/workflows/auto-code.md index 5a51003..f73bb47 100644 --- a/.github/workflows/auto-code.md +++ b/.github/workflows/auto-code.md @@ -7,19 +7,22 @@ engine: id: copilot env: COPILOT_PROVIDER_BASE_URL: "https://ark.cn-beijing.volces.com/api/v3" - COPILOT_MODEL: doubao-seed-2-0-code-preview-260215 - COPILOT_PROVIDER_API_KEY: ${{ secrets.OPENAI_API_KEY }} + COPILOT_PROVIDER_BEARER_TOKEN: ${{ secrets.OPENAI_API_KEY }} + COPILOT_MODEL: doubao-seed-evolving COPILOT_PROVIDER_TYPE: openai + COPILOT_PROVIDER_WIRE_API: responses + +features: + dangerously-disable-sandbox-agent: "controlled environment for issue triage automation" +sandbox: + agent: false +strict: false network: allowed: - defaults - ark.cn-beijing.volces.com -sandbox: - agent: false -strict: false - tools: github: min-integrity: none @@ -28,32 +31,41 @@ permissions: contents: read issues: read pull-requests: read + copilot-requests: write safe-outputs: threat-detection: false create-pull-request: base-branch: develop + protected-files: allowed add-comment: max: 1 --- # 自动处理 Issue -当 Issue 被打上 `bug` 或 `enhancement` 标签时触发。其他标签直接退出,不做任何操作。 +当 Issue 被打上 `bug` 或 `enhancement` 或 `feature` 标签时触发。其他标签直接退出,不做任何操作。 ## 判断任务类型 读取 Issue #${{ github.event.issue.number }} 当前的标签: - 如果包含 `bug` 标签 → 执行【Bug 修复流程】 -- 如果包含 `enhancement` 标签 → 执行【新功能开发流程】 +- 如果包含 `feature` 标签 → 执行【新功能开发流程】 +- 如果包含 `enhancement` 标签 → 执行【功能改进开发流程】 - 其他情况 → 直接退出 +## 任务执行限制 +- 根据需求查找相对应的可能关联的代码文件 +- 尽量只读取相关代码文件和文档,不去操作无关代码和文件 +- 尽量减少操作时间和步骤,减少TOKEN和时间消耗 + --- + ## Bug 修复流程 1. 阅读 Issue 的完整标题和正文,理解问题现象 -2. 浏览仓库代码和文档,定位问题所在的文件和函数 +2. 浏览仓库相关代码和文档,定位问题所在的文件和函数 3. 分析根本原因 4. 实现修复方案,注意: - 保持与现有代码风格一致 @@ -62,7 +74,7 @@ safe-outputs: - 问题根因 - 修复方式 - 如何验证 -6. 在原 Issue 下用中文回复,说明已提交 PR 及修复思路 +6. 在原 Issue 下使用用户提问的语言进行回复,说明已提交 PR 及修复思路 如果问题过于复杂或信息不足,在 Issue 下用中文说明原因,不创建 PR。 @@ -71,7 +83,7 @@ safe-outputs: ## 新功能开发流程 1. 阅读 Issue 的完整标题和正文,理解需求目标 -2. 浏览仓库现有代码结构和文档,找到最相关的模块和文件 +2. 浏览仓库相关代码结构和文档,找到最相关的模块和文件 3. 制定实现方案: - 需要新增哪些文件或函数 - 需要修改哪些现有文件 @@ -83,6 +95,29 @@ safe-outputs: - 实现了哪些功能 - 涉及哪些文件改动 - 如何验证/测试 -6. 在原 Issue 下用用户提问的语言进行回复,说明已提交 PR、实现思路和测试建议 +6. 在原 Issue 下使用用户提问的语言进行回复,说明已提交 PR、实现思路和测试建议 + +如果需求描述不清晰或实现风险过大,在 Issue 下用中文说明原因,不创建 PR。 + +--- -如果需求描述不清晰或实现风险过大,在 Issue 下用用户提问的语言说明原因,不创建 PR。 \ No newline at end of file +## 功能改进开发流程 + +1. 阅读 Issue 的完整标题和正文,明确功能改进与优化的具体目标(如性能提升、代码结构重构、用户体验优化等)。 +2. 浏览仓库相关代码,评估受影响的范围,定位需要进行优化或重构的核心文件及函数。 +3. 制定改进方案,需特别注意: + - **向下兼容性**:确保本次改进不会破坏现有的公开接口(API)和已有功能。 + - **防御性编程**:优化逻辑的同时,不能降低代码的健壮性。 +4. 按照方案实施代码改动,注意: + - 保持与现有代码风格高度一致。 + - 仅针对性能、可读性或结构进行局部优化,严禁引入未经需求的无关大范围改动。 +5. 创建 Pull Request,根据改进的核心侧重点选择标题格式: + - 侧重于代码重构/可读性优化:`refactor: ` + - 侧重于运行运行效率/性能优化:`perf: ` + 在 PR 描述中说明: + - 优化的动机与改进点 + - 改进前后的对比或预期收益 + - 验证优化是否生效的测试方法 +6. 在原 Issue 下使用用户提问的语言进行回复,说明已提交 PR、优化思路及预期的提升效果。 + +如果功能改进可能带来重大的破坏性变更(Breaking Changes)或者现有代码结构不支持盲目优化,在 Issue 下用中文说明原因,保持维持原状,不创建 PR。 \ No newline at end of file diff --git a/.github/workflows/issue-triage.lock.yml b/.github/workflows/issue-triage.lock.yml index 4dd0549..c4c7adb 100644 --- a/.github/workflows/issue-triage.lock.yml +++ b/.github/workflows/issue-triage.lock.yml @@ -1,5 +1,5 @@ -# gh-aw-metadata: {"schema_version":"v3","frontmatter_hash":"49f1529d95cbf3c8e3d0da1df4b6cee935245532511b98ca9ecd7a44f1d0bb68","compiler_version":"v0.71.5","agent_id":"copilot"} -# gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_TOKEN","GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GITHUB_TOKEN","OPENAI_API_KEY"],"actions":[{"repo":"actions/checkout","sha":"de0fac2e4500dabe0009e67214ff5f5447ce83dd","version":"v6.0.2"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"},{"repo":"github/gh-aw-actions/setup","sha":"b8068426813005612b960b5ab0b8bd2c27142323","version":"v0.71.5"}],"containers":[{"image":"ghcr.io/github/github-mcp-server:v1.0.3","digest":"sha256:2ac27ef03461ef2b877031b838a7d1fd7f12b12d4ace7796d8cad91446d55959","pinned_image":"ghcr.io/github/github-mcp-server:v1.0.3@sha256:2ac27ef03461ef2b877031b838a7d1fd7f12b12d4ace7796d8cad91446d55959"},{"image":"node:lts-alpine","digest":"sha256:d1b3b4da11eefd5941e7f0b9cf17783fc99d9c6fc34884a665f40a06dbdfc94f","pinned_image":"node:lts-alpine@sha256:d1b3b4da11eefd5941e7f0b9cf17783fc99d9c6fc34884a665f40a06dbdfc94f"}]} +# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"01651461ea771a40a1d9a25bbf950f25e913d6b556796467343b77b45eabdd15","body_hash":"b17fdb8754e311cfac38664fbaa575804386c0027689ce0def213670917f77f0","compiler_version":"v0.79.6","agent_id":"copilot","engine_versions":{"copilot":"1.0.60"}} +# gh-aw-manifest: {"version":1,"secrets":["GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GITHUB_TOKEN","OPENAI_API_KEY"],"actions":[{"repo":"actions/checkout","sha":"df4cb1c069e1874edd31b4311f1884172cec0e10","version":"v6.0.3"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"},{"repo":"github/gh-aw-actions/setup","sha":"5c2fe865bb4dc46e1450f6ee0d0541d759aea73a","version":"v0.79.6"}],"containers":[{"image":"ghcr.io/github/github-mcp-server:v1.1.2","digest":"sha256:30197479d8036c7811892bc07e06f9a05c9ef3cdd79bc59f256d50647f95788c","pinned_image":"ghcr.io/github/github-mcp-server:v1.1.2@sha256:30197479d8036c7811892bc07e06f9a05c9ef3cdd79bc59f256d50647f95788c"}]} # ___ _ _ # / _ \ | | (_) # | |_| | __ _ ___ _ __ | |_ _ ___ @@ -14,7 +14,7 @@ # \ /\ / (_) | | | | ( | | | | (_) \ V V /\__ \ # \/ \/ \___/|_| |_|\_\|_| |_|\___/ \_/\_/ |___/ # -# This file was automatically generated by gh-aw (v0.71.5). DO NOT EDIT. +# This file was automatically generated by gh-aw (v0.79.6). DO NOT EDIT. # # To update this file, edit the corresponding .md file and run: # gh aw compile @@ -24,25 +24,23 @@ # # # Secrets used: -# - COPILOT_GITHUB_TOKEN # - GH_AW_GITHUB_MCP_SERVER_TOKEN # - GH_AW_GITHUB_TOKEN # - GITHUB_TOKEN # - OPENAI_API_KEY # # Custom actions used: -# - actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 +# - actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 # - actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 # - actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 # - actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 -# - github/gh-aw-actions/setup@b8068426813005612b960b5ab0b8bd2c27142323 # v0.71.5 +# - github/gh-aw-actions/setup@5c2fe865bb4dc46e1450f6ee0d0541d759aea73a # v0.79.6 # # Container images used: -# - ghcr.io/github/github-mcp-server:v1.0.3@sha256:2ac27ef03461ef2b877031b838a7d1fd7f12b12d4ace7796d8cad91446d55959 -# - node:lts-alpine@sha256:d1b3b4da11eefd5941e7f0b9cf17783fc99d9c6fc34884a665f40a06dbdfc94f +# - ghcr.io/github/github-mcp-server:v1.1.2@sha256:30197479d8036c7811892bc07e06f9a05c9ef3cdd79bc59f256d50647f95788c name: "Issue 自动分类与回复" -"on": +on: issues: types: - opened @@ -63,13 +61,20 @@ jobs: permissions: actions: read contents: read + env: + GH_AW_MAX_DAILY_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_DAILY_AI_CREDITS || '5000' }} outputs: body: ${{ steps.sanitized.outputs.body }} comment_id: "" comment_repo: "" + daily_effective_workflow_exceeded: ${{ steps.daily-effective-workflow-guardrail.outputs.daily_effective_workflow_exceeded == 'true' }} + daily_effective_workflow_threshold: ${{ steps.daily-effective-workflow-guardrail.outputs.daily_effective_workflow_threshold || '' }} + daily_effective_workflow_total_effective_tokens: ${{ steps.daily-effective-workflow-guardrail.outputs.daily_effective_workflow_total_effective_tokens || '' }} engine_id: ${{ steps.generate_aw_info.outputs.engine_id }} lockdown_check_failed: ${{ steps.generate_aw_info.outputs.lockdown_check_failed == 'true' }} model: ${{ steps.generate_aw_info.outputs.model }} + setup-parent-span-id: ${{ steps.setup.outputs.parent-span-id || steps.setup.outputs.span-id }} + setup-span-id: ${{ steps.setup.outputs.span-id }} setup-trace-id: ${{ steps.setup.outputs.trace-id }} stale_lock_file_failed: ${{ steps.check-lock-file.outputs.stale_lock_file_failed == 'true' }} text: ${{ steps.sanitized.outputs.text }} @@ -77,24 +82,27 @@ jobs: steps: - name: Setup Scripts id: setup - uses: github/gh-aw-actions/setup@b8068426813005612b960b5ab0b8bd2c27142323 # v0.71.5 + uses: github/gh-aw-actions/setup@5c2fe865bb4dc46e1450f6ee0d0541d759aea73a # v0.79.6 with: destination: ${{ runner.temp }}/gh-aw/actions job-name: ${{ github.job }} trace-id: ${{ needs.pre_activation.outputs.setup-trace-id }} + parent-span-id: ${{ needs.pre_activation.outputs.setup-parent-span-id || needs.pre_activation.outputs.setup-span-id }} + safe-output-artifact-client: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} env: GH_AW_SETUP_WORKFLOW_NAME: "Issue 自动分类与回复" GH_AW_CURRENT_WORKFLOW_REF: ${{ github.repository }}/.github/workflows/issue-triage.lock.yml@${{ github.ref }} - GH_AW_INFO_VERSION: "1.0.40" + GH_AW_INFO_VERSION: "1.0.60" + GH_AW_INFO_ENGINE_ID: "copilot" - name: Generate agentic run info id: generate_aw_info env: GH_AW_INFO_ENGINE_ID: "copilot" GH_AW_INFO_ENGINE_NAME: "GitHub Copilot CLI" - GH_AW_INFO_MODEL: ${{ vars.GH_AW_MODEL_AGENT_COPILOT || 'claude-sonnet-4.6' }} - GH_AW_INFO_VERSION: "1.0.40" - GH_AW_INFO_AGENT_VERSION: "1.0.40" - GH_AW_INFO_CLI_VERSION: "v0.71.5" + GH_AW_INFO_MODEL: ${{ vars.GH_AW_MODEL_AGENT_COPILOT || vars.GH_AW_DEFAULT_MODEL_COPILOT || 'claude-sonnet-4.6' }} + GH_AW_INFO_VERSION: "1.0.60" + GH_AW_INFO_AGENT_VERSION: "1.0.60" + GH_AW_INFO_CLI_VERSION: "v0.79.6" GH_AW_INFO_WORKFLOW_NAME: "Issue 自动分类与回复" GH_AW_INFO_EXPERIMENTAL: "false" GH_AW_INFO_SUPPORTS_TOOLS_ALLOWLIST: "true" @@ -112,13 +120,32 @@ jobs: setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require('${{ runner.temp }}/gh-aw/actions/generate_aw_info.cjs'); await main(core, context); + - name: Check daily workflow token guardrail + id: daily-effective-workflow-guardrail + if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 + env: + GH_AW_WORKFLOW_NAME: "Issue 自动分类与回复" + GH_AW_WORKFLOW_ID: "issue-triage" + GH_AW_RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} + GH_AW_WORKFLOW_DISPATCH_AW_CONTEXT: ${{ github.event.inputs.aw_context || '' }} + GH_AW_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GH_AW_MAX_DAILY_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_DAILY_AI_CREDITS || '5000' }} + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io, getOctokit); + const { main } = require('${{ runner.temp }}/gh-aw/actions/check_daily_aic_workflow_guardrail.cjs'); + await main(); - name: Checkout .github and .agents folders - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 with: persist-credentials: false sparse-checkout: | .github .agents + .antigravity .claude .codex .crush @@ -129,8 +156,8 @@ jobs: fetch-depth: 1 - name: Save agent config folders for base branch restoration env: - GH_AW_AGENT_FOLDERS: ".agents .claude .codex .crush .gemini .github .opencode .pi" - GH_AW_AGENT_FILES: ".crush.json AGENTS.md CLAUDE.md GEMINI.md PI.md opencode.jsonc" + GH_AW_AGENT_FOLDERS: ".agents .antigravity .claude .codex .crush .gemini .github .opencode .pi" + GH_AW_AGENT_FILES: ".crush.json AGENTS.md ANTIGRAVITY.md CLAUDE.md GEMINI.md PI.md opencode.jsonc" # poutine:ignore untrusted_checkout_exec run: bash "${RUNNER_TEMP}/gh-aw/actions/save_base_github_folders.sh" - name: Check workflow lock file @@ -148,7 +175,7 @@ jobs: - name: Check compile-agentic version uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 env: - GH_AW_COMPILED_VERSION: "v0.71.5" + GH_AW_COMPILED_VERSION: "v0.79.6" with: script: | const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); @@ -170,11 +197,11 @@ jobs: env: GH_AW_PROMPT: /tmp/gh-aw/aw-prompts/prompt.txt GH_AW_SAFE_OUTPUTS: ${{ runner.temp }}/gh-aw/safeoutputs/outputs.jsonl + GH_AW_EXPR_1A3A194A: ${{ github.event.discussion.number || (fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_type == 'discussion' && fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_number) }} + GH_AW_EXPR_463A214A: ${{ github.event.pull_request.number || (fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_type == 'pull_request' && fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_number) }} + GH_AW_EXPR_802A9F6A: ${{ github.event.issue.number || (fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_type == 'issue' && fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_number) }} + GH_AW_EXPR_FF1D34CE: ${{ github.event.comment.id || fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').comment_id }} GH_AW_GITHUB_ACTOR: ${{ github.actor }} - GH_AW_GITHUB_EVENT_COMMENT_ID: ${{ github.event.comment.id }} - GH_AW_GITHUB_EVENT_DISCUSSION_NUMBER: ${{ github.event.discussion.number }} - GH_AW_GITHUB_EVENT_ISSUE_NUMBER: ${{ github.event.issue.number }} - GH_AW_GITHUB_EVENT_PULL_REQUEST_NUMBER: ${{ github.event.pull_request.number }} GH_AW_GITHUB_REPOSITORY: ${{ github.repository }} GH_AW_GITHUB_RUN_ID: ${{ github.run_id }} GH_AW_GITHUB_WORKSPACE: ${{ github.workspace }} @@ -182,54 +209,54 @@ jobs: run: | bash "${RUNNER_TEMP}/gh-aw/actions/create_prompt_first.sh" { - cat << 'GH_AW_PROMPT_1857816c8098cba9_EOF' + cat << 'GH_AW_PROMPT_72243dd344875363_EOF' - GH_AW_PROMPT_1857816c8098cba9_EOF + GH_AW_PROMPT_72243dd344875363_EOF cat "${RUNNER_TEMP}/gh-aw/prompts/xpia.md" cat "${RUNNER_TEMP}/gh-aw/prompts/temp_folder_prompt.md" cat "${RUNNER_TEMP}/gh-aw/prompts/markdown.md" cat "${RUNNER_TEMP}/gh-aw/prompts/safe_outputs_prompt.md" - cat << 'GH_AW_PROMPT_1857816c8098cba9_EOF' + cat << 'GH_AW_PROMPT_72243dd344875363_EOF' Tools: add_comment, add_labels, missing_tool, missing_data, noop - GH_AW_PROMPT_1857816c8098cba9_EOF + GH_AW_PROMPT_72243dd344875363_EOF cat "${RUNNER_TEMP}/gh-aw/prompts/mcp_cli_tools_prompt.md" - cat << 'GH_AW_PROMPT_1857816c8098cba9_EOF' + cat << 'GH_AW_PROMPT_72243dd344875363_EOF' The following GitHub context information is available for this workflow: - {{#if __GH_AW_GITHUB_ACTOR__ }} + {{#if github.actor}} - **actor**: __GH_AW_GITHUB_ACTOR__ {{/if}} - {{#if __GH_AW_GITHUB_REPOSITORY__ }} + {{#if github.repository}} - **repository**: __GH_AW_GITHUB_REPOSITORY__ {{/if}} - {{#if __GH_AW_GITHUB_WORKSPACE__ }} + {{#if github.workspace}} - **workspace**: __GH_AW_GITHUB_WORKSPACE__ {{/if}} - {{#if __GH_AW_GITHUB_EVENT_ISSUE_NUMBER__ }} - - **issue-number**: #__GH_AW_GITHUB_EVENT_ISSUE_NUMBER__ + {{#if github.event.issue.number || (github.aw.context.item_type == 'issue' && github.aw.context.item_number)}} + - **issue-number**: #__GH_AW_EXPR_802A9F6A__ {{/if}} - {{#if __GH_AW_GITHUB_EVENT_DISCUSSION_NUMBER__ }} - - **discussion-number**: #__GH_AW_GITHUB_EVENT_DISCUSSION_NUMBER__ + {{#if github.event.discussion.number || (github.aw.context.item_type == 'discussion' && github.aw.context.item_number)}} + - **discussion-number**: #__GH_AW_EXPR_1A3A194A__ {{/if}} - {{#if __GH_AW_GITHUB_EVENT_PULL_REQUEST_NUMBER__ }} - - **pull-request-number**: #__GH_AW_GITHUB_EVENT_PULL_REQUEST_NUMBER__ + {{#if github.event.pull_request.number || (github.aw.context.item_type == 'pull_request' && github.aw.context.item_number)}} + - **pull-request-number**: #__GH_AW_EXPR_463A214A__ {{/if}} - {{#if __GH_AW_GITHUB_EVENT_COMMENT_ID__ }} - - **comment-id**: __GH_AW_GITHUB_EVENT_COMMENT_ID__ + {{#if github.event.comment.id || github.aw.context.comment_id}} + - **comment-id**: __GH_AW_EXPR_FF1D34CE__ {{/if}} - {{#if __GH_AW_GITHUB_RUN_ID__ }} + {{#if github.run_id}} - **workflow-run-id**: __GH_AW_GITHUB_RUN_ID__ {{/if}} - GH_AW_PROMPT_1857816c8098cba9_EOF + GH_AW_PROMPT_72243dd344875363_EOF cat "${RUNNER_TEMP}/gh-aw/prompts/github_mcp_tools_with_safeoutputs_prompt.md" - cat << 'GH_AW_PROMPT_1857816c8098cba9_EOF' + cat << 'GH_AW_PROMPT_72243dd344875363_EOF' {{#runtime-import .github/workflows/issue-triage.md}} - GH_AW_PROMPT_1857816c8098cba9_EOF + GH_AW_PROMPT_72243dd344875363_EOF } > "$GH_AW_PROMPT" - name: Interpolate variables and render templates uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 @@ -247,11 +274,11 @@ jobs: uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 env: GH_AW_PROMPT: /tmp/gh-aw/aw-prompts/prompt.txt + GH_AW_EXPR_1A3A194A: ${{ github.event.discussion.number || (fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_type == 'discussion' && fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_number) }} + GH_AW_EXPR_463A214A: ${{ github.event.pull_request.number || (fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_type == 'pull_request' && fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_number) }} + GH_AW_EXPR_802A9F6A: ${{ github.event.issue.number || (fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_type == 'issue' && fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_number) }} + GH_AW_EXPR_FF1D34CE: ${{ github.event.comment.id || fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').comment_id }} GH_AW_GITHUB_ACTOR: ${{ github.actor }} - GH_AW_GITHUB_EVENT_COMMENT_ID: ${{ github.event.comment.id }} - GH_AW_GITHUB_EVENT_DISCUSSION_NUMBER: ${{ github.event.discussion.number }} - GH_AW_GITHUB_EVENT_ISSUE_NUMBER: ${{ github.event.issue.number }} - GH_AW_GITHUB_EVENT_PULL_REQUEST_NUMBER: ${{ github.event.pull_request.number }} GH_AW_GITHUB_REPOSITORY: ${{ github.repository }} GH_AW_GITHUB_RUN_ID: ${{ github.run_id }} GH_AW_GITHUB_WORKSPACE: ${{ github.workspace }} @@ -268,11 +295,11 @@ jobs: return await substitutePlaceholders({ file: process.env.GH_AW_PROMPT, substitutions: { + GH_AW_EXPR_1A3A194A: process.env.GH_AW_EXPR_1A3A194A, + GH_AW_EXPR_463A214A: process.env.GH_AW_EXPR_463A214A, + GH_AW_EXPR_802A9F6A: process.env.GH_AW_EXPR_802A9F6A, + GH_AW_EXPR_FF1D34CE: process.env.GH_AW_EXPR_FF1D34CE, GH_AW_GITHUB_ACTOR: process.env.GH_AW_GITHUB_ACTOR, - GH_AW_GITHUB_EVENT_COMMENT_ID: process.env.GH_AW_GITHUB_EVENT_COMMENT_ID, - GH_AW_GITHUB_EVENT_DISCUSSION_NUMBER: process.env.GH_AW_GITHUB_EVENT_DISCUSSION_NUMBER, - GH_AW_GITHUB_EVENT_ISSUE_NUMBER: process.env.GH_AW_GITHUB_EVENT_ISSUE_NUMBER, - GH_AW_GITHUB_EVENT_PULL_REQUEST_NUMBER: process.env.GH_AW_GITHUB_EVENT_PULL_REQUEST_NUMBER, GH_AW_GITHUB_REPOSITORY: process.env.GH_AW_GITHUB_REPOSITORY, GH_AW_GITHUB_RUN_ID: process.env.GH_AW_GITHUB_RUN_ID, GH_AW_GITHUB_WORKSPACE: process.env.GH_AW_GITHUB_WORKSPACE, @@ -298,17 +325,25 @@ jobs: include-hidden-files: true path: | /tmp/gh-aw/aw_info.json + /tmp/gh-aw/model_multipliers.json + /tmp/gh-aw/models.json /tmp/gh-aw/aw-prompts/prompt.txt + /tmp/gh-aw/aw-prompts/prompt-template.txt + /tmp/gh-aw/aw-prompts/prompt-import-tree.json /tmp/gh-aw/github_rate_limits.jsonl /tmp/gh-aw/base + /tmp/gh-aw/.github/agents + /tmp/gh-aw/.github/skills if-no-files-found: ignore retention-days: 1 agent: needs: activation + if: needs.activation.outputs.daily_effective_workflow_exceeded != 'true' runs-on: ubuntu-latest permissions: contents: read + copilot-requests: write issues: read pull-requests: read env: @@ -319,29 +354,37 @@ jobs: GH_AW_MCP_LOG_DIR: /tmp/gh-aw/mcp-logs/safeoutputs GH_AW_WORKFLOW_ID_SANITIZED: issuetriage outputs: - agentic_engine_timeout: ${{ steps.detect-copilot-errors.outputs.agentic_engine_timeout || 'false' }} + agentic_engine_timeout: ${{ steps.detect-agent-errors.outputs.agentic_engine_timeout || 'false' }} + ai_credits_rate_limit_error: ${{ steps.parse-mcp-gateway.outputs.ai_credits_rate_limit_error || 'false' }} + aic: ${{ steps.parse-mcp-gateway.outputs.aic }} + ambient_context: ${{ steps.parse-mcp-gateway.outputs.ambient_context }} checkout_pr_success: ${{ steps.checkout-pr.outputs.checkout_pr_success || 'true' }} effective_tokens: ${{ steps.parse-mcp-gateway.outputs.effective_tokens }} has_patch: ${{ steps.collect_output.outputs.has_patch }} - inference_access_error: ${{ steps.detect-copilot-errors.outputs.inference_access_error || 'false' }} - mcp_policy_error: ${{ steps.detect-copilot-errors.outputs.mcp_policy_error || 'false' }} + inference_access_error: ${{ steps.detect-agent-errors.outputs.inference_access_error || 'false' }} + mcp_policy_error: ${{ steps.detect-agent-errors.outputs.mcp_policy_error || 'false' }} model: ${{ needs.activation.outputs.model }} - model_not_supported_error: ${{ steps.detect-copilot-errors.outputs.model_not_supported_error || 'false' }} + model_not_supported_error: ${{ steps.detect-agent-errors.outputs.model_not_supported_error || 'false' }} output: ${{ steps.collect_output.outputs.output }} output_types: ${{ steps.collect_output.outputs.output_types }} + setup-parent-span-id: ${{ steps.setup.outputs.parent-span-id || steps.setup.outputs.span-id }} + setup-span-id: ${{ steps.setup.outputs.span-id }} setup-trace-id: ${{ steps.setup.outputs.trace-id }} + unknown_model_ai_credits: ${{ steps.parse-mcp-gateway.outputs.unknown_model_ai_credits || 'false' }} steps: - name: Setup Scripts id: setup - uses: github/gh-aw-actions/setup@b8068426813005612b960b5ab0b8bd2c27142323 # v0.71.5 + uses: github/gh-aw-actions/setup@5c2fe865bb4dc46e1450f6ee0d0541d759aea73a # v0.79.6 with: destination: ${{ runner.temp }}/gh-aw/actions job-name: ${{ github.job }} trace-id: ${{ needs.activation.outputs.setup-trace-id }} + parent-span-id: ${{ needs.activation.outputs.setup-parent-span-id || needs.activation.outputs.setup-span-id }} env: GH_AW_SETUP_WORKFLOW_NAME: "Issue 自动分类与回复" GH_AW_CURRENT_WORKFLOW_REF: ${{ github.repository }}/.github/workflows/issue-triage.lock.yml@${{ github.ref }} - GH_AW_INFO_VERSION: "1.0.40" + GH_AW_INFO_VERSION: "1.0.60" + GH_AW_INFO_ENGINE_ID: "copilot" - name: Set runtime paths id: set-runtime-paths run: | @@ -351,7 +394,7 @@ jobs: echo "GH_AW_SAFE_OUTPUTS_TOOLS_PATH=${RUNNER_TEMP}/gh-aw/safeoutputs/tools.json" } >> "$GITHUB_OUTPUT" - name: Checkout repository - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 with: persist-credentials: false - name: Create gh-aw temp directory @@ -376,7 +419,7 @@ jobs: - name: Checkout PR branch id: checkout-pr if: | - github.event.pull_request || github.event.issue.pull_request + github.event.pull_request || github.event.issue.pull_request || github.event_name == 'workflow_dispatch' && fromJSON(github.event.inputs.aw_context || '{}').item_type == 'pull_request' uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 env: GH_TOKEN: ${{ secrets.GH_AW_GITHUB_MCP_SERVER_TOKEN || secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} @@ -388,7 +431,7 @@ jobs: const { main } = require('${{ runner.temp }}/gh-aw/actions/checkout_pr_branch.cjs'); await main(); - name: Install GitHub Copilot CLI - run: bash "${RUNNER_TEMP}/gh-aw/actions/install_copilot_cli.sh" 1.0.40 + run: bash "${RUNNER_TEMP}/gh-aw/actions/install_copilot_cli.sh" 1.0.60 env: GH_HOST: github.com - name: Parse integrity filter lists @@ -406,19 +449,28 @@ jobs: - name: Restore agent config folders from base branch if: steps.checkout-pr.outcome == 'success' env: - GH_AW_AGENT_FOLDERS: ".agents .claude .codex .crush .gemini .github .opencode .pi" - GH_AW_AGENT_FILES: ".crush.json AGENTS.md CLAUDE.md GEMINI.md PI.md opencode.jsonc" + GH_AW_AGENT_FOLDERS: ".agents .antigravity .claude .codex .crush .gemini .github .opencode .pi" + GH_AW_AGENT_FILES: ".crush.json AGENTS.md ANTIGRAVITY.md CLAUDE.md GEMINI.md PI.md opencode.jsonc" run: bash "${RUNNER_TEMP}/gh-aw/actions/restore_base_github_folders.sh" + - name: Restore inline sub-agents from activation artifact + env: + GH_AW_SUB_AGENT_DIR: ".github/agents" + GH_AW_SUB_AGENT_EXT: ".agent.md" + run: bash "${RUNNER_TEMP}/gh-aw/actions/restore_inline_sub_agents.sh" + - name: Restore inline skills from activation artifact + env: + GH_AW_SKILL_DIR: ".github/skills" + run: bash "${RUNNER_TEMP}/gh-aw/actions/restore_inline_skills.sh" - name: Download container images - run: bash "${RUNNER_TEMP}/gh-aw/actions/download_docker_images.sh" ghcr.io/github/github-mcp-server:v1.0.3@sha256:2ac27ef03461ef2b877031b838a7d1fd7f12b12d4ace7796d8cad91446d55959 node:lts-alpine@sha256:d1b3b4da11eefd5941e7f0b9cf17783fc99d9c6fc34884a665f40a06dbdfc94f + run: bash "${RUNNER_TEMP}/gh-aw/actions/download_docker_images.sh" ghcr.io/github/github-mcp-server:v1.1.2@sha256:30197479d8036c7811892bc07e06f9a05c9ef3cdd79bc59f256d50647f95788c - name: Generate Safe Outputs Config run: | mkdir -p "${RUNNER_TEMP}/gh-aw/safeoutputs" mkdir -p /tmp/gh-aw/safeoutputs mkdir -p /tmp/gh-aw/mcp-logs/safeoutputs - cat > "${RUNNER_TEMP}/gh-aw/safeoutputs/config.json" << 'GH_AW_SAFE_OUTPUTS_CONFIG_18efef56cd5f6986_EOF' + cat > "${RUNNER_TEMP}/gh-aw/safeoutputs/config.json" << 'GH_AW_SAFE_OUTPUTS_CONFIG_33a8e71ee9b45c67_EOF' {"add_comment":{"max":1},"add_labels":{"allowed":["bug","feature","enhancement","documentation","question","duplicate","invalid"]},"create_report_incomplete_issue":{},"missing_data":{},"missing_tool":{},"noop":{"max":1,"report-as-issue":"true"},"report_incomplete":{}} - GH_AW_SAFE_OUTPUTS_CONFIG_18efef56cd5f6986_EOF + GH_AW_SAFE_OUTPUTS_CONFIG_33a8e71ee9b45c67_EOF - name: Generate Safe Outputs Tools env: GH_AW_TOOLS_META_JSON: | @@ -620,17 +672,22 @@ jobs: export GH_AW_ENGINE="copilot" MCP_GATEWAY_UID=$(id -u 2>/dev/null || echo '0') MCP_GATEWAY_GID=$(id -g 2>/dev/null || echo '0') - DOCKER_SOCK_GID=$(stat -c '%g' /var/run/docker.sock 2>/dev/null || echo '0') - export MCP_GATEWAY_DOCKER_COMMAND='docker run -i --rm --network host --add-host host.docker.internal:127.0.0.1 --user '"${MCP_GATEWAY_UID}"':'"${MCP_GATEWAY_GID}"' --group-add '"${DOCKER_SOCK_GID}"' -v /var/run/docker.sock:/var/run/docker.sock -e MCP_GATEWAY_PORT -e MCP_GATEWAY_DOMAIN -e MCP_GATEWAY_API_KEY -e MCP_GATEWAY_PAYLOAD_DIR -e MCP_GATEWAY_PAYLOAD_SIZE_THRESHOLD -e DEBUG -e MCP_GATEWAY_LOG_DIR -e GH_AW_MCP_LOG_DIR -e GH_AW_SAFE_OUTPUTS -e GH_AW_SAFE_OUTPUTS_CONFIG_PATH -e GH_AW_SAFE_OUTPUTS_TOOLS_PATH -e GH_AW_ASSETS_BRANCH -e GH_AW_ASSETS_MAX_SIZE_KB -e GH_AW_ASSETS_ALLOWED_EXTS -e DEFAULT_BRANCH -e GITHUB_MCP_SERVER_TOKEN -e GITHUB_MCP_GUARD_MIN_INTEGRITY -e GITHUB_MCP_GUARD_REPOS -e GITHUB_REPOSITORY -e GITHUB_SERVER_URL -e GITHUB_SHA -e GITHUB_WORKSPACE -e GITHUB_TOKEN -e GITHUB_RUN_ID -e GITHUB_RUN_NUMBER -e GITHUB_RUN_ATTEMPT -e GITHUB_JOB -e GITHUB_ACTION -e GITHUB_EVENT_NAME -e GITHUB_EVENT_PATH -e GITHUB_ACTOR -e GITHUB_ACTOR_ID -e GITHUB_TRIGGERING_ACTOR -e GITHUB_WORKFLOW -e GITHUB_WORKFLOW_REF -e GITHUB_WORKFLOW_SHA -e GITHUB_REF -e GITHUB_REF_NAME -e GITHUB_REF_TYPE -e GITHUB_HEAD_REF -e GITHUB_BASE_REF -e GH_AW_SAFE_OUTPUTS_PORT -e GH_AW_SAFE_OUTPUTS_API_KEY -v /tmp/gh-aw/mcp-payloads:/tmp/gh-aw/mcp-payloads:rw -v /opt:/opt:ro -v /tmp:/tmp:rw -v '"${GITHUB_WORKSPACE}"':'"${GITHUB_WORKSPACE}"':rw ghcr.io/github/gh-aw-mcpg:v0.3.6' + case "${DOCKER_HOST:-}" in + unix://* ) DOCKER_SOCK_PATH="${DOCKER_HOST#unix://}" ;; + /* ) DOCKER_SOCK_PATH="$DOCKER_HOST" ;; + * ) DOCKER_SOCK_PATH=/var/run/docker.sock ;; + esac + DOCKER_SOCK_GID=$(stat -c '%g' "$DOCKER_SOCK_PATH" 2>/dev/null || echo '0') + export MCP_GATEWAY_DOCKER_COMMAND='docker run -i --rm --network host --add-host host.docker.internal:127.0.0.1 --user '"${MCP_GATEWAY_UID}"':'"${MCP_GATEWAY_GID}"' --group-add '"${DOCKER_SOCK_GID}"' -v '"${DOCKER_SOCK_PATH}"':/var/run/docker.sock -e MCP_GATEWAY_PORT -e MCP_GATEWAY_DOMAIN -e MCP_GATEWAY_API_KEY -e MCP_GATEWAY_PAYLOAD_DIR -e MCP_GATEWAY_PAYLOAD_SIZE_THRESHOLD -e DOCKER_HOST=unix:///var/run/docker.sock -e DEBUG -e MCP_GATEWAY_LOG_DIR -e GH_AW_MCP_LOG_DIR -e GH_AW_SAFE_OUTPUTS -e GH_AW_SAFE_OUTPUTS_CONFIG_PATH -e GH_AW_SAFE_OUTPUTS_TOOLS_PATH -e GH_AW_ASSETS_BRANCH -e GH_AW_ASSETS_MAX_SIZE_KB -e GH_AW_ASSETS_ALLOWED_EXTS -e DEFAULT_BRANCH -e GITHUB_MCP_SERVER_TOKEN -e GITHUB_MCP_GUARD_MIN_INTEGRITY -e GITHUB_MCP_GUARD_REPOS -e GITHUB_REPOSITORY -e GITHUB_SERVER_URL -e GITHUB_SHA -e GITHUB_WORKSPACE -e GITHUB_TOKEN -e GITHUB_RUN_ID -e GITHUB_RUN_NUMBER -e GITHUB_RUN_ATTEMPT -e GITHUB_JOB -e GITHUB_ACTION -e GITHUB_EVENT_NAME -e GITHUB_EVENT_PATH -e GITHUB_ACTOR -e GITHUB_ACTOR_ID -e GITHUB_TRIGGERING_ACTOR -e GITHUB_WORKFLOW -e GITHUB_WORKFLOW_REF -e GITHUB_WORKFLOW_SHA -e GITHUB_REF -e GITHUB_REF_NAME -e GITHUB_REF_TYPE -e GITHUB_HEAD_REF -e GITHUB_BASE_REF -e GH_AW_SAFE_OUTPUTS_PORT -e GH_AW_SAFE_OUTPUTS_API_KEY -v /tmp/gh-aw/mcp-payloads:/tmp/gh-aw/mcp-payloads:rw -v /opt:/opt:ro -v /tmp:/tmp:rw -v '"${GITHUB_WORKSPACE}"':'"${GITHUB_WORKSPACE}"':rw ghcr.io/github/gh-aw-mcpg:v0.3.25' mkdir -p /home/runner/.copilot GH_AW_NODE=$(which node 2>/dev/null || command -v node 2>/dev/null || echo node) - cat << GH_AW_MCP_CONFIG_0138aecd21cfde50_EOF | "$GH_AW_NODE" "${RUNNER_TEMP}/gh-aw/actions/start_mcp_gateway.cjs" + cat << GH_AW_MCP_CONFIG_f41962abaffbda74_EOF | "$GH_AW_NODE" "${RUNNER_TEMP}/gh-aw/actions/start_mcp_gateway.cjs" { "mcpServers": { "github": { "type": "stdio", - "container": "ghcr.io/github/github-mcp-server:v1.0.3", + "container": "ghcr.io/github/github-mcp-server:v1.1.2", "env": { "GITHUB_HOST": "\${GITHUB_SERVER_URL}", "GITHUB_PERSONAL_ACCESS_TOKEN": "\${GITHUB_MCP_SERVER_TOKEN}", @@ -669,7 +726,7 @@ jobs: "payloadDir": "${MCP_GATEWAY_PAYLOAD_DIR}" } } - GH_AW_MCP_CONFIG_0138aecd21cfde50_EOF + GH_AW_MCP_CONFIG_f41962abaffbda74_EOF - name: Mount MCP servers as CLIs id: mount-mcp-clis continue-on-error: true @@ -699,26 +756,31 @@ jobs: timeout-minutes: 20 run: | set -o pipefail + printf '%s' "$(date +%s%3N)" > /tmp/gh-aw/agent_cli_start_ms.txt touch /tmp/gh-aw/agent-step-summary.md (umask 177 && touch /tmp/gh-aw/agent-stdio.log) + trap 'rm -f /home/runner/.copilot/settings.json' EXIT + mkdir -p /home/runner/.copilot + printf '%s' '{"builtInAgents":{"rubberDuck":false}}' > /home/runner/.copilot/settings.json mkdir -p /tmp/ mkdir -p /tmp/gh-aw/ mkdir -p /tmp/gh-aw/agent/ mkdir -p /tmp/gh-aw/sandbox/agent/logs/ - GH_AW_NODE_EXEC="${GH_AW_NODE_BIN:-}"; if [ -z "$GH_AW_NODE_EXEC" ] || [ ! -x "$GH_AW_NODE_EXEC" ]; then GH_AW_NODE_EXEC="$(command -v node 2>/dev/null || echo node)"; fi; "$GH_AW_NODE_EXEC" ${RUNNER_TEMP}/gh-aw/actions/copilot_harness.cjs copilot --add-dir /tmp/ --add-dir /tmp/gh-aw/ --add-dir /tmp/gh-aw/agent/ --log-level all --log-dir /tmp/gh-aw/sandbox/agent/logs/ --disable-builtin-mcps --no-ask-user --allow-tool github --allow-tool safeoutputs --prompt-file /tmp/gh-aw/aw-prompts/prompt.txt 2>&1 | tee /tmp/gh-aw/agent-stdio.log + GH_AW_NODE_EXEC="${GH_AW_NODE_BIN:-}"; if [ -z "$GH_AW_NODE_EXEC" ] || [ ! -x "$GH_AW_NODE_EXEC" ]; then GH_AW_NODE_EXEC="$(command -v node 2>/dev/null || true)"; fi; if [ -z "$GH_AW_NODE_EXEC" ]; then echo "node runtime missing on this runner — check runtimes.node in workflow YAML" >&2; exit 127; fi; GH_AW_NPM_GLOBAL_ROOT="$(npm root -g 2>/dev/null || true)"; if [ -n "$GH_AW_NPM_GLOBAL_ROOT" ]; then export NODE_PATH="${GH_AW_NPM_GLOBAL_ROOT}${NODE_PATH:+:${NODE_PATH}}"; fi; "$GH_AW_NODE_EXEC" ${RUNNER_TEMP}/gh-aw/actions/copilot_harness.cjs copilot --add-dir /tmp/ --add-dir /tmp/gh-aw/ --add-dir /tmp/gh-aw/agent/ --log-level all --log-dir /tmp/gh-aw/sandbox/agent/logs/ --disable-builtin-mcps --no-ask-user --allow-tool github --allow-tool safeoutputs --prompt-file /tmp/gh-aw/aw-prompts/prompt.txt 2>&1 | tee /tmp/gh-aw/agent-stdio.log env: COPILOT_AGENT_RUNNER_TYPE: STANDALONE - COPILOT_API_KEY: dummy-byok-key-for-offline-mode - COPILOT_GITHUB_TOKEN: ${{ secrets.COPILOT_GITHUB_TOKEN }} - COPILOT_MODEL: doubao-seed-2-0-code-preview-260215 - COPILOT_PROVIDER_API_KEY: ${{ secrets.OPENAI_API_KEY }} + COPILOT_MODEL: doubao-seed-evolving COPILOT_PROVIDER_BASE_URL: https://ark.cn-beijing.volces.com/api/v3 + COPILOT_PROVIDER_BEARER_TOKEN: ${{ secrets.OPENAI_API_KEY }} COPILOT_PROVIDER_TYPE: openai + COPILOT_PROVIDER_WIRE_API: responses + GH_AW_MAX_TURNS: ${{ vars.GH_AW_DEFAULT_MAX_TURNS || '' }} GH_AW_MCP_CONFIG: /home/runner/.copilot/mcp-config.json GH_AW_PHASE: agent GH_AW_PROMPT: /tmp/gh-aw/aw-prompts/prompt.txt GH_AW_SAFE_OUTPUTS: ${{ steps.set-runtime-paths.outputs.GH_AW_SAFE_OUTPUTS }} - GH_AW_VERSION: v0.71.5 + GH_AW_TIMEOUT_MINUTES: 20 + GH_AW_VERSION: v0.79.6 GITHUB_API_URL: ${{ github.api_url }} GITHUB_AW: true GITHUB_COPILOT_INTEGRATION_ID: agentic-workflows @@ -728,12 +790,14 @@ jobs: GITHUB_SERVER_URL: ${{ github.server_url }} GITHUB_STEP_SUMMARY: /tmp/gh-aw/agent-step-summary.md GITHUB_WORKSPACE: ${{ github.workspace }} + RUNNER_TEMP: ${{ runner.temp }} + S2STOKENS: true XDG_CONFIG_HOME: /home/runner - - name: Detect Copilot errors - id: detect-copilot-errors + - name: Detect agent errors if: always() + id: detect-agent-errors continue-on-error: true - run: node "${RUNNER_TEMP}/gh-aw/actions/detect_copilot_errors.cjs" + run: node "${RUNNER_TEMP}/gh-aw/actions/detect_agent_errors.cjs" - name: Configure Git credentials env: REPO_NAME: ${{ github.repository }} @@ -770,8 +834,7 @@ jobs: const { main } = require('${{ runner.temp }}/gh-aw/actions/redact_secrets.cjs'); await main(); env: - GH_AW_SECRET_NAMES: 'COPILOT_GITHUB_TOKEN,GH_AW_GITHUB_MCP_SERVER_TOKEN,GH_AW_GITHUB_TOKEN,GITHUB_TOKEN,OPENAI_API_KEY' - SECRET_COPILOT_GITHUB_TOKEN: ${{ secrets.COPILOT_GITHUB_TOKEN }} + GH_AW_SECRET_NAMES: 'GH_AW_GITHUB_MCP_SERVER_TOKEN,GH_AW_GITHUB_TOKEN,GITHUB_TOKEN,OPENAI_API_KEY' SECRET_GH_AW_GITHUB_MCP_SERVER_TOKEN: ${{ secrets.GH_AW_GITHUB_MCP_SERVER_TOKEN }} SECRET_GH_AW_GITHUB_TOKEN: ${{ secrets.GH_AW_GITHUB_TOKEN }} SECRET_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -856,7 +919,7 @@ jobs: - safe_outputs if: > always() && (needs.agent.result != 'skipped' || needs.activation.outputs.lockdown_check_failed == 'true' || - needs.activation.outputs.stale_lock_file_failed == 'true') + needs.activation.outputs.stale_lock_file_failed == 'true' || needs.activation.outputs.daily_effective_workflow_exceeded == 'true') runs-on: ubuntu-slim permissions: contents: read @@ -866,6 +929,7 @@ jobs: concurrency: group: "gh-aw-conclusion-issue-triage" cancel-in-progress: false + queue: max outputs: incomplete_count: ${{ steps.report_incomplete.outputs.incomplete_count }} noop_message: ${{ steps.noop.outputs.noop_message }} @@ -874,15 +938,17 @@ jobs: steps: - name: Setup Scripts id: setup - uses: github/gh-aw-actions/setup@b8068426813005612b960b5ab0b8bd2c27142323 # v0.71.5 + uses: github/gh-aw-actions/setup@5c2fe865bb4dc46e1450f6ee0d0541d759aea73a # v0.79.6 with: destination: ${{ runner.temp }}/gh-aw/actions job-name: ${{ github.job }} trace-id: ${{ needs.activation.outputs.setup-trace-id }} + parent-span-id: ${{ needs.activation.outputs.setup-parent-span-id || needs.activation.outputs.setup-span-id }} env: GH_AW_SETUP_WORKFLOW_NAME: "Issue 自动分类与回复" GH_AW_CURRENT_WORKFLOW_REF: ${{ github.repository }}/.github/workflows/issue-triage.lock.yml@${{ github.ref }} - GH_AW_INFO_VERSION: "1.0.40" + GH_AW_INFO_VERSION: "1.0.60" + GH_AW_INFO_ENGINE_ID: "copilot" - name: Download agent output artifact id: download-agent-output continue-on-error: true @@ -897,6 +963,40 @@ jobs: mkdir -p /tmp/gh-aw/ find "/tmp/gh-aw/" -type f -print echo "GH_AW_AGENT_OUTPUT=/tmp/gh-aw/agent_output.json" >> "$GITHUB_OUTPUT" + - name: Collect usage artifact files + if: always() + continue-on-error: true + run: | + mkdir -p /tmp/gh-aw/usage/agent /tmp/gh-aw/usage/detection + echo "Usage artifact source file status:" + for file in /tmp/gh-aw/aw-info.jsonl /tmp/gh-aw/agent_usage.jsonl /tmp/gh-aw/detection_usage.jsonl /tmp/gh-aw/sandbox/firewall-audit-logs/api-proxy-logs/token-usage.jsonl /tmp/gh-aw/sandbox/firewall/logs/api-proxy-logs/token-usage.jsonl /tmp/gh-aw/sandbox/firewall/audit/api-proxy-logs/token-usage.jsonl /tmp/gh-aw/threat-detection/sandbox/firewall-audit-logs/api-proxy-logs/token-usage.jsonl /tmp/gh-aw/threat-detection/sandbox/firewall/logs/api-proxy-logs/token-usage.jsonl /tmp/gh-aw/threat-detection/sandbox/firewall/audit/api-proxy-logs/token-usage.jsonl; do + [ -f "$file" ] && echo "FOUND: $file" || echo "MISSING: $file" + done + [ -f /tmp/gh-aw/aw-info.jsonl ] && cp /tmp/gh-aw/aw-info.jsonl /tmp/gh-aw/usage/aw-info.jsonl || true + [ -f /tmp/gh-aw/agent_usage.jsonl ] && cp /tmp/gh-aw/agent_usage.jsonl /tmp/gh-aw/usage/agent_usage.jsonl || true + [ -f /tmp/gh-aw/detection_usage.jsonl ] && cp /tmp/gh-aw/detection_usage.jsonl /tmp/gh-aw/usage/detection_usage.jsonl || true + [ -f /tmp/gh-aw/sandbox/firewall-audit-logs/api-proxy-logs/token-usage.jsonl ] && cp /tmp/gh-aw/sandbox/firewall-audit-logs/api-proxy-logs/token-usage.jsonl /tmp/gh-aw/usage/agent/token_usage.jsonl || true + [ -f /tmp/gh-aw/sandbox/firewall/logs/api-proxy-logs/token-usage.jsonl ] && cp /tmp/gh-aw/sandbox/firewall/logs/api-proxy-logs/token-usage.jsonl /tmp/gh-aw/usage/agent/token_usage.jsonl || true + [ -f /tmp/gh-aw/sandbox/firewall/audit/api-proxy-logs/token-usage.jsonl ] && cp /tmp/gh-aw/sandbox/firewall/audit/api-proxy-logs/token-usage.jsonl /tmp/gh-aw/usage/agent/token_usage.jsonl || true + [ -f /tmp/gh-aw/threat-detection/sandbox/firewall-audit-logs/api-proxy-logs/token-usage.jsonl ] && cp /tmp/gh-aw/threat-detection/sandbox/firewall-audit-logs/api-proxy-logs/token-usage.jsonl /tmp/gh-aw/usage/detection/token_usage.jsonl || true + [ -f /tmp/gh-aw/threat-detection/sandbox/firewall/logs/api-proxy-logs/token-usage.jsonl ] && cp /tmp/gh-aw/threat-detection/sandbox/firewall/logs/api-proxy-logs/token-usage.jsonl /tmp/gh-aw/usage/detection/token_usage.jsonl || true + [ -f /tmp/gh-aw/threat-detection/sandbox/firewall/audit/api-proxy-logs/token-usage.jsonl ] && cp /tmp/gh-aw/threat-detection/sandbox/firewall/audit/api-proxy-logs/token-usage.jsonl /tmp/gh-aw/usage/detection/token_usage.jsonl || true + [ -f /tmp/gh-aw/usage/agent/token_usage.jsonl ] || : > /tmp/gh-aw/usage/agent/token_usage.jsonl + [ -f /tmp/gh-aw/usage/detection/token_usage.jsonl ] || : > /tmp/gh-aw/usage/detection/token_usage.jsonl + find /tmp/gh-aw/usage -type f -print | sort + - name: Upload usage artifact + if: always() + continue-on-error: true + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 + with: + name: usage + path: | + /tmp/gh-aw/usage/aw-info.jsonl + /tmp/gh-aw/usage/agent_usage.jsonl + /tmp/gh-aw/usage/detection_usage.jsonl + /tmp/gh-aw/usage/agent/token_usage.jsonl + /tmp/gh-aw/usage/detection/token_usage.jsonl + if-no-files-found: ignore - name: Process no-op messages id: noop uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 @@ -904,9 +1004,13 @@ jobs: GH_AW_AGENT_OUTPUT: ${{ steps.setup-agent-output-env.outputs.GH_AW_AGENT_OUTPUT }} GH_AW_NOOP_MAX: "1" GH_AW_WORKFLOW_NAME: "Issue 自动分类与回复" + GH_AW_WORKFLOW_SOURCE_URL: "${{ github.server_url }}/${{ github.repository }}/blob/${{ github.ref_name }}/.github/workflows/issue-triage.md" GH_AW_RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} GH_AW_AGENT_CONCLUSION: ${{ needs.agent.result }} GH_AW_NOOP_REPORT_AS_ISSUE: "true" + GH_AW_AIC: ${{ needs.agent.outputs.aic }} + GH_AW_AMBIENT_CONTEXT: ${{ needs.agent.outputs.ambient_context }} + GH_AW_WORKFLOW_ID: "issue-triage" with: github-token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} script: | @@ -921,6 +1025,7 @@ jobs: GH_AW_AGENT_OUTPUT: ${{ steps.setup-agent-output-env.outputs.GH_AW_AGENT_OUTPUT }} GH_AW_MISSING_TOOL_CREATE_ISSUE: "true" GH_AW_WORKFLOW_NAME: "Issue 自动分类与回复" + GH_AW_WORKFLOW_SOURCE_URL: "${{ github.server_url }}/${{ github.repository }}/blob/${{ github.ref_name }}/.github/workflows/issue-triage.md" with: github-token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} script: | @@ -935,6 +1040,7 @@ jobs: GH_AW_AGENT_OUTPUT: ${{ steps.setup-agent-output-env.outputs.GH_AW_AGENT_OUTPUT }} GH_AW_REPORT_INCOMPLETE_CREATE_ISSUE: "true" GH_AW_WORKFLOW_NAME: "Issue 自动分类与回复" + GH_AW_WORKFLOW_SOURCE_URL: "${{ github.server_url }}/${{ github.repository }}/blob/${{ github.ref_name }}/.github/workflows/issue-triage.md" with: github-token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} script: | @@ -949,12 +1055,18 @@ jobs: env: GH_AW_AGENT_OUTPUT: ${{ steps.setup-agent-output-env.outputs.GH_AW_AGENT_OUTPUT }} GH_AW_WORKFLOW_NAME: "Issue 自动分类与回复" + GH_AW_WORKFLOW_SOURCE_URL: "${{ github.server_url }}/${{ github.repository }}/blob/${{ github.ref_name }}/.github/workflows/issue-triage.md" GH_AW_RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} GH_AW_AGENT_CONCLUSION: ${{ needs.agent.result }} GH_AW_WORKFLOW_ID: "issue-triage" GH_AW_ACTION_FAILURE_ISSUE_EXPIRES_HOURS: "168" GH_AW_ENGINE_ID: "copilot" GH_AW_CHECKOUT_PR_SUCCESS: ${{ needs.agent.outputs.checkout_pr_success }} + GH_AW_EFFECTIVE_TOKENS: ${{ needs.agent.outputs.effective_tokens || '' }} + GH_AW_AI_CREDITS_RATE_LIMIT_ERROR: ${{ needs.agent.outputs.ai_credits_rate_limit_error || 'false' }} + GH_AW_UNKNOWN_MODEL_AI_CREDITS: ${{ needs.agent.outputs.unknown_model_ai_credits || 'false' }} + GH_AW_AIC: ${{ needs.agent.outputs.aic }} + GH_AW_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFERENCE_ACCESS_ERROR: ${{ needs.agent.outputs.inference_access_error }} GH_AW_MCP_POLICY_ERROR: ${{ needs.agent.outputs.mcp_policy_error }} GH_AW_AGENTIC_ENGINE_TIMEOUT: ${{ needs.agent.outputs.agentic_engine_timeout }} @@ -962,6 +1074,9 @@ jobs: GH_AW_ENGINE_API_HOSTS: "api.enterprise.githubcopilot.com,api.githubcopilot.com,api.business.githubcopilot.com,api.individual.githubcopilot.com" GH_AW_LOCKDOWN_CHECK_FAILED: ${{ needs.activation.outputs.lockdown_check_failed }} GH_AW_STALE_LOCK_FILE_FAILED: ${{ needs.activation.outputs.stale_lock_file_failed }} + GH_AW_DAILY_EFFECTIVE_WORKFLOW_EXCEEDED: ${{ needs.activation.outputs.daily_effective_workflow_exceeded }} + GH_AW_DAILY_EFFECTIVE_WORKFLOW_TOTAL_EFFECTIVE_TOKENS: ${{ needs.activation.outputs.daily_effective_workflow_total_effective_tokens }} + GH_AW_DAILY_EFFECTIVE_WORKFLOW_THRESHOLD: ${{ needs.activation.outputs.daily_effective_workflow_threshold }} GH_AW_GROUP_REPORTS: "false" GH_AW_FAILURE_REPORT_AS_ISSUE: "true" GH_AW_MISSING_TOOL_REPORT_AS_FAILURE: "true" @@ -980,18 +1095,21 @@ jobs: outputs: activated: ${{ steps.check_membership.outputs.is_team_member == 'true' }} matched_command: '' + setup-parent-span-id: ${{ steps.setup.outputs.parent-span-id || steps.setup.outputs.span-id }} + setup-span-id: ${{ steps.setup.outputs.span-id }} setup-trace-id: ${{ steps.setup.outputs.trace-id }} steps: - name: Setup Scripts id: setup - uses: github/gh-aw-actions/setup@b8068426813005612b960b5ab0b8bd2c27142323 # v0.71.5 + uses: github/gh-aw-actions/setup@5c2fe865bb4dc46e1450f6ee0d0541d759aea73a # v0.79.6 with: destination: ${{ runner.temp }}/gh-aw/actions job-name: ${{ github.job }} env: GH_AW_SETUP_WORKFLOW_NAME: "Issue 自动分类与回复" GH_AW_CURRENT_WORKFLOW_REF: ${{ github.repository }}/.github/workflows/issue-triage.lock.yml@${{ github.ref }} - GH_AW_INFO_VERSION: "1.0.40" + GH_AW_INFO_VERSION: "1.0.60" + GH_AW_INFO_ENGINE_ID: "copilot" - name: Check team membership for workflow id: check_membership uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 @@ -1016,15 +1134,19 @@ jobs: discussions: write issues: write pull-requests: write - timeout-minutes: 15 + timeout-minutes: 45 env: + GH_AW_AGENT_AIC: ${{ needs.agent.outputs.aic }} + GH_AW_AIC: ${{ needs.agent.outputs.aic }} + GH_AW_AMBIENT_CONTEXT: ${{ needs.agent.outputs.ambient_context }} GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/issue-triage" GH_AW_EFFECTIVE_TOKENS: ${{ needs.agent.outputs.effective_tokens }} GH_AW_ENGINE_ID: "copilot" GH_AW_ENGINE_MODEL: ${{ needs.agent.outputs.model }} - GH_AW_ENGINE_VERSION: "1.0.40" + GH_AW_ENGINE_VERSION: "1.0.60" GH_AW_WORKFLOW_ID: "issue-triage" GH_AW_WORKFLOW_NAME: "Issue 自动分类与回复" + GH_AW_WORKFLOW_SOURCE_URL: "${{ github.server_url }}/${{ github.repository }}/blob/${{ github.ref_name }}/.github/workflows/issue-triage.md" outputs: code_push_failure_count: ${{ steps.process_safe_outputs.outputs.code_push_failure_count }} code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }} @@ -1037,15 +1159,17 @@ jobs: steps: - name: Setup Scripts id: setup - uses: github/gh-aw-actions/setup@b8068426813005612b960b5ab0b8bd2c27142323 # v0.71.5 + uses: github/gh-aw-actions/setup@5c2fe865bb4dc46e1450f6ee0d0541d759aea73a # v0.79.6 with: destination: ${{ runner.temp }}/gh-aw/actions job-name: ${{ github.job }} trace-id: ${{ needs.activation.outputs.setup-trace-id }} + parent-span-id: ${{ needs.activation.outputs.setup-parent-span-id || needs.activation.outputs.setup-span-id }} env: GH_AW_SETUP_WORKFLOW_NAME: "Issue 自动分类与回复" GH_AW_CURRENT_WORKFLOW_REF: ${{ github.repository }}/.github/workflows/issue-triage.lock.yml@${{ github.ref }} - GH_AW_INFO_VERSION: "1.0.40" + GH_AW_INFO_VERSION: "1.0.60" + GH_AW_INFO_ENGINE_ID: "copilot" - name: Download agent output artifact id: download-agent-output continue-on-error: true @@ -1063,6 +1187,7 @@ jobs: - name: Configure GH_HOST for enterprise compatibility id: ghes-host-config shell: bash + # zizmor: ignore[github-env] - GITHUB_SERVER_URL is set by GitHub Actions, not user input. run: | # Derive GH_HOST from GITHUB_SERVER_URL so the gh CLI targets the correct # GitHub instance (GHES/GHEC). On github.com this is a harmless no-op. @@ -1074,6 +1199,7 @@ jobs: uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 env: GH_AW_AGENT_OUTPUT: ${{ steps.setup-agent-output-env.outputs.GH_AW_AGENT_OUTPUT }} + GH_AW_COMMENT_ID: ${{ needs.activation.outputs.comment_id }} GH_AW_ALLOWED_DOMAINS: "api.business.githubcopilot.com,api.enterprise.githubcopilot.com,api.github.com,api.githubcopilot.com,api.individual.githubcopilot.com,api.snapcraft.io,archive.ubuntu.com,ark.cn-beijing.volces.com,azure.archive.ubuntu.com,crl.geotrust.com,crl.globalsign.com,crl.identrust.com,crl.sectigo.com,crl.thawte.com,crl.usertrust.com,crl.verisign.com,crl3.digicert.com,crl4.digicert.com,crls.ssl.com,github.com,host.docker.internal,json-schema.org,json.schemastore.org,keyserver.ubuntu.com,ocsp.digicert.com,ocsp.geotrust.com,ocsp.globalsign.com,ocsp.identrust.com,ocsp.sectigo.com,ocsp.ssl.com,ocsp.thawte.com,ocsp.usertrust.com,ocsp.verisign.com,packagecloud.io,packages.cloud.google.com,packages.microsoft.com,ppa.launchpad.net,raw.githubusercontent.com,registry.npmjs.org,s.symcb.com,s.symcd.com,security.ubuntu.com,telemetry.enterprise.githubcopilot.com,ts-crl.ws.symantec.com,ts-ocsp.ws.symantec.com,www.googleapis.com" GITHUB_SERVER_URL: ${{ github.server_url }} GITHUB_API_URL: ${{ github.api_url }} diff --git a/.github/workflows/issue-triage.md b/.github/workflows/issue-triage.md index f384730..ae11740 100644 --- a/.github/workflows/issue-triage.md +++ b/.github/workflows/issue-triage.md @@ -7,19 +7,22 @@ engine: id: copilot env: COPILOT_PROVIDER_BASE_URL: "https://ark.cn-beijing.volces.com/api/v3" - COPILOT_MODEL: doubao-seed-2-0-code-preview-260215 - COPILOT_PROVIDER_API_KEY: ${{ secrets.OPENAI_API_KEY }} + COPILOT_PROVIDER_BEARER_TOKEN: ${{ secrets.OPENAI_API_KEY }} + COPILOT_MODEL: doubao-seed-evolving COPILOT_PROVIDER_TYPE: openai + COPILOT_PROVIDER_WIRE_API: responses + +features: + dangerously-disable-sandbox-agent: "controlled environment for issue triage automation" +sandbox: + agent: false +strict: false network: allowed: - defaults - ark.cn-beijing.volces.com -sandbox: - agent: false -strict: false - tools: github: min-integrity: none @@ -28,6 +31,7 @@ permissions: issues: read contents: read pull-requests: read + copilot-requests: write safe-outputs: threat-detection: false @@ -60,7 +64,7 @@ safe-outputs: - `duplicate`:与已有 Issue 重复 - `invalid`:信息不完整或无效 -3. 根据用户的提问语言按照用户语言回复一条友好的评论,包含: +3. 使用用户提问的语言回复一条友好的评论,包含: - 感谢用户提交 Issue - 说明你打的标签和原因 - 如果是 bug,请用户补充:复现步骤、环境信息、错误日志 From 9ba2a5cc7be5e69036ce36b1db8944a045ea091a Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Thu, 9 Jul 2026 17:09:33 +0800 Subject: [PATCH 16/25] ci:update codeql --- .github/workflows/codeql-to-commit.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/codeql-to-commit.yml b/.github/workflows/codeql-to-commit.yml index d297c94..98ab97f 100644 --- a/.github/workflows/codeql-to-commit.yml +++ b/.github/workflows/codeql-to-commit.yml @@ -27,7 +27,7 @@ jobs: echo "Default branch: $DEFAULT_BRANCH" ALERTS=$(gh api "/repos/$OWNER/$REPO/code-scanning/alerts?state=open&per_page=100" \ - --jq '[.[] | select(.rule.security_severity_level == "high" or .rule.security_severity_level == "medium" or .rule.severity == "warning") | {number: .number, level: (.rule.security_severity_level // .rule.severity)}]') + --jq '[.[] | select(.rule.security_severity_level == "critical" or .rule.security_severity_level == "high" or .rule.security_severity_level == "medium" or .rule.severity == "warning") | {number: .number, level: (.rule.security_severity_level // .rule.severity)}]') COUNT=$(echo $ALERTS | jq 'length') echo "Found $COUNT alerts with high / medium / warning" From 8f1a1ab11c26936ca5b7987644a1f88de7eb9c6c Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Sun, 19 Jul 2026 14:57:29 +0800 Subject: [PATCH 17/25] ci:cancel centos release --- .github/workflows/Centos_build.yml | 2 +- .github/workflows/release.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/Centos_build.yml b/.github/workflows/Centos_build.yml index 0be115f..2aa6954 100644 --- a/.github/workflows/Centos_build.yml +++ b/.github/workflows/Centos_build.yml @@ -3,7 +3,7 @@ name: centos build workflows on: push: branches: - - 'develop' + - 'develop1' paths: - 'XEngine_Source/**' - 'XEngine_Release/**' diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index ff73ab2..aa2e11d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -64,7 +64,7 @@ jobs: - name: Download CentOS uses: dawidd6/action-download-artifact@v21 with: - workflow: Centos_build.yml + workflow: Centos_build1s.yml workflow_conclusion: success check_artifacts: false skip_unpack: true From 5b3ab34c9d9af72c01e85a84ea0d617b651a1b28 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Sun, 19 Jul 2026 15:12:49 +0800 Subject: [PATCH 18/25] update:vs to 2026 version --- .../MQCore_ConfigModule/MQCore_ConfigModule.vcxproj | 10 +++++----- XEngine_Source/MQCore_DBModule/MQCore_DBModule.vcxproj | 10 +++++----- .../MQCore_HelpModule/MQCore_HelpModule.vcxproj | 10 +++++----- .../MQCore_MemoryCache/MQCore_MemoryCache.vcxproj | 10 +++++----- .../MQCore_ProtocolModule.vcxproj | 10 +++++----- .../MQCore_SessionModule/MQCore_SessionModule.vcxproj | 10 +++++----- .../XEngine_MQServiceApp/XEngine_MQServiceApp.vcxproj | 10 +++++----- 7 files changed, 35 insertions(+), 35 deletions(-) diff --git a/XEngine_Source/MQCore_ConfigModule/MQCore_ConfigModule.vcxproj b/XEngine_Source/MQCore_ConfigModule/MQCore_ConfigModule.vcxproj index c5d011a..c76069a 100644 --- a/XEngine_Source/MQCore_ConfigModule/MQCore_ConfigModule.vcxproj +++ b/XEngine_Source/MQCore_ConfigModule/MQCore_ConfigModule.vcxproj @@ -43,33 +43,33 @@ DynamicLibrary false - v143 + v145 true Unicode DynamicLibrary true - v143 + v145 Unicode DynamicLibrary true - v143 + v145 Unicode DynamicLibrary false - v143 + v145 true Unicode DynamicLibrary false - v143 + v145 true Unicode diff --git a/XEngine_Source/MQCore_DBModule/MQCore_DBModule.vcxproj b/XEngine_Source/MQCore_DBModule/MQCore_DBModule.vcxproj index 291e008..7d8d2f8 100644 --- a/XEngine_Source/MQCore_DBModule/MQCore_DBModule.vcxproj +++ b/XEngine_Source/MQCore_DBModule/MQCore_DBModule.vcxproj @@ -43,33 +43,33 @@ DynamicLibrary false - v143 + v145 true Unicode DynamicLibrary true - v143 + v145 Unicode DynamicLibrary true - v143 + v145 Unicode DynamicLibrary false - v143 + v145 true Unicode DynamicLibrary false - v143 + v145 true Unicode diff --git a/XEngine_Source/MQCore_HelpModule/MQCore_HelpModule.vcxproj b/XEngine_Source/MQCore_HelpModule/MQCore_HelpModule.vcxproj index 826fef1..7dd2a88 100644 --- a/XEngine_Source/MQCore_HelpModule/MQCore_HelpModule.vcxproj +++ b/XEngine_Source/MQCore_HelpModule/MQCore_HelpModule.vcxproj @@ -43,33 +43,33 @@ DynamicLibrary false - v143 + v145 true Unicode DynamicLibrary true - v143 + v145 Unicode DynamicLibrary true - v143 + v145 Unicode DynamicLibrary false - v143 + v145 true Unicode DynamicLibrary false - v143 + v145 true Unicode diff --git a/XEngine_Source/MQCore_MemoryCache/MQCore_MemoryCache.vcxproj b/XEngine_Source/MQCore_MemoryCache/MQCore_MemoryCache.vcxproj index ec65175..00db5b0 100644 --- a/XEngine_Source/MQCore_MemoryCache/MQCore_MemoryCache.vcxproj +++ b/XEngine_Source/MQCore_MemoryCache/MQCore_MemoryCache.vcxproj @@ -43,33 +43,33 @@ DynamicLibrary false - v143 + v145 true Unicode DynamicLibrary true - v143 + v145 Unicode DynamicLibrary true - v143 + v145 Unicode DynamicLibrary false - v143 + v145 true Unicode DynamicLibrary false - v143 + v145 true Unicode diff --git a/XEngine_Source/MQCore_ProtocolModule/MQCore_ProtocolModule.vcxproj b/XEngine_Source/MQCore_ProtocolModule/MQCore_ProtocolModule.vcxproj index 4d37441..3d6c19e 100644 --- a/XEngine_Source/MQCore_ProtocolModule/MQCore_ProtocolModule.vcxproj +++ b/XEngine_Source/MQCore_ProtocolModule/MQCore_ProtocolModule.vcxproj @@ -43,33 +43,33 @@ DynamicLibrary false - v143 + v145 true Unicode DynamicLibrary true - v143 + v145 Unicode DynamicLibrary true - v143 + v145 Unicode DynamicLibrary false - v143 + v145 true Unicode DynamicLibrary false - v143 + v145 true Unicode diff --git a/XEngine_Source/MQCore_SessionModule/MQCore_SessionModule.vcxproj b/XEngine_Source/MQCore_SessionModule/MQCore_SessionModule.vcxproj index 18aadc9..19febc5 100644 --- a/XEngine_Source/MQCore_SessionModule/MQCore_SessionModule.vcxproj +++ b/XEngine_Source/MQCore_SessionModule/MQCore_SessionModule.vcxproj @@ -43,33 +43,33 @@ DynamicLibrary false - v143 + v145 true Unicode DynamicLibrary true - v143 + v145 Unicode DynamicLibrary true - v143 + v145 Unicode DynamicLibrary false - v143 + v145 true Unicode DynamicLibrary false - v143 + v145 true Unicode diff --git a/XEngine_Source/XEngine_MQServiceApp/XEngine_MQServiceApp.vcxproj b/XEngine_Source/XEngine_MQServiceApp/XEngine_MQServiceApp.vcxproj index 7950519..50c4e97 100644 --- a/XEngine_Source/XEngine_MQServiceApp/XEngine_MQServiceApp.vcxproj +++ b/XEngine_Source/XEngine_MQServiceApp/XEngine_MQServiceApp.vcxproj @@ -43,33 +43,33 @@ Application false - v143 + v145 true Unicode Application true - v143 + v145 Unicode Application true - v143 + v145 Unicode Application false - v143 + v145 true Unicode Application false - v143 + v145 true Unicode From 2dc2e64f914f74860f29bc3f8d753f8e4db427b3 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Sun, 19 Jul 2026 15:26:45 +0800 Subject: [PATCH 19/25] modify:vs crt runtime unified --- .../MQCore_ConfigModule/MQCore_ConfigModule.vcxproj | 4 ++-- .../MQCore_ProtocolModule/MQCore_ProtocolModule.vcxproj | 4 ++-- .../MQCore_SessionModule/MQCore_SessionModule.vcxproj | 4 ++-- .../XEngine_MQServiceApp/XEngine_MQServiceApp.vcxproj | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/XEngine_Source/MQCore_ConfigModule/MQCore_ConfigModule.vcxproj b/XEngine_Source/MQCore_ConfigModule/MQCore_ConfigModule.vcxproj index c76069a..7e571ff 100644 --- a/XEngine_Source/MQCore_ConfigModule/MQCore_ConfigModule.vcxproj +++ b/XEngine_Source/MQCore_ConfigModule/MQCore_ConfigModule.vcxproj @@ -152,7 +152,7 @@ true Use pch.h - MultiThreaded + MultiThreadedDLL 4819 stdcpp20 stdc17 @@ -213,7 +213,7 @@ true Use pch.h - MultiThreaded + MultiThreadedDLL 4819 stdcpp20 stdc17 diff --git a/XEngine_Source/MQCore_ProtocolModule/MQCore_ProtocolModule.vcxproj b/XEngine_Source/MQCore_ProtocolModule/MQCore_ProtocolModule.vcxproj index 3d6c19e..a118431 100644 --- a/XEngine_Source/MQCore_ProtocolModule/MQCore_ProtocolModule.vcxproj +++ b/XEngine_Source/MQCore_ProtocolModule/MQCore_ProtocolModule.vcxproj @@ -156,7 +156,7 @@ true Use pch.h - MultiThreaded + MultiThreadedDLL 4819 stdcpp20 stdc17 @@ -217,7 +217,7 @@ true Use pch.h - MultiThreaded + MultiThreadedDLL 4819 stdcpp20 stdc17 diff --git a/XEngine_Source/MQCore_SessionModule/MQCore_SessionModule.vcxproj b/XEngine_Source/MQCore_SessionModule/MQCore_SessionModule.vcxproj index 19febc5..1c60385 100644 --- a/XEngine_Source/MQCore_SessionModule/MQCore_SessionModule.vcxproj +++ b/XEngine_Source/MQCore_SessionModule/MQCore_SessionModule.vcxproj @@ -156,7 +156,7 @@ true Use pch.h - MultiThreaded + MultiThreadedDLL 4819 stdcpp20 stdc17 @@ -217,7 +217,7 @@ true Use pch.h - MultiThreaded + MultiThreadedDLL 4819 stdcpp20 stdc17 diff --git a/XEngine_Source/XEngine_MQServiceApp/XEngine_MQServiceApp.vcxproj b/XEngine_Source/XEngine_MQServiceApp/XEngine_MQServiceApp.vcxproj index 50c4e97..4a7ebfb 100644 --- a/XEngine_Source/XEngine_MQServiceApp/XEngine_MQServiceApp.vcxproj +++ b/XEngine_Source/XEngine_MQServiceApp/XEngine_MQServiceApp.vcxproj @@ -150,7 +150,7 @@ true WIN32;NDEBUG;_CONSOLE;_WINDOWS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) true - MultiThreaded + MultiThreadedDLL 4819 stdcpp20 stdc17 @@ -199,7 +199,7 @@ true WIN64;NDEBUG;_CONSOLE;_WINDOWS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) true - MultiThreaded + MultiThreadedDLL 4819 stdcpp20 stdc17 From f7dd3b33951ebd9a01c7358e8e69f75369c35500 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Sat, 25 Jul 2026 14:23:40 +0800 Subject: [PATCH 20/25] added:reply with serial number for post message --- XEngine_Source/XEngine_MQServiceApp/MQService_TCPTask.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/XEngine_Source/XEngine_MQServiceApp/MQService_TCPTask.cpp b/XEngine_Source/XEngine_MQServiceApp/MQService_TCPTask.cpp index afbb92b..ba93698 100644 --- a/XEngine_Source/XEngine_MQServiceApp/MQService_TCPTask.cpp +++ b/XEngine_Source/XEngine_MQServiceApp/MQService_TCPTask.cpp @@ -314,6 +314,7 @@ bool MessageQueue_TCP_Handle(XENGINE_PROTOCOLHDR* pSt_ProtocolHdr, LPCXSTR lpszC //可能为空表 st_DBQueue.nQueueSerial = 1; } + st_MQProtocol.nSerial = st_DBQueue.nQueueSerial; APIHelp_Counter_SerialSet(st_DBQueue.tszQueueName, st_DBQueue.nQueueSerial); } } From 6991e11e7f3ae523bd08839f9ad682c01f4a2d67 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Sat, 25 Jul 2026 14:46:45 +0800 Subject: [PATCH 21/25] modify:serial from 1 number to start --- .../MQService_HTTPTask/MQService_HTTPPost.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/XEngine_Source/XEngine_MQServiceApp/MQService_HTTPTask/MQService_HTTPPost.cpp b/XEngine_Source/XEngine_MQServiceApp/MQService_HTTPTask/MQService_HTTPPost.cpp index 53f1fca..2f1668c 100644 --- a/XEngine_Source/XEngine_MQServiceApp/MQService_HTTPTask/MQService_HTTPPost.cpp +++ b/XEngine_Source/XEngine_MQServiceApp/MQService_HTTPTask/MQService_HTTPPost.cpp @@ -99,6 +99,7 @@ bool MessageQueue_HttpTask_Post(LPCXSTR lpszClientAddr, LPCXSTR lpszFuncName, LP XENGINE_DBUSERKEY st_Userkey; memset(&st_Userkey, '\0', sizeof(XENGINE_DBUSERKEY)); + st_Userkey.nKeySerial = 1; _tcsxcpy(st_Userkey.tszUserName, st_UserInfo.tszUserName); _tcsxcpy(st_Userkey.tszKeyName, st_ServiceCfg.tszTopic); //创建 @@ -268,7 +269,7 @@ bool MessageQueue_HttpTask_Post(LPCXSTR lpszClientAddr, LPCXSTR lpszFuncName, LP if (DBModule_MQUser_KeyQuery(&st_Userkey)) { //有就更新 - st_Userkey.nKeySerial = st_MQProtocol.nSerial; + st_Userkey.nKeySerial = st_MQProtocol.nSerial == 0 ? 1 : st_MQProtocol.nSerial; if (!DBModule_MQUser_KeyUPDate(&st_Userkey)) { ProtocolModule_Packet_Http(tszSDBuffer, &nSDLen, ERROR_XENGINE_MESSAGE_HTTP_FAILURE, _X("update bind topic is failure")); From d9cbdc141596ff57b7e8a87f299ab07017a9b5cf Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Sat, 25 Jul 2026 15:32:02 +0800 Subject: [PATCH 22/25] update:vs to 2026 for example --- XEngine_Apps/MQCore_HTTPApp/MQCore_HTTPApp.vcxproj | 8 ++++---- XEngine_Apps/MQCore_TCPApp/MQCore_TCPApp.cpp | 2 +- XEngine_Apps/MQCore_TCPApp/MQCore_TCPApp.vcxproj | 8 ++++---- XEngine_Apps/MQCore_WSApp/MQCore_WSApp.vcxproj | 8 ++++---- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/XEngine_Apps/MQCore_HTTPApp/MQCore_HTTPApp.vcxproj b/XEngine_Apps/MQCore_HTTPApp/MQCore_HTTPApp.vcxproj index 91905eb..e401992 100644 --- a/XEngine_Apps/MQCore_HTTPApp/MQCore_HTTPApp.vcxproj +++ b/XEngine_Apps/MQCore_HTTPApp/MQCore_HTTPApp.vcxproj @@ -29,26 +29,26 @@ Application true - v143 + v145 MultiByte Application false - v143 + v145 true Unicode Application true - v143 + v145 Unicode Application false - v143 + v145 true Unicode diff --git a/XEngine_Apps/MQCore_TCPApp/MQCore_TCPApp.cpp b/XEngine_Apps/MQCore_TCPApp/MQCore_TCPApp.cpp index 099a40c..8d7c6de 100644 --- a/XEngine_Apps/MQCore_TCPApp/MQCore_TCPApp.cpp +++ b/XEngine_Apps/MQCore_TCPApp/MQCore_TCPApp.cpp @@ -289,7 +289,7 @@ void MQ_Get(int nType = 0) else { _xtprintf("获取消息队列数据失败,错误码:%d\n", st_ProtocolHdr.wReserve); - } + } break; } std::this_thread::sleep_for(std::chrono::milliseconds(1)); diff --git a/XEngine_Apps/MQCore_TCPApp/MQCore_TCPApp.vcxproj b/XEngine_Apps/MQCore_TCPApp/MQCore_TCPApp.vcxproj index f3877e1..4bc95ab 100644 --- a/XEngine_Apps/MQCore_TCPApp/MQCore_TCPApp.vcxproj +++ b/XEngine_Apps/MQCore_TCPApp/MQCore_TCPApp.vcxproj @@ -29,26 +29,26 @@ Application true - v143 + v145 MultiByte Application false - v143 + v145 true Unicode Application true - v143 + v145 Unicode Application false - v143 + v145 true Unicode diff --git a/XEngine_Apps/MQCore_WSApp/MQCore_WSApp.vcxproj b/XEngine_Apps/MQCore_WSApp/MQCore_WSApp.vcxproj index af1f394..7322106 100644 --- a/XEngine_Apps/MQCore_WSApp/MQCore_WSApp.vcxproj +++ b/XEngine_Apps/MQCore_WSApp/MQCore_WSApp.vcxproj @@ -29,26 +29,26 @@ Application true - v143 + v145 MultiByte Application false - v143 + v145 true Unicode Application true - v143 + v145 Unicode Application false - v143 + v145 true Unicode From 2eab04b1a6e7fc4872c2668cc14d4824877e90fd Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Sun, 26 Jul 2026 12:00:37 +0800 Subject: [PATCH 23/25] added:heartbeat support --- .../XEngine_Config/XEngine_Config.json | 11 ++- .../MQCore_ConfigModule/Config_Define.h | 8 +++ .../Config_Json/Config_Json.cpp | 13 ++++ .../XEngine_MQServiceApp/MQService_Hdr.h | 5 ++ .../XEngine_MQServiceApp/MQService_Net.cpp | 24 +++++-- .../XEngine_MQServiceApp/MQService_Net.h | 4 ++ .../XEngine_MQServiceApp.cpp | 72 ++++++++++++++++++- 7 files changed, 130 insertions(+), 7 deletions(-) diff --git a/XEngine_Release/XEngine_Config/XEngine_Config.json b/XEngine_Release/XEngine_Config/XEngine_Config.json index 8e4a4f5..ba46c4c 100644 --- a/XEngine_Release/XEngine_Config/XEngine_Config.json +++ b/XEngine_Release/XEngine_Config/XEngine_Config.json @@ -14,6 +14,13 @@ "nHttpThread": 2, "nWSThread": 2, "nMQTTThread": 2 + }, + "XTime": { + "nHeartCheck": 3, + "nTCPTime": 5, + "nWSTime": 5, + "nHTTPTime": 5, + "nMQTTTime": 5 }, "XLog": { "tszLOGFile": "./XEngine_Log/XEngine_MQServiceApp.Log", @@ -26,7 +33,7 @@ "SQLAddr": "118.25.14.242", "SQLPort": 3306, "SQLUser": "root", - "SQLPass": "123123Qyt!" + "SQLPass": "123" }, "XPass": { "nTimeout": 2, @@ -53,7 +60,7 @@ "tszEMailSubject": "XEngine MessageQueue Notify", "tszServiceAddr": "smtp://smtp.163.com", "tszUser": "ggqytgodlove@163.com", - "tszPass": "STZsBi3uuJvWsWL3" + "tszPass": "1" }, "SMSNotify": { "bEnable": false diff --git a/XEngine_Source/MQCore_ConfigModule/Config_Define.h b/XEngine_Source/MQCore_ConfigModule/Config_Define.h index 3e9c59a..749ddb6 100644 --- a/XEngine_Source/MQCore_ConfigModule/Config_Define.h +++ b/XEngine_Source/MQCore_ConfigModule/Config_Define.h @@ -33,6 +33,14 @@ typedef struct int nMQTTThread; }st_XMax; struct + { + int nHeartCheck; //检测次数 + int nTCPTime; //TCP检测时间 + int nWSTime; //WEBSOCKET检测时间 + int nMQTime; //MQTT检测时间 + int nHTTPTime; //HTTP检测时间 + }st_XTime; + struct { XCHAR tszLOGFile[XPATH_MAX]; int nMaxSize; diff --git a/XEngine_Source/MQCore_ConfigModule/Config_Json/Config_Json.cpp b/XEngine_Source/MQCore_ConfigModule/Config_Json/Config_Json.cpp index b5111bc..91d392a 100644 --- a/XEngine_Source/MQCore_ConfigModule/Config_Json/Config_Json.cpp +++ b/XEngine_Source/MQCore_ConfigModule/Config_Json/Config_Json.cpp @@ -76,6 +76,19 @@ bool CConfig_Json::Config_Json_File(LPCXSTR lpszConfigFile,XENGINE_SERVERCONFIG pSt_ServerConfig->st_XMax.nHttpThread = st_JsonXMax["nHttpThread"].asInt(); pSt_ServerConfig->st_XMax.nWSThread = st_JsonXMax["nWSThread"].asInt(); pSt_ServerConfig->st_XMax.nMQTTThread = st_JsonXMax["nMQTTThread"].asInt(); + //时间配置 + if (st_JsonRoot["XTime"].empty() || (5 != st_JsonRoot["XTime"].size())) + { + Config_IsErrorOccur = true; + Config_dwErrorCode = ERROR_MQ_MODULE_CONFIG_JSON_XTIME; + return false; + } + Json::Value st_JsonXTime = st_JsonRoot["XTime"]; + pSt_ServerConfig->st_XTime.nHeartCheck = st_JsonXTime["nHeartCheck"].asInt(); + pSt_ServerConfig->st_XTime.nTCPTime = st_JsonXTime["nTCPTime"].asInt(); + pSt_ServerConfig->st_XTime.nWSTime = st_JsonXTime["nWSTime"].asInt(); + pSt_ServerConfig->st_XTime.nHTTPTime = st_JsonXTime["nHTTPTime"].asInt(); + pSt_ServerConfig->st_XTime.nMQTime = st_JsonXTime["nMQTTTime"].asInt(); if (st_JsonRoot["XLog"].empty() || (5 != st_JsonRoot["XLog"].size())) { diff --git a/XEngine_Source/XEngine_MQServiceApp/MQService_Hdr.h b/XEngine_Source/XEngine_MQServiceApp/MQService_Hdr.h index 7504b20..4e7f7b7 100644 --- a/XEngine_Source/XEngine_MQServiceApp/MQService_Hdr.h +++ b/XEngine_Source/XEngine_MQServiceApp/MQService_Hdr.h @@ -80,6 +80,11 @@ extern XHANDLE xhHTTPSocket; extern XHANDLE xhWSSocket; extern XHANDLE xhMQTTSocket; +extern XHANDLE xhTCPHeart; +extern XHANDLE xhHTTPHeart; +extern XHANDLE xhWSHeart; +extern XHANDLE xhMQTTHeart; + extern XHANDLE xhTCPPacket; extern XHANDLE xhHTTPPacket; extern XHANDLE xhWSPacket; diff --git a/XEngine_Source/XEngine_MQServiceApp/MQService_Net.cpp b/XEngine_Source/XEngine_MQServiceApp/MQService_Net.cpp index 312bbab..f836c4d 100644 --- a/XEngine_Source/XEngine_MQServiceApp/MQService_Net.cpp +++ b/XEngine_Source/XEngine_MQServiceApp/MQService_Net.cpp @@ -19,6 +19,10 @@ void XCALLBACK MessageQueue_Callback_TCPLeave(LPCXSTR lpszClientAddr, XSOCKET hS { XEngine_MQXService_Close(lpszClientAddr, XENGINE_MQAPP_NETTYPE_TCP, false); } +void XCALLBACK MessageQueue_Client_TCPHeart(LPCXSTR lpszClientAddr, XSOCKET hSocket, int nStatus, XPVOID lParam) +{ + XEngine_MQXService_Close(lpszClientAddr, XENGINE_MQAPP_NETTYPE_TCP, true); +} ////////////////////////////////////////////////////////////////////////// bool XCALLBACK MessageQueue_Callback_MQTTLogin(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam) { @@ -39,6 +43,10 @@ void XCALLBACK MessageQueue_Callback_MQTTLeave(LPCXSTR lpszClientAddr, XSOCKET h { XEngine_MQXService_Close(lpszClientAddr, XENGINE_MQAPP_NETTYPE_MQTT, false); } +void XCALLBACK MessageQueue_Client_MQTTHeart(LPCXSTR lpszClientAddr, XSOCKET hSocket, int nStatus, XPVOID lParam) +{ + XEngine_MQXService_Close(lpszClientAddr, XENGINE_MQAPP_NETTYPE_MQTT, true); +} ////////////////////////////////////////////////////////////////////////// bool XCALLBACK MessageQueue_Callback_HttpLogin(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam) { @@ -58,6 +66,10 @@ void XCALLBACK MessageQueue_Callback_HttpLeave(LPCXSTR lpszClientAddr, XSOCKET h { XEngine_MQXService_Close(lpszClientAddr, XENGINE_MQAPP_NETTYPE_HTTP, false); } +void XCALLBACK MessageQueue_Client_HttpHeart(LPCXSTR lpszClientAddr, XSOCKET hSocket, int nStatus, XPVOID lParam) +{ + XEngine_MQXService_Close(lpszClientAddr, XENGINE_MQAPP_NETTYPE_HTTP, true); +} ////////////////////////////////////////////////////////////////////////// bool XCALLBACK MessageQueue_Callback_WSLogin(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam) { @@ -93,6 +105,10 @@ void XCALLBACK MessageQueue_Callback_WSLeave(LPCXSTR lpszClientAddr, XSOCKET hSo { XEngine_MQXService_Close(lpszClientAddr, XENGINE_MQAPP_NETTYPE_WEBSOCKET, false); } +void XCALLBACK MessageQueue_Client_WSHeart(LPCXSTR lpszClientAddr, XSOCKET hSocket, int nStatus, XPVOID lParam) +{ + XEngine_MQXService_Close(lpszClientAddr, XENGINE_MQAPP_NETTYPE_WEBSOCKET, true); +} ////////////////////////////////////////////////////////////////////////// void XEngine_MQXService_Close(LPCXSTR lpszClientAddr, int nIPProto, bool bHeart) { @@ -103,7 +119,7 @@ void XEngine_MQXService_Close(LPCXSTR lpszClientAddr, int nIPProto, bool bHeart) { NetCore_TCPXCore_CloseForClientEx(xhTCPSocket, lpszClientAddr); } - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("TCP客户端离开,TCP客户端地址:%s"), lpszClientAddr); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("TCP客户端离开,TCP客户端地址:%s,心跳标记:%d"), lpszClientAddr, bHeart); } else if (XENGINE_MQAPP_NETTYPE_WEBSOCKET == nIPProto) { @@ -112,7 +128,7 @@ void XEngine_MQXService_Close(LPCXSTR lpszClientAddr, int nIPProto, bool bHeart) { NetCore_TCPXCore_CloseForClientEx(xhWSSocket, lpszClientAddr); } - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("Websocket客户端离开,Websocket客户端地址:%s"), lpszClientAddr); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("Websocket客户端离开,Websocket客户端地址:%s,心跳标记:%d"), lpszClientAddr, bHeart); } else if (XENGINE_MQAPP_NETTYPE_HTTP == nIPProto) { @@ -121,7 +137,7 @@ void XEngine_MQXService_Close(LPCXSTR lpszClientAddr, int nIPProto, bool bHeart) { NetCore_TCPXCore_CloseForClientEx(xhHTTPSocket, lpszClientAddr); } - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("HTTP客户端离开,HTTP客户端地址:%s"), lpszClientAddr); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("HTTP客户端离开,HTTP客户端地址:%s,心跳标记:%d"), lpszClientAddr, bHeart); } else { @@ -130,7 +146,7 @@ void XEngine_MQXService_Close(LPCXSTR lpszClientAddr, int nIPProto, bool bHeart) { NetCore_TCPXCore_CloseForClientEx(xhMQTTSocket, lpszClientAddr); } - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("MQTT客户端离开,MQTT客户端地址:%s"), lpszClientAddr); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("MQTT客户端离开,MQTT客户端地址:%s,心跳标记:%d"), lpszClientAddr, bHeart); } XENGINE_PROTOCOL_USERINFO st_UserInfo; memset(&st_UserInfo, '\0', sizeof(XENGINE_PROTOCOL_USERINFO)); diff --git a/XEngine_Source/XEngine_MQServiceApp/MQService_Net.h b/XEngine_Source/XEngine_MQServiceApp/MQService_Net.h index 723b1dd..f16603d 100644 --- a/XEngine_Source/XEngine_MQServiceApp/MQService_Net.h +++ b/XEngine_Source/XEngine_MQServiceApp/MQService_Net.h @@ -3,18 +3,22 @@ bool XCALLBACK MessageQueue_Callback_TCPLogin(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam); //用户连接 void XCALLBACK MessageQueue_Callback_TCPRecv(LPCXSTR lpszClientAddr, XSOCKET hSocket, LPCXSTR lpszRecvMsg,int nMsgLen,XPVOID lParam); //接受到数据 void XCALLBACK MessageQueue_Callback_TCPLeave(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam); //用户离开 +void XCALLBACK MessageQueue_Client_TCPHeart(LPCXSTR lpszClientAddr, XSOCKET hSocket, int nStatus, XPVOID lParam); bool XCALLBACK MessageQueue_Callback_MQTTLogin(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam); void XCALLBACK MessageQueue_Callback_MQTTRecv(LPCXSTR lpszClientAddr, XSOCKET hSocket, LPCXSTR lpszRecvMsg, int nMsgLen, XPVOID lParam); void XCALLBACK MessageQueue_Callback_MQTTLeave(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam); +void XCALLBACK MessageQueue_Client_MQTTHeart(LPCXSTR lpszClientAddr, XSOCKET hSocket, int nStatus, XPVOID lParam); bool XCALLBACK MessageQueue_Callback_HttpLogin(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam); void XCALLBACK MessageQueue_Callback_HttpRecv(LPCXSTR lpszClientAddr, XSOCKET hSocket, LPCXSTR lpszRecvMsg, int nMsgLen, XPVOID lParam); void XCALLBACK MessageQueue_Callback_HttpLeave(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam); +void XCALLBACK MessageQueue_Client_HttpHeart(LPCXSTR lpszClientAddr, XSOCKET hSocket, int nStatus, XPVOID lParam); bool XCALLBACK MessageQueue_Callback_WSLogin(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam); void XCALLBACK MessageQueue_Callback_WSRecv(LPCXSTR lpszClientAddr, XSOCKET hSocket, LPCXSTR lpszRecvMsg, int nMsgLen, XPVOID lParam); void XCALLBACK MessageQueue_Callback_WSLeave(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam); +void XCALLBACK MessageQueue_Client_WSHeart(LPCXSTR lpszClientAddr, XSOCKET hSocket, int nStatus, XPVOID lParam); void XEngine_MQXService_Close(LPCXSTR lpszClientAddr, int nIPProto, bool bHeart); bool XEngine_MQXService_Send(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen, int nIPProto, XENGINE_PROTOCOL_MSGATTR* pSt_MSGAttr = NULL, LPCXSTR lpszUserName = NULL); \ No newline at end of file diff --git a/XEngine_Source/XEngine_MQServiceApp/XEngine_MQServiceApp.cpp b/XEngine_Source/XEngine_MQServiceApp/XEngine_MQServiceApp.cpp index 519d604..c4ac65c 100644 --- a/XEngine_Source/XEngine_MQServiceApp/XEngine_MQServiceApp.cpp +++ b/XEngine_Source/XEngine_MQServiceApp/XEngine_MQServiceApp.cpp @@ -8,6 +8,11 @@ XHANDLE xhHTTPSocket = NULL; XHANDLE xhWSSocket = NULL; XHANDLE xhMQTTSocket = NULL; +XHANDLE xhTCPHeart = NULL; +XHANDLE xhHTTPHeart = NULL; +XHANDLE xhWSHeart = NULL; +XHANDLE xhMQTTHeart = NULL; + XHANDLE xhTCPPacket = NULL; XHANDLE xhHTTPPacket = NULL; XHANDLE xhWSPacket = NULL; @@ -32,12 +37,17 @@ void ServiceApp_Stop(int signo) HttpProtocol_Server_DestroyEx(xhHTTPPacket); RfcComponents_WSPacket_DestoryEx(xhWSPacket); MQTTProtocol_Parse_Destory(); - + NetCore_TCPXCore_DestroyEx(xhTCPSocket); NetCore_TCPXCore_DestroyEx(xhHTTPSocket); NetCore_TCPXCore_DestroyEx(xhWSSocket); NetCore_TCPXCore_DestroyEx(xhMQTTSocket); + SocketOpt_HeartBeat_DestoryEx(xhTCPHeart); + SocketOpt_HeartBeat_DestoryEx(xhWSHeart); + SocketOpt_HeartBeat_DestoryEx(xhHTTPHeart); + SocketOpt_HeartBeat_DestoryEx(xhMQTTHeart); + ManagePool_Thread_NQDestroy(xhTCPPool); ManagePool_Thread_NQDestroy(xhHttpPool); ManagePool_Thread_NQDestroy(xhWSPool); @@ -253,6 +263,21 @@ int main(int argc, char** argv) XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,启动TCP网络服务器成功,TCP端口:%d,IO:%d"), st_ServiceCfg.nTCPPort, st_ServiceCfg.st_XMax.nIOThread); NetCore_TCPXCore_RegisterCallBackEx(xhTCPSocket, MessageQueue_Callback_TCPLogin, MessageQueue_Callback_TCPRecv, MessageQueue_Callback_TCPLeave); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,注册TCP网络事件成功")); + + if (st_ServiceCfg.st_XTime.nTCPTime > 0) + { + xhTCPHeart = SocketOpt_HeartBeat_InitEx(st_ServiceCfg.st_XTime.nHeartCheck, st_ServiceCfg.st_XTime.nTCPTime, MessageQueue_Client_TCPHeart); + if (NULL == xhTCPHeart) + { + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("启动服务中,初始化TCP验证心跳服务失败,错误:%lX"), NetCore_GetLastError()); + goto XENGINE_APPEXIST; + } + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,初始化TCP验证心跳服务成功,检测次数:%d,检测时间:%d"), st_ServiceCfg.st_XTime.nHeartCheck, st_ServiceCfg.st_XTime.nTCPTime); + } + else + { + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _X("启动服务中,检测到TCP心跳服务没有启用")); + } //任务池 BaseLib_Memory_Malloc((XPPPMEM)&ppSt_ListTCPParam, st_ServiceCfg.st_XMax.nTCPThread, sizeof(THREADPOOL_PARAMENT)); for (int i = 0; i < st_ServiceCfg.st_XMax.nTCPThread; i++) @@ -296,6 +321,21 @@ int main(int argc, char** argv) NetCore_TCPXCore_RegisterCallBackEx(xhHTTPSocket, MessageQueue_Callback_HttpLogin, MessageQueue_Callback_HttpRecv, MessageQueue_Callback_HttpLeave); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,注册HTTP网络事件成功")); + if (st_ServiceCfg.st_XTime.nHTTPTime > 0) + { + xhHTTPHeart = SocketOpt_HeartBeat_InitEx(st_ServiceCfg.st_XTime.nHeartCheck, st_ServiceCfg.st_XTime.nHTTPTime, MessageQueue_Client_HttpHeart); + if (NULL == xhHTTPHeart) + { + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("启动服务中,初始化HTTP心跳服务失败,错误:%lX"), NetCore_GetLastError()); + goto XENGINE_APPEXIST; + } + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,初始化HTTP心跳服务成功,检测次数:%d,检测时间:%d"), st_ServiceCfg.st_XTime.nHeartCheck, st_ServiceCfg.st_XTime.nHTTPTime); + } + else + { + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _X("启动服务中,检测到HTTP心跳服务没有启用")); + } + BaseLib_Memory_Malloc((XPPPMEM)&ppSt_ListHTTPParam, st_ServiceCfg.st_XMax.nHttpThread, sizeof(THREADPOOL_PARAMENT)); for (int i = 0; i < st_ServiceCfg.st_XMax.nHttpThread; i++) { @@ -338,6 +378,21 @@ int main(int argc, char** argv) NetCore_TCPXCore_RegisterCallBackEx(xhWSSocket, MessageQueue_Callback_WSLogin, MessageQueue_Callback_WSRecv, MessageQueue_Callback_WSLeave); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,注册Websocket网络事件成功")); + if (st_ServiceCfg.st_XTime.nWSTime > 0) + { + xhWSHeart = SocketOpt_HeartBeat_InitEx(st_ServiceCfg.st_XTime.nHeartCheck, st_ServiceCfg.st_XTime.nWSTime, MessageQueue_Client_WSHeart); + if (NULL == xhWSHeart) + { + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("启动服务中,初始化WEBSOCKET验证心跳服务失败,错误:%lX"), NetCore_GetLastError()); + goto XENGINE_APPEXIST; + } + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,初始化WEBSOCKET验证心跳服务成功,检测次数:%d,检测时间:%d"), st_ServiceCfg.st_XTime.nHeartCheck, st_ServiceCfg.st_XTime.nWSTime); + } + else + { + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _X("启动服务中,检测到WEBSOCKET心跳服务没有启用")); + } + BaseLib_Memory_Malloc((XPPPMEM)&ppSt_ListWSParam, st_ServiceCfg.st_XMax.nWSThread, sizeof(THREADPOOL_PARAMENT)); for (int i = 0; i < st_ServiceCfg.st_XMax.nWSThread; i++) { @@ -379,6 +434,21 @@ int main(int argc, char** argv) NetCore_TCPXCore_RegisterCallBackEx(xhMQTTSocket, MessageQueue_Callback_MQTTLogin, MessageQueue_Callback_MQTTRecv, MessageQueue_Callback_MQTTLeave); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,注册MQTT网络事件成功")); + if (st_ServiceCfg.st_XTime.nMQTime > 0) + { + xhMQTTHeart = SocketOpt_HeartBeat_InitEx(st_ServiceCfg.st_XTime.nHeartCheck, st_ServiceCfg.st_XTime.nMQTime, MessageQueue_Client_MQTTHeart); + if (NULL == xhMQTTHeart) + { + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("启动服务中,初始化MQTT心跳服务失败,错误:%lX"), NetCore_GetLastError()); + goto XENGINE_APPEXIST; + } + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,初始化MQTT心跳服务成功,检测次数:%d,检测时间:%d"), st_ServiceCfg.st_XTime.nHeartCheck, st_ServiceCfg.st_XTime.nMQTime); + } + else + { + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _X("启动服务中,检测到MQTT心跳服务没有启用")); + } + BaseLib_Memory_Malloc((XPPPMEM)&ppSt_ListMQTTParam, st_ServiceCfg.st_XMax.nMQTTThread, sizeof(THREADPOOL_PARAMENT)); for (int i = 0; i < st_ServiceCfg.st_XMax.nMQTTThread; i++) { From 950a6d82c5b9c774cebcd95fa79426d5ca1f4591 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Sun, 26 Jul 2026 04:04:52 +0000 Subject: [PATCH 24/25] Potential fix for code scanning alert no. 44 Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com> --- .../XEngine_MQServiceApp/XEngine_MQServiceApp.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/XEngine_Source/XEngine_MQServiceApp/XEngine_MQServiceApp.cpp b/XEngine_Source/XEngine_MQServiceApp/XEngine_MQServiceApp.cpp index c4ac65c..e3cdb87 100644 --- a/XEngine_Source/XEngine_MQServiceApp/XEngine_MQServiceApp.cpp +++ b/XEngine_Source/XEngine_MQServiceApp/XEngine_MQServiceApp.cpp @@ -122,14 +122,23 @@ LONG WINAPI Coredump_ExceptionFilter(EXCEPTION_POINTERS* pExceptionPointers) } #endif +// Application entry point. +// Responsibilities: +// 1) Perform platform-specific runtime initialization. +// 2) Initialize service components (logging/network/protocol workers). +// 3) Start and monitor the service lifecycle until shutdown. +// 4) Release resources in reverse order on exit paths. int main(int argc, char** argv) { #ifdef _WINDOWS + // Windows-only socket runtime initialization. WSADATA st_WSAData; WSAStartup(MAKEWORD(2, 2), &st_WSAData); + // Register crash handler to generate minidump for post-mortem analysis. SetUnhandledExceptionFilter(Coredump_ExceptionFilter); #ifndef _DEBUG + // Force UTF-8 locale in non-debug mode to keep runtime text handling consistent. if (setlocale(LC_ALL, ".UTF8") == NULL) { fprintf(stderr, "Error setting locale.\n"); From 591abb63c74e4f1f9ac0ecc48e098e70ebf22fc9 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Wed, 29 Jul 2026 09:10:01 +0800 Subject: [PATCH 25/25] update:CHANGELOG and document --- CHANGELOG | 24 ++++++++++++++++++ XEngine_Docment/Docment_en.docx | Bin 130860 -> 133050 bytes XEngine_Docment/Docment_zh.docx | Bin 134888 -> 136301 bytes .../XEngine_Config/XEngine_VerConfig.json | 1 + 4 files changed, 25 insertions(+) diff --git a/CHANGELOG b/CHANGELOG index 019df1b..52d4ce1 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,27 @@ +XEngine_MQService V3.20.0.1001 + +ci:更新了CI版本库 +ci:删除了多余的扫描 +更新:依赖库 +更新:windows 编译器VS到2026版本 +增加:AI代理解决问题 +增加:发送消息会返回序列号了 +增加:心跳支持 +修改:现在绑定消息的序列号从1开始 +修改:VS编译器的运行时库统一 +修正:codeql 扫描出的问题 + +ci:update last version +ci:delete unused +update:depend library +update:vs to 2026 +added:agentic workflows for issue triage and auto fix +added:reply with serial number for post message +added:heartbeat support +modify:serial from 1 number to start +modify:vs crt runtime unified +fixed:codeql scan problem +====================================================================================== XEngine_MQService V3.19.0.1001 增加:权限控制开关 diff --git a/XEngine_Docment/Docment_en.docx b/XEngine_Docment/Docment_en.docx index b3eb094be52f3f52a1524799ef934dd321e8780a..89bfdf06b99d6f2bc385d1b7ffd44bc68cb4e7ee 100644 GIT binary patch delta 100635 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

;bFecR&nlo#g{u@7^o-Rq8jSf@foPsJSctfOzg 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 z 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%0D%^im6i5@IUnIv!=27-(I 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 delta 117780 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ⅆ?KqeWowo7=iEH z&q`B4RSl#XHh7-M3rD~LjAyLsvov$$HK$k|&+8A;fAYqe)wDw9c{3oBXI9fv&$&Mk z$}> zo?n2A-gs?ZcE0ePm7ON8Ve>hBNp(mTZ9F=e!Bn~D3R@O9A3X^7Pc!@#UXKK1@zav| zM8Ej&fA}*&90{GXwCuIxm>bW^=j4RjpPXdz)2ul`-1zsTm^oJlGPzF7 zpq*Tc<$O-0b3~dU2iY6d3^|8vy)6o7oj?Y+e?K|H*W>e+Q|7t0jQ{W$aW3cZiGlQO zABZqatnU&89h9a+8-dDM-6k!!x(jUi|6OC zILdhykj6822jO`c*s{p8zCb3=TIC*_=if6VSco?`UmhWPz86NwyaED9;XYFy(Kw@a ze{3^9n*?MUnr~|35p*C%Rx!`id4wsi5P2LnuiUt;&)aF|BiKRs>8QL_2H#m*Gxx;v zj*WY}#RcJYc0dfDwmemp7)a)shvK49D^*+)9x*EzH`l#I+~nsqi$tS41dzq+I?IV< z(NzFqc$CG%0P!#Nd2)SFPWdw*Tfp?tf7LEQ9M2t=;2mdNKq}v-C4|7Oa{&wBH8Mq| z@O~)el=kp7)#SK_1)@CDRWy5^83Gaw+0i_?4_G1y7ynW)6t1g)jL7FLCeLGoC7p05 zN2D9S1LJJWK?OI%WrN%w^`qX5c11rr5kJOizHt$kZdJNnzDLwz#sPSh=F|^na zqZX%(D8}rJ7%ba$doCD$5N&@yn-@=(XXb=Q$cDXd=Ac89{xQ` z7U#-k`NU%=WrfWvN6OM_?2?rxfA8{ER`&eVQrYmt`P;S_Cr^MFRh4C{!9&W9Mpm)x zY{cJyBwhzuPZ1FvHIT_QUv)ZoHnzGLcpMf;Iw2sPf7_pm4ZMxF zsqiW)Af4~I>SN{kpNjp<>riR{TjwKy@4@v!1*_pq=pft!t3f-D1ppcRBux!jC;!p_ zznaT+0Egw@1NOwT%T?3h`K+qB@cKj`*1W|i+~cn?J7W$~==>CYP1xIf1mJ?alB}NK z6W?<=H?Bu3Xf&@ssE6M2e>E+qVGT!;5xcD=XU<(Jgp|jGfGp1aYYm2mtu-cI+X|%c zoNKLla<&0v8DH99(Yf?CtMUqn(OavwVDuoWO%wOCYRg7-M(xsh2DkQLUbKYCG8@xWTZV5bwQnxN1 z^R7Ei-rcM2)VXzTr>UNWY+l{ePJb0Tw&sFzb_>Ml5O@NbTn?JI&MyFIyvn+Ht74#m zA@Rsu^Qyd3wt37bf8ALvNXc|fPZ-u1TYyyY84Xc+%|Z()a1Ps4D(99!24}ZGCO>u2 z)NdXoXc{N)iUu|6_&#mX1AKX`VmWq9IzuE92VMxYfLyxP8jhw#(-f31YYqf)J?aWb`))VOwO zB^y;?Ko+m~Y;X&B9dWCn@S6GtkJgau3K`|IQ!Tq1sweh%E>v8cKv(~LXjjiWkJTqc2)^vbCayb~O z8}l}$aa-S}e~&!20mNX@5CX@u6>a9kBhElN?~4Ou@{=@eso_mE*m@puZd>4*9n&q(GwtGiIRE$J>g9v1^*R5Al8+}3vtn)`D=HqY4f zlWpVQBhIKLz?Spe;|DUhrR}F>sPQ(9JZgvyoOs-&e|s_dUjrG&m-^Ir)V=$2z=R^O zf4q7Iu1w<{(t#L^xQA4@HR~#i`z8If^y9LlK6CceRgJySHFe(8qQ}!#mLnqkd#_EY+ftXPup<*r7;Q5A^@2@&exAR;B#>DGW>gz4t{dDrjrbIV@T=;75*8qRnoEo0Z$ zV6ACY$0KIFTKSS*b2W4boHJfO+M9Tu&jMm}Yy+}+*M<%z#@Qf{!Rzcg93bxh^cEA( zRRgJ<5%-piQ*ym!$GwjZ#>Kn50kL#Qm&U6Me|pbGx3WH5;2G&YM0qB%5AS%KqK_mz z1_`7Xdv4^(BeZ><;%ULe-`gygt(8R`tZGvK)Ly7i%_bc7?h z@+jK?d*YS}&Y^Ki8_437m?MJ1av6=$f9PcZ#JG11$mV+v&O+e%IUvb=rgI;CBp;1u zk_PVOj1-MKc7RmQo<>T>EoMMA=kWs`Ah(SppLWd#vI1X)6R+Ycmy_^}+Q_+bD>I60 zZp{W57x(9YL|%zG3V0&lb0s(KpN@K3@Nh&tk97hu`o{y=h9n#GWUT3M zljmH4EPfhdz|8P?FObB~+>LSi`EVo}XFLZK0{3NrbYp!+7DFqKY;+7AkPlu@F=lE! z{szS22g^l%LU}A7c=t6RTlw#-e=vD`bgZa6<^W{zt_?u8u?j0CLsKkhB)%J0-Ui>< zGI^BkAO=I(+IXgG>}15e2iPEI(LkCp*9W0;Fwd<;)M5ZJ`m#-Doy9)XpUc5KWS!2= zX^F{4J;hhP=YT9;vpvPS=MG5Yc5a?%9+iVBARERrFz9@2UNYxm(}NDufBgfbah?cd z@QlFp8o3smJ{sBo2`$R^4-mtroge|+d!Ip!yL@Kwo3p1GU>EoZ!a1d8Ac1?XQ=Q?P zO||Mer@}=yo=L{tpA+nsds8zy$9?vheC!Ac@;;AO?e+)o<=e%o;b3`%kbz?(NP7-pjwI z`N%E$Y^Rg6h4A{s*<$1!o`DSB@nbenJ}z(FWqvAins-pl9xdtZf7p$D6^3&>!Ze3Y zUTZi$ydZ zUBCS@cJL0B^HCt3*RIU1#(k6rG1$hAjYlV!lfrAZ7e16nah6NMGv5n-5wF_-vUxUk zfpPJAz9pgZeYyl@e}=BYg303k0ubdn{^ifn9F7FXGk41;;SsYH{N&ZoE5IwD8fk?z zd8B@+_goTBYX+`&fEXQ2mPRALurx=`qF0Q<{Zk;FGlvy(<&_pIc|#|{`APibFt%yn zns23Cxs_Sx?rARZSvU7SR*ptD;FS+Vkpg1FSG&mOjCd8_e|YwPm0)!ISjD<&VwD)U ztq0OLOIzSh#+Ozn+%m1|je6Ksb@6D?s>!(L4oKuZZdT1kL~}LCyyM|&-l)z15_tR# zNHp|LJ2!q9Na3B6fEb#5HFdn|6^I%#+SJH}0%@Feu9lmz=ekQg9}J}P9RKR#c?4ti z5O@v7>bi`5f7)Z_=Zt_8$jbKDuflQu7SVKF{<*bp6 zJ89O)f%6a`%K00R$m{vm>8Zq5d#aK72GV$Ravg_`&)ZC%M@rTbOIyO!@~k}6gyT6^ zAV&UYZRhw&4ItiN8{2K}JFhL7XHwP<(oUN^U=2jMj(8?G6z8poFR zoL6m30YBjaB=QpnKoYl1K$gNEnv(H&DT z_IAw1?brKs%jEKw;ED5nnquWvW~UT+ymzN;+;{~f^ZK`a8h;rGSPdU_wpb02&h_Zd zYTU82bKIQa?{b2~9Le6;B~?0SgHRL7Z&Tg%e>7?52zWf7gPNBy2j>JI|DEQ$u}d19 zP`;*32j|MWMKN@IOU6C88(N1)PInih-|gXSmE`X+Vs7 ziuVYCN9utT&i#Q@W3@-D+~Wr_d9Cgq$>?CeNA5f$y{9uO=l6t+8qa7q_UY8YqttuG zf5Ic%Kq~L)2gEozyk}A#)!oafVSkonp0D4_51!ivGA$%T?&a*Ij`soqVtB55rNkqe zdrRb;4@ly5b{j;5XHtM9V->ca+{=M6Ri68RQ{s8Q03eH=$`mJ3sNMkr>cWvALQkHE zi@Irz8IU-sS1m4Oe!sJv1?nRLn3iX4bjy&&aArTm@v^dD1nG}h^WqJo65Op-hb#5!* zT|y*A8C>tcq0L-+WA~BzW|I6N>=c2D=W7Z+%)M$!BR0MYX@*Rzj-cSR(ujVdzJL$HjN(uF>dse z-t(X_eCg02v?dtlFIE~0kl~e|&Xo~7?;LwnGOx{(F2J#^MM+$KoX>q4gAAQgT#_c^F}S1D?mG6S{*>e^Z=ISKG^Wlg6UG zcRtg2BIq@^D%*{xWgU;qolAZB-BI43pcIp;gGBzNzNSI@^LhW2V&@377@Zxzk2G>5 zWEzL{0eqBtp*}!*=t&xAi4bX33lO8@yARzbzNVqaMekwvVdO!rrVpnF5tXX2bD{M} zUR~rjr=KR#Lv)KsV^@VA{CV^tmRX3GG4<4?zG8o}_T!_ZK9 zs{s~}erXNZD8@6&Z^7`j1b)&M$hk$CBGvQSB40;NwDR{LgLX~z4bCB#kajX%bl$*w z3ztzKi&jARRzjeed?4Ur{B7+d91Ud9IE8N`^BxesS)F5jcfxP00TMX3#1cTs^Jjtt z&O=VW02*`ff4#!lqs*bV;Aq?hKCm{*y!|otG#=u?qBo5M1IdZTNBvNjxXl{r9Q&gP zI5}rRqeWf~UYhXM(X{^ zj&Ys1ha_%;_XwL-XFxz5k5V5ba!b2sYE-)fclsW)dBe8SOe?^Hi*8WA@!Wl&^n7D@ zYDLJ#7TidUo*V}A_xvv4ASH565#R`S8j%6D6n^dlhz`1cV6pH;966T;aipB04vGvT za|f*xfBEe$0qizVtsGA68SS?Lqo7Jp_=iyQpbX_)^O|WNKp-K}JqIN5P7h#WuF$Fp zAel$QgZi|otq+RNp_zw6b{5SL0?C2yp8&!&s9zs+Nv2t=5Pjr*vO)|-Bp67Xd`+X~ zO_}Ps@qSX41_a!jkF5yrqI?j3ZVFoTBt03Df1D<2f4~4zpmF7cC_Qr*Qb>vKtaAq} zwcB7cvGY|pcc#*s;E?JmX{Sg#H)v6$2T$!B5S=vR8P5Hhd~c^2dGCw>sdn_-ArL>P z&lEB=AMJe>;QUOQ;Q&7gLTx>aw&xXi=UPWkGtwcq!22wK4}0F(Hxy@_QV7KxcdGyi zCCYbjQQed$hLYg2Firs^@ViKW#Lf3<8A-VuKvD6N8lh~*doz>mf2P;hHdU)YCa{~#T_E`X;lSZ-voI`_CjB*MpDAK*B_3>e> zv^b|YC)K$Po<1h7$)}!X92ALh(WnQUQ%&?NLYNKun##`XDbw!yP;Rg@R98*R8uj=O zGH4grQ81S(^)Z0NM)Qqf?sLf+N3b0zvLqRH0iMyKv5l~r^RzcZSR)M1#qWg4h zZCnnv(@0Mo0Eva(haBL673x)o4Z1-qz~M>-!vgN*ct4Y5zA8IzJUtitQW;gZpbwbD z!>5jpW;_+nd!Ta-HKF{zLzQMk=72T98_;~>H?yf+j{tb{1%fDz#cSv)U*XyS~{aG zo({ScDJgT?*r8l#wU+j1+%g9wHd<++eafP>5jtQUDOc8Wy(X8$kxvVgW56spb}>4( z+5MvR*E(nB_r2@fT4;_1h;fJVLHLbVxDrmsC+fLg zlgGdzAo;-&&u^Xqk_L@R#nXb0o>qzA!;PNCJ1s^h-6iJ|LX!x=B!4Q6u0*)4m1gB* z=$W7YiEvOo_06K5`Vgk$BL-He)r=Zq<70zRCz??M0+C}oD?*h|Y5^mZ2=B%SBvu+H zk6^Hl@~YFXjpsE%ZlOjv0$HTG3dsMb>pYSyxnUrBrJ@7KCGGu>G>M+=`%-A5jOt%S z10;OmYW*fYdeKkb+J8$4Wp7NA$QUbV*4o9WZ!^oCcTQVS&}tLn3-v-Xu^pBNwoAu| zK=VIhgGkSuG2MKmg%*DxoK4sC&c-*`kA3KiZZ7$Tp8D2Po5%uM&oT50k@BOOsP*a( z^PXA{l7_3(N4dyUTaWBo{L&!`i@LFii#h7XHfEaWF>7N-Gk-)z?Bi24cb-`3B*b_Q zdzX=z7+ARZ-pMTM5!)THazkKJ;68Xlnb9Qs=;MlH*>jjaS7kcyBU5Pn)AQxjSLMnHo z7t%WVN83Gayw>-Xfwf8P$wo)th7fHlO4wIQ#-3#DJwGV@?UTkp4jXkR4c9=34UA`5 zN||SBSjySa(lZfNM;qPJY-}$Gaqi(|NtO|2nhTKuLVqX3vMg7$nJi~x-%~i426|Vb z05@TMuw+YZD8($hL=UcxEa#1JCW}9~()Em?G3K}+09NewxY z5F6-oh=l2imV`y!F7Hp#-@^P5E3(}&DsSOjNAHT&lDP+~kXA0fwUC9Z#;Q0Z#@?-3 z;c8=10AyWAerEibh$*BE^ek9i&Ycyl9y8R=Cbg82t(y$gg_7J_%FNcaIl3jdZlYY= zRYQnZ^fa1o!o(Uiivb;cPt9vVE@sxsJp5TU#bS z|FvxcS&gk%AIA8F_`y0O+kYimh}8Np)7*B8^ch4VWeqjcUNWZe&TZ`vKXbnCVz+ZU zx$qP~A??SWp6ruv{VC#>_@$?2?hPcw6IPkpX>EU@eJaLTzlCdk#@CrWosl-n(IeT9 zne%pDNwej4h;c4wH*5H}t>x=Q*SIOGwK& zIm3UyVFUAsg*Z#)Kn(NWJhB{+_r~l4?g1{OakmTUUvWM<@sWLyQ7;6&XHQn77%&fU z(FX3H=;=1DI(JztTzN0VJ62(Nq~@U|;klHHa@2Fp4dW#q6KT)~={dR+@f-BC(30>d z?n8#+S-J!($X${*VP2<@AHAEzPn@$_yoi5YqEwE78k|odr12amFX4aV-`Tb>*5);} zfw?Qup|E3ix{$`Rr^OP*LvTf_N25_j5@*VK?LR6)0^wd0UZamQ|F!+Ysum&sQI{hL zVgqe6Z{;iKjqvuX7re`$0|kKPUE>&-lPJt>d${= zIDVL~?AH8;e6u0JgK|f-^Pt7zB4gaWU5I!Ho?rOdr;2e+9}>OTTiAz$7-?%r<6o?vLcNXT#{fkn&-yAdtlRXU_EF{!G0bTF7C%bGI^IweT!C zU%O0ZgX`sq-7b9R+R&EqU7GRP*(Hoy9(a-14BT)yDWzO>L9UGXN z*Z=B2=}UX~4bd0fzn*!DW|xiAF^&<)LDtzt-zH|)cG2sDx3MRa1xDwfC+Rt~vwE8O zpw<){mF%JO78Ot*dW(9r%t3#yETlG!miH{mg$y!e3wNyUV#GYBIA*R?%n#A-M2wq| z5}S&w27vc}4vXoiGKNzW#PgSuvrige1zY*!inLWKMi4lH-n=aaOLQ3VkP@_!; zerf#*SHyR1fuUv8tAr&o{9cD>IX`pCKpxVYR3q9xL1EzZ)THEVnk0d z`qJAH;o)bNR)L>6wWIakEt*^5ZrfLX++dk9&bQHG;4iM5xbi~FNVKXx?A_EOjDQ-j z+ejDrXtx#Tmy!C=gD#{wR+V-C>O$$?Wxfy8_1z`>vHM#0B|?h#$4}mvZ6c&__Dt6m z{*Vdje12@T2}uKcwFrO7gC#|esnqz^edU5)w%%h11-@JKs^n)zWOL)Xjh+v(nl6*= zVttm7y7-Lhk{0yl^(kra1DScTB%j+WdZqe&wPOaj5FZ$;?yF>ua74pUt`L*H`Z2Mm zuShMzv$JG5@=07LUtWWC3j1pMF21lgYTqrq+lZKNj7|0JWn+Kjp>J^%%y#U1|EMAC zr^uASvvXvzpwF(K)+Tns?Z+j^ajkC(7Kuotmf~N#zvkfT+?2x_{Z6~cVTH)l#Itjc z9sZq|v4dIG{nd}_>xCF+P4pLuo%jYX#<24n-Xhv!n!o*OQ!0CmZ5oooIcF-XH`--sCt=vN+oj61Q9E}ezl znukd2k28NNqF6BID#UpD&Jcs-nE2@8Zx|gL;)(1Zm9{86*Gh;bmR0(58};cJvvKXq z5Vtg}y%bU_@`Ew%k12CwdPx|Q5YjrIkQw7B`57_dAHUN}`|&&4Im|g7%kx8fVfvo06{-HgUrvEnPsm_$YigCahp*CbF zGxg{K#E3tPF3+@E##mb*6@8FXjF@K=&Gb@1-{6dP+WbAaM)@TpGN$mamGG0}8XTtlTsh_-R+RBV>cL!H?Q|6K|3DUc8mHCo zURBQLX;x$9QNphcrpKA`Y7CUWJXsuXX19+kC<5si)0@55i5_RIW?}#J?5l3{yUc!N8Q}i( zD_alWdPMRUzQKrId;E-;Kjvi3(T(lkIi%6C&UKFY@id`1R{r=Tj#Ib}Oo(I!e$Py0 zuyoP2ALw_Pvw1@6Fp!Bne$L&D<@JAzNjkVc^QMWt9p{pq_<_i7#7v91EGG9MGIK}& z!CX6C*68beTn9G84~spS=emh|tOas@{LYoi!u?s#I`W;lQ%>kdnqe|wMu!kTXjM;L zddC>DwzM6V*Sd;{&(7YuShzp?WbU6h_qBw*!sh8ex}wdqE7#M`^Q58i4a9$y8(M8T zh>g4KOi{s%`ET<|2eY)i(*|qjdkbfy3Nh}0I`5Nw!*zRKy4ayh?G3gt`|}g#^tE#L*)8GyMBMkI@&+`%dKI4$o`~* zQC4kHB#wavQjseQ(KV$#-BEFd(+_sUzOg1nh(Gk^?eBTT+=v}vT8upWRsW!6w9|-u z97JyP`er0|ekP}!7D=%!YJb@=H+;wFP0X1KxyO^-gosz+Zs(C2X0-1dGXY4(Z|Mu3 z*b{O5j=V}pPHK##1j70LyR@iAW8{a|V;3DAWHq~ZOle1CG_HZ#(WMc6(OZ&= z=Wy(r+QE#%a3gX4XiV{37(WeUqa59}`oPSqT`f)YQ|#)_-L!XfLVrYEzw41az%Ok{ z7Ao$k%paZxx!Vp;0V3CU7X7vuCW_x6ZQ}0wo0Kpcd6QDX`v1lqTj)_ww?-R z_3!9fgpri(DJ_)o+e>{oOJTd~T=QSkn|w~)3lBE5I=hIZrD)#_-q?LW4Tzati%(EGK|C;J`$+J6ys;5QH%eU;BxPV0M!bX<^*cC)SG{ zSWhJGDMMqbGSfJ?xa%>=Fpy;YQno9#5lJ|5+q$@0e{hKmf6P15dX=s!3``~;`j327{qPeflZb5Tg*SlcOHS!*8I zGC%Hincs&ME~hNdI5+8(lQLGX327JW3XZIgjZxoIXX9=cI)|V0d8^kJ`W#OCq@D0w zH!Wx)d4DZLR~X+~2Ia%5+0$~J=qZVY$Q}DE2=Rt-+S5cf_)A+f;NfRRx@eyYDLh5y zv?nfxYaLBkF+U^_o+EvtHWusak3~F~f5+>>t~AF^ZJ7IYJjfHSwZ~inerEYWc6u?!e@q92(Q5?`W@VbFi+7}b4ECi`57%JTF7Vg#$8j-7~ikA9>#qD#WZAQ;ku3M z9hqGqlljj4jB78?%*Gj#Lfp|Sb!2NE<_FXL2Md@nLku;#7Wy)Gna4Yys+A(*h)CA` z!GHZ(xpMCQS>;RET}1}V$32zKk|1Ty7qgaF^2x|C-tFbiy(Z4;vXGHIN$l}#$rHJ3 z=*>Gjst52(cgd5v*!GVn!5PBZUvdQen0c9KOwqVjI7L^%Y}HtO2Jzq zIz<{Ikd1k1S0~hP-p8#nP*MNf>VIir-N&uH4D9oBYs}!oH>g@u^cLNg#f0#gX5T|^ z>uv5EJ6216xM8=Y+jdP@qZY`+Tmm6&p#Hh-mqx#)JBL|r*W!Edcg#!1iufDm0@`!e zMlp;O3-J##7q3mL=v%+h1U&O!JMP%G_1Y_j5kes~v-G!TA6D94m)6EwxPR*{53CW8 zj)^)?MoLBhs1W09`|B<;hPP2{r(>-8x-3fcsb1ffe|+gl9X%yND%Vk7zjdK6;Py|V z7f)6Hd?E9`J^NtkAFanQze;pR);PX(_r@KKgxJNNi?{d0Gas)k*Nq;T+h6MFC%;3? z5-WCul==gyZD4flj^^CyTYvVSOcwmoVV*Gtc1KSg=U(11GDrLFc!}q|UlF^>JYp*$UrQQ)z$SDsq$*z?;9+8_kXM(zuVs8T=)k2 zctwll?wb-?yZ2-nK==kRRvz;l?wK(Q7m?K#^Te}jLyPjt(&K4dLhPY0;GUZg)&~nI z9eru{#;9W4QxQd;Hzh=Gji*ZLZ1OF+QNfLGt;_wG+1+CcyPaRX!pF?+K0o}W@AJfW z?xnA=ynfl(w{c&|2S6kFdI2$^U&v-X_h!Cmz2A2&p|OKX#W*oIi{Lb>fAKX}qhJh$S7{e|}2t3}kG zr2mtAz3BCL)qG(GpjW%tEv`Wo-$D)esx%WaA?fD!VI{z8sV%etU#mHx1@>ZCGv)xk z7F8s;I!&@4_0MZ@7V)i{65x&WeP{!|k@cmM+Swm} z-?MV+ybCMGtZ_uFRkTaq8peGZ-`Zh@GUD9j`mJM^*LvM>dmth%#B04vdl*rByC(KH z3$e;tW?PJLMx_7zogqDgQf!aLRb_9_mM~N4$&}id_4>|dA4VeI$$6mH{T}^s+Ih{)u)k-nkQ`5{`bc z7yZT1=kRo_I_8r<9SmIsLsU%{{!Ap4?p(UNW6@$icsWM(A`{t!`8kTGb-0{kf2NlJn%8~yHo13n_kKad^*6Hef)U$BKxswQ_Zk0=D3zQ>ZYd(KzhPvSECbq99TtINli zl}KZPwd4e9(wBx4O;3Z@~VQ;|~*3#!a)j2~-PY&wLYv7P!cwdI@XYng$1w@}A*pO<`I~+A1oL2KO~3 z_$<5!n!rZ9GU`aY;LYWy=^o;6Qs+Lr$A z$xU*&)-ol1`D;D&8@(_BiTnXWLZW$gH^^W64={QjzfF){Gy;x7gym`pG=%U@Qp*D2 zWSpDd5wj1~(?%b;m9P(1Habj*RFJH%T9i(cviKi@7S3beGUMke@`a^V$5ObX@YP-N zxiKJmkg?3zIFe-qSWiwk^_H8goA|Wg=Sg-nkBNu|Xs~)cG}hsj{hT1e68V{alUU#( zC^LlcOOWJ=JK(oR{?_O?E$!{r3oPrupLq(b-Se}O`r`O){u9jE|Jr`RU&s576{<`w z)`I6+O0BdS+wA~`q;CiX>=1OxEvC}X2kjQ+nfIo!j_D(-e=P8aMfh6<7rD2qWo5@| zV?7P0K!f^HE1om3OU-IVocSv;Pa%eDqu$tkmxxU$1z>OqQ3&IRgaa|{hY+6ERZSWW2) zQ+i^)D?~+K!v%Y-V<8s(M(q%-^hu>JNOx2O$!U9D6*C}<#>pCgb7Hv>c5@bTGZd(B zIiU}1b#cevPe)5_XzKP|<#G{LWK>gjJOXz(Dca<4>A;=r15G`3qH;hX&7fNSNJjI^KhkP(rn7TvA*cl&&x36 zwKafS?k{tgZTv`%v$_gRC=a$X?J8tc(ESCZxnv!D)&j6}#Y%=)(($Kdb=Ubc%iM>w zNz_|-8e$jU=@F<$-hw1G4-#XwpmMxXlily@l=q00gm747q;=9v%GY`Vd_8B_G=IfXkL{d+Y_I$E zdQjKc8lC;D@q6izZizrN(9~hD2=DoB`nQSLo4Y z*3``-Ji$2f*JcWXFFw9fiuqsHL3Y2Ut$v;9t_!ZAIDD7RXdLw*jz`YV5r4qQA7*NOZ6a8bXq6CLmj42_Jwm8X zkn>}^@IAF>u!8L=CfmF-SZ+c|{D3pe3&TDSy1qadJ0uaZfT;O|M2ip7(Ha3-)`8N&e#cQTC#jjslvh9 zQYE^dBVT-MRfHxWtw8j%?4KYl}=PZnLcrqs4Rw3ab`5#?Uhvo5zX&_S4e!(Fv@5?=~lkQ^T`< z$9y@n%Gj+7Qa*G)50wOKGBxv8{(`Udkwqk0`&jV+Z%Ur(u^|LIqd+I>rl0k}y~^BX zRe#!?*k2Xmm#=A9X6G4M{*j(?)G4g8^#Zg`Fv0%Usjm+{HC|0S;Dy>&Yz>|)C~RZQ#^H&skK?-!&;UbR%<2c6O70&dj{4& zV{{Z+tcE9BMs#>ky@t8L3z1K?XVk+@R032U%};*%pb-Ap0#EE~`6(m^%UfhE@K1gF zMH{YT&{Rknbd&5ZGzbK|xMMO2<~*-`8fH-}%*Bhi$AyDN7}+s*l-)fH?t zJ6Hs%gD9xdgn z%Qw~7Ie6rOg3=t~3R4jzN(meN*}zALobU!LkaHs+f~9R(@5p?a`-U%>h>Q6SmRSEV zVxC|32WIhH@95yq)T)%d8fFMs0t6o4T2yD89Otf2B)qi2R~OI@dQ%e3@>J($sCp}1 zG`UUP``4%AB#O$ZU4LA-UUAUAm`z=rq_23zAs4(6k{tBd<=kjGOdso|1U&af4(dl+ zk9!fEm0&->Ab#||Hex>C5+to|lEQ=&@P?6e`h$F*DC4vQa`xzd(5@?2oZI=m8@hk} zv4%uN;+(d=7JHhf-o>Luos4**6x^vEY zycwkD6VERf@caA&f~8Z_6WHY?G=H^VFC5$c8*C5D$FxtIDq?&kT^E1$U@hTTKH+fi zW#5){gQ;=+Ur`RMe?BKCZtNG6ZuI^1>GU;~&h_lIXQ??j3|*MpKaux`onKS8o%y97HcpGN-q*XU66U|Dkbe~VH>!-=;awr`Nw?5)QW(>E z{`80oKR1Z@P91x2kk_&@Y8S)bz<%HF_d61GZiMxGvvt1tB(#kCtdv|R=swbo&?2nS z8q<>PWxT{~62qo@E|5fs?6tDX=#WB##9z*wiG<~uH$s>Qx_-2H+i%85jY8sUjABJs z*mFpTL7cc|nvN(J+r7r&c$mDYte9zw&mVvzr?5dYfx?= zVChMMZHPY+unrKm?LCf}h5ye)v7P4=N*JGhD$Mv6Ea3+jvA-}y9`xIpN`k72gUQ(s zqEf8}6xP}Scdn6`+m-h;wslR|mbZ%P!6l&zDz6ygm~+pnYgOQ`sK1@rJf~g>{l-pj zgSO{RD3N;aGY0dlpMR>u?jt!hioo0<^RGDyUrl(|c=Q10)<6GWUf4%SyfI3wp^Ji4 zd^-6fs}+>}>YljP{C@6I>1!hAMMLM6-tzzBqx=?=8ndv8SxhbX`j-SO2s ztG+rC-r4efb2K!2ep(X$>GSU+n0Y~%*oD^j52tMhHmU1WOl+BIRt>VJlJv>gL)QvD z|E??YWe9yp%105z$y&zBjxff$A|dk1SKdjnwkc1Vcew{g zG6DP#&~HFdjYpB z#bibhj!YGivM?w45l|3s`%srsk&+bml5EhF4h;AeAvxFYoJ&5nr=iSOtJQny+pv7y z;7k_sG%&EhR%=FA^6v=3Hp2x;Iu)@)wF|1Qa@jhGG*xyYq1DkZP{7pr~!sY&R2N;Ro(BDe5Z3cX=x{r)*DO4Vtq$Lt&0=a7Pv^4a%u za%lTH2^D){et|0of(eqTnwdz-ENNGEOVBP-c9)Q$)~Q)OWiy24lRiH8fTjMQ>KMS4 zE}(jMA-S9~C*Hj)Xp!H3D{-9kYn#Hv+V1`ualUEeya-0bTU8i6BE=u4*oX)fWM_^bPsx*O6RyZWieL9N`y zlcO$*XZUASp)}QvhHp=~8mF%bOf#x#Wu& z_j~)Gd8k(Vqia&0JN04TCpRre{M0^HdncV3gy@>;LN#bDxgMlGTcsbu{9Ea{Xdy@m zfs2jOM^$;rG++jTxY6gx9?n6nkaR{f8U5QkgdJq3lz_VsD)cela@O8&e`liEC# ze?zNunLRGu2jBGSmAya2-LPRKet zlIQw?!jnGonFKBafcr#X*~s2sq73C84tW^PE`8g-LPw6U^?KioalGkk$%*aaA)QQz z44EpONU}6;jQs$E_{&zKmb!SPzK9ue9>9ccQqG+wEgl52IDLvA_6|UyNw@6eXUA>j zqkZsCq(AgiN9Y)9L?8}D3P7^ksn`GaAI=xP9%8EDYqMar0D02C&x@5c2x_&p#{a@G_q-X2DoV0^p=i?M`@_)#I*PsiYFZr7FE|N1UD3e36SoL_Ge}i~>5>uq z_q>MV>gwoh_(fe{Yb7GWxd^O(K*o0HY9>=LTU<|m>w6aoC0f8ZlO^PVXtB{QyK=M! zu1FYi!35w6{>OuQ+5B2q9?rwT+4i8N>cfsILk_K`D|Z6X8QYHqB-^zOvod6UDT7)Ixj3d#FE`w!AQCoht%qtCpHff2c|XeLJnV47vH)8^2K{RJJ6<#qb{uuT@vR57A4Zo3j|G{h zeMyYijqhe|ae$xfG_KS0R;+v0}_T`O;7YKvBmX zJainQWe1gdjbN1*H0r*8%GPy8ozV!DavYZw>SOc&eNW{+_^ZRoaQj!jl z3U{GHEM7gLru8H1HBBo|xd<@!wbDFm#uy}{A~(hs+N4|G(W{pVK>M0M3&^Uzo$BtT zAHV@(7HdD7;`n<1w4iu2&&Cr1+z8mwUvZ{)zcx%ClOL?$k0(Vh<*kYUGw!0X--RXu zMR&``HEv?<-&hmtj^NGCwpaBJW>usHO~owErv$tM#@H9U?at5qb+ROGl|;Km-=@_> zs5SG2pFam*RM)F%#yC}et%t!&RWqFg5PXMh9MDqC>92j|&XUCfSUo3z?~_==KFO@? zPof5hq4gs#0b2@O8UJO#cMbwl29tlv!Y zGV?9D9G-|7C6@jXHzbvuL%+`*UJP!1GpFvbwg;D+~6r7 zV46k?GWLbyN-S$!6SFMeLfQDgmQG0I8KLDP``${L>uO7Zz;uG^DL$}j@LP950zqn_ z8!V7kh$FBSGPeCPxZL7NL#AYDq9r2V!COYgrd5V&?Tp0ldC!hewLJeSOUbWqLq(p> zB`+~fi|oC#Y}{^(@n!kgR2^^8c()ksIA2;I(5aE|G>5YON$1)Z%FR&QqM07qmlu|y z!`@RZzBpR@@)=|eS_aZ!eQ!Bbiw2`>WeJWd$S^Xq!J{{6M)oGjqmiw2?IT4IKYymY zS6D*g7G0qPSc}HeXF6|gom^UDO&4CkZWBBZgbVq0q@IpBajQW{kL+(EOwEKx<8fy_ z@Hr}3%XdHw{Iq9#nCRpn^+6p6z8N|_l2kaZxQiEChBz$<$r+Qv7l_mDUmtQM- zI)b<6mOdYhGR=iaVOefy99uRD(_gwzw^?J?eJa{EwU}@FA-d9&^| zxi4=I-*TA6!?$vU&mSHe>nF(1nv+wn{sZem!Wqttasb&QML9E>?ULyx*PaF=aZGB* zG$!(ZIOmGRj?Di4$WD%a?=?@T68kqbYzQgD>0H2GWL36{({ERo7DzH1gGS}I4 z5ue*t0qUl&sp&r*WpoXk$#66GwGj9uF=h3`uZ51XYO{RFs$4pQ9@v6r-WRnF-8H{h zEH!5Q2_iVKy%G55Ef3Emi;6;W(Jo0tV9Lk11)wIJAp0X5@uJi%I;anpr-E(LS+mw& zoOTRcl931Gq=}j=4M+@!*XerU#LI%RN@;SdxVQ;vQ-e4kP zs7C%4Q*Zc{>WAIz(^`6BQ)$c0uO>t%S$T!6W0uYYg&vgD!l&&dF;<>fNc zv|bgy+j!1+yzv))yNqo=sI=fXY{1z4Tuc|U(2ve^tI7TjW{*+#{1_!T&pGD7LWRlU z^l0ylQuSGhWSglawfH&5(b{IN|2)&_%1MdRIURjOy=|mZAItA-elyj!a6ASL;x%fC z?}{mf(Vl~qWjK*e`^+cZmbpL!($BoltJK8nwTM>Q;gtRWvI(z>4F64#0N7I^CpR6- z43<;=p5_+Uqpc#hV(wttF3(;A3kN9Kk@^~N-*~2p5+sEgkhUH)1fR4Vu-%0Eei51K z^ZiiDCxqf$)UzIC!h=Nz6dZ6!Xk9x3;2Kg#I?@M;wv_hIJ7J=eAppCZCmZHuHzeHuemINbfHsO@%>Yb^i1ZzG*4Bju{yj+>_Ulwukt{e)o2*q`cs!t*Yoy->D-Q z#!soxa(cjGGOYBgY8K%aIp1u@;|%@rS*+>zoUOT`iVD7Do=f6y2s>V?CxFL&+yCvn z&OR_KxEXKV-zBWWxdcc^`;b>lYJ)MV9mUR@Q%hz1!2E4qFqYks!U&?vqgIFIFW|d9e)>xzaAOw?}4_O09QE|Yl5G^$y|0cVDOmgfHd!hjRNqq6B5o9Y?oVz_PCP(f8p!JBD}}%6eUfQdIChGQ54HZH=$CDV^{tQH|iozDBbsc zryt}v`-G?T!fXZQ4P82|%9R{f{qAgMZ14S8T$3(u9ME3Jimj;QYza0>PX+1PFRvK- zS!SM{vR5brJ35$7dAskfy5r(my@oU0x`u4Cj5gBn{GY0 zerQV_cTQK4x}^#doyN&(^ryR$<~zU>TB%9Z3mvnVm?V3V5UpUa%2Ob0c0FJbu-z@% zNHH)MZLhyw2*zLC%Gw?;qMja6a=VvdY?eMWy7J>?=H_Ni3${I|b2i()R-wJcRr%+F zPzF-}xbBO}W#;qDQ5&gg=5%(_O4JNrnlzZvy)D!2j~RkqI3u>C%V&^2!g7e1LlH~m zn*aHIujz_%uY|ZjLg+UJ%t8ov#&lQ$3S637*HOnBD|)ImET{|7v!bAMMFnra0Ca+n zyi#XVZrm(Cq1 zF|@&za}WG$$fKBQ6EA=s++V>=PF__skNT%2%yZ{DmboQm_CKb4iF8{$?_XG_eKQ71+~mU6 z?EduE+XwlH%h8Ngq;)jk@iQE7kIY%x#`+;tCc+QpT|WzXe4q0p*1{`ii4h!0{oHZ1 zHON{Uv&0~Y%{-Oerz_}QFKhoG&v+kkE^?lz5ZV;Eh!NDM^BEG}`KGM8azj;SImE%I zij1kF-vx5_)J|!KxQt%kJ_PH?E_w~eI&2)xx}Uyd6F>W9?htk=KDg~=XzjNh-k#{j*uq8Kaynd0GgI0~ z30v;e8szT;-Eumbrl`%v-R#;^7Y+Z<5HRve9y5I45M5uXMEdKMv*G(vRoi^i=jmnpaV{Kue2h-(rfZV3AO4wj@kgCW zu4ae$zCzwmtE$$4Jmwd1*`l7O*_MrJ zjWN&dS(Z2#8PgHoe3)FcL|p+|XL1N8Xe7~9V2d$|(r=1z>wk#%UBP1YWBGdw3=Axp zoo5Eh0I_RfA4gZnk|Jn|FZ<#tRzm3Zj`n}i9CJ#$eziV-efy7g;^nr}e5IJbuilN9 zf$!0`(P5=DVP4J##&oKhqN)D^jk4+Vg`oEu`E=JyP!rff$Q$ z>G)mxBcFlHb6Iqrq{u$)HIez@j&_TB%`yl;#ejjX@5v@W`H$!oJ|Fnp8IvtqYR*^? zuUoQ`MRD=Bwppt-{Kk5}7bx?Wd|2U94S5uCUZRb>uJ}Fg zrSeo=|KRYjpO5(QShqn-ms2+$OZhaB0v%-9|COWb1+SOD`A%|o5_^=XcT9cE?A3s0 zv=rKLOSspd#M8)qpZUt+Y07Pi9ctJ-@>wg9RXu$$4WO%CP_qS(t3>NzKIOihLUZ2T zep$XtY63ByK$$?siy`SKg;T}OjOMF0r4e0xl#8tkjz+vLK^Kx3WHfXdUQhLQJ{iksGT8P zX|G!sZ-R0(jEJAz=XWsbn3I9vFLCv9P$q6&j%&S-Q1~y*K`}K!HoVbn0Dmn+ATbzq z6hCdKfTA04FEfE0S6PQrlo)~ps88kI=n`8RV2fF+(KttU68~~}9#_$G^`~}5x>Ch9 zWQhl~u78j28+ZC%6Fay_bV|xlcaxc(9e68u&md~JPb=1E!jLfr%-|(BJe*9oKX_qJ zyi7WM9)!F+yQ{HJ;*SglGBW|m`4O@|!^V+y4B4!VcX@|U2rOJ+feBJ7;awXPY2jBZ zNxyupB;|9vsmQi zX&2@LowO-HY^#&>pnmqv?^t}alO;-U((>mddHv`P0S|{sHYOl;t$lqUqQ?_r!5yq) zDf;?hz0FzWs82YE%KlY7=*%W%jmMDoij$bWQN`%H)!D(1M6dIi%CJ<=M|xGbqy^+L zG#(VcSA^pPD%7%o@DrsPa+pnix=Ds)n}B5>M~goN=ZNJP;T`^1zsV1Xg@{|G4_MVy zoz`XH8_@@O?79PW`=@Iw!*v!pH2ZLM8v&AfmLF_u0jiv6G>(h8(Wp zO&MzMe#YJjslS52L^&#~>Rn>DpMFvR4dN9tRk*V8WCYO}!z719#Ee z?@Z3n8VJH+`yyFk5zO2)w(3nzym%O35xhK4wud zD6w3a5C8kYGkBHQ+n-$W5yTSL4Lw0nt>08j0L`&Uq)XpQ9BU|^=IpDOqj4#DvGl-# z5M`m)vt~o`L)L!A@{Z6*t?n>PNH~$m;kZfgg(^;E>STqo!av?7O{B_96D!^wt1A?# z6rsBA^>;Q}#Z`VYy(lHJU1Y?lIy5|XM^xzplAy!FETxyD)ohh@KurEerwol7sL&t) z*kx*oGRmy?L3FB%Q83nwslZK1!5|4$G-z)!xU;_b8?AYAh!)IPmi=;PkM_k`x# z0}edpN~feI0&+IT05tt2k8X|AGvOfyl3M>&u_VztnHF!z;eZ~qd=9MrhitM&(S98j zQ*&6YNU%<~;<{MnmU3PGbH1e$XJ?UfpT6L54F;Fg8kJcAF`Sx{>1&fYap@zF6JuZFjVNL9g-m(MKW8BZV+Mglk8?1<%X2143wI`vq) z*tg8h^VpHY2YDF0RexX4FH!SZ8@vFCYB0pAj{|glIOJwaM%cH5|Ke!Jgl#sPs*Rg- z-iRqK5L}H8_Fq3_#@Ed0z&C>*ul)-4)DFO<&GyH+@eBiq&}P^GOAl_d=E) z{Bj&oY=dhXukypiiU@ei0BJz8YIEBy{oS|n#iX8FE*ORlS9~#wQ z4ung(vPI8*rLkxE{hA%j$+o^G@;~HJbD8@`&%S5!+1B_gD_AL%2}Cn)gvU*Ea{txu z&QL_g;3TQHk$!0_RB^Pzg(d&aZFw`Efn+}&pK!y>yTwz-zRe!$5}~@%$L{zq$2vqn zELdlwn_Z=yOx{YSYn#je>@Yudd-0PO`pN>o7O<@RMGQW~5ifiH#C2FmzP^E)OXC`|2j;QwIDqtw2YM7YCz2UO#kLg?^ zI4Nzu**bg6b3)y@)wi4)n#iT{bk``op@!~i^UCnYzu+;)#)xO}(SOmh-S$^=P4pQ= zVJ!6MkCivvsKn_HB_eVttTDmLH%1pt=x4$1w>x$oiKVN)D`8jG$Hn80#y{1Ab-E^0 zk}o)lw6orm16e+gg-u%fAxu!)AG`Sr+LUrmN{O#e?3o?Xeut{}anT|m!}HHi65A8r zWtZP>rt^N+?_y_{6E=dMrIqDmEy0+!x$nh+@QNfjm^ zY8hXh()|p7qL0n0!Zv)@U@lCk!b&R)c>|v87V_Z$^0KjCa@_ak->wD;f%sMvq!~s+ z(i_q1I)NW{b=Ev8QMb2?Ua%acEDsPE-5+fLLLRE} z3lr?m^|74gd8`iTpXt0+YnvoO2Vh$3uw(;!$hXDL4-6PW8q^aSsb?DQSpZo}S^g$s zkJ-7I_oJTtblw`po3w4;QZ=RU($;9UqM@Qj*93#%vA-ZglxN@Q#8T=K8#}42wl;>q|-5YZQ?V4b?!y zLI=)n1cUE&VV^B^FBNZR1-8s3fhUq}Ctv)ey3KgA?Zgde&)b4#pW!m*(rPWoy)Mo4 zai^G#UfRcen7)v^P81BOL^xKvw^+PbpTGEMZla~r!55tQFP)6hLV3E){nfhO^5Q$R z_TOLp{re+i-zJ|dnSF$3eJK>vT3-O_iEi5m*dtZ;O7WRY$EP5jo9ma-0;A~UIY-it zpBGWz&&JJVqF4f7!bnw}?%Js%lbalqqG{?#f-|>i?Ms?I2=oQP8FC%-3mF22bHwJR z&(U+hsBq;6l~)qGvfQ5CL#tFxsxq`@!}%`6io^Q+iTKty=h~RoZ#!Oc?M(vt@mBr* zCgrXD?QBmnEdKez%0@_@KheRsR-HR4){g!(>b4fMW`DBlBm5leR$f1gb~FXQ7E4|> zojc^oUsrTsiwuI{{e2?RJlrSeeZ*S+w8y;1X`|Y(C~=AU^e6X-EXmQLw+hH>BBtlBK~m|FautvA1kSAaFLE`|0wWWBck;fiPQ?BZmqYD&9mRo?;Bd+` z=T|P*B|j=mU*#}XxNb8adbW&&FOalD!%Pz1?@s3-sHD*tU=D_f_rW~&Ju8njq_>fDfRwTC!ax4qKti?c5c znQ3QKbKLRo@6)!~;mdWFzNsG=t*_l1748b7XWb5<%WwROi{&VF(Otm{)t zpwxzSvLbkX#mTPDlgcF7I_J4MIOj588(lp@p`V*+{Qo8tP9UmIzc@4NDB!Mz374Uw z;K~n!aR&nmiFNeq*q2J!1@`ALdTAx5REt9&U%CDco(#Dmg0!0|kJ+%NTb3y9wEFG?=Co3GThVUgzh6lSedlrD_e`EW2dh(NyC6Q)9D0m9bMNARh>(FzDzh zdfG~_;C&!|J32rBb1RhQ{oc4HNn9L({6D7Hu3*h`;k+Y0aQAO4Iu_Er-fvxQ%7<|r zj3MH{3E@6s_PuaM1(l^$us(jcb(R%s?wLEvqC2s67x*M(lmdwyzTfyr+UlqRzPAxxDb+nS z-E1*zc@lKuc6)=o6gW8Zc#y$`DSjtw_t7?U=AEgVEJ^72}s<@oNzsx*3TR@Me! zUb1*p9Dne#IZ-?Jxt`XL&EAfi4d0sVB7Y(Mgx(5%Lx!FB!J(EfTg@e9n{@A`*mhD^ zG+4%8pe*p#Nb?o58F6?;cnq4Jg1A|B>^CrKx%g}AqzLX{O17OhOA(7)FPPtV=P z*YuRcU9;jsU0>x(LhMX0mFuZ)c&7j~KCR5ZK#YNbeR9yKRFb6cIu_R0{9Aujqt0+C zmnT8)9eu&x%k?9C(*0kNk_52vLocy$tuTBgzkq`890&uc(=)Y$R`Bm@UzMw@U~ETalUM6_iN|H(l76Fa(o2jwStkzHHvyYacTW~s(N5!snvep zW0i|}dQF9Bf)BUfbd5M?Wt$>sZr1di;`aIdvSAR(AUz7=ng8xPMK+aE)9+{+LKxSiD&%d-`q7fI;M3GWs=CkEbR2I0Z57lhy)hmZ&EH(6+)H;Y_gH?{Is0`55c+2(+V-S;o~$)n4jIc zG88KE`tk-}U5sGoL;LKdimv*SrYqEgjb6a`+#8z>Tc{!y@%I3%y;^FK z!>5}qeRlfZW6yR+uK%yD2y8h>!O}1?47-Fn|4nE91CCySA*0^4FQ6yomw%Kc@C1T( zqBvSjnFTvrs9Oe_U$dlyVd=uf&@b=UnDRX*RPV%(pqP)*>4Rfz30(bun~pV>t*8Pm z4;wvh1ecgOVkDq8SS%-4vrHx-ov|Kj9d}Y`0n2CKB>su>-q%FwS^YBT0h3?%eb zvZn1Jh^Kjvc25Ijk;=29C*V5onPZ?-m#;onQyn$w@5JSC1Dx;IIc^(a$6?BQ)=S*6 z=v_nnZdvH(v6lP%T>2{u58vvglJA1?|F_rfi&^{nL@Ozl)TgrJ`X|Y~M86|Xw(5zT z&w_2q*TXQPc-m9i^V*(Xm2U2%Q1480$w9HFn9>HaE;-%3XF^|78jSd=X7_3%aXxh% z9yc^*IjN)^`U0pIXJnA_JeDP{JCrE2R5kj2L4O2|($$dGepL$b5z$QKWRM}2;Z+uw z#7;9=TuxpS*N5<~`W<`EdtvfEyH#Hb(_G=bj>#a3jw`)pkHV{eT(V~9!LDN3?8x-n zV|K55iQWv=&#gE-#fW8rkCmwx2l>LitopQEROe}}o`9+;u^;V3o!@eZXWH6LBq_-y z^TiIMfS0^^f@-I0>s0+mk2^cJbKT~3u;GU#j;5pE!6 z&qjZzXMCy}=ikcHL0eB4ocN!kgV6e*fPWM+Ny6+-tJ7wE=_b#bLTdm_Rcxp}F!RDCGr4uar@gDx93>~*Ub0`WFN{67X zwTSPwoycV!$qvTVipCZpP?yXjcW+?Tr2oI;o#J+hzq{+cpXcS7>JEJuX2=D1KVb{( z_kK?>-*iS9ildc+wu8vxh`)3C^;*JBx*{1uoICkC z9w|I65!JjAycW^a97zbymV9byi=@we%XN7JXmISPh+1g?$a6)93kNkF^Ebf+Y+G)P z+7_P*H*gedPr=v{h+;ZRW&-+sl5XNc>WcDYIf1EReSEes%b+)Gl%`8Y%{sh8MSEJ@ zIXe#ANq8qWOwAI$(~`sK34O+qWUzmXk_XvWF9no1UDe}SEh8fY+&<9w(pFLU=B~e0LZ%3tWecJl$M7;= z;^M0|j7Q~k+d%IAYb*6uIXTDduDXz}{ ziAK*|LN~{fczIW^#M%uBvQx|o!;gfO}XnQv%yE2CK>3#EOzsv~- z@VLPz%OwWlB`(QF0%js0@Yd(cLbfB9%hp9 zOmU2@_xgSAr1nnatcrOlHl;lxu!f%Z4IwVy%CKaPK0@U;MJ>FCl%CvVUUYvK98)2+ zpV^`2o^cf!D|umBdbTi>kb(9_oavx19=}Q+=e)H!%Gs5J%N1gHc zc>#pRqoipA=&}mfr|LcxE*+3q4kyqFI(oH!<~_#o_)Hfh+VX~8>`SB%677!Gg4#G- zf7H@x@S|ffI0tLtIK!eMV_SJ?YGEY?S)F+)g7Lv!u)4rMR9cziyc8ho*ybu9?=-wB zJ%>SAw#H0fa)Eu0i-pf2oH5q0N_%T_U;%_ykh!yO@ssW7h%d)0FD05F(OVjpfW*qX zZr*o8I#1saa>#2LHS#4l*6w@x6)QbLR`fOfum~TsCcs4z74)>^uAGpGfx#qw0y$?b z?-P2Nkl3EnuRFk*9S_Ld#4rj6!xpJt*u?6HrM)5uBb&#A5!zyE{XP7;nG_2k{!D27 zoy{#WywF0c64A2|UCr%iR%3gm;f^qWYHR;Q$>~W_v`Of}N`TF9qkS%hEK&7$yn?ovSkZcu`?hMQw1Si_==? z09~o%Fq+fd)+wF34xckZc{4!1cg_^F^dksv#EUjakt7*~Re|)$JA^@TEn`6iKhlsw zwf>oxv0m$>l9{Hj9gntiO`xuCJ6=8Y*o{u7WyCvd--;>GD5)VKBd>CE3$DN}dyn<> zKNlj&Cn=-<2e3d-zZ*GjDJ1jsgSBKgV4QDByj+ZEE?v@uUD`t0L=Sn%0~;)Vk({X* zV-7+rW1M1b*+_hHQs~TIwS4k3c1Nu(`v7BhYx|^eyuHWU;qVlk!);2Ma&*d|nz#u_xh=tTc{)Jd9*5IbaEEXoZx5-p6_^abLlDLpKCp$s6VIjy`Ex z%-9HN0V}50+a9jU*gC{29q6ASeS*|K3NhoYSN~GS%aiYEB7J@X$50xJL>x|dc5O*E%9U3SGtkj z_D)XVPEt&oSz3nf+fKDEyrbKjF0evn%e;^H8n^pQm_OaQM&|e5x!FZ~bmuO=0N0kg zYRNhrQF35#xOQ_U?An zn!5&P*+j%SE%29CAAN~`ud$|bP{Qi2$$Q7$kt35Z#=a#!P`< z{aCS~cHZNJf%PtXycn?OTSyvMU$tj&#tTN8VH|c(cRuij2sxO~5+dIjPhqAuuw!&j zHv;hYOsff_QhWN>;hD~*CE(qeI|c0S5aNLsL|*CWN$eH!!hF_VB?Z2{a)K|v`sI_; z@qE?^jdyfiIq$rGf){zBk`QayKeu+xcL&)t4Qj~joFJPEG(+43Yh zR?qBrQpcMpZ^0)lBQm_t6OkDvS^>v^;9Zv9`LI5PWYYHr>(|UQePcdsdOwywiA7S+%9+D9P9Gh@b}ozmg1^SzBu1R zd+}ipp%6VfyonMMfq!Z9@kn?NnhzAhy>3PJC`t0;H4~UEKg}n<@Mmg!A1g2|8~3g0 z7|S2v-A^_D8Ep>^b8l)wvN7REZySeco}gc#Q=pV{o-bl9_+ zr+ESu)F)$~7B*q?}f<#5cT3sO$%eXcn3+o_%k1hgN?HzsSL%PUTW|qVwTbY?s&b1OT z>w9jm6*D&H&dkvjM>r>O?rEFf!o6Xl_kOPTx#G#a=+nIr@nP`zf?qCQ-zF0YBY;Aj z=nWCe9j6wZ*J4L*lOsDmWA^{N89L@9&f9^bI9CojXCAIcUC@gDBdE=8aN;`tJ2M}D zv|)ubmJ~N;X9h*2Si$K2jh2|F{>D)Q#!zm&jc2^wR4X$8-PCGA4!rC6{|{tK#?d_x zQn|LsW4Zxrm~Ofju@m5?S0n$@?BW{FGza4-j>JKzn1Q;vgoD23%`#Q-UJHo}Wr$bv zg^zD@R$1Jg?9pS~(cA-1-n{ulj?`a&>7|R67D8%55BZi7FZS37@xBX0tT2byEk0!q zZ(@-jjP<>@?8qDgx13KgOK`l>5`p<(P+NIsawzVakED{`wlO}OgXbE&v*UWI~M zQ;7F9Bl41=?|hvJ7p0|CRwy_}O-OE7A$etq@f2qv_3-bpULV%{T=OY&cthlWHXf{K zm!wL}sxBlKoNINPnV~Lmq+u5Bwk|=6XX>mGXgLUJ6*c;8TQ8WbfGgWSVBhZTu@#I) z+^#!{`9>jmqDGe)QaFy}21-P`>N<%R<_hkRV&c0qx-nUo7cMZK^+|f0|hqbYMEH&QVT~cB_x8>{d z?g*JUnc;2=f$!UvfMYGQ<(FV(!rjh)z<+0!%a+55(J+I1k31&i=ewtWdgVGImKxTn z-ZRU_XzM*EJ(e!#`AAGcZg49Jk?8Gfh~%94_uL^Jh--T?uaO5(NaY#vk~uz%1Q8!3 zji)V-rD1=TTqb#;xCgJL$@=H5T(J82g_L-5;0w7OK+EC9 z=994znVBaucvf?urhRc0?$3JhrG(zcOL|zy&G7VkGWO{?vQVSTMGstCBwH|7WPW)* zy%1}doF$9r(>~`X;?qv6a-Hh)h%Z)IKle<~bA36*g|^tsr98BMU0(Ky;`n#+s2B6W z-ebz$UQbGUV~+CWXFS>7Q=fqp@UmOxP8ZUc zJ5aJ9P1a`3TE;%)*POc#-%lI$VMnhJE0_y?ZAPx8e)6U|+6S-QGSM%2o@2p2z1L%2 z7!MIr0(!gePx;Q@HUhKo2`LvX@7HH!?@&mM7>9jbJ`U%cvJ*7x22o;m7HRW?YGlDrb+lT`HtTC(Utk`t%0TgeNM8*NQqd-CB!CrIqyFn5MP$F0b`z4NZ}4x zA(dJD->YGx2PPy3me-ycLN1W^M&`=J_niF`cl0@b*&hGW)p&a1dpk_lfOt8tz*T(Ro{OZ84TXnN=Z0#@Gka64^*X zh8?=2LT1QRp`SyF_Nazdi2O$C92SyoP$!Mg&PttXC$lr)P0Gs%u~sR|BV>k1(McgE zqbDJM}Qq8H5R57M1q+2GBMTqxm@VA}XC`;-tXhtu`k%nxHLUcj+ zCYG5ZSzJOqW5VAi4NR;Jk{>eT$r==rD)yH+Vviy+Ld-{vBhn>zaChpqOx$!X+njTQ zkz9yDSjcOKsyB16phe&-v0{@lYL2u-u>c`|H8iqa{`HZ8czztoo9YvV)Pihfju`fZ z3Nhvu7IJJ*)sbAOkOEc02q|$>{6I*R&4;(DTR|=zAwxDcuB}g7#9Sd{g~bwf#MY@2 zQ%Gr@EG{8CCyGi5Ij)2Wnb9s)83;+SQl+0GZIDgzM&9LVgcDM9MNOI`*wWZ6WEDDQ+G-e+(UMU`uowoH*EFk+pv_Y9wAyPAx zl^5bREWWI_Dl!QOd1+9kQkL=w$fe^*S|~>)bs9!jgp@c?^2N|(5!0%p6wsxAXseJ} z8uh&kITF6Kqml+(?=R%ZUgy7~V>ooCG3w0`[_5=x2~TRLbFM|tQtc}B>}*aPKA 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 nfi55bxE#w