GHA workflow_dispatch

Add missing info in workflow_dispatch actions

Fra 20.11.2021. Se den seneste versjonen.

// ==UserScript==
// @name         GHA workflow_dispatch
// @namespace    https://gist.github.com/rehangit/58409fc3cca4ec7630487ac13a055b27
// @version      0.1.6
// @description  Add missing info in workflow_dispatch actions
// @author       Rehan Ahmad
// @match        https://github.com/*/*/actions
// @match        https://github.com/*/*/actions/*
// @grant        none
// @icon         data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMTIzIiBoZWlnaHQ9Ijc5NCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDA3ZmZmIj48Y2lyY2xlIGN4PSI5OS41IiBjeT0iOTkuNSIgc3Ryb2tlLXdpZHRoPSIxNSIgcj0iNTAiLz48cGF0aCBkPSJNODcgMTIybDM1LTIyLjVMODcgNzd6IiBzdHJva2Utd2lkdGg9IjgiLz48cGF0aCBkPSJNOTkuNSAxNTJjMCAyMi41IDAgMjIuNSA5NSAyMi4wMW0tOTUtMTkuNTFjMCA5Mi43IDAgOTIuNyA2NSA5NSIgc3Ryb2tlLXdpZHRoPSIxNSIvPjxjaXJjbGUgY3g9IjIxOS41IiBjeT0iMjQ5LjUiIHN0cm9rZS13aWR0aD0iMTAiIHI9IjI1Ii8+PHBhdGggZD0iTTIwNyAyNDkuNWg3bTExIDBoNyIgc3Ryb2tlLXdpZHRoPSI4IiBzdHJva2UtZGFzaGFycmF5PSI0MCA0OCIvPjxjaXJjbGUgY3g9IjIxOS41IiBjeT0iMTc0LjUiIHN0cm9rZS13aWR0aD0iMTAiIHI9IjI1Ii8+PHBhdGggZD0iTTIwOC41IDE3Ny44M2w2LjY3IDYuNjcgMTMuMzMtMjAiIHN0cm9rZS13aWR0aD0iOCIvPjwvc3ZnPg==
// ==/UserScript==

// Use with extension: Tampermonkey or ViolentMonkey
// Easier install from: https://greatest.deepsurf.us/en/scripts/435742-gha-workflow-dispatch

let GITHUB_TOKEN = localStorage.getItem('GITHUB_TOKEN');
if (!GITHUB_TOKEN) {
  GITHUB_TOKEN = prompt(
    "Please enter your github token with 'repo' access",
    'Github Token'
  );
  localStorage.setItem('GITHUB_TOKEN', GITHUB_TOKEN);
}

const headers = { headers: { Authorization: `token ${GITHUB_TOKEN}` } };

const ghCacheStored = localStorage.getItem('GITHUB_API_CACHE');
const ghCache = (ghCacheStored && JSON.parse(ghCacheStored)) || {};
const getGH = async url => {
  if (!ghCache[url]) {
    ghCache[url] = await fetch(url, headers).then(res => res.json());
    localStorage.setItem('GITHUB_API_CACHE', JSON.stringify(ghCache));
  }
  return ghCache[url];
};

const render = event => {
  console.log('render fired', event);
  setTimeout(() => {
    document
      .querySelectorAll('.Box-row.js-socket-channel.js-updatable-content')
      .forEach(async node => {
        const middle = node.querySelector('.d-table-cell + .d-none');
        if (middle.innerText.trim() === '') {
          const link = node.querySelector('.Link--primary');
          const url = link.href.replace(
            '//github.com',
            '//api.github.com/repos'
          );
          const res = await getGH(url, headers);

          const branch = res.head_branch;
          const href = [res.repository.html_url, 'tree', branch].join('/');

          const sha = res.head_sha.slice(0, 7);
          const href_sha = [
            res.repository.html_url,
            'commit',
            res.head_sha,
          ].join('/');

          middle.innerHTML = `
            <div class="d-inline-block branch-name css-truncate css-truncate-target" style="max-width: 200px;">
              <a href="${href}" target="_blank">${branch}</a>
            </div> 
            <div style="padding: 2px 6px">
              <a class="d-block text-small color-fg-muted" href="${href_sha}" target="_blank">#${sha}</a>
            </div>
          `;
        }
      });
  }, 2000);
};

(() => {
  render();
  document.addEventListener('load', render);
  document.addEventListener('visibilitychange', render);
  document.addEventListener('readystatechange', render);
  window.addEventListener('hashchange', render);

  let lastUrl = location.href;
  new MutationObserver(() => {
    const url = location.href;
    if (url !== lastUrl) {
      lastUrl = url;
      render('mutation-observer');
    }
  }).observe(document, { subtree: true, childList: true });
})();