Making WordPress.org

Changeset 9898


Ignore:
Timestamp:
05/22/2020 05:12:41 AM (6 years 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.