An example project that is automatically deployed
JVM Kotlin Gradle
nvm use # need for configure nodejs
sdk env # need for configure jvm
npm i # need for install git hooks
TODO
Для организации автоматического создания веток на основе правил из issue используется create-issue-branch.
При задании assignee для issue автоматически создаётся ветка и pull request на основе правил из issue-branch.yml.
При создании pull request в тело добавляет текст формата closes #XX
, что приводит при закрытии pull request к
автоматическому закрытию issue.
Если данное поведение избыточно, то до закрытия pull request следует удалить данный фрагмент из его тела.
Для синхронизации labels используется micnncim/action-label-syncer, а для проверки labels в pull requests - jesusvasquez333/verify-pr-label-action.
Для описания labels используется файл labels.yml.
Для проверки сообщений коммитов на соответствие методологии Conventional Commits на уровне публикации коммитов используется husky+commitlint, а на уровне CI wagoid/commitlint-github-action.
Конфигурация commitlint находится в commitlint.config.js.
Для автоматического обновления зависимостей используется renovate. Это приложение автоматически отслеживает все манифесты в приложении, которые содержат списки зависимостей и обновляет их версии.
Конфигурационный файл для renovate находится в renovate.json и содержит следующие директивы:
Для автоматического создания pull requests между главной веткой(master), ветка разработки(develop) и ветками выпуска(rc,release) используется gitflow-action.
В его обязанности входит:
Тестирование в контексте CI происходит следующим образом:
./gradlew build
, которые включает в себя тестыДля организации версионирования на основе semantic version используется semantic-release. Конфигурационный файл для semantic-release находится в release.config.js и содержит следующие плагины:
Для поддержки semantic version на уровне gradle используется плагин git-version.
Для сборки рабочей версии артефакта следует github action
указывает параметр -Pversion
.
Для сборок не предназначенных для публикации или не являющихся стабильными git-version рассчитывает версию на основе
ветки и hash-commit. В случае если имеется незафиксированные изменения, то добавляется суффикс +SNAPSHOT
.
Для публикации образов docker используются возможности Spring Boot Gradle Plugin.
Был кастомизирован build.gradle.kts в области задачи bootBuildImage
.
На основе параметров dockerHubUsername
и dockerHubPassword
определяется имя образа и необходимость его публикации в
docker hub. Параметр withLatest
используется для создания/публикации дополнительного тега docker image - latest.
Добавить файл LICENSE в корень репозитория.
Для указания лицензий в исходных файлах используется gradle-plugin spotless.
При первоначальном генерировании заголовков следует использовать команду
./gradlew spotlessApply -PspotlessSetLicenseHeaderYearsFromGitHistory=true
Для обновления заголовков следует использовать команду ./gradlew spotlessApply
.
Для проверки заголовков следует использовать команду ./gradlew spotlessCheck
.
Для удобства использования параметров в gradle.build используется плагин gradle-extensions-plugin.
Список стандартных заголовков jar-манифеста представлен в:
Для объявления контактной информации используется плагин com.netflix.nebula.contacts. Смысл использования в том что он интегрируется с другими плагинами com.netflix.nebula
.
Для наполнения заголовков jar-манифеста используется набор плагинов com.netflix.nebula.info:
Информация об авторе и лицензии проставляется через добавление следующей логики в Jar-таску:
tasks.configureEach<Jar> {
// ...
manifest {
attributes["Bundle-License"] = license
attributes["Implementation-Vendor"] = author.asString()
}
}
Для агрегации, проверки и указывания лицензий используемых зависимостей, в случае если происходит сборка fat-jar используются gradle-плагины:
Для того чтобы в jar-артефакт добавлялись файлы лицензий так-же необходимо в Jar-тасках прописать логику копирования:
tasks.configureEach<Jar> {
// ...
into("META-INF") {
dependencyLicenses(licenseFiles)
}
}
Для указания лицензии и прочих атрибутов в docker-образе будет использоваться OCI-specified labels.
Так как Spring Boot Gradle Plugin по умолчанию для сборки docker-image через Paketo Buildpacks использует сборщик paketobuildpacks/builder-jammy-base, который в свою очередь использует paketo-buildpacks/java, который в свою очередь использует paketo-buildpacks/image-labels, то для того чтобы указать необходимые labels достаточно в переменные окружения добавить значения описанные в документации к последнему сборщику.
gradle-semantic-release-example is provided "as is" without any warranty. Use at your own risk.
This project is licensed under the Apache Software License 2.0.
See LICENSE for more information.