Created
April 7, 2015 19:00
-
-
Save omegahm/28d87a4e1411c030aa89 to your computer and use it in GitHub Desktop.
Create Gtihub labels from Bash
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env bash | |
# Colours picked from https://robinpowered.com/blog/best-practice-system-for-organizing-and-tagging-github-issues/ | |
### | |
# Label definitions | |
### | |
declare -A LABELS | |
# Platform | |
LABELS["ruby"]="BFD4F2" | |
LABELS["rails"]="BFD4F2" | |
# Problems | |
LABELS["bug"]="EE3F46" | |
LABELS["security"]="EE3F46" | |
LABELS["production"]="F45D43" | |
# Mindless | |
LABELS["chore"]="FEF2C0" | |
LABELS["legal"]="FFF2C1" | |
# Experience | |
LABELS["copy"]="FFC274" | |
LABELS["design"]="FFC274" | |
LABELS["ux"]="FFC274" | |
# Environment | |
LABELS["staging"]="FAD8C7" | |
LABELS["test"]="FAD8C7" | |
# Feedback | |
LABELS["discussion"]="CC317C" | |
LABELS["rfc"]="CC317C" | |
LABELS["question"]="CC317C" | |
# Improvements | |
LABELS["enhancement"]="5EBEFF" | |
LABELS["optimizaiton"]="5EBEFF" | |
# Additions | |
LABELS["feature"]="91CA55" | |
# Pending | |
LABELS["in progress"]="FBCA04" | |
LABELS["watchlist"]="FBCA04" | |
# Inactive | |
LABELS["invalid"]="D2DAE1" | |
LABELS["wontfix"]="D2DAE1" | |
LABELS["duplicate"]="D2DAE1" | |
LABELS["on hold"]="D2DAE1" | |
### | |
# Get a token from Github | |
### | |
if [ ! -f ".token" ]; then | |
read -p "Please enter your Github username: " user | |
read -p "Please enter your 6 digit two-factor-authentication code: " otp_code | |
curl -u "$user" -H "X-Github-OTP: $otp_code" -d '{"scopes":["repo", "public_repo"], "note":"Creating Labels"}' "https://api.github.com/authorizations" | jq -r '.token' > .token | |
fi | |
TOKEN=$(cat .token) | |
read -p "Who owns the repo you want labels on?: " owner | |
read -p "What repo do you want labels on?: " repo | |
for K in "${!LABELS[@]}"; do | |
CURL_OUTPUT=$(curl -s -H "Authorization: token $TOKEN" -X POST "https://api.github.com/repos/$owner/$repo/labels" -d "{\"name\":\"$K\", \"color\":\"${LABELS[$K]}\"}") | |
HAS_ERROR=$(echo "$CURL_OUTPUT" | jq -r '.errors') | |
if [ ! -z "$HAS_ERROR" ]; then | |
ERROR=$(echo "$CURL_OUTPUT" | jq -r '.errors[0].code') | |
if [ "$ERROR" == "already_exists" ]; then | |
# We update | |
echo "'$K' already exists. Updating..." | |
CURL_OUTPUT=$(curl -s -H "Authorization: token $TOKEN" -X PATCH "https://api.github.com/repos/$owner/$repo/labels/${K/ /%20}" -d "{\"name\":\"$K\", \"color\":\"${LABELS[$K]}\"}") | |
else | |
echo "Unknown error: $ERROR" | |
echo "Output from curl: " | |
echo "$CURL_OUTPUT" | |
echo "Exiting..." | |
exit; | |
fi | |
else | |
echo "Created '$K'." | |
fi | |
done |
I made some modifications because I was having trouble with the token creation and error notifications, here's my edited version:
Thanks for creating this script. Couple of issues:
- As well as installing bash 4, you may need to install jq - https://stedolan.github.io/jq/download/.
- The script was having trouble retrieving the personal access token from GitHub so I had to manually copy it into the .token file.
All working beautifully now. Thanks again!
I had an issue that caused the script to exit on each creation of a label. It ran without errors when updating. I was able to fix it by replacing line 71 with
HAS_ERROR=$(echo "$CURL_OUTPUT" | jq 'has("errors")')
and then using
if [ "$HAS_ERROR" = true ]; then
on line 73.
I forked it here: https://gist.github.com/MatthiasKunnen/b7c4f812ddc6a8bb217160ab4f048e0c.
Shame it doesn't work for Gitlab! Do you think that would be an easy thing to add?
Looks great, how would that work if you had users who didn't have 2FA enabled?
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
@ChrisTerBeke This script might be full of errors for all I know 😏 It was thrown together rather quickly. What's even better is that I get this:
but as @arianf says, I am running bash < 4.0.
@arianf Yes, if there's an error, and that error isn't
already_exists
, then it's a more "serious" error, which this script doesn't handle, thus it exits.