Удалить ветку в github используя мутации GraphQL - PullRequest
1 голос
/ 12 марта 2020

Я бы хотел удалить ветку github с помощью мутации GraphQL, но я не нашел достаточно информации относительно команды deleteRef. Используя GraphQL explorer Я придумал эту ерунду:

mutation {
  deleteRef(input: {refId: "my-branch"}) {
    __typename
  }
}

Я пока не знаю, как добавить информацию хранилища, чтобы мутация имела какое-либо значение, и единственная причина, по которой я включено __typename потому что блок deleteRef нельзя оставлять пустым. Как мне исправить эту мутацию?

1 Ответ

0 голосов
/ 22 марта 2020

Вы не можете ничего вернуть в этой мутации, поскольку она не относится к типу Void. Вам нужно определить мутацию следующим образом:

mutation DeleteBranch($branchRef: ID!) {
  deleteRef(input: {refId: $branchRef}) {
    __typename
    clientMutationId
  }
}

В explorer вы можете определить запросы и мутации и выбрать, какой из них будет выполняться при нажатии кнопки. Полный пример в проводнике:

query GetBranchID {
  repository(name: "test-repo", owner: "bertrandmartel") {
    refs(refPrefix: "refs/heads/", first: 100) {
      nodes {
        id
        name
      }
    }
  }
}

mutation DeleteBranch($branchRef: ID!) {
  deleteRef(input: {refId: $branchRef}) {
    __typename
    clientMutationId
  }
}

с переменными:

{
  "branchRef": "MDM6UmVmMjQ5MDU0NzQ0Om1hc3Rlcg=="
}

В проводнике можно выполнить следующие действия:

  • выполнить GetBranchID query
  • copy вставить ссылку в переменную branchRef
  • выполнить DeleteBranch

Без проводника, вот как это будет выглядеть при использовании :

import requests

repo_name = "YOUR_REPO"
repo_owner = "YOUR_USERNAME"
token = "YOUR_TOKEN"

query = """
query {
  repository(name: \"""" + repo_name + """\", owner: \"""" + repo_owner + """\") {
    refs(refPrefix: "refs/heads/", first: 100) {
      nodes {
        id
        name
      }
    }
  }
}
"""

resp = requests.post('https://api.github.com/graphql', 
    json={ "query": query},
    headers= {"Authorization": f"Token {token}"}
)
body = resp.json()

for i in body["data"]["repository"]["refs"]["nodes"]:
    print(i["name"], i["id"])

chosenBranchId = input("Enter a branch ID: ")

query = """
mutation {
  deleteRef(input: {refId: \"""" + chosenBranchId + """\"}) {
    __typename
    clientMutationId
  }
}
"""

resp = requests.post('https://api.github.com/graphql', 
    json={ "query": query},
    headers= {"Authorization": f"Token {token}"}
)
print(resp.json())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...