Skip to content

Instantly share code, notes, and snippets.

@karmiphuc
Forked from omegahm/create_labels.sh
Created January 26, 2016 08:05
Show Gist options
  • Save karmiphuc/21d92bf487ddc2bb80b1 to your computer and use it in GitHub Desktop.
Save karmiphuc/21d92bf487ddc2bb80b1 to your computer and use it in GitHub Desktop.

Revisions

  1. @omegahm omegahm created this gist Apr 7, 2015.
    90 changes: 90 additions & 0 deletions create_labels.sh
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,90 @@
    #!/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