async addJenkinsResults()

in src/GitHubStatusDisplay.js [184:255]


  async addJenkinsResults(builds) {
    // Adds Jenkins results to builds array
    // Step 1. Fetch info via GraphQL
    //
    // STOP.  You want more results?  You may have noticed that on
    // Google, people suggest using allBuilds with {0,n} to make use
    // of Jenkins pagination.  However, if you do this, it will *DOS our Jeenkins
    // instance*; even when pagination is requested, Jenkins will
    // still load ALL builds into memory before servicing your
    // request.  I've filed this at https://issues.jenkins-ci.org/browse/JENKINS-49908
    let jenkins_data = await jenkins.job(`pytorch-${this.props.branch}`, {
      tree: `builds[
                url,
                number,
                duration,
                timestamp,
                result,
                actions[parameters[name,value],
                causes[shortDescription]],
                changeSet[items[commitId,comment,msg]],
                subBuilds[
                  result,jobName,url,duration,
                  build[
                    subBuilds[
                      result,jobName,url,duration,
                      build[
                        subBuilds[result,jobName,url,duration]
                      ]
                    ]
                  ]
                ]
             ]`.replace(/\s+/g, ""),
    });

    // Step 2: Build commit to build idx map
    const commitIdxMap = new Map();
    builds.forEach((build, idx) => {
      commitIdxMap[build.id] = idx;
    });

    // Step 3: Add jenkins jobs
    if (jenkins_data) {
      jenkins_data.builds.forEach((topBuild) => {
        if (topBuild.changeSet.items.length !== 1) {
          return;
        }
        const buildCommitId = topBuild.changeSet.items[0].commitId;
        if (!(buildCommitId in commitIdxMap)) {
          return;
        }
        const buildIdx = commitIdxMap[buildCommitId];
        function go(subBuild) {
          if (
            subBuild.build &&
            subBuild.build._class ===
              "com.tikal.jenkins.plugins.multijob.MultiJobBuild"
          ) {
            subBuild.build.subBuilds.forEach(go);
          } else {
            builds[buildIdx].sb_map.set(
              getJenkinsJobName(subBuild),
              Object.fromEntries([
                ["status", subBuild.result],
                ["build_url", jenkins.link(subBuild.url + "/console")],
              ])
            );
          }
        }
        topBuild.subBuilds.forEach(go);
      });
    }
  }