# Procédure – Utilisation de l'API Gitea ## 1. Contexte - **Instance** : https://git.ptits-pas.fr - **API de base** : `https://git.ptits-pas.fr/api/v1` - **Projet P'titsPas** : dépôt `jmartin/petitspas` (owner = `jmartin`, repo = `petitspas`) ## 2. Authentification ### 2.1 Token Le token est défini dans l'environnement (ex. `~/.bashrc`) : ```bash export GITEA_TOKEN="" ``` Pour l'utiliser dans les commandes : ```bash source ~/.bashrc # ou : . ~/.bashrc # Puis utiliser $GITEA_TOKEN dans les curl ``` ### 2.2 En-tête HTTP Toutes les requêtes API doivent envoyer le token : ```bash -H "Authorization: token $GITEA_TOKEN" ``` Exemple : ```bash curl -s -H "Authorization: token $GITEA_TOKEN" \ "https://git.ptits-pas.fr/api/v1/repos/jmartin/petitspas" ``` ## 3. Endpoints utiles ### 3.1 Dépôt (repository) | Action | Méthode | URL | |---------------|---------|-----| | Infos dépôt | GET | `/repos/{owner}/{repo}` | | Liste dépôts | GET | `/repos/search?q=petitspas` | Exemple – infos du dépôt : ```bash curl -s -H "Authorization: token $GITEA_TOKEN" \ "https://git.ptits-pas.fr/api/v1/repos/jmartin/petitspas" | jq . ``` ### 3.2 Issues (tickets) | Action | Méthode | URL | |------------------|---------|-----| | Liste des issues | GET | `/repos/{owner}/{repo}/issues` | | Détail d'une issue | GET | `/repos/{owner}/{repo}/issues/{index}` | | Créer une issue | POST | `/repos/{owner}/{repo}/issues` | | Modifier une issue | PATCH | `/repos/{owner}/{repo}/issues/{index}` | | Fermer une issue | PATCH | (même URL, `state: "closed"`) | **Paramètres GET utiles pour la liste :** - `state` : `open` ou `closed` - `labels` : filtre par label (ex. `frontend`) - `page`, `limit` : pagination Exemples : ```bash # Toutes les issues ouvertes curl -s -H "Authorization: token $GITEA_TOKEN" \ "https://git.ptits-pas.fr/api/v1/repos/jmartin/petitspas/issues?state=open" | jq . # Issues ouvertes avec label "frontend" curl -s -H "Authorization: token $GITEA_TOKEN" \ "https://git.ptits-pas.fr/api/v1/repos/jmartin/petitspas/issues?state=open" | \ jq '.[] | select(.labels[].name == "frontend") | {number, title, state}' # Détail de l'issue #47 curl -s -H "Authorization: token $GITEA_TOKEN" \ "https://git.ptits-pas.fr/api/v1/repos/jmartin/petitspas/issues/47" | jq . # Fermer l'issue #31 curl -s -X PATCH -H "Authorization: token $GITEA_TOKEN" \ -H "Content-Type: application/json" \ -d '{"state":"closed"}' \ "https://git.ptits-pas.fr/api/v1/repos/jmartin/petitspas/issues/31" # Créer une issue curl -s -X POST -H "Authorization: token $GITEA_TOKEN" \ -H "Content-Type: application/json" \ -d '{"title":"Titre du ticket","body":"Description","labels":[1]}' \ "https://git.ptits-pas.fr/api/v1/repos/jmartin/petitspas/issues" ``` ### 3.3 Pull requests | Action | Méthode | URL | |---------------|---------|-----| | Liste des PR | GET | `/repos/{owner}/{repo}/pulls` | | Détail d'une PR | GET | `/repos/{owner}/{repo}/pulls/{index}` | | Créer une PR | POST | `/repos/{owner}/{repo}/pulls` | | Fusionner une PR | POST | `/repos/{owner}/{repo}/pulls/{index}/merge` | Exemples : ```bash # Liste des PR ouvertes curl -s -H "Authorization: token $GITEA_TOKEN" \ "https://git.ptits-pas.fr/api/v1/repos/jmartin/petitspas/pulls?state=open" | jq . # Créer une PR (head = branche source, base = branche cible) curl -s -X POST -H "Authorization: token $GITEA_TOKEN" \ -H "Content-Type: application/json" \ -d '{"head":"develop","base":"master","title":"Titre de la PR"}' \ "https://git.ptits-pas.fr/api/v1/repos/jmartin/petitspas/pulls" ``` ### 3.4 Branches | Action | Méthode | URL | |---------------|---------|-----| | Liste des branches | GET | `/repos/{owner}/{repo}/branches` | ```bash curl -s -H "Authorization: token $GITEA_TOKEN" \ "https://git.ptits-pas.fr/api/v1/repos/jmartin/petitspas/branches" | jq '.[].name' ``` ### 3.5 Webhooks | Action | Méthode | URL | |---------------|---------|-----| | Liste webhooks | GET | `/repos/{owner}/{repo}/hooks` | | Créer webhook | POST | `/repos/{owner}/{repo}/hooks` | ### 3.6 Labels | Action | Méthode | URL | |---------------|---------|-----| | Liste des labels | GET | `/repos/{owner}/{repo}/labels` | ```bash curl -s -H "Authorization: token $GITEA_TOKEN" \ "https://git.ptits-pas.fr/api/v1/repos/jmartin/petitspas/labels" | jq '.[] | {id, name}' ``` ## 4. Résumé des URLs pour P'titsPas Remplacer `{owner}` par `jmartin` et `{repo}` par `petitspas` : | Ressource | URL | |------------------|-----| | Dépôt | `https://git.ptits-pas.fr/api/v1/repos/jmartin/petitspas` | | Issues | `https://git.ptits-pas.fr/api/v1/repos/jmartin/petitspas/issues` | | Issue #n | `https://git.ptits-pas.fr/api/v1/repos/jmartin/petitspas/issues/{n}` | | Pull requests | `https://git.ptits-pas.fr/api/v1/repos/jmartin/petitspas/pulls` | | Branches | `https://git.ptits-pas.fr/api/v1/repos/jmartin/petitspas/branches` | | Labels | `https://git.ptits-pas.fr/api/v1/repos/jmartin/petitspas/labels` | ## 5. Documentation officielle - Swagger / OpenAPI : https://docs.gitea.com/api - Référence selon la version de Gitea installée (ex. 1.21, 1.25). ## 6. Dépannage - **401 Unauthorized** : vérifier le token et l'en-tête `Authorization: token `. - **404** : vérifier owner/repo et l'URL (sensible à la casse). - **422 / body invalide** : pour POST/PATCH, envoyer `Content-Type: application/json` et un JSON valide.