Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/SECURITY.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Security Policy

The maintainers of the Docker `cagent` GitHub Action take security seriously. If you discover a security issue, please bring it to their attention right away!
The maintainers of the Docker docker-agent-action GitHub Action take security seriously. If you discover a security issue, please bring it to their attention right away!

## Reporting a Vulnerability

Expand Down
84 changes: 43 additions & 41 deletions .github/workflows/release.yml

Large diffs are not rendered by default.

30 changes: 18 additions & 12 deletions .github/workflows/review-pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ jobs:
comment-author-type: ${{ steps.read.outputs.comment-author-type }}
steps:
- name: Setup credentials
uses: docker/cagent-action/setup-credentials@367a30ddb41e0156459d03750f508eac03f3c38a # v1.5.5
uses: docker/docker-agent-action/setup-credentials@367a30ddb41e0156459d03750f508eac03f3c38a # v1.5.5

- name: Verify token for cross-run artifact download
shell: bash
Expand Down Expand Up @@ -154,6 +154,8 @@ jobs:
github.event.comment.user.login != 'docker-agent' &&
github.event.comment.user.login != 'docker-agent[bot]' &&
github.event.comment.user.type != 'Bot' &&
!contains(github.event.comment.body, '<!-- docker-agent-review -->') &&
!contains(github.event.comment.body, '<!-- docker-agent-review-reply -->') &&
!contains(github.event.comment.body, '<!-- cagent-review -->') &&
!contains(github.event.comment.body, '<!-- cagent-review-reply -->')) ||
(github.event_name == 'pull_request' && github.event.action != 'review_requested' && github.event.sender.type != 'Bot' && github.event.sender.login != 'docker-agent' && github.event.sender.login != 'docker-agent[bot]') ||
Expand Down Expand Up @@ -290,7 +292,7 @@ jobs:
if: |
steps.command.outputs.is_review != 'false' &&
steps.draft.outputs.skip != 'true'
uses: docker/cagent-action/setup-credentials@367a30ddb41e0156459d03750f508eac03f3c38a # v1.5.5
uses: docker/docker-agent-action/setup-credentials@367a30ddb41e0156459d03750f508eac03f3c38a # v1.5.5

- name: Check if org member
id: membership
Expand All @@ -303,7 +305,7 @@ jobs:
PR_SOURCE: ${{ steps.pr.outputs.source }}
ORG: docker
COMMENT_AUTHOR: ${{ github.event.comment.user.login }}
run: node "$CAGENT_ACTION_ROOT/dist/check-org-membership.js"
run: node "$DOCKER_AGENT_ACTION_ROOT/dist/check-org-membership.js"

- name: Create check run
if: |
Expand Down Expand Up @@ -352,7 +354,7 @@ jobs:
steps.draft.outputs.skip != 'true'
id: run-review
continue-on-error: true
uses: docker/cagent-action/review-pr@367a30ddb41e0156459d03750f508eac03f3c38a # v1.5.5
uses: docker/docker-agent-action/review-pr@367a30ddb41e0156459d03750f508eac03f3c38a # v1.5.5
with:
pr-number: ${{ steps.pr.outputs.number }}
comment-id: ${{ inputs.comment-id || github.event.comment.id }}
Expand Down Expand Up @@ -413,7 +415,7 @@ jobs:

- name: Setup credentials
if: inputs.trigger-run-id != ''
uses: docker/cagent-action/setup-credentials@367a30ddb41e0156459d03750f508eac03f3c38a # v1.5.5
uses: docker/docker-agent-action/setup-credentials@367a30ddb41e0156459d03750f508eac03f3c38a # v1.5.5

- name: Verify token for cross-run artifact download
if: inputs.trigger-run-id != ''
Expand Down Expand Up @@ -500,8 +502,12 @@ jobs:
# contains the review marker but NOT the reply marker (substring overlap).
# The login check prevents matching human comments that happen to contain
# the marker text (e.g., in discussions about the review system).
# Migration window: tolerate both the new docker-agent-review markers and the
# legacy cagent-review markers, so replies to review comments posted by the old
# action still drive the feedback loop until those PRs close.
if [ "$parent_user_login" = "docker-agent" ] && \
echo "$body" | grep -q "<!-- cagent-review -->" && \
{ echo "$body" | grep -q "<!-- docker-agent-review -->" || echo "$body" | grep -q "<!-- cagent-review -->"; } && \
! echo "$body" | grep -q "<!-- docker-agent-review-reply -->" && \
! echo "$body" | grep -q "<!-- cagent-review-reply -->"; then
echo "is_agent=true" >> $GITHUB_OUTPUT
echo "root_comment_id=$PARENT_ID" >> $GITHUB_OUTPUT
Expand Down Expand Up @@ -532,7 +538,7 @@ jobs:

- name: Setup credentials
if: steps.check.outputs.is_agent == 'true'
uses: docker/cagent-action/setup-credentials@367a30ddb41e0156459d03750f508eac03f3c38a # v1.5.5
uses: docker/docker-agent-action/setup-credentials@367a30ddb41e0156459d03750f508eac03f3c38a # v1.5.5

- name: Check authorization
if: steps.check.outputs.is_agent == 'true'
Expand Down Expand Up @@ -590,7 +596,7 @@ jobs:
jq -n \
--arg body "Sorry @$AUTHOR, conversational replies are currently available to repository collaborators only. Your feedback has still been captured and will be used to improve future reviews.

<!-- cagent-review-reply -->" \
<!-- docker-agent-review-reply -->" \
--argjson reply_to "$ROOT_COMMENT_ID" \
'{body: $body, in_reply_to: $reply_to}' | \
gh api "repos/$REPO/pulls/$PR_NUMBER/comments" --input -
Expand Down Expand Up @@ -691,7 +697,7 @@ jobs:
- name: Run reply
if: steps.check.outputs.is_agent == 'true' && steps.auth.outputs.authorized == 'true'
continue-on-error: true
uses: docker/cagent-action/review-pr/reply@367a30ddb41e0156459d03750f508eac03f3c38a # v1.5.5
uses: docker/docker-agent-action/review-pr/reply@367a30ddb41e0156459d03750f508eac03f3c38a # v1.5.5
with:
thread-context: ${{ steps.thread.outputs.prompt }}
comment-id: ${{ steps.feedback.outputs.comment-id }}
Expand Down Expand Up @@ -766,7 +772,7 @@ jobs:

steps:
- name: Setup credentials
uses: docker/cagent-action/setup-credentials@367a30ddb41e0156459d03750f508eac03f3c38a # v1.5.5
uses: docker/docker-agent-action/setup-credentials@367a30ddb41e0156459d03750f508eac03f3c38a # v1.5.5

- name: Download trigger context
if: inputs.trigger-run-id != ''
Expand Down Expand Up @@ -832,7 +838,7 @@ jobs:
- name: Run mention-reply handler
id: mention-context
if: steps.resolve-event.outputs.path != ''
uses: docker/cagent-action/.github/actions/mention-reply@367a30ddb41e0156459d03750f508eac03f3c38a # v1.5.5
uses: docker/docker-agent-action/.github/actions/mention-reply@367a30ddb41e0156459d03750f508eac03f3c38a # v1.5.5
env:
GITHUB_EVENT_PATH: ${{ steps.resolve-event.outputs.path }}
GITHUB_EVENT_NAME: ${{ steps.resolve-event.outputs.name }}
Expand All @@ -844,7 +850,7 @@ jobs:
if: steps.mention-context.outputs.should-reply == 'true'
id: run-reply
continue-on-error: true
uses: docker/cagent-action/review-pr/mention-reply@367a30ddb41e0156459d03750f508eac03f3c38a # v1.5.5
uses: docker/docker-agent-action/review-pr/mention-reply@367a30ddb41e0156459d03750f508eac03f3c38a # v1.5.5
with:
mention-context: ${{ steps.mention-context.outputs.prompt }}
owner: ${{ steps.mention-context.outputs.owner }}
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/self-review-pr-trigger.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ jobs:
github.event.comment.user.login != 'docker-agent' &&
github.event.comment.user.login != 'docker-agent[bot]' &&
github.event.comment.user.type != 'Bot' &&
!contains(github.event.comment.body, '<!-- docker-agent-review -->') &&
!contains(github.event.comment.body, '<!-- docker-agent-review-reply -->') &&
!contains(github.event.comment.body, '<!-- cagent-review -->') &&
!contains(github.event.comment.body, '<!-- cagent-review-reply -->')
runs-on: ubuntu-latest
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/self-review-pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ jobs:
github.event.comment.user.login != 'docker-agent' &&
github.event.comment.user.login != 'docker-agent[bot]' &&
github.event.comment.user.type != 'Bot' &&
!contains(github.event.comment.body, '<!-- docker-agent-review -->') &&
!contains(github.event.comment.body, '<!-- docker-agent-review-reply -->') &&
!contains(github.event.comment.body, '<!-- cagent-review -->') &&
!contains(github.event.comment.body, '<!-- cagent-review-reply -->')) ||
github.event.workflow_run.conclusion == 'success'
Expand Down
22 changes: 11 additions & 11 deletions .github/workflows/test-e2e-reviewer.yml
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ jobs:

- name: Setup credentials
if: steps.fork-check.outputs.is_fork != 'true'
uses: docker/cagent-action/setup-credentials@367a30ddb41e0156459d03750f508eac03f3c38a # v1.5.5
uses: docker/docker-agent-action/setup-credentials@367a30ddb41e0156459d03750f508eac03f3c38a # v1.5.5

- name: Write synthetic issue_comment event
if: steps.fork-check.outputs.is_fork != 'true'
Expand All @@ -99,7 +99,7 @@ jobs:
"action": "created",
"issue": {
"number": $pr_number,
"pull_request": { "url": ("https://api.github.com/repos/docker/cagent-action/pulls/" + ($pr_number | tostring)) }
"pull_request": { "url": ("https://api.github.com/repos/docker/docker-agent-action/pulls/" + ($pr_number | tostring)) }
},
"comment": {
"id": 9999999901,
Expand All @@ -108,7 +108,7 @@ jobs:
},
"repository": {
"owner": { "login": "docker" },
"name": "cagent-action"
"name": "docker-agent-action"
},
"sender": { "login": $actor, "type": "User" }
}' > /tmp/test-event-toplevel.json
Expand Down Expand Up @@ -191,7 +191,7 @@ jobs:

- name: Setup credentials
if: steps.fork-check.outputs.is_fork != 'true'
uses: docker/cagent-action/setup-credentials@367a30ddb41e0156459d03750f508eac03f3c38a # v1.5.5
uses: docker/docker-agent-action/setup-credentials@367a30ddb41e0156459d03750f508eac03f3c38a # v1.5.5

- name: Create anchor review comment
if: steps.fork-check.outputs.is_fork != 'true'
Expand All @@ -200,10 +200,10 @@ jobs:
GH_TOKEN: ${{ env.GITHUB_APP_TOKEN || github.token }}
PR_NUMBER: ${{ inputs.pr_number }}
run: |
HEAD_SHA=$(gh api "repos/docker/cagent-action/pulls/$PR_NUMBER" --jq '.head.sha')
DIFF_FILE=$(gh api "repos/docker/cagent-action/pulls/$PR_NUMBER/files" --jq '.[0].filename')
HEAD_SHA=$(gh api "repos/docker/docker-agent-action/pulls/$PR_NUMBER" --jq '.head.sha')
DIFF_FILE=$(gh api "repos/docker/docker-agent-action/pulls/$PR_NUMBER/files" --jq '.[0].filename')
echo "Using diff file: $DIFF_FILE"
COMMENT_ID=$(gh api "repos/docker/cagent-action/pulls/$PR_NUMBER/comments" \
COMMENT_ID=$(gh api "repos/docker/docker-agent-action/pulls/$PR_NUMBER/comments" \
-X POST \
--input - <<< $(jq -n \
--arg sha "$HEAD_SHA" \
Expand Down Expand Up @@ -235,7 +235,7 @@ jobs:
},
"repository": {
"owner": { "login": "docker" },
"name": "cagent-action"
"name": "docker-agent-action"
},
"sender": { "login": $actor, "type": "User" }
}' > /tmp/test-event-inline.json
Expand Down Expand Up @@ -283,10 +283,10 @@ jobs:
run: |
if [ -z "$ANCHOR_ID" ]; then exit 0; fi
# Delete thread replies first
gh api "repos/docker/cagent-action/pulls/${{ inputs.pr_number }}/comments" \
gh api "repos/docker/docker-agent-action/pulls/${{ inputs.pr_number }}/comments" \
| jq --argjson id "$ANCHOR_ID" '[.[] | select(.in_reply_to_id == $id)] | .[].id' \
| while read -r reply_id; do
gh api "repos/docker/cagent-action/pulls/comments/$reply_id" -X DELETE || true
gh api "repos/docker/docker-agent-action/pulls/comments/$reply_id" -X DELETE || true
done
# Delete anchor
gh api "repos/docker/cagent-action/pulls/comments/$ANCHOR_ID" -X DELETE || true
gh api "repos/docker/docker-agent-action/pulls/comments/$ANCHOR_ID" -X DELETE || true
40 changes: 20 additions & 20 deletions .github/workflows/test-e2e.yml
Original file line number Diff line number Diff line change
Expand Up @@ -205,14 +205,14 @@ jobs:
run: pnpm install --frozen-lockfile && pnpm build

- name: Setup credentials
uses: docker/cagent-action/setup-credentials@367a30ddb41e0156459d03750f508eac03f3c38a # v1.5.5
uses: docker/docker-agent-action/setup-credentials@367a30ddb41e0156459d03750f508eac03f3c38a # v1.5.5

- name: Create anchor issue comment on current PR
id: create-anchor
env:
GH_TOKEN: ${{ env.GITHUB_APP_TOKEN || github.token }}
run: |
COMMENT_ID=$(gh api repos/docker/cagent-action/issues/$TEST_PR_NUMBER/comments \
COMMENT_ID=$(gh api repos/docker/docker-agent-action/issues/$TEST_PR_NUMBER/comments \
--method POST \
--raw-field body="@docker-agent this is an automated e2e test — please reply with a brief acknowledgement." \
--jq .id)
Expand All @@ -230,7 +230,7 @@ jobs:
"action": "created",
"issue": {
"number": $pr_number,
"pull_request": { "url": ("https://api.github.com/repos/docker/cagent-action/pulls/" + ($pr_number | tostring)) }
"pull_request": { "url": ("https://api.github.com/repos/docker/docker-agent-action/pulls/" + ($pr_number | tostring)) }
},
"comment": {
"id": $comment_id,
Expand All @@ -239,7 +239,7 @@ jobs:
},
"repository": {
"owner": { "login": "docker" },
"name": "cagent-action"
"name": "docker-agent-action"
},
"sender": { "login": $actor, "type": "User" }
}' > /tmp/test-event-toplevel.json
Expand Down Expand Up @@ -288,8 +288,8 @@ jobs:
env:
GH_TOKEN: ${{ env.GITHUB_APP_TOKEN || github.token }}
run: |
FOUND=$(gh api repos/docker/cagent-action/issues/$TEST_PR_NUMBER/comments \
--jq '[.[] | select(.body | contains("<!-- cagent-review-reply -->")) | select(.created_at > (now - 300 | todate))] | length')
FOUND=$(gh api repos/docker/docker-agent-action/issues/$TEST_PR_NUMBER/comments \
--jq '[.[] | select(.body | contains("<!-- docker-agent-review-reply -->")) | select(.created_at > (now - 300 | todate))] | length')
if [ "$FOUND" -eq 0 ]; then
echo "❌ No reply comment found within the last 5 minutes"
exit 1
Expand All @@ -304,15 +304,15 @@ jobs:
ANCHOR_ID: ${{ steps.create-anchor.outputs.test_comment_id }}
run: |
# Delete any test reply comments posted in the last 5 minutes
gh api repos/docker/cagent-action/issues/$TEST_PR_NUMBER/comments \
--jq '.[] | select(.body | contains("<!-- cagent-review-reply -->")) | select(.created_at > (now - 300 | todate)) | .id' | \
gh api repos/docker/docker-agent-action/issues/$TEST_PR_NUMBER/comments \
--jq '.[] | select(.body | contains("<!-- docker-agent-review-reply -->")) | select(.created_at > (now - 300 | todate)) | .id' | \
while read -r comment_id; do
gh api "repos/docker/cagent-action/issues/comments/$comment_id" -X DELETE || true
gh api "repos/docker/docker-agent-action/issues/comments/$comment_id" -X DELETE || true
echo "Deleted comment $comment_id"
done
# Delete the anchor comment itself
if [ -n "$ANCHOR_ID" ]; then
gh api "repos/docker/cagent-action/issues/comments/$ANCHOR_ID" -X DELETE || true
gh api "repos/docker/docker-agent-action/issues/comments/$ANCHOR_ID" -X DELETE || true
echo "Deleted anchor comment $ANCHOR_ID"
fi

Expand Down Expand Up @@ -345,23 +345,23 @@ jobs:
run: pnpm install --frozen-lockfile && pnpm build

- name: Setup credentials
uses: docker/cagent-action/setup-credentials@367a30ddb41e0156459d03750f508eac03f3c38a # v1.5.5
uses: docker/docker-agent-action/setup-credentials@367a30ddb41e0156459d03750f508eac03f3c38a # v1.5.5

- name: Create anchor review comment on current PR
id: create-anchor
env:
GH_TOKEN: ${{ env.GITHUB_APP_TOKEN || github.token }}
run: |
# Get the PR head SHA
HEAD_SHA=$(gh api repos/docker/cagent-action/pulls/$TEST_PR_NUMBER --jq '.head.sha')
HEAD_SHA=$(gh api repos/docker/docker-agent-action/pulls/$TEST_PR_NUMBER --jq '.head.sha')
echo "PR head SHA: $HEAD_SHA"

# Get first file in the diff to use as a safe anchor
DIFF_FILE=$(gh api repos/docker/cagent-action/pulls/$TEST_PR_NUMBER/files --jq '.[0].filename')
DIFF_FILE=$(gh api repos/docker/docker-agent-action/pulls/$TEST_PR_NUMBER/files --jq '.[0].filename')
echo "Using diff file: $DIFF_FILE"

# Post a test inline comment to get a real comment ID
COMMENT_ID=$(gh api repos/docker/cagent-action/pulls/$TEST_PR_NUMBER/comments \
COMMENT_ID=$(gh api repos/docker/docker-agent-action/pulls/$TEST_PR_NUMBER/comments \
-X POST \
--input - <<< $(jq -n \
--arg sha "$HEAD_SHA" \
Expand Down Expand Up @@ -392,7 +392,7 @@ jobs:
},
"repository": {
"owner": { "login": "docker" },
"name": "cagent-action"
"name": "docker-agent-action"
},
"sender": { "login": $actor, "type": "User" }
}' > /tmp/test-event-inline.json
Expand Down Expand Up @@ -457,9 +457,9 @@ jobs:
GH_TOKEN: ${{ env.GITHUB_APP_TOKEN || github.token }}
ANCHOR_ID: ${{ steps.create-anchor.outputs.test_comment_id }}
run: |
FOUND=$(gh api repos/docker/cagent-action/pulls/$TEST_PR_NUMBER/comments \
FOUND=$(gh api repos/docker/docker-agent-action/pulls/$TEST_PR_NUMBER/comments \
| jq --argjson id "$ANCHOR_ID" \
'[.[] | select(.in_reply_to_id == $id and (.body | contains("<!-- cagent-review-reply -->"))) ] | length')
'[.[] | select(.in_reply_to_id == $id and (.body | contains("<!-- docker-agent-review-reply -->"))) ] | length')
if [ "$FOUND" -eq 0 ]; then
echo "❌ No inline reply found in thread $ANCHOR_ID"
exit 1
Expand All @@ -478,13 +478,13 @@ jobs:
exit 0
fi
# Delete any replies in the thread first
gh api repos/docker/cagent-action/pulls/$TEST_PR_NUMBER/comments \
gh api repos/docker/docker-agent-action/pulls/$TEST_PR_NUMBER/comments \
| jq --argjson id "$ANCHOR_ID" \
'[.[] | select(.in_reply_to_id == $id)] | .[].id' | \
while read -r reply_id; do
gh api "repos/docker/cagent-action/pulls/comments/$reply_id" -X DELETE || true
gh api "repos/docker/docker-agent-action/pulls/comments/$reply_id" -X DELETE || true
echo "Deleted reply comment $reply_id"
done
# Delete the anchor comment itself
gh api "repos/docker/cagent-action/pulls/comments/$ANCHOR_ID" -X DELETE || true
gh api "repos/docker/docker-agent-action/pulls/comments/$ANCHOR_ID" -X DELETE || true
echo "Deleted anchor comment $ANCHOR_ID"
Loading
Loading