Je veux créer un dépôt Gitea via la CLI

4 min

language: ja bn de en es fr hi ko pt ru zh-cn zh-tw

Bonjour, je suis incompétent.
Je veux pousser sur Gitea en même temps que sur Github, mais c'est fastidieux, alors je veux pouvoir le faire depuis la CLI.
En fait, je ne veux pas tout mettre en miroir comme un miroir Github, je veux juste pouvoir pousser plus facilement.

Émission de la clé API

Émettez une clé API dans Gitea.
images

Requête API avec curl

Coller l'URL de curl à chaque fois est trop fastidieux, alors je vais en faire une fonction.
Ajoutez ce qui suit à .bashrc

ga() {
  curl -X POST "https://git.domain.tld/api/v1/user/repos" \
  -H "Content-Type: application/json" \
  -H "Authorization: token GITEA_API_TOKEN" \
  -d "{
    \"name\": \"$1\",
    \"private\": $2
  }"
}

Charger

source ~/.bashrc

Et quand je l'ai exécuté, j'ai eu une erreur.

$ ga test false
{"message":"token does not have at least one of required scope(s), required=[write:user], token scope=write:repository","url":"https://git.domain.tld/api/swagger"}

J'ai donné les droits de lecture et d'écriture pour le dépôt, mais il semble que les droits d'écriture pour l'utilisateur soient également nécessaires.

Ça a marché

Donc, comme il est nécessaire de passer une valeur booléenne pour indiquer si c'est un dépôt privé ou non comme deuxième argument, je vais créer le dépôt comme ceci.

ga testrepo false

Mais avec ça, la valeur renvoyée en JSON est trop longue.
Je n'ai besoin que de la valeur de l'URL distante, alors je vais l'extraire avec jq.

ga() {
  curl -X POST "https://git.domain.tld/api/v1/user/repos" \
  -H "Content-Type: application/json" \
  -H "Authorization: token GITEA_API_TOKEN" \
  -d "{
    \"name\": \"$1\",
    \"private\": $2
  }" |\
  jq .ssh_url
}

Finalement

$ ga testa false
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  2227    0  2180  100    47   2471     53 --:--:-- --:--:-- --:--:--  2524
"ssh://git@git.domain.tld:port/haturatu/testa.git"

On peut désactiver l'affichage de la progression pour des commandes comme wget avec une option, mais comment désactiver cet affichage de progression quand on le passe via un pipe ?

Related Posts