Skip to content

Instantly share code, notes, and snippets.

@Isaddo
Last active September 6, 2024 00:47
Show Gist options
  • Select an option

  • Save Isaddo/7efebcb673a0957b9c6f07cd14826ea4 to your computer and use it in GitHub Desktop.

Select an option

Save Isaddo/7efebcb673a0957b9c6f07cd14826ea4 to your computer and use it in GitHub Desktop.
import github labels via console command
/*
Go on your labels page (https://github.com/user/repo/labels)
Edit the following label array
or
Use this snippet to export github labels (https://gist.github.com/MoOx/93c2853fee760f42d97f)
and replace it
Paste this script in your console
Press Enter!!
*/
[
{
"name": "bugfix",
"color": "eb6420"
},
{
"name": "feature",
"color": "0e8a16"
},
{
"name": "hotfix",
"color": "e11d21"
}
].forEach(function(label) {
addLabel(label)
})
function updateLabel (label) {
var flag = false;
[].slice.call(document.querySelectorAll(".labels-list-item"))
.forEach(function(element) {
if (element.querySelector('.label-link').textContent.trim() === label.name) {
flag = true
element.querySelector('.js-edit-label').click()
element.querySelector('.label-edit-name').value = label.name
element.querySelector('.color-editor-input').value = '#' + label.color
element.querySelector('.new-label-actions .btn-primary').click()
}
})
return flag
}
function addNewLabel (label) {
document.querySelector('.new-label input#label-').value = label.name
document.querySelector('.new-label input#edit-label-color-new').value = '#' + label.color
document.querySelector('.new-label-actions .btn-primary').click()
}
function addLabel (label) {
if (!updateLabel(label)) addNewLabel(label)
}
@TreONeill
Copy link
Copy Markdown

Thanks for this! Very helpful

@priom
Copy link
Copy Markdown

priom commented Feb 16, 2019

Amazing! Thank you!

@cdlhub
Copy link
Copy Markdown

cdlhub commented Feb 18, 2019

Thanks a lot. I have added my own labels to add priority labels and change some default GitHub label color:
https://gist.github.com/cdlhub/02f59220d842b5a32d282f58bd502c11

@dallinca
Copy link
Copy Markdown

dallinca commented Sep 8, 2019

Hey all, very helpful. When I tried the updates to include the descriptions the code wasn't quite working (getting null for all descriptions). I only slightly modified the code for getting the labels from the source repo. The following code worked for me.

var labels = [];
[].slice.call(document.querySelectorAll(".label-link"))
.forEach(function(element) {
  labels.push({
    name: element.textContent.trim(),
    description: element.getAttribute("title"),
    // using style.backgroundColor might returns "rgb(...)"
    color: element.getAttribute("style")
      .replace("background-color:", "")
      .replace(/color:.*/,"")
      .trim()
      // github wants hex code only without # or ;
      .replace(/^#/, "")
      .replace(/;$/, "")
      .trim(),
  })
})
console.log(JSON.stringify(labels, null, 2))

@guylepage3
Copy link
Copy Markdown

This is great. It would be nice to have the script replace colors and descriptions of custom labels as well.

@hannakim91
Copy link
Copy Markdown

Thank you all! This is so handy - using @NillerMedDild's combo solution currently

@dademaru
Copy link
Copy Markdown

dademaru commented Jan 28, 2021

Thanks, very helpful.

This is the code with updated GitHub classes (js- prefix), tested and works:

function updateLabel(label) {
  var flag = false;
  [].slice
    .call(document.querySelectorAll(".js-labels-list-item"))
    .forEach(function (element) {
      if (
        element.querySelector(".js-label-link").textContent.trim() === label.name
      ) {
        flag = true;
        element.querySelector(".js-edit-label").click();
        element.querySelector(".js-new-label-name-input").value = label.name;
        element.querySelector(".js-new-label-description-input").value = label.description;
        element.querySelector(".js-new-label-color-input").value = "#" + label.color;
        element.querySelector(".js-edit-label-cancel ~ .btn-primary").click();
      }
    });
  return flag;
}

function addNewLabel(label) {
  document.querySelector(".js-new-label-name-input").value = label.name;
  document.querySelector(".js-new-label-description-input").value = label.description;
  document.querySelector(".js-new-label-color-input").value = "#" + label.color;
  document.querySelector(".js-details-target ~ .btn-primary").disabled = false;
  document.querySelector(".js-details-target ~ .btn-primary").click();
}

function addLabel(label) {
  if (!updateLabel(label)) addNewLabel(label);
}

// Your labels
[]
.forEach(function (label) {
  addLabel(label);
});

@AHilyard
Copy link
Copy Markdown

AHilyard commented Jan 6, 2022

I've cleaned up and updated this code and the exporter to work with Github's new classes and style variables, and added a new "remove existing" option to the label exporter script. You can find them at these gists:

Label exporter
Label importer

@KINGSABRI
Copy link
Copy Markdown

@AHilyard I tried the importer, it works like a charm!
Thanks!!

@TransMux
Copy link
Copy Markdown

@AHilyard Thanks !!

@guylepage3
Copy link
Copy Markdown

Ahh.. Looks like this is receiving a 422 Error.

image

@bitst0rm
Copy link
Copy Markdown

bitst0rm commented Sep 6, 2024

I have updated code in 3 files:

  • export-github-labels.js
  • import-github-labels.js
  • delete-github-labels.js

You find them here

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment