Git diff после отправки на AWS CodeCommit

Я новичок в AWS CodeCommit и хотел бы получать git diff на свой адрес электронной почты после каждого нажатия на удаленный репозиторий.

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


person user821738    schedule 18.10.2017    source источник


Ответы (3)


  1. Сделайте так, чтобы CodeCommit запускал лямбда-функцию.
  2. Пакет git с лямбда-функцией. Самый простой способ сделать это - использовать эту библиотеку, хотя для этого вам потребуется напишите свою функцию в NodeJS. Если вы хотите использовать другой язык, например Python, вы можете загрузить tar-файл git из этой библиотеки NodeJS и использовать его в своей функции Python.
  3. Пусть ваша функция Lambda извлечет идентификатор коммита git из сообщения, которое его вызвало.
  4. Пусть ваша функция Lambda выполнит git diff, чтобы получить разницу для этой фиксации.
  5. Попросите вашу функцию Lambda отправить различие по электронной почте через AWS SES.
person Mark B    schedule 18.10.2017
comment
Спасибо, попробую реализовать лямбда-функцию с помощью Node.js - person user821738; 19.10.2017

Если вы сконфигурируете свою функцию Lambda для использования CodeCommit в качестве триггера, вы получите идентификатор фиксации в вашей Lambda event.

Используя идентификатор фиксации, вы можете затем использовать aws-sdk getCommit() < / a> и / или даже getDifferences() , чтобы получить разницу для этой фиксации и отправить ее в AWS SES.

person Noel Llevares    schedule 18.10.2017
comment
Но если вы используете getDifferences (), вы не получите JSON-ответ с некоторой информацией, которая не такая же, как git diff ?? - person user821738; 19.10.2017
comment
@ user821738 Что ты имеешь в виду? Можете ли вы опубликовать, что вы сейчас получаете с getCommit() и getDifferences()? - person Noel Llevares; 19.10.2017

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

Шаги:

  1. Настройте триггер CodeCommit для своего репозитория для уведомления функции Lambda. Эта полезная нагрузка будет включать новый идентификатор фиксации конца ветки каждый раз, когда вы делаете push.

  2. В своей лямбда-функции используйте GetCommit API CodeCommit, чтобы получить список идентификаторов родительских коммитов, с которыми вы хотите сравнивать. Если фиксация не является слиянием, должен быть только 1 родитель.

  3. Для каждой родительской фиксации используйте GetDifferences API CodeCommit, чтобы получить список каждого файла, который был добавлен, изменен или удален.

  4. Для каждого измененного набора файлов используйте GetBlob CodeCommit. API для возврата содержимого файлов в виде строк в кодировке Base64. Передайте эти строки в библиотеку diff, чтобы отобразить разницу в формате HTML. Я подозреваю, что может сработать что-то вроде viranch / Diffy (хотя я сам не пробовал).

  5. Получив полезные данные HTML diff, отправьте их в SNS или SES для отправки по электронной почте.

person David Jackson    schedule 31.10.2017