Services, Webhooks, API, Hub

Services

Des services peuvent être ajoutés à un dépot Github dans Settings > Integrations & Services (sélectionner un service dans la liste déroulante). Voir la description des services

Par exemple :

BasecampConnecte Basecamp à Github
JIRARésout les tickets Jira dans les messages des commits
CircleCIExecute des tests automatiquement

Webhooks

Les webhooks executent des requêtes HTTP (POST) à chaque qu’un événement spécifique se produit, ce qui permet de notifier une application externe, par exemple pour mettre à jour un outil de suivi de projet externe à Github (et qui n’est pas dans la liste des services), déclancher des builds d’intégration continue, déployer les modifications sur un serveur, etc.

Pour ajouter un webhook à un dépot, aller dans Settings > Webhooks > Add webhook

Payload URLL'URL a appeler quand une notification est déclenchée
Content-typeType de notification à envoyer. Généralement json
SecretClé secrète pour vérifier que la requête vient bien de Github

API Github

Pour récupérer l’historique des commits ou la liste des utilisateurs qui ont commités sur le dépot par exemple, il faut utiliser l’API Github. Il s’agit d’une simple API JSON, par conséquent n’importe quel langage peut être utilisé pour récupérer les infos. Les exemples suivants utilisent curl.

Certaines commandes ne nécessitent aucune autorisation :

curl https://api.github.com                         # Liste toutes les requêtes de l'API
curl https://api.github.com/emojis                  # Liste les emojis de Github
curl https://api.github.com/users/peterbell         # Liste les infos publiques de l'utilisateur peterbell
curl https://api.github.com/users/peterbell/repos   # Liste les dépots publiques de peterbell

D’autres nécessitent un access token.
Les permissions de l’access token détermine ce qu’il est possible de requêter ou non.

Script pour récupèrer la liste complète des gists :

function gist {
  filepath="/tmp/gists"
  TOKEN="<access_token>"
  url="https://api.github.com/users/a-mt/gists?access_token=$TOKEN"

  i=1
  while true; do

    # File has been downloaded ?
    if [[ -e "${filepath}_${i}" ]]; then
      break
    fi
    printf "\e[36mPage ${i}\e[m\n"

    # Get response + headers
    curl -i "${url}&page=${i}" | sed "1,/^\s*$/{
        w /tmp/gist_headers
        d
      }" > "${filepath}_${i}"

    # If has next page, continue
    hasNext=$(cat /tmp/gist_headers | grep ^Link: | grep 'rel="next"')
    if [[ -z $hasNext ]]; then
      break
    fi
    (( i++ ))
  done

  cat /tmp/gists* | grep -e '^  \(}\|{\)' -e '^    "\(url\|created_at\|description\)"'
}

gist


Hub

Hub est un outil CLI qui permet d’accéder aux fonctionnalités de Git sans avoir à utiliser de navigateur, par exemple créer un repo, créer un fork, etc. Nécessite Ruby.

Installer

git clone https://github.com/github/hub.git
cd hub
rake install prefix=/usr/local

Exemple complet

hub peut executer toutes les commandes git - par exemple, hub status execute git status.
Il est donc possible de définir hub comme commande git : alias git=hub