Как получить дату создания репозитория Azure DevOps с помощью API

#git #azure-devops

#git #azure-devops

Вопрос:

Как бы вы поступили, чтобы получить дату создания репозитория git-репозитория Azure devops? У нас есть множество репозиториев, которые были перемещены из TFS, но мы хотим знать дату добавления репозитория GIT. Доступна ли эта информация через API?

Моя первая попытка — вызвать api репозиториев, а затем передать эти идентификаторы в API коммитов. Для каждого элемента в ответе количество минус 1 должно быть индексом первого коммита, верно? Для некоторых из моих репозиториев это примерно на полпути к их истории фиксации. Если я использую нулевой индекс, мне просто будет представлен самый последний коммит?

Ответ №1:

Лично я не использовал API аудита широко, поэтому я не могу говорить о проблемах с объемом данных и практичностью поиска в нем, пока Microsoft не предложит фильтры для API.

При этом я смог получить информацию, используя API журнала аудита запросов. Существует некоторое предположение, что ваша версия Azure DevOps при создании репозитория регистрировала записи аудита в то время. Некоторые записи аудита были сделаны довольно недавно.

Пример в PowerShell:

 $AzureDevOpsAuthenicationHeader = @{Authorization = 'Basic '   [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$($AzureDevOpsPAT)")) }

$uri = "https://auditservice.dev.azure.com/{organization}/_apis/audit/auditlog?api-version=6.0-preview.1"

Invoke-RestMethod -Method Get -Uri $uri -Headers $AzureDevOpsAuthenicationHeader | 
    Select-Object -ExpandProperty decoratedAuditLogEntries | 
    Where-Object { $_.actionId -eq 'Git.RepositoryCreated' } |
    Select-Object actionId, details, timestamp
  

Предоставляет:

 actionId              details                                           timestamp                   
--------              -------                                           ---------                   
Git.RepositoryCreated Created Git repository "Temp" in project Basic    2020-09-11T23:19:19.4007876Z
Git.RepositoryCreated Created Git repository "Testing" in project Basic 2020-09-09T21:10:56.1738383Z
Git.RepositoryCreated Created Git repository "CMMI" in project CMMI     2020-08-24T14:33:43.6040892Z
Git.RepositoryCreated Created Git repository "Basic" in project Basic   2020-08-24T14:33:05.3245162Z
  

Ответ №2:

Похоже, проблема заключалась в том, что название ветки и критерии поиска рассматривались как подстановочный знак. Использование SearchCriteria.itemVersion.version=master в вызове Commits возвращало коммиты из любой ветви, содержащей master, что создавало впечатление, что они были не в порядке при попытке использовать более очевидные значения индекса.

Для тех, кто оказался здесь, просто пытаясь получить дату вашей первой фиксации в репозитории, это то, что сработало для меня:

  1. получить список всех идентификаторов репозитория (работает список репозиториев).
  2. для каждого идентификатора репозитория получите все коммиты в репозитории.
  3. Получите индекс последнего коммита (количество коммитов текущего репозитория — 1).
  4. первым коммитом будет ваш текущий коммит [индекс].

Комментарии:

1. Поскольку вопрос представлен, я не думаю, что это обязательно всегда будет точным в качестве даты добавления репозитория в проект. Я перенес репозитории между проектами, и дата фиксации при инициализации не обновляется. Я думаю, это точно только при условии, что репозиторий был изначально создан как часть проекта?