GitHub API (v3): Теги заказа по дате создания

Я столкнулся с проблемой/вопросом при использовании API GitHub.

Мне нужен список всех тегов, созданных после одного тега. Единственный способ сделать это-сравнить теги по дате. Однако результаты API не упорядочены по дате:

результат API (пример репозитория rails):

API results

результаты webinterface:

Webinterface results

то, что я ожидал, это список, упорядоченный по дате. Однако, как вы можете видеть на снимках: API возвращает v4.0.0rc1 & v4.0.0rc2 перед выпуском v4.0.0, в то время как 4.0.0 освобождается после кандидатов на выпуск. На стороне сервера даже нет даты создания / фиксации для заказа.

API релизов также не является решением. Этот API возвращает только выпуски, созданные Github, а не выпуски, созданные тегами.

есть ли способ заказать теги по дате?

спасибо вперед!

Рубен

3 ответов


на API репозиториев в настоящее время возвращает теги в том порядке, в котором они будут возвращены командой "git tag", что означает, что они отсортированы по алфавиту.

проблема с сортировкой тегов хронологически в Git заключается в том, что существует два типа тегов: легкий и аннотированный), а для легкого типа Git не хранит дату создания.

пользовательский интерфейс Releases/Tags в настоящее время сортирует теги хронологически по дате фиксации, к которой тег очков. Это снова не дата, когда был создан сам тег, но он устанавливает хронологический порядок вещей.

добавление этой альтернативной опции сортировки в API находится в нашем списке запросов функций.


в качестве обходного пути для этого есть модуль узла, который в основном извлекает детали фиксации каждого тега: GitHub-api-tags-full

> npm install github-api-tags-full github moment

var GitHubApi  = require('github'),
moment     = require('moment'),
githubTags = require('github-api-tags-full');

var github = new GitHubApi({
  version: '3.0.0'
});

githubTags({ user: 'golang', repo: 'go' }, github)
.then(function(tags) {
  var tagsSorted = tags.sort(byAuthorDateAsc).reverse(); // descending
  console.log(tagsSorted); // prints the array of tags sorted by their creation date
});

var byAuthorDateAsc = function(tagA, tagB) {
  return githubCompareDates(
    tagA.commit.author.date,
    tagB.commit.author.date
  );
};
var githubCompareDates = function(dateStrA, dateStrB) {
  return moment(dateStrA).diff(dateStrB);
};

С наилучшими пожеланиями

Edit: теперь есть более простой способ с новым API GitHub GraphQL?


С GraphQL API v4, теперь мы можем фильтровать теги по дате фиксации с помощью field: TAG_COMMIT_DATE внутри orderBy. Ниже будет выполняться восходящий вид тегов по дате фиксации:

{
  repository(owner: "rails", name: "rails") {
    refs(refPrefix: "refs/tags/", last: 100, orderBy: {field: TAG_COMMIT_DATE, direction: ASC}) {
      edges {
        node {
          name
          target {
            oid
            ... on Tag {
              message
              commitUrl
              tagger {
                name
                email
                date
              }
            }
          }
        }
      }
    }
  }
}

проверьте его в проводнике

здесь