Я пытаюсь использовать GraphQL, чтобы получить все теги из репозитория, а затем (или, если возможно, в той же команде) получить некоторые подробности о выпуске каждого тега.
Я пытаюсь используйте этот подход git/refs/tags
-> releases/tags/[tag_name]
, поскольку перечисление всех выпусков по releases
не дает мне полный список выпусков.
В v3 это эквивалентно следующему:
"https://api.github.com/repos/" + repo + "/git/refs/tags"
"https://api.github.com/repos/" + repo + "/releases/tags/" + tag
В GraphQL Explorer я смог создать этот запрос (замените его своим именем пользователя и репо):
{
repository(owner: ":UserName", name: ":Repository") {
refs(refPrefix: "refs/tags/", last: 100) {
edges {
node {
name
}
}
}
}
}
Но он дает такой результат:
{
"data": {
"repository": {
"refs": {
"edges": [
{
"node": {
"name": "2.1"
}
},
{
"node": {
"name": "2.2"
}
},
{
"node": {
"name": "2.3"
}
},
[...]
Мне как-то нужно вписать это и в запрос (просто пример, мне тоже нужны другие поля), взяв name
и используя в качестве параметра:
repository(owner: ":UserName", name: ":Repository") {
release(tagName: name) {
name
}
}
Пытаясь так:
query ListTags {
repository(owner: ":Username", name: ":Repository") {
refs(refPrefix: "refs/tags/", last: 100) {
edges {
node {
name
repository {
release(tagName: Ref.name) {
name
}
}
}
}
}
}
}
Но я не могу использовать Ref.name
в качестве параметра release
.
При использовании запроса в моем проекте возвращаемый объект имеет все узлы JSON, а не просто поле name
.
var httpClient = new HttpClient
{
BaseAddress = new Uri("https://api.github.com/graphql")
};
httpClient.DefaultRequestHeaders.Add("User-Agent", "ReleaseSearcher");
var basicValue = Convert.ToBase64String(Encoding.UTF8.GetBytes($"username:key"));
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", basicValue);
var queryObject = new
{
query = @"query {
repository(owner: "":Username"", name: "":repo"") {
refs(refPrefix: ""refs/tags/"", last: 100) {
edges {
node {
name
}
}
}
}
}",
variables = new { }
};
var request = new HttpRequestMessage
{
Method = HttpMethod.Post,
Content = new StringContent(JsonConvert.SerializeObject(queryObject), Encoding.UTF8, "application/json")
};
dynamic responseObj;
using (var response = await httpClient.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var responseString = await response.Content.ReadAsStringAsync();
responseObj = JsonConvert.DeserializeObject<dynamic>(responseString);
}
Console.WriteLine(responseObj.data.viewer.login);
Console.ReadLine();
* 10 41 * Как я могу искать отдельные выпуски по имени тега?
Как правильно прочитать данные результатов?