WordPress.org

Making WordPress.org

Changeset 9898


Ignore:
Timestamp:
05/22/2020 05:12:41 AM (19 months ago)
Author:
dd32
Message:

Trac: Attempt to include PR Review status in the PR status on trac.

Fixes #5052.

Location:
sites/trunk
Files:
2 edited

Legend:

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

    r9897 r9898  
    4444    }
    4545
     46    $_reviews = api_request(
     47        '/repos/' . $repo . '/pulls/' . intval( $pr ) . '/reviews',
     48        null,
     49        [ 'Accept: application/vnd.github.antiope-preview+json' ]
     50    );
     51    $reviews = [];
     52    foreach ( $_reviews as $r ) {
     53        if (
     54            in_array( $r->state, [ 'CHANGES_REQUESTED', 'APPROVED' ] ) &&
     55            ! in_array( $r->user->login, $reviews[ $r->state ] ?? [], true )
     56        ) {
     57            $reviews[ $r->state ][] = $r->user->login;
     58        }
     59    }
     60
    4661    return (object) [
    4762        'repo'            => $data->base->repo->full_name,
     
    5570        'mergeable_state' => $data->mergeable_state,
    5671        'check_runs'      => $check_runs,
     72        'reviews'         => $reviews,
    5773        'body'            => $data->body,
    5874        'user'            => (object) [
  • sites/trunk/wordpress.org/public_html/style/trac/wp-trac.js

    r9897 r9898  
    16981698            // Logic to determine what the PRs status is
    16991699            function prStatus( data ) {
    1700                 // Closed?
     1700                var stack = [],
     1701                    emojiState = '';
     1702
     1703                // Closed? Skip everything else.
    17011704                if ( data.closed_at ) {
    17021705                    return '✅ Closed';
     1706                }
     1707
     1708                // Merge State then
     1709                switch ( data.mergeable_state ) {
     1710                    case 'draft':
     1711                        stack.push( 'Draft' );
     1712                        break;
     1713                    case 'blocked':
     1714                        // All Good, Changes Requested, or unit tests failing.
     1715                        // Why 'blocked' is returned for some PRs is not obvious.
     1716                        if (
     1717                            data.reviews.CHANGES_REQUESTED ||
     1718                            (
     1719                                data.check_runs &&
     1720                                'failed' == Object.values( data.check_runs ).reduce( function( result, element ) {
     1721                                    return 'failed' == element ? element : result;
     1722                                } )
     1723                            )
     1724                        ) {
     1725                            // Let the unit tests / reviews section take care of it.
     1726                            break;
     1727                        } // else fall through.
     1728                    case 'clean':
     1729                        emojiState = '✅';
     1730                        stack.push( 'All checks pass' );
     1731                        break;
     1732                    case 'dirty':
     1733                        emojiState = '❌';
     1734                        stack.push( 'Merge conflicts' );
     1735                        break;
     1736                    case 'unstable':
     1737                        emojiState = '❌';
     1738                        stack.push( 'Failing tests' );
     1739                        break;
     1740                    case 'unknown':
     1741                        stack.push( 'Unknown' );
     1742                        break;
    17031743                }
    17041744
     
    17061746                if ( data.check_runs ) {
    17071747                    for ( var provider in data.check_runs ) {
    1708                         switch( data.check_runs[ provider ] ) {
     1748                        switch ( data.check_runs[ provider ] ) {
    17091749                            case 'in_progress':
    1710                                 return provider + ' running';
     1750                                stack.push( provider + ' running' );
     1751                                break;
    17111752                            case 'failed':
    1712                                 return '❌ ' + provider + ' failed';
     1753                                emojiState = '❌';
     1754                                stack.push( provider );
     1755                                break;
    17131756                            case 'success':
    17141757                                continue;
    17151758                            default:
    1716                                 return '❌ ' + provider + ' ' + data.check_runs[ provider ];
    1717                         }
    1718                     }
    1719                 }
    1720 
    1721                 // Merge State then
    1722                 switch ( data.mergeable_state ) {
    1723                     case 'draft':
    1724                         return 'Draft';
    1725                     case 'blocked': // This seems to be returned for our App with PRs but not others..
    1726                     case 'clean':
    1727                         return '✅ All checks pass';
    1728                     case 'dirty':
    1729                         return '❌ Merge conflicts';
    1730                     case 'unstable': // Not seen, Unit Tests above should catch it.
    1731                         return '❌ Failing tests';
    1732                     case 'unknown':
    1733                         return 'Unknown';
    1734                 }
     1759                                stack.push( provider + ' ' + data.check_runs[ provider ] );
     1760                                break;
     1761                        }
     1762                    }
     1763                }
     1764
     1765                // Changes requested?
     1766                if ( data.reviews ) {
     1767                    if ( data.reviews.APPROVED ) {
     1768                        emojiState = '✅';
     1769                        stack.push(
     1770                            $('<span>Approved</span>').prop(
     1771                                'title',
     1772                                'Changes approved by: ' + data.reviews.APPROVED.join(', ')
     1773                            )[0].outerHTML
     1774                        );
     1775                    }
     1776                    if ( data.reviews.CHANGES_REQUESTED ) {
     1777                        emojiState = '❌';
     1778                        stack.push(
     1779                            $('<span>Changes Requested</span>').prop(
     1780                                'title',
     1781                                'Changes requested by: ' + data.reviews.CHANGES_REQUESTED.join(', ')
     1782                            )[0].outerHTML
     1783                        );
     1784                    }
     1785                }
     1786
     1787                return emojiState + ' ' + stack.join( ', ' );
    17351788            }
    17361789
Note: See TracChangeset for help on using the changeset viewer.