GHA workflow_dispatch

Add missing info in workflow_dispatch actions

  1. // ==UserScript==
  2. // @name GHA workflow_dispatch
  3. // @namespace https://gist.github.com/rehangit/58409fc3cca4ec7630487ac13a055b27
  4. // @version 0.1.6
  5. // @description Add missing info in workflow_dispatch actions
  6. // @author Rehan Ahmad
  7. // @match https://github.com/*/*/actions
  8. // @match https://github.com/*/*/actions/*
  9. // @grant none
  10. // @icon data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMDAiIGhlaWdodD0iMzIwIiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDdmZmYiPjxjaXJjbGUgY3g9Ijk5LjUiIGN5PSI5OS41IiBzdHJva2Utd2lkdGg9IjE1IiByPSI1MCIvPjxwYXRoIGQ9Ik04NyAxMjJsMzUtMjIuNUw4NyA3N3oiIHN0cm9rZS13aWR0aD0iOCIvPjxwYXRoIGQ9Ik05OS41IDE1MmMwIDIyLjUgMCAyMi41IDk1IDIyLjAxbS05NS0xOS41MWMwIDkyLjcgMCA5Mi43IDY1IDk1IiBzdHJva2Utd2lkdGg9IjE1Ii8+PGNpcmNsZSBjeD0iMjE5LjUiIGN5PSIyNDkuNSIgc3Ryb2tlLXdpZHRoPSIxMCIgcj0iMjUiLz48cGF0aCBkPSJNMjA3IDI0OS41aDdtMTEgMGg3IiBzdHJva2Utd2lkdGg9IjgiIHN0cm9rZS1kYXNoYXJyYXk9IjQwIDQ4Ii8+PGNpcmNsZSBjeD0iMjE5LjUiIGN5PSIxNzQuNSIgc3Ryb2tlLXdpZHRoPSIxMCIgcj0iMjUiLz48cGF0aCBkPSJNMjA4LjUgMTc3LjgzbDYuNjcgNi42NyAxMy4zMy0yMCIgc3Ryb2tlLXdpZHRoPSI4Ii8+PC9zdmc+
  11. // ==/UserScript==
  12.  
  13. // Use with extension: Tampermonkey or ViolentMonkey
  14. // Easier install from: https://greatest.deepsurf.us/en/scripts/435742-gha-workflow-dispatch
  15.  
  16. let GITHUB_TOKEN = localStorage.getItem('GITHUB_TOKEN');
  17. if (!GITHUB_TOKEN) {
  18. GITHUB_TOKEN = prompt(
  19. "Please enter your Github token with 'repo' and 'workflow' access\n(Generate at https://github.com/settings/tokens)"
  20. );
  21. localStorage.setItem('GITHUB_TOKEN', GITHUB_TOKEN);
  22. }
  23.  
  24. const headers = { headers: { Authorization: `token ${GITHUB_TOKEN}` } };
  25.  
  26. const ghCacheStored = localStorage.getItem('GITHUB_API_CACHE');
  27. const ghCache = (ghCacheStored && JSON.parse(ghCacheStored)) || {};
  28. const getGH = async url => {
  29. if (!ghCache[url]) {
  30. ghCache[url] = await fetch(url, headers).then(res => res.json());
  31. localStorage.setItem('GITHUB_API_CACHE', JSON.stringify(ghCache));
  32. }
  33. return ghCache[url];
  34. };
  35.  
  36. const render = event => {
  37. console.log('render fired', event);
  38. setTimeout(() => {
  39. document
  40. .querySelectorAll('.Box-row.js-socket-channel.js-updatable-content')
  41. .forEach(async node => {
  42. const middle = node.querySelector('.d-table-cell + .d-none');
  43. if (middle.innerText.trim() === '') {
  44. const link = node.querySelector('.Link--primary');
  45. const url = link.href.replace(
  46. '//github.com',
  47. '//api.github.com/repos'
  48. );
  49. const res = await getGH(url, headers);
  50.  
  51. const branch = res.head_branch;
  52. const href = [res.repository.html_url, 'tree', branch].join('/');
  53.  
  54. const sha = res.head_sha.slice(0, 7);
  55. const href_sha = [
  56. res.repository.html_url,
  57. 'commit',
  58. res.head_sha,
  59. ].join('/');
  60.  
  61. middle.innerHTML = `
  62. <div class="d-inline-block branch-name css-truncate css-truncate-target" style="max-width: 200px;">
  63. <a href="${href}" target="_blank">${branch}</a>
  64. </div>
  65. <div style="padding: 2px 6px">
  66. <a class="d-block text-small color-fg-muted" href="${href_sha}" target="_blank">#${sha}</a>
  67. </div>
  68. `;
  69. }
  70. });
  71. }, 2000);
  72. };
  73.  
  74. (() => {
  75. render();
  76. document.addEventListener('load', render);
  77. document.addEventListener('visibilitychange', render);
  78. document.addEventListener('readystatechange', render);
  79. window.addEventListener('hashchange', render);
  80.  
  81. let lastUrl = location.href;
  82. new MutationObserver(() => {
  83. const url = location.href;
  84. if (url !== lastUrl) {
  85. lastUrl = url;
  86. render('mutation-observer');
  87. }
  88. }).observe(document, { subtree: true, childList: true });
  89. })();