WordPress.org

Making WordPress.org

Changeset 9373


Ignore:
Timestamp:
12/20/2019 08:38:53 AM (2 months ago)
Author:
dd32
Message:

Trac: Github PRs: Add some initial code to sync a PR Comment (Not a code review comment..) over to Trac for visibility.

This isn't yet active, as Github isn't sending the issue_comment action yet.

See #4093.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sites/trunk/api.wordpress.org/public_html/dotorg/trac/pr/webhook.php

    r9372 r9373  
    103103        break;
    104104
     105    case 'issue_comment':
     106        // This is a singular comment on a PR or issue.
     107        // NOT a code review comment.
     108
     109        $is_edit = isset( $payload->action ) && 'edited' === $payload->action;
     110        if ( $is_edit ) {
     111            // UNIQUE constraint failed: ticket_change.ticket, ticket_change.time, ticket_change.field
     112            die( 'UNSUPPORTED - EDIT' );
     113        }
     114
     115        // Make sure it's a PR comment..
     116        if ( empty( $payload->issue->pull_request ) ) {
     117            die( 'UNSUPPORTED - Only PR comments supported.' );
     118        }
     119
     120        $pr_repo   = $payload->repository->full_name;
     121        $pr_number = $payload->issue->number;
     122
     123        // Find the tickets that this PR is attached to.
     124        $tickets = $wpdb->get_results( $wpdb->prepare(
     125            "SELECT trac, ticket FROM trac_github_prs WHERE repo = %s AND pr = %d",
     126            $pr_repo,
     127            $pr_number
     128        ) );
     129        if ( ! $tickets ) {
     130            die( 'PR Not linked to any tickets' );
     131        }
     132
     133        $comment_template = "{{{#!comment\n%s\n}}}\n[%s %s] commented on [%s %s]:\n\n%s";
     134        $comment_author   = find_wporg_user_by_github( $payload->comment->user->login );
     135        $comment_time     = new \DateTime( $payload->comment->created_at );
     136
     137        $comment_body = sprintf(
     138            $comment_template,
     139            $payload->comment->id,
     140            $payload->comment->user->html_url,
     141            $payload->comment->user->login,
     142            $payload->comment->html_url,
     143            'PR #' . $payload->issue->number,
     144            $payload->comment->body
     145        );
     146
     147        foreach ( $tickets as $t ) {
     148            $trac = get_trac_instance( $t->trac );
     149
     150            if ( ! $is_edit ) {
     151                $trac->update(
     152                    $t->ticket, $comment_body,
     153                    [], false,
     154                    $comment_author,
     155                    $comment_time
     156                );
     157            } else {
     158                // TODO: Need to edit..
     159                // use /wpapi endpoint for that.
     160            }
     161
     162        }
     163
     164        die( 'OK' );
     165
    105166    case 'pull_request_review':
     167        // This is a Pull Request Review.
     168        // It's comprised of one or more comments, which are related to a users "review"
     169        // The comment(s) in this review may actually be a response to another review or response to a review in response to a review, etc.
     170
     171        die( 'N/A' );
    106172    case 'pull_request_review_comment':
    107         die( 'N/A' );
     173        // This is a comment within a Pull Request Review, but sent before the review is published.
     174
     175        die( 'Not Needed?' );
     176       
    108177}
Note: See TracChangeset for help on using the changeset viewer.