-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Propose erlang reusable workflow #1
Conversation
Не согласен, по моему мнению работа через Makefile позволяет нам репродуцировать работу CI на локальной машине, что очень помогает в отладке. К тому же CI через workflow проверяет работу на раннере, который к образу никакого отношения не имеет, а не в финальном образе, который и будет задеплоен. Грубо говоря: мы можем не положить в образ нужную зависимость и не заметить это на CI. |
Нет, тут я конечно согласен, удобно. Основной моей идеей тут было то, что раз у нас появляется organisation-wide workflow, не плохо бы заставить его автоматически енфорсить какие-то organisation-wide политики, к примеру - "организация требует запускать dialyze в тестовом профиле", "организация требует предоставлять статистику по coverage", и тому подобные. Тогда получится, что вместо того чтобы постоянно проверять эти вещи от репозитория к репозиторию (от PR к PR), можно будет просто проверять что мы используем этот reusable workflow и потому имеем какие-то гарантии. Long story short, мне не очень нравится, что в Makefile можно написать Я не спорю, что этот подход больше не будет обеспечивать полное соответсвие окружений Makefile и CI, что может быть не удобно. Основные параметры этих окружений, вроде версии OTP, все еще можно будет синхорнизировать через .env, но обеспечить соответсвие уровней ниже, конечно, будет сложнее (хотя получается, что если ты сидишь на M1, то его все равно не будет, даже через Makefile). Плюс пока не очень понятно как заносить, например, генерацию swag (через rebar pre_hook?). В общем, мне интересно ваше мнение по поводу целесообразности этой затеи в целом. Конкретную реализацию можно допилить в процессе, но если в этом обсуждении мы установим, что мои беспокойства напрасны, то конечно нету смысла 🥐
Но ведь и Makefile проверяет работу не в образе, который будет задеплоен (второй FROM в |
По просьбе @keynslug, примерно то, как подключать:
name: Erlang Service CI
on:
push:
branches:
- 'master'
- 'epic/**'
pull_request:
branches: [ '**' ]
jobs:
setup:
name: Load .env
runs-on: ubuntu-latest
outputs:
otp-version: ${{ steps.otp-version.outputs.version }}
rebar-version: ${{ steps.rebar-version.outputs.version }}
thrift-version: ${{ steps.thrift-version.outputs.version }}
steps:
- run: grep -v '^#' .env >> $GITHUB_ENV
- id: otp-version
run: echo "::set-output name=version::$OTP_VERSION"
- id: rebar-version
run: echo "::set-output name=version::$REBAR_VERSION"
- id: thrift-version
run: echo "::set-output name=version::$THRIFT_VERSION"
run:
needs: setup
uses: valitydev/erlang-workflows/.github/workflows/erlang-parallel-build.yml@acbc73d39b4dd630d9c797ddaeb8af92fb071014
with:
otp-version: ${{ needs.setup.outputs.otp-version }}
rebar-version: ${{ needs.setup.outputs.rebar-version }}
thrift-version: ${{ needs.setup.outputs.thrift-version }}
Все остальные Dockerfile/Makefile/docker-compose.yml взять отсюда (в будущем перенести в |
Я это если честно так же вижу. Отсюда собственно корни этих файлов В моём представлении нам надо как-то добиться удачного компромисса между (потенциальной) воспроизводимостью CI активностей и продуктивностью разработчика. И в этом смысле непонятно, что бы мы выиграли, если бы CI активности в контейнере гоняли: по моей оценке в воспроизводимости мы бы особо не выиграли (потому что идеальной не добиться из-за различий сред исполнения), а в продуктивности − потеряли (потому что в CI становится замешан make, сборка контейнеров, и он работает медленнее).
Поддерживаю @kehitt, это же всё равно не достигается тем, что ты |
COMPOSE_DOCKER_CLI_BUILD: true | ||
DOCKER_BUILDKIT: true | ||
run: | | ||
[[ "${{ inputs.service-name }}" == "" ]] && exit 1 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Может тогда на него и полагаться, а не на значение inputs.run-ct-with-compose
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Как-то не очень очевидно будет, лучше тогда service-name
сделаю required.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ну если правильно назвать, то должно быть очевидно) compose-service-name
и описание, что делает.
Го мержить и тэгать? 💣 |
Мне кажется, что в reusable workflow можно (и нужно) отказаться от внешней конфигурации make, которая, по сути, наполовину определяет работу пайплайна CI. Это позволит, как минимум, не заморачиваться возможными различиями/ошибочными изменениями от репозитория к репозиторию.
Само право на существование makefile со всеми wc-/wdeps- фичами это, конечно, не затрагивает, но кмк это больше уровень QoL разработчика.