mirror of
https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite.git
synced 2026-02-13 08:06:36 +00:00
Compare commits
8 Commits
fix/system
...
test/chack
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
10e1786e6d | ||
|
|
e60c50100e | ||
|
|
8e917c239f | ||
|
|
143a20f17e | ||
|
|
de542f05a4 | ||
|
|
a10675d58f | ||
|
|
5c110bd4f8 | ||
|
|
c1bf38a8ab |
@@ -1,4 +1,4 @@
|
|||||||
name: Codex PR Triage
|
name: Chack-Agent PR Triage
|
||||||
|
|
||||||
on:
|
on:
|
||||||
workflow_run:
|
workflow_run:
|
||||||
@@ -6,7 +6,7 @@ on:
|
|||||||
types: [completed]
|
types: [completed]
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
codex_triage:
|
chack_agent_triage:
|
||||||
if: ${{ github.event.workflow_run.conclusion == 'success' }}
|
if: ${{ github.event.workflow_run.conclusion == 'success' }}
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
permissions:
|
permissions:
|
||||||
@@ -80,15 +80,24 @@ jobs:
|
|||||||
${{ steps.gate.outputs.base_ref }} \
|
${{ steps.gate.outputs.base_ref }} \
|
||||||
+refs/pull/${{ steps.gate.outputs.pr_number }}/head
|
+refs/pull/${{ steps.gate.outputs.pr_number }}/head
|
||||||
|
|
||||||
- name: Run Codex
|
- name: Run Chack Agent
|
||||||
id: run_codex
|
id: run_chack
|
||||||
if: ${{ steps.gate.outputs.should_run == 'true' }}
|
if: ${{ steps.gate.outputs.should_run == 'true' }}
|
||||||
uses: openai/codex-action@v1
|
uses: carlospolop/chack-agent@master
|
||||||
with:
|
with:
|
||||||
openai-api-key: ${{ secrets.OPENAI_API_KEY }}
|
provider: openrouter
|
||||||
output-schema-file: .github/codex/pr-merge-schema.json
|
model_primary: BEST_QUALITY
|
||||||
model: gpt-5.2-codex
|
main_action: peass-ng
|
||||||
prompt: |
|
sub_action: Chack-Agent PR Triage
|
||||||
|
system_prompt: |
|
||||||
|
You are Chack Agent, an elite PR reviewer for PEASS-ng.
|
||||||
|
Be conservative: merge only if changes are simple, safe, and valuable accoding to the uers give guidelines.
|
||||||
|
If in doubt, comment with clear questions or concerns.
|
||||||
|
Remember taht you are an autonomouts agent, use the exec tool to run the needed commands to list, read, analyze, modify, test...
|
||||||
|
tools_config_json: "{\"exec_enabled\": true}"
|
||||||
|
session_config_json: "{\"long_term_memory_enabled\": false}"
|
||||||
|
output_schema_file: .github/chack-agent/pr-merge-schema.json
|
||||||
|
user_prompt: |
|
||||||
You are reviewing PR #${{ steps.gate.outputs.pr_number }} for ${{ github.repository }}.
|
You are reviewing PR #${{ steps.gate.outputs.pr_number }} for ${{ github.repository }}.
|
||||||
|
|
||||||
Decide whether to merge or comment. Merge only if all of the following are true:
|
Decide whether to merge or comment. Merge only if all of the following are true:
|
||||||
@@ -108,21 +117,23 @@ jobs:
|
|||||||
Review ONLY the changes introduced by the PR:
|
Review ONLY the changes introduced by the PR:
|
||||||
git log --oneline ${{ steps.gate.outputs.base_sha }}...${{ steps.gate.outputs.head_sha }}
|
git log --oneline ${{ steps.gate.outputs.base_sha }}...${{ steps.gate.outputs.head_sha }}
|
||||||
|
|
||||||
Output JSON only, following the provided schema.
|
Output JSON only, following the provided schema:
|
||||||
|
.github/chack-agent/pr-merge-schema.json
|
||||||
|
openrouter_api_key: ${{ secrets.OPENROUTER_API_KEY }}
|
||||||
|
|
||||||
- name: Parse Codex decision
|
- name: Parse Chack Agent decision
|
||||||
id: parse
|
id: parse
|
||||||
if: ${{ steps.gate.outputs.should_run == 'true' }}
|
if: ${{ steps.gate.outputs.should_run == 'true' }}
|
||||||
env:
|
env:
|
||||||
CODEX_MESSAGE: ${{ steps.run_codex.outputs.final-message }}
|
CHACK_MESSAGE: ${{ steps.run_chack.outputs.final-message }}
|
||||||
run: |
|
run: |
|
||||||
python3 - <<'PY'
|
python3 - <<'PY'
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
|
|
||||||
data = json.loads(os.environ.get('CODEX_MESSAGE', '') or '{}')
|
data = json.loads(os.environ.get('CHACK_MESSAGE', '') or '{}')
|
||||||
decision = data.get('decision', 'comment')
|
decision = data.get('decision', 'comment')
|
||||||
message = data.get('message', '').strip() or 'Codex did not provide details.'
|
message = data.get('message', '').strip() or 'Chack Agent did not provide details.'
|
||||||
with open(os.environ['GITHUB_OUTPUT'], 'a') as handle:
|
with open(os.environ['GITHUB_OUTPUT'], 'a') as handle:
|
||||||
handle.write(f"decision={decision}\n")
|
handle.write(f"decision={decision}\n")
|
||||||
handle.write("message<<EOF\n")
|
handle.write("message<<EOF\n")
|
||||||
@@ -132,31 +143,31 @@ jobs:
|
|||||||
|
|
||||||
merge_or_comment:
|
merge_or_comment:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
needs: codex_triage
|
needs: chack_agent_triage
|
||||||
if: ${{ github.event.workflow_run.conclusion == 'success' && needs.codex_triage.outputs.should_run == 'true' && needs.codex_triage.outputs.decision != '' }}
|
if: ${{ github.event.workflow_run.conclusion == 'success' && needs.chack_agent_triage.outputs.should_run == 'true' && needs.chack_agent_triage.outputs.decision != '' }}
|
||||||
permissions:
|
permissions:
|
||||||
contents: write
|
contents: write
|
||||||
pull-requests: write
|
pull-requests: write
|
||||||
steps:
|
steps:
|
||||||
- name: Merge PR when approved
|
- name: Merge PR when approved
|
||||||
if: ${{ needs.codex_triage.outputs.decision == 'merge' }}
|
if: ${{ needs.chack_agent_triage.outputs.decision == 'merge' }}
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ github.token }}
|
GH_TOKEN: ${{ github.token }}
|
||||||
PR_NUMBER: ${{ needs.codex_triage.outputs.pr_number }}
|
PR_NUMBER: ${{ needs.chack_agent_triage.outputs.pr_number }}
|
||||||
run: |
|
run: |
|
||||||
gh api \
|
gh api \
|
||||||
-X PUT \
|
-X PUT \
|
||||||
-H "Accept: application/vnd.github+json" \
|
-H "Accept: application/vnd.github+json" \
|
||||||
/repos/${{ github.repository }}/pulls/${PR_NUMBER}/merge \
|
/repos/${{ github.repository }}/pulls/${PR_NUMBER}/merge \
|
||||||
-f merge_method=squash \
|
-f merge_method=squash \
|
||||||
-f commit_title="Auto-merge PR #${PR_NUMBER} (Codex)"
|
-f commit_title="Auto-merge PR #${PR_NUMBER} (Chack Agent)"
|
||||||
|
|
||||||
- name: Comment with doubts
|
- name: Comment with doubts
|
||||||
if: ${{ needs.codex_triage.outputs.decision == 'comment' }}
|
if: ${{ needs.chack_agent_triage.outputs.decision == 'comment' }}
|
||||||
uses: actions/github-script@v7
|
uses: actions/github-script@v7
|
||||||
env:
|
env:
|
||||||
PR_NUMBER: ${{ needs.codex_triage.outputs.pr_number }}
|
PR_NUMBER: ${{ needs.chack_agent_triage.outputs.pr_number }}
|
||||||
CODEX_MESSAGE: ${{ needs.codex_triage.outputs.message }}
|
CHACK_MESSAGE: ${{ needs.chack_agent_triage.outputs.message }}
|
||||||
with:
|
with:
|
||||||
github-token: ${{ github.token }}
|
github-token: ${{ github.token }}
|
||||||
script: |
|
script: |
|
||||||
@@ -164,5 +175,5 @@ jobs:
|
|||||||
owner: context.repo.owner,
|
owner: context.repo.owner,
|
||||||
repo: context.repo.repo,
|
repo: context.repo.repo,
|
||||||
issue_number: Number(process.env.PR_NUMBER),
|
issue_number: Number(process.env.PR_NUMBER),
|
||||||
body: process.env.CODEX_MESSAGE,
|
body: process.env.CHACK_MESSAGE,
|
||||||
});
|
});
|
||||||
165
.github/workflows/ci-master-failure-chack-agent-pr.yml
vendored
Normal file
165
.github/workflows/ci-master-failure-chack-agent-pr.yml
vendored
Normal file
@@ -0,0 +1,165 @@
|
|||||||
|
name: CI-master Failure Chack-Agent PR
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_run:
|
||||||
|
workflows: ["CI-master_test"]
|
||||||
|
types: [completed]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
chack_agent_fix_master_failure:
|
||||||
|
if: >
|
||||||
|
${{ github.event.workflow_run.conclusion == 'failure' &&
|
||||||
|
github.event.workflow_run.head_branch == 'master' &&
|
||||||
|
!startsWith(github.event.workflow_run.head_commit.message, 'Fix CI-master failures for run #') }}
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
pull-requests: write
|
||||||
|
issues: write
|
||||||
|
actions: read
|
||||||
|
env:
|
||||||
|
TARGET_BRANCH: master
|
||||||
|
FIX_BRANCH: chack-agent/ci-master-fix-${{ github.event.workflow_run.id }}
|
||||||
|
steps:
|
||||||
|
- name: Checkout failing commit
|
||||||
|
uses: actions/checkout@v5
|
||||||
|
with:
|
||||||
|
ref: ${{ github.event.workflow_run.head_sha }}
|
||||||
|
fetch-depth: 0
|
||||||
|
persist-credentials: true
|
||||||
|
token: ${{ secrets.CHACK_AGENT_FIXER_TOKEN || github.token }}
|
||||||
|
|
||||||
|
- name: Configure git author
|
||||||
|
run: |
|
||||||
|
git config user.name "chack-agent"
|
||||||
|
git config user.email "chack-agent@users.noreply.github.com"
|
||||||
|
|
||||||
|
- name: Create fix branch
|
||||||
|
run: git checkout -b "$FIX_BRANCH"
|
||||||
|
|
||||||
|
- name: Fetch failure summary and failed-step logs
|
||||||
|
env:
|
||||||
|
GH_TOKEN: ${{ github.token }}
|
||||||
|
RUN_ID: ${{ github.event.workflow_run.id }}
|
||||||
|
run: |
|
||||||
|
failed_logs_file="$(pwd)/chack_failed_steps_logs.txt"
|
||||||
|
if gh run view "$RUN_ID" --repo "${{ github.repository }}" --log-failed > "$failed_logs_file"; then
|
||||||
|
if [ ! -s "$failed_logs_file" ]; then
|
||||||
|
echo "No failed step logs were returned by gh run view --log-failed." > "$failed_logs_file"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "Failed to download failed step logs with gh run view --log-failed." > "$failed_logs_file"
|
||||||
|
fi
|
||||||
|
echo "FAILED_LOGS_PATH=$failed_logs_file" >> "$GITHUB_ENV"
|
||||||
|
|
||||||
|
gh api -H "Accept: application/vnd.github+json" \
|
||||||
|
/repos/${{ github.repository }}/actions/runs/$RUN_ID/jobs \
|
||||||
|
--paginate > /tmp/jobs.json
|
||||||
|
python3 - <<'PY'
|
||||||
|
import json
|
||||||
|
|
||||||
|
data = json.load(open('/tmp/jobs.json'))
|
||||||
|
lines = []
|
||||||
|
for job in data.get('jobs', []):
|
||||||
|
if job.get('conclusion') == 'failure':
|
||||||
|
lines.append(f"Job: {job.get('name')} (id {job.get('id')})")
|
||||||
|
lines.append(f"URL: {job.get('html_url')}")
|
||||||
|
for step in job.get('steps', []):
|
||||||
|
if step.get('conclusion') == 'failure':
|
||||||
|
lines.append(f" Step: {step.get('name')}")
|
||||||
|
lines.append("")
|
||||||
|
|
||||||
|
summary = "\n".join(lines).strip() or "No failing job details found."
|
||||||
|
with open('chack_failure_summary.txt', 'w') as handle:
|
||||||
|
handle.write(summary)
|
||||||
|
PY
|
||||||
|
|
||||||
|
- name: Create Chack Agent prompt
|
||||||
|
env:
|
||||||
|
RUN_URL: ${{ github.event.workflow_run.html_url }}
|
||||||
|
HEAD_SHA: ${{ github.event.workflow_run.head_sha }}
|
||||||
|
run: |
|
||||||
|
{
|
||||||
|
echo "You are fixing a failing CI-master_test run in ${{ github.repository }}."
|
||||||
|
echo "The failing workflow run is: ${RUN_URL}"
|
||||||
|
echo "The failing commit SHA is: ${HEAD_SHA}"
|
||||||
|
echo "The target branch for the final PR is: ${TARGET_BRANCH}"
|
||||||
|
echo ""
|
||||||
|
echo "Failure summary:"
|
||||||
|
cat chack_failure_summary.txt
|
||||||
|
echo ""
|
||||||
|
echo "Failed-step logs file absolute path (local runner): ${FAILED_LOGS_PATH}"
|
||||||
|
echo "Read that file to inspect the exact failing logs."
|
||||||
|
echo ""
|
||||||
|
echo "Please identify the cause, apply an easy, simple and minimal fix, and update files accordingly."
|
||||||
|
echo "Run any fast checks you can locally (no network)."
|
||||||
|
echo "Leave the repo in a state ready to commit; changes will be committed and pushed automatically."
|
||||||
|
} > chack_prompt.txt
|
||||||
|
|
||||||
|
- name: Run Chack Agent
|
||||||
|
id: run_chack
|
||||||
|
uses: carlospolop/chack-agent@master
|
||||||
|
with:
|
||||||
|
provider: openrouter
|
||||||
|
model_primary: BEST_QUALITY
|
||||||
|
main_action: peass-ng
|
||||||
|
sub_action: CI-master Failure Chack-Agent PR
|
||||||
|
system_prompt: |
|
||||||
|
Diagnose the failing gh actions workflow, propose the minimal and effective safe fix, and implement it.
|
||||||
|
Run only fast, local checks (no network). Leave the repo ready to commit.
|
||||||
|
prompt_file: chack_prompt.txt
|
||||||
|
tools_config_json: "{\"exec_enabled\": true}"
|
||||||
|
session_config_json: "{\"long_term_memory_enabled\": false}"
|
||||||
|
openrouter_api_key: ${{ secrets.OPENROUTER_API_KEY }}
|
||||||
|
|
||||||
|
- name: Commit and push fix branch if changed
|
||||||
|
id: push_fix
|
||||||
|
run: |
|
||||||
|
if git diff --quiet; then
|
||||||
|
echo "No changes to commit."
|
||||||
|
echo "pushed=false" >> "$GITHUB_OUTPUT"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
rm -f chack_failure_summary.txt chack_prompt.txt chack_failed_steps_logs.txt
|
||||||
|
git add -A
|
||||||
|
git reset -- chack_failure_summary.txt chack_prompt.txt chack_failed_steps_logs.txt
|
||||||
|
git commit -m "Fix CI-master failures for run #${{ github.event.workflow_run.id }}"
|
||||||
|
git push origin HEAD:"$FIX_BRANCH"
|
||||||
|
echo "pushed=true" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
|
- name: Create PR to master
|
||||||
|
if: ${{ steps.push_fix.outputs.pushed == 'true' }}
|
||||||
|
id: create_pr
|
||||||
|
env:
|
||||||
|
GH_TOKEN: ${{ secrets.CHACK_AGENT_FIXER_TOKEN || github.token }}
|
||||||
|
RUN_URL: ${{ github.event.workflow_run.html_url }}
|
||||||
|
run: |
|
||||||
|
pr_url=$(gh pr create \
|
||||||
|
--title "Fix CI-master_test failure (run #${{ github.event.workflow_run.id }})" \
|
||||||
|
--body "Automated Chack Agent fix for failing CI-master_test run: ${RUN_URL}" \
|
||||||
|
--base "$TARGET_BRANCH" \
|
||||||
|
--head "$FIX_BRANCH")
|
||||||
|
echo "url=$pr_url" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
|
- name: Comment on created PR with Chack Agent result
|
||||||
|
if: ${{ steps.push_fix.outputs.pushed == 'true' && steps.run_chack.outputs.final-message != '' }}
|
||||||
|
uses: actions/github-script@v7
|
||||||
|
env:
|
||||||
|
PR_URL: ${{ steps.create_pr.outputs.url }}
|
||||||
|
CHACK_MESSAGE: ${{ steps.run_chack.outputs.final-message }}
|
||||||
|
with:
|
||||||
|
github-token: ${{ github.token }}
|
||||||
|
script: |
|
||||||
|
const prUrl = process.env.PR_URL;
|
||||||
|
const match = prUrl.match(/\/pull\/(\d+)$/);
|
||||||
|
if (!match) {
|
||||||
|
core.info(`Could not parse PR number from URL: ${prUrl}`);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
await github.rest.issues.createComment({
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
issue_number: Number(match[1]),
|
||||||
|
body: process.env.CHACK_MESSAGE,
|
||||||
|
});
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
name: PR Failure Codex Dispatch
|
name: PR Failure Chack-Agent Dispatch
|
||||||
|
|
||||||
on:
|
on:
|
||||||
workflow_run:
|
workflow_run:
|
||||||
@@ -41,8 +41,8 @@ jobs:
|
|||||||
pr_labels=$(gh api -H "Accept: application/vnd.github+json" \
|
pr_labels=$(gh api -H "Accept: application/vnd.github+json" \
|
||||||
/repos/${{ github.repository }}/issues/${PR_NUMBER} \
|
/repos/${{ github.repository }}/issues/${PR_NUMBER} \
|
||||||
--jq '.labels[].name')
|
--jq '.labels[].name')
|
||||||
if echo "$pr_labels" | grep -q "^codex-fix-attempted$"; then
|
if echo "$pr_labels" | grep -q "^chack-agent-fix-attempted$"; then
|
||||||
echo "codex fix already attempted for PR #${PR_NUMBER}; skipping."
|
echo "chack-agent fix already attempted for PR #${PR_NUMBER}; skipping."
|
||||||
should_run=false
|
should_run=false
|
||||||
else
|
else
|
||||||
should_run=true
|
should_run=true
|
||||||
@@ -55,7 +55,7 @@ jobs:
|
|||||||
echo "should_run=${should_run}"
|
echo "should_run=${should_run}"
|
||||||
} >> "$GITHUB_OUTPUT"
|
} >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
codex_on_failure:
|
chack_agent_on_failure:
|
||||||
needs: resolve_pr_context
|
needs: resolve_pr_context
|
||||||
if: ${{ needs.resolve_pr_context.outputs.author == 'carlospolop' && needs.resolve_pr_context.outputs.should_run == 'true' }}
|
if: ${{ needs.resolve_pr_context.outputs.author == 'carlospolop' && needs.resolve_pr_context.outputs.should_run == 'true' }}
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
@@ -75,7 +75,7 @@ jobs:
|
|||||||
github-token: ${{ github.token }}
|
github-token: ${{ github.token }}
|
||||||
script: |
|
script: |
|
||||||
const prNumber = Number(process.env.PR_NUMBER);
|
const prNumber = Number(process.env.PR_NUMBER);
|
||||||
const body = `PR #${prNumber} had a failing workflow "${process.env.WORKFLOW_NAME}".\n\nRun: ${process.env.RUN_URL}\n\nLaunching Codex to attempt a fix.`;
|
const body = `PR #${prNumber} had a failing workflow "${process.env.WORKFLOW_NAME}".\n\nRun: ${process.env.RUN_URL}\n\nLaunching Chack Agent to attempt a fix.`;
|
||||||
await github.rest.issues.createComment({
|
await github.rest.issues.createComment({
|
||||||
owner: context.repo.owner,
|
owner: context.repo.owner,
|
||||||
repo: context.repo.repo,
|
repo: context.repo.repo,
|
||||||
@@ -90,7 +90,7 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
gh api -X POST -H "Accept: application/vnd.github+json" \
|
gh api -X POST -H "Accept: application/vnd.github+json" \
|
||||||
/repos/${{ github.repository }}/issues/${PR_NUMBER}/labels \
|
/repos/${{ github.repository }}/issues/${PR_NUMBER}/labels \
|
||||||
-f labels[]=codex-fix-attempted
|
-f labels[]=chack-agent-fix-attempted
|
||||||
|
|
||||||
- name: Checkout PR head
|
- name: Checkout PR head
|
||||||
uses: actions/checkout@v5
|
uses: actions/checkout@v5
|
||||||
@@ -99,12 +99,12 @@ jobs:
|
|||||||
ref: ${{ github.event.workflow_run.head_sha }}
|
ref: ${{ github.event.workflow_run.head_sha }}
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
persist-credentials: true
|
persist-credentials: true
|
||||||
token: ${{ secrets.CODEX_FIXER_TOKEN }}
|
token: ${{ secrets.CHACK_AGENT_FIXER_TOKEN || github.token }}
|
||||||
|
|
||||||
- name: Configure git author
|
- name: Configure git author
|
||||||
run: |
|
run: |
|
||||||
git config user.name "codex-action"
|
git config user.name "chack-agent"
|
||||||
git config user.email "codex-action@users.noreply.github.com"
|
git config user.email "chack-agent@users.noreply.github.com"
|
||||||
|
|
||||||
- name: Fetch failure summary
|
- name: Fetch failure summary
|
||||||
env:
|
env:
|
||||||
@@ -129,11 +129,11 @@ jobs:
|
|||||||
lines.append("")
|
lines.append("")
|
||||||
|
|
||||||
summary = "\n".join(lines).strip() or "No failing job details found."
|
summary = "\n".join(lines).strip() or "No failing job details found."
|
||||||
with open('codex_failure_summary.txt', 'w') as handle:
|
with open('chack_failure_summary.txt', 'w') as handle:
|
||||||
handle.write(summary)
|
handle.write(summary)
|
||||||
PY
|
PY
|
||||||
|
|
||||||
- name: Create Codex prompt
|
- name: Create Chack Agent prompt
|
||||||
env:
|
env:
|
||||||
PR_NUMBER: ${{ needs.resolve_pr_context.outputs.number }}
|
PR_NUMBER: ${{ needs.resolve_pr_context.outputs.number }}
|
||||||
RUN_URL: ${{ github.event.workflow_run.html_url }}
|
RUN_URL: ${{ github.event.workflow_run.html_url }}
|
||||||
@@ -145,21 +145,29 @@ jobs:
|
|||||||
echo "The PR branch is: ${HEAD_BRANCH}"
|
echo "The PR branch is: ${HEAD_BRANCH}"
|
||||||
echo ""
|
echo ""
|
||||||
echo "Failure summary:"
|
echo "Failure summary:"
|
||||||
cat codex_failure_summary.txt
|
cat chack_failure_summary.txt
|
||||||
echo ""
|
echo ""
|
||||||
echo "Please identify the cause, apply a easy, simple and minimal fix, and update files accordingly."
|
echo "Please identify the cause, apply a easy, simple and minimal fix, and update files accordingly."
|
||||||
echo "Run any fast checks you can locally (no network)."
|
echo "Run any fast checks you can locally (no network)."
|
||||||
echo "Leave the repo in a state ready to commit as when you finish, it'll be automatically committed and pushed."
|
echo "Leave the repo in a state ready to commit as when you finish, it'll be automatically committed and pushed."
|
||||||
} > codex_prompt.txt
|
} > chack_prompt.txt
|
||||||
|
|
||||||
- name: Run Codex
|
- name: Run Chack Agent
|
||||||
id: run_codex
|
id: run_chack
|
||||||
uses: openai/codex-action@v1
|
uses: carlospolop/chack-agent@master
|
||||||
with:
|
with:
|
||||||
openai-api-key: ${{ secrets.OPENAI_API_KEY }}
|
provider: openrouter
|
||||||
prompt-file: codex_prompt.txt
|
model_primary: BEST_QUALITY
|
||||||
sandbox: workspace-write
|
main_action: peass-ng
|
||||||
model: gpt-5.2-codex
|
sub_action: PR Failure Chack-Agent Dispatch
|
||||||
|
system_prompt: |
|
||||||
|
You are Chack Agent, an elite CI-fix engineer.
|
||||||
|
Diagnose the failing workflow, propose the minimal safe fix, and implement it.
|
||||||
|
Run only fast, local checks (no network). Leave the repo ready to commit.
|
||||||
|
prompt_file: chack_prompt.txt
|
||||||
|
tools_config_json: "{\"exec_enabled\": true}"
|
||||||
|
session_config_json: "{\"long_term_memory_enabled\": false}"
|
||||||
|
openrouter_api_key: ${{ secrets.OPENROUTER_API_KEY }}
|
||||||
|
|
||||||
- name: Commit and push if changed
|
- name: Commit and push if changed
|
||||||
env:
|
env:
|
||||||
@@ -170,18 +178,18 @@ jobs:
|
|||||||
echo "No changes to commit."
|
echo "No changes to commit."
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
rm -f codex_failure_summary.txt codex_prompt.txt
|
rm -f chack_failure_summary.txt chack_prompt.txt
|
||||||
git add -A
|
git add -A
|
||||||
git reset -- codex_failure_summary.txt codex_prompt.txt
|
git reset -- chack_failure_summary.txt chack_prompt.txt
|
||||||
git commit -m "Fix CI failures for PR #${PR_NUMBER}"
|
git commit -m "Fix CI failures for PR #${PR_NUMBER}"
|
||||||
git push origin HEAD:${TARGET_BRANCH}
|
git push origin HEAD:${TARGET_BRANCH}
|
||||||
|
|
||||||
- name: Comment with Codex result
|
- name: Comment with Chack Agent result
|
||||||
if: ${{ steps.run_codex.outputs.final-message != '' }}
|
if: ${{ steps.run_chack.outputs.final-message != '' }}
|
||||||
uses: actions/github-script@v7
|
uses: actions/github-script@v7
|
||||||
env:
|
env:
|
||||||
PR_NUMBER: ${{ needs.resolve_pr_context.outputs.number }}
|
PR_NUMBER: ${{ needs.resolve_pr_context.outputs.number }}
|
||||||
CODEX_MESSAGE: ${{ steps.run_codex.outputs.final-message }}
|
CHACK_MESSAGE: ${{ steps.run_chack.outputs.final-message }}
|
||||||
with:
|
with:
|
||||||
github-token: ${{ github.token }}
|
github-token: ${{ github.token }}
|
||||||
script: |
|
script: |
|
||||||
@@ -189,5 +197,5 @@ jobs:
|
|||||||
owner: context.repo.owner,
|
owner: context.repo.owner,
|
||||||
repo: context.repo.repo,
|
repo: context.repo.repo,
|
||||||
issue_number: Number(process.env.PR_NUMBER),
|
issue_number: Number(process.env.PR_NUMBER),
|
||||||
body: process.env.CODEX_MESSAGE,
|
body: process.env.CHACK_MESSAGE,
|
||||||
});
|
});
|
||||||
@@ -53,3 +53,4 @@ if __name__ == "__main__":
|
|||||||
exit(1)
|
exit(1)
|
||||||
|
|
||||||
main(all_modules, all_no_fat_modules, no_network_scanning, small, include_modules, exclude_modules, output)
|
main(all_modules, all_no_fat_modules, no_network_scanning, small, include_modules, exclude_modules, output)
|
||||||
|
|
||||||
|
|||||||
@@ -1,39 +0,0 @@
|
|||||||
# Title: System Information - Linux Exploit Suggester
|
|
||||||
# ID: SY_Linux_exploit_suggester
|
|
||||||
# Author: Carlos Polop
|
|
||||||
# Last Update: 07-03-2024
|
|
||||||
# Description: Execute Linux Exploit Suggester to identify potential kernel exploits:
|
|
||||||
# - Automated kernel vulnerability detection
|
|
||||||
# - Common vulnerable scenarios:
|
|
||||||
# * Known kernel vulnerabilities
|
|
||||||
# * Unpatched kernel versions
|
|
||||||
# * Missing security patches
|
|
||||||
# - Exploitation methods:
|
|
||||||
# * Kernel exploit execution: Use suggested exploits
|
|
||||||
# * Common attack vectors:
|
|
||||||
# - Kernel memory corruption
|
|
||||||
# - Race conditions
|
|
||||||
# - Use-after-free
|
|
||||||
# - Integer overflow
|
|
||||||
# * Exploit techniques:
|
|
||||||
# - Kernel memory manipulation
|
|
||||||
# - Privilege escalation
|
|
||||||
# - Root access acquisition
|
|
||||||
# - System compromise
|
|
||||||
# License: GNU GPL
|
|
||||||
# Version: 1.0
|
|
||||||
# Functions Used: print_2title, print_info
|
|
||||||
# Global Variables: $MACPEAS
|
|
||||||
# Initial Functions:
|
|
||||||
# Generated Global Variables: $les_b64
|
|
||||||
# Fat linpeas: 0
|
|
||||||
# Small linpeas: 1
|
|
||||||
|
|
||||||
|
|
||||||
if [ "$(command -v bash 2>/dev/null || echo -n '')" ] && ! [ "$MACPEAS" ]; then
|
|
||||||
print_2title "Executing Linux Exploit Suggester"
|
|
||||||
print_info "https://github.com/mzet-/linux-exploit-suggester"
|
|
||||||
les_b64="peass{https://raw.githubusercontent.com/mzet-/linux-exploit-suggester/master/linux-exploit-suggester.sh}"
|
|
||||||
echo $les_b64 | base64 -d | bash | sed "s,$(printf '\033')\\[[0-9;]*[a-zA-Z],,g" | grep -i "\[CVE" -A 10 | grep -Ev "^\-\-$" | sed -${E} "s/\[(CVE-[0-9]+-[0-9]+,?)+\].*/${SED_RED}/g"
|
|
||||||
echo ""
|
|
||||||
fi
|
|
||||||
@@ -1,41 +0,0 @@
|
|||||||
# Title: System Information - Linux Exploit Suggester 2
|
|
||||||
# ID: SY_Linux_exploit_suggester_2
|
|
||||||
# Author: Carlos Polop
|
|
||||||
# Last Update: 07-03-2024
|
|
||||||
# Description: Execute Linux Exploit Suggester 2 (Perl version) to identify potential kernel exploits:
|
|
||||||
# - Alternative kernel vulnerability detection
|
|
||||||
# - Perl-based exploit suggestions
|
|
||||||
# - Common vulnerable scenarios:
|
|
||||||
# * Known kernel vulnerabilities
|
|
||||||
# * Unpatched kernel versions
|
|
||||||
# * Missing security patches
|
|
||||||
# * Alternative exploit paths
|
|
||||||
# - Exploitation methods:
|
|
||||||
# * Kernel exploit execution: Use suggested exploits
|
|
||||||
# * Common attack vectors:
|
|
||||||
# - Kernel memory corruption
|
|
||||||
# - Race conditions
|
|
||||||
# - Use-after-free
|
|
||||||
# - Integer overflow
|
|
||||||
# * Exploit techniques:
|
|
||||||
# - Kernel memory manipulation
|
|
||||||
# - Privilege escalation
|
|
||||||
# - Root access acquisition
|
|
||||||
# - System compromise
|
|
||||||
# License: GNU GPL
|
|
||||||
# Version: 1.0
|
|
||||||
# Functions Used: print_2title, print_info
|
|
||||||
# Global Variables:
|
|
||||||
# Initial Functions:
|
|
||||||
# Generated Global Variables: $les2_b64
|
|
||||||
# Fat linpeas: 1
|
|
||||||
# Small linpeas: 0
|
|
||||||
|
|
||||||
|
|
||||||
if [ "$(command -v perl 2>/dev/null || echo -n '')" ] && ! [ "$MACPEAS" ]; then
|
|
||||||
print_2title "Executing Linux Exploit Suggester 2"
|
|
||||||
print_info "https://github.com/jondonas/linux-exploit-suggester-2"
|
|
||||||
les2_b64="peass{https://raw.githubusercontent.com/jondonas/linux-exploit-suggester-2/master/linux-exploit-suggester-2.pl}"
|
|
||||||
echo $les2_b64 | base64 -d | perl 2>/dev/null | sed "s,$(printf '\033')\\[[0-9;]*[a-zA-Z],,g" | grep -iE "CVE" -B 1 -A 10 | grep -Ev "^\-\-$" | sed -${E} "s,CVE-[0-9]+-[0-9]+,${SED_RED},g"
|
|
||||||
echo ""
|
|
||||||
fi
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
# Title: Container - Am I Containered
|
|
||||||
# ID: CT_Am_I_contained
|
|
||||||
# Author: Carlos Polop
|
|
||||||
# Last Update: 22-08-2023
|
|
||||||
# Description: Am I Containered tool
|
|
||||||
# License: GNU GPL
|
|
||||||
# Version: 1.0
|
|
||||||
# Functions Used: print_2title, execBin
|
|
||||||
# Global Variables:
|
|
||||||
# Initial Functions:
|
|
||||||
# Generated Global Variables: $FAT_LINPEAS_AMICONTAINED
|
|
||||||
# Fat linpeas: 1
|
|
||||||
# Small linpeas: 0
|
|
||||||
|
|
||||||
|
|
||||||
if [ "$$FAT_LINPEAS_AMICONTAINED" ]; then
|
|
||||||
print_2title "Am I Containered?"
|
|
||||||
FAT_LINPEAS_AMICONTAINED="peass{https://github.com/genuinetools/amicontained/releases/latest/download/amicontained-linux-amd64}"
|
|
||||||
execBin "AmIContainered" "https://github.com/genuinetools/amicontained" "$FAT_LINPEAS_AMICONTAINED"
|
|
||||||
fi
|
|
||||||
@@ -17,7 +17,7 @@
|
|||||||
# Functions Used: print_2title, print_list, echo_not_found
|
# Functions Used: print_2title, print_list, echo_not_found
|
||||||
# Global Variables: $SEARCH_IN_FOLDER, $Wfolders, $SED_RED, $SED_RED_YELLOW, $NC
|
# Global Variables: $SEARCH_IN_FOLDER, $Wfolders, $SED_RED, $SED_RED_YELLOW, $NC
|
||||||
# Initial Functions:
|
# Initial Functions:
|
||||||
# Generated Global Variables: $WRITABLESYSTEMDPATH, $line, $service, $file, $version, $user, $caps, $path, $path_line, $service_file, $exec_line, $cmd
|
# Generated Global Variables: $WRITABLESYSTEMDPATH, $line, $service, $file, $version, $user, $caps, $path, $path_line, $service_file, $exec_line, $exec_value, $cmd, $cmd_path
|
||||||
# Fat linpeas: 0
|
# Fat linpeas: 0
|
||||||
# Small linpeas: 1
|
# Small linpeas: 1
|
||||||
|
|
||||||
|
|||||||
@@ -1,30 +0,0 @@
|
|||||||
# Title: Software Information - Checking leaks in git repositories
|
|
||||||
# ID: SI_Leaks_git_repo
|
|
||||||
# Author: Carlos Polop
|
|
||||||
# Last Update: 22-08-2023
|
|
||||||
# Description: Checking leaks in git repositories
|
|
||||||
# License: GNU GPL
|
|
||||||
# Version: 1.0
|
|
||||||
# Functions Used: execBin, print_2title
|
|
||||||
# Global Variables: $MACPEAS, $TIMEOUT
|
|
||||||
# Initial Functions:
|
|
||||||
# Generated Global Variables: $git_dirname, $FAT_LINPEAS_GITLEAKS
|
|
||||||
# Fat linpeas: 1
|
|
||||||
# Small linpeas: 0
|
|
||||||
|
|
||||||
|
|
||||||
if ! [ "$FAST" ] && ! [ "$SUPERFAST" ] && [ "$TIMEOUT" ]; then
|
|
||||||
print_2title "Checking leaks in git repositories"
|
|
||||||
printf "%s\n" "$PSTORAGE_GITHUB" | while read f; do
|
|
||||||
if echo "$f" | grep -Eq ".git$"; then
|
|
||||||
git_dirname=$(dirname "$f")
|
|
||||||
if [ "$MACPEAS" ]; then
|
|
||||||
FAT_LINPEAS_GITLEAKS="peass{https://github.com/gitleaks/gitleaks/releases/download/v8.17.0/gitleaks_8.17.0_darwin_arm64.tar.gz}"
|
|
||||||
else
|
|
||||||
FAT_LINPEAS_GITLEAKS="peass{https://github.com/gitleaks/gitleaks/releases/download/v8.17.0/gitleaks_8.17.0_linux_x64.tar.gz}"
|
|
||||||
fi
|
|
||||||
execBin "GitLeaks (checking $git_dirname)" "https://github.com/zricethezav/gitleaks" "$FAT_LINPEAS_GITLEAKS" "detect -s '$git_dirname' -v | grep -E 'Description|Match|Secret|Message|Date'"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
echo ""
|
|
||||||
fi
|
|
||||||
Reference in New Issue
Block a user