sijmen / Gitea PR CI

// ==UserScript==
// @name         Gitea PR CI
// @description  Shows the Continuous Integration status on pull requests.
// @copyright    2019, Sijmen Schoon (https://sijmenschoon.nl/)
// @license      MIT
// @version      0.1.3
// @author       sijmen
// @grant        none
// ==/UserScript==

function statusIcon(status) {
  switch (status) {
    case "pending":
      return '<i class="commit-status circle icon yellow">';
    case "success":
      return '<i class="commit-status check icon green">';
    case "error":
      return '<i class="commit-status warning icon red">';
    case "failure":
      return '<i class="commit-status remove icon red">';
    case "warning":
      return '<i class="commit-status warning sign icon yellow">';
    default:
      return '';
  };
}

async function main() {
  // Get the latest status
  const path = `/api/v1/repos/${window.location.pathname}`;
  const repo = await fetch(`${path}`).then(r => r.json());
  const head = repo.head.sha;
  const statuses = await fetch(`${path}/../../commits/${head}/statuses`).then(r => r.json());
  if (statuses.length === 0) {
    return;
  }

  const status = statuses.sort((a, b) => b.id - a.id)[0];
  console.log(statuses);

  // Append the icon and description
  const icon = $(`<a target="_blank" href="${status.target_url}" class="ci-url">`).append(statusIcon(status.status))
  $(".pull-desc").append(' ∙ ', icon, status.description);
}

main();