
使用 AWS CLI 的post-comment-for-pull-request为 CodeCommit 拉取请求添加代码评审评论【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli导读aws codecommit post-comment-for-pull-request是 AWS CLI 中用于在 CodeCommit 拉取请求Pull RequestPR的指定代码变更位置文件与行号上发布评论的命令。本文以仓库中的官方示例文档 post-comment-for-pull-request.rst 为核心结合 CodeCommit 服务模型 中的参数定义与输出结构完整讲解命令的每个参数、定位评论位置的--location语法、返回结果各字段含义以及与其他评论相关命令回复、查询、修改、删除的协作用法帮助读者把逐行代码评审的评论能力接入日常的 PR 工作流。命令概览一个把评论钉在代码行上的 APICodeCommit 的评论体系与 Git 仓库的 blob/commit 模型深度绑定。post-comment-for-pull-request并非简单的给 PR 发一句话而是通过beforeCommitId与afterCommitId界定 PR 的变更范围再通过--location文件路径 行号 BEFORE/AFTER把评论精确锚定到某一次 diff 的具体位置与 Web 控制台上的逐行评论能力完全对齐。官方示例完整复现原文档 post-comment-for-pull-request.rst 给出的完整调用如下aws codecommit post-comment-for-pull-request \ --pull-request-id 47 \ --repository-name MyDemoRepo \ --before-commit-id 317f8570EXAMPLE \ --after-commit-id 5d036259EXAMPLE \ --client-request-token 123Example \ --content These dont appear to be used anywhere. Can we remove them? \ --location filePathahs_count.py,filePosition367,relativeFileVersionAFTER该命令在仓库MyDemoRepo的 PR47中对ahs_count.py文件第 367 行变更后的版本即AFTER发布评论这些代码看起来没有任何地方使用我们能删除它们吗。参数详解每个选项的语义与取值根据 PostCommentForPullRequestInput 的定义该操作共有 5 个必填参数与 2 个可选参数必填参数参数类型说明--pull-request-id字符串系统生成的 PR ID可通过aws codecommit list-pull-requests --repository-name MyDemoRepo获取--repository-name字符串目标仓库名称必须与 PR 所在仓库一致--before-commit-id字符串完整 commit IDPR 创建时目标分支destination branch分支尖端的完整 commit ID用于界定 diff 的变更前边界--after-commit-id字符串完整 commit ID发布评论时源分支source branch当前尖端的完整 commit ID界定 diff 的变更后边界--content字符串评论正文内容可选参数参数类型说明--location结构体keyvalue 逗号分隔评论锚定的代码位置省略时评论作为针对整个 PR diff 的通用评论general comment发布--client-request-token字符串客户端生成的幂等性令牌idempotency token见下文幂等性说明幂等性令牌--client-request-token服务模型将该字段标记为idempotencyToken: true见 service-2.json只要请求使用相同的参数与相同的令牌服务端就会返回首次请求的结果而不是重复创建评论。这对于网络重试、脚本重复执行场景至关重要——即使请求被发送了多次也不会产生重复评论。定位评论位置--location的三种子字段--location对应服务模型中的 Location 结构CLI 中使用keyvalue逗号分隔的 shorthand 语法--location filePathahs_count.py,filePosition367,relativeFileVersionAFTER子字段说明filePath被比较文件的路径含扩展名与子目录如src/utils/helper.pyfilePosition变更位置在文件中的行号1 起始的整数relativeFileVersion评论指向 diff 的哪一侧BEFORE变更前或AFTER变更后其中relativeFileVersion的合法取值在 RelativeFileVersionEnum 中明确限定为BEFORE与AFTER两个枚举值传入其他值会触发InvalidRelativeFileVersionEnumException。实践建议若要评论新增的代码应指向AFTER版本新增行的行号以变更后文件为准若要评论被删除的代码则应指向BEFORE版本。返回结果逐字段解读示例命令输出如下为便于阅读整理为缩进格式{ repositoryName: MyDemoRepo, pullRequestId: 47, beforeCommitId: 317f8570EXAMPLE, afterCommitId: 5d036259EXAMPLE, beforeBlobId: 80906a4cEXAMPLE, afterBlobId: 1f330709EXAMPLE, location: { filePath: ahs_count.py, filePosition: 367, relativeFileVersion: AFTER }, comment: { authorArn: arn:aws:iam::111111111111:user/Saanvi_Sarkar, clientRequestToken: 123Example, commentId: abcd1234EXAMPLEb5678efgh, content: These dont appear to be used anywhere. Can we remove them?, creationDate: 1508369622.123, lastModifiedDate: 1508369622.123, deleted: false, callerReactions: [], reactionCounts: [] } }对照 PostCommentForPullRequestOutput 与 Comment 结构各字段含义如下顶层字段字段含义repositoryName发布评论的仓库名称pullRequestId评论所在的 PR IDbeforeCommitId/afterCommitId本次请求实际使用的变更前后 commit IDbeforeBlobId/afterBlobId评论锚定行所在 blob文件内容快照在 diff 前后的对象 IDlocation评论锚定的位置与请求中的--location回显一致comment创建出的评论对象comment对象核心字段字段含义commentId系统生成的唯一评论 ID后续查询、回复、更新或删除该评论时均需引用它authorArn评论作者的 IAM 角色/用户 ARNcontent评论正文creationDate/lastModifiedDate创建与最后修改时间Unix 时间戳含毫秒小数deleted评论是否已被删除clientRequestToken请求时使用的幂等令牌回显callerReactions/reactionCounts当前调用者对评论的 emoji 反应、各反应的统计计数未使用表情时为空数组/空对象评论的其他常见操作一个完整的评审闭环post-comment-for-pull-request通常是评审流程的起点仓库 examples/codecommit 目录还收录了配套命令的官方示例回复评论post-comment-reply.rst 演示用aws codecommit post-comment-reply --in-reply-to commentId --content ...对既有评论进行回复实现评审者与作者的对话查询 PR 上的全部评论get-comments-for-pull-request.rst 通过aws codecommit get-comments-for-pull-request --pull-request-id 47 --repository-name MyDemoRepo列出该 PR 上的所有评论及其位置修改评论update-comment.rst 使用aws codecommit update-comment --comment-id commentId --content ...更新评论正文仅作者可操作删除评论delete-comment-content.rst 使用aws codecommit delete-comment-content --comment-id commentId清除评论内容评论仍保留但deleted标记为 true这也解释了输出中的deleted字段。错误处理与前置条件服务模型中列出了该操作可能返回的异常见 service-2.json常见几类PR 相关问题PullRequestDoesNotExistException、InvalidPullRequestIdException、PullRequestIdRequiredException——PR ID 不存在、格式非法或缺失仓库关联问题RepositoryNotAssociatedWithPullRequestException——指定的仓库与该 PR 无关联请确认--repository-name与 PR 实际所属仓库一致仓库存在问题RepositoryDoesNotExistException、InvalidRepositoryNameException、RepositoryNameRequiredException令牌/幂等问题ClientRequestTokenRequiredException、InvalidClientRequestTokenException、IdempotencyParameterMismatchException——重复使用同一令牌但改变了其他参数时会抛出幂等参数不匹配评论内容问题CommentContentRequiredException评论为空等且根据模型注释评论内容长度上限为 10,240 字符CommentContentSizeLimitExceededException。运行命令前还需满足AWS CLI 已安装并完成凭证配置可通过aws configure完成见仓库 customizations/configure 相关实现当前 IAM 身份具备 CodeCommit 仓库的codecommit:PostCommentForPullRequest权限before-commit-id与after-commit-id必须是完整的 40 位 commit SHA而非短哈希。与其他发布评论命令的差异CodeCommit 提供了两个容易混淆的发布评论命令注意区分使用场景命令场景锚定对象post-comment-for-pull-request在 PR 的 diff 上评论由beforeCommitId/afterCommitId界定的 PR 变更范围post-comment-for-compared-commit在任意两次 commit 比较上评论不限于 PR两个指定 commit 之间的差异两者的--location语法完全一致filePath/filePosition/relativeFileVersion区别仅在于前者多一个--pull-request-id参数并绑定 PR 上下文。实际工作中若评论针对的是 PR 的评审请使用前者若只想对某两个 commit 的 diff 发表意见例如合并评审可使用后者。小结aws codecommit post-comment-for-pull-request提供了把评审意见精确锚定到 PR 变更行级的自动化能力。掌握四个关键点即可熟练使用一是用--pull-request-id--repository-name定位 PR 归属二是用before/after-commit-id界定 diff 范围三是用--location的filePath/filePosition/relativeFileVersion三要素锁定具体代码行BEFORE/AFTER决定指向删除侧还是新增侧四是用--client-request-token保证重试不产生重复评论。配合仓库 examples/codecommit 目录下的回复、查询、更新、删除示例即可在脚本、CI 或自动化评审工具中完整落地 CodeCommit 的代码评审闭环。【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考