yandex-cloud/yc-serverless-live-debug

Завести тесты в github ci

Closed this issue · 16 comments

После #13 и #14 надо сделать запуск тестов в github ci, которые будут:

  1. Разворачивать инфраструктуру под техническим аккаунтом в каталоге со случайным именем
  2. Прогонять e2e тест отправки сообщения в прокси-функцию и проверки ответа
  3. Удаление созданных ресурсов

@DavyJohnes, а сделаешь креденшиалс, чтобы ходить в облако под техническим аккаунтом?
Еще у меня идея - если каталоги долго удаляются, можно лучше будем их ежедневно чистить по крону, вместо того чтобы каждый раз в пул-реквестах ждать?

@DavyJohnes, а сделаешь креденшиалс, чтобы ходить в облако под техническим аккаунтом?
Еще у меня идея - если каталоги долго удаляются, можно лучше будем их ежедневно чистить по крону, вместо того чтобы каждый раз в пул-реквестах ждать?

Возможно и так, да. А ты не пробовал локально выполнять удаление? О каком порядке времени идет речь?

Креды в процессе изготовления.

А ты не пробовал локально выполнять удаление? О каком порядке времени идет речь?

Вот тут у меня удалялось 18 минут. Причем сами ресурсы очень шустренько удалились, а вот на каталоге все застывает.
Если через ui удалять тоже очень долго, т.е. выглядит что дело не в терраформе.

А ты не пробовал локально выполнять удаление? О каком порядке времени идет речь?

Вот тут у меня удалялось 18 минут. Причем сами ресурсы очень шустренько удалились, а вот на каталоге все застывает. Если через ui удалять тоже очень долго, т.е. выглядит что дело не в терраформе.

Я бы предложил предсоздать фолдер и только в нем гонять тесты. Тогда удалять нужно будет только сами ресурсы, без фолдера.
Правда в таком случае придется предусмотреть префиксы имен для всех ресурсов, иначе будут коллизии имен.

вот да, фолдер как раз же и есть тако префикс.
Ну давай попробуем пока без удаления сделать, а потом cleanup придумаем

вот да, фолдер как раз же и есть тако префикс.

Я не совсем это имел в виду. Я имею в виду что чтобы в рамках одного фолдера гонять одновременно несколько разных инстансов тестов нужна возможность указать какой-то префикс\суффикс к именам всех создаваемых ресурсов.

Ну давай попробуем пока без удаления сделать, а потом cleanup придумаем

Все же кажется стоит сразу какой-то клинап предусмотреть. Кажется надо добавить возможность удалять все, кроме фолдера.

P.S.: создание фолдера для тестов и получение кредов еще в процессе.

Я не совсем это имел в виду. Я имею в виду что чтобы в рамках одного фолдера гонять одновременно несколько разных инстансов тестов нужна возможность указать какой-то префикс\суффикс к именам всех создаваемых ресурсов.

Да я понял. Я про то, что фолдер как раз эту задачу решает, поэтому не хочется усложнять все чисто ради тестов. Пользователям такой префикс врятли понадобится.

@vitalets сделал облако и фолдер, в котором можно гонять тесты.
В github actions доступны секреты:

  • YC_FOLDER_ID - id фолдера, в котором нужно создавать ресурсы
  • YC_SERVICE_ACCOUNT_KEY_FILE - креды сервисного аккаунта с ролью editor в фолдере

Кажется сейчас скрипты деплоя не умеют создавать ресурсы в указанном фолдере, нужно их этому научить.

Отлично! Я попробую.
Да, сейчас фолдер через терраформ создается - научим использовать существующий.
Тогда в тестах удаление фолдера не делаем, правильно?

Отлично! Я попробую.
Да, сейчас фолдер через терраформ создается - научим использовать существующий.
Тогда в тестах удаление фолдера не делаем, правильно?

Да, все правильно.
Как ты себе это видишь? Нам ведь нужно оставить возможность создавать фолдер, если он не был указан явно в переменных окружения. Мы в tfcdk добавим создание фолдера, только если не был передан YC_FOLDER_ID? Стало быть в проверку параметров нужно добавить проверку наличи YC_CLOUD_ID или YC_FOLDER_ID, в первом случае мы создаем фолдер сами, во втором используем существующий?
Кажется, что если мы так сделаем, то в тестах можно и ресурсы за собой подчищать, ведь в стейте терраформа не будет фолдера, а значит он удалит только APIGW\функции\ydb.

Как ты себе это видишь? Нам ведь нужно оставить возможность создавать фолдер, если он не был указан явно в переменных окружения. Мы в tfcdk добавим создание фолдера, только если не был передан YC_FOLDER_ID? Стало быть в проверку параметров нужно добавить проверку наличи YC_CLOUD_ID или YC_FOLDER_ID, в первом случае мы создаем фолдер сами, во втором используем существующий?

Давай думать ) Сейчас переменная LIVE_DEBUG_FOLDER_NAME только задает название фолдера, который в любом случае будет создан через терраформ. Может заведем LIVE_DEBUG_FOLDER_ID? Т.е. если folder id передам, то подразумевается, что папка уже создана и ее создавать / удалять не нужно.
Будет примерно так:

  private createFolder() {
    return process.env.LIVE_DEBUG_FOLDER_ID 
     ? { id: process.env.LIVE_DEBUG_FOLDER_ID } 
     : new ResourcemanagerFolder(this, 'folder', {
         name: this.config.folderName,
       });
  }

Второй момент - как быть с ресурсами, чтобы они не конфликтовали при параллельном запуске тестов? Можно конечно всем неймам дописывать какой-то префикс, но это прям усложнение кода ради тестов.
Слушай, а может создадим например 5 фолдеров, и при запуске тестов будем выбирать тот, в котором нет ресурсов? Врятли у нас параллельлно будет столько тестов гоняться. Или например в предвариетльном степе будем ждать пока фолдер освободится? Вобщем нам нужен менеджер фолдеров)

Второй момент - как быть с ресурсами, чтобы они не конфликтовали при параллельном запуске тестов? Можно конечно всем неймам дописывать какой-то префикс, но это прям усложнение кода ради тестов. Слушай, а может создадим например 5 фолдеров, и при запуске тестов будем выбирать тот, в котором нет ресурсов? Врятли у нас параллельлно будет столько тестов гоняться. Или например в предвариетльном степе будем ждать пока фолдер освободится? Вобщем нам нужен менеджер фолдеров)

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

Давай думать ) Сейчас переменная LIVE_DEBUG_FOLDER_NAME только задает название фолдера, который в любом случае будет создан через терраформ. Может заведем LIVE_DEBUG_FOLDER_ID? Т.е. если folder id передам, то подразумевается, что папка уже создана и ее создавать / удалять не нужно. Будет примерно так:

Я бы все же предложил бы сделать, как в моей предыдущем комменте. Пусть будут две взаимоисключающие переменные YC_FOLDER_ID и YC_CLOUD_ID. На основе их значений будем понимать, нужно ли создать фолдер или заиспользовать переданный. В случае если заданы оба - выдавать ошибку.
Кажется это довольно прозрачно.

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

Нашел вот такую настройку - concurrency, как раз то что нужно.

Пусть будут две взаимоисключающие переменные YC_FOLDER_ID и YC_CLOUD_ID

cloud_id required для терраформ провайдера, поэтому нет никакой ошибки если задать их оба. Нужно просто смотреть на наличие YC_FOLDER_ID и если его нет, то создавать фолдер.

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

Нашел вот такую настройку - concurrency, как раз то что нужно.

Пусть будут две взаимоисключающие переменные YC_FOLDER_ID и YC_CLOUD_ID

cloud_id required для терраформ провайдера, поэтому нет никакой ошибки если задать их оба. Нужно просто смотреть на наличие YC_FOLDER_ID и если его нет, то создавать фолдер.

Да, выглядит как то, что нужно.

Ок. Тогда в action secrets YC_CLOUD_ID добавишь?

Ок. Тогда в action secrets YC_CLOUD_ID добавишь?

Готово!