Один из способов - получить tree
из результата commit
и список записей файла. Это сработает, но вернет все файлы для этой фиксации. Например:
{
repository(owner: "bertrandmartel", name: "media-optimizer") {
defaultBranchRef {
target {
... on Commit {
history(first: 100, path: "cloudformation.yml") {
nodes {
oid
tree {
entries {
name
object {
...on Blob {
byteSize
}
}
}
}
}
}
}
}
}
}
}
Затем вы можете отфильтровать правильный файл в результате, например:
TOKEN=[YOUR TOKEN]
REPO_OWNER=bertrandmartel
REPO_NAME=media-optimizer
FILE_PATH=cloudformation.yml
curl -s -H "Authorization: token $TOKEN" \
-H "Content-Type:application/json" \
-d '{
"query": "{repository(owner: \"'"$REPO_OWNER"'\", name: \"'"$REPO_NAME"'\") { defaultBranchRef {target {... on Commit {history(first: 100, path: \"'"$FILE_PATH"'\") {nodes {committedDate tree {entries {name object {...on Blob {byteSize}}}}}}}}}}}"
}' https://api.github.com/graphql | jq '.data.repository.defaultBranchRef.target.history.nodes[] |
{
date:.committedDate,
size: .tree.entries[] | select(.name=="'"$FILE_PATH"'") | .object.byteSize
}'
, который выведет:
{
"date": "2020-01-29T17:30:58Z",
"size": 8408
}
{
"date": "2020-01-29T16:43:00Z",
"size": 8030
}
{
"date": "2020-01-29T01:50:31Z",
"size": 7601
}
Другой способ без перечисления все поля предназначены для выполнения 2 запросов, в первом перечисляются все идентификаторы фиксации. Второй запрос создается динамически с использованием псевдонимов для выполнения нескольких object(expression: "OID:some/file/path")
, как вы предложили
Первый запрос: дата запроса и oid:
query getCommitOid {
repository(owner: "bertrandmartel", name: "media-optimizer") {
defaultBranchRef {
target {
... on Commit {
history(first: 100, path: "cloudformation.yml") {
nodes {
committedDate
oid
}
}
}
}
}
}
}
Второй запрос: сборка псевдонимы для каждого коммита (здесь для 3 коммитов):
query getByteSize {
repository(owner: "bertrandmartel", name: "media-optimizer") {
commit1: object(expression: "310fe12a847549ac33096d1f7301ea0a968c638c:cloudformation.yml") {
... on Blob {
byteSize
}
}
commit2: object(expression: "9eb80883322420fc1bf51b924c2c56ec8af8b109:cloudformation.yml") {
... on Blob {
byteSize
}
}
commit3: object(expression: "53172d2c7d439d7d97935c422c5b853a7cc5458d:cloudformation.yml") {
... on Blob {
byteSize
}
}
}
}