Quero criar um repositório no Gitea via CLI

4 min

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

Olá, sou um incompetente.
Quero fazer push para o Gitea enquanto faço push para o Github, mas é muito chato, então quero poder operá-lo a partir da CLI.
Isso porque não estou espelhando tudo como um espelho do Github, apenas quero poder fazer push com alguma facilidade.

Emissão da Chave API

Emita uma chave API no Gitea.
images

Requisição API com curl

Colar a URL do curl toda vez é muito chato, então vou transformá-la em uma função.
Adicione o seguinte ao .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
  }"
}

Carregar

source ~/.bashrc

E quando executei, recebi um erro.

$ 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"}

Eu dei permissões de leitura e escrita para o repositório, mas parece que também são necessárias permissões de escrita para o usuário.

Funcionou

Então, como é necessário passar um valor booleano para o segundo argumento indicando se é um repositório privado, vou criar o repositório assim:

ga testrepo false

Mas, com isso, o valor retornado em JSON é muito longo.
Preciso apenas do valor da URL remota, então vou extraí-lo com 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
}

Finalmente

$ 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"

A exibição de progresso de wget e outros pode ser desativada com uma opção, mas como desativar essa exibição de progresso quando passada por um pipe?

Related Posts