12 gradle - xzima/gradle-semantic-release-example GitHub Wiki
Для использования кастомных свойств рекомендуется использовать gradle-плагин vlsi.gradle-extensions. Он предоставляет dsl через делегаты и базовые проверки для типов свойств.
Для разрешения конфликтов в дереве зависимостей следует использовать конструкцию
configurations.all.resolutionStrategy.failOnVersionConflict()
.
Эта конструкция будет приводить к возникновению исключений если в дереве зависимостей найдутся любые конфликты, без
попытки автоматического их разрешения.
Для разрешения конфликтов следую использовать конструкцию
configurations.all.resolutionStrategy.force(<target-dependency-with-version>)
.
Пример использования можно найти в build.gradle.kts
.
Для валидации gradle wrapper используется gradle/actions/wrapper-validation, который добавляется в секцию с тестированием.
Для обновления графа зависимостей gradle используется gradle/actions/dependency-submission который добавляется в секцию с построением релиза, причем только для стабильных версий.
Основой в использовании linters выступает gradle-плагин spotless.
Для языка kotlin
используется linter ktlint в комбинации с .editorconfig
.
Пример настройки можно увидеть в build.gradle.kts
и .editorconfig
.
Для публикации отчета по покрытию кода тестами следует использовать madrapps/jacoco-report, который добавляется в секцию с тестированием.
Для настойки потребуется так же добавить gradle-плагин jacoco
с включенной настройкой в task
jacocoTestReport.reports.xml.required=true
для публикации отчета в формате xml.
Пример настойки madrapps/jacoco-report
можно найти в .github/workflows/__tests.yml
.
Для публикации отчета с результатами тестирования следует
использовать EnricoMi/publish-unit-test-result-action,
который добавляется в секцию с тестированием.
При использовании junit5 достаточно будет указать только директорию с отчетом тестирования в формате xml
build/test-results/test/TEST-*.xml
.
Основой для конфигурации публикации послужил репозиторий java-maven-sonatype-starter.
Предпочтительно создать аккаунт Sonatype Central используя для логина свой аккаунт GitHub. В таком случае не потребуется выполнять верификацию namespace. Во всех остальных случаях следует создать новый namespace и выполнить верификацию через доступ к домену.
- Создать GPG ключи посредством команды
gpg --full-generate-key
. Ключевые требования:- RSA and RSA
- 4096
- No expire
- собрать user id, который включает name, email address, comment
- указать passphrase
- Получить GPG_KEY_ID посредством команды
gpg --list-signatures <gpg-name>
- Опубликовать свой GPG_KEY_ID посредством команды
gpg --keyserver keyserver.ubuntu.com --send-keys <GPG_KEY_ID>
- Экспортировать GPG_PRIVATE_KEY посредством команды и passphrase
gpg --armor --export-secret-keys <GPG_KEY_ID> | grep -v '\-\-' | grep -v '^=.' | tr -d '\n'
Основой для выполнения публикации посредством gradle выступает gradle-плагин com.vanniktech.maven.publish в комбинации со следующими плагинами:
- org.jetbrains.dokka - API documentation engine for Kotlin.
- com.netflix.nebula.maven-manifest и com.netflix.nebula.maven-scm - автозаполнение POM-файла для публикуемого релиза.
Пример настройки можно увидеть в build.gradle.kts
.
- Создать GitHub Environments(
your_repo/settings/environments
) - Добавить следующие secrets:
-
NEXUS_USERNAME
иNEXUS_PASSWORD
- подробнее https://central.sonatype.org/publish/generate-portal-token/ -
GPG_KEY_ID
,GPG_PRIVATE_KEY
,GPG_PASSPHRASE
- получены в пункте 2
-
- Создать github workflow с триггером
on.release.types: [published]
, который будет выполнять команду./gradlew publishAndReleaseToMavenCentral --no-configuration-cache
и следующими переменными окружения:env: ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.NEXUS_USERNAME }} ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ secrets.NEXUS_PASSWORD }} ORG_GRADLE_PROJECT_signingInMemoryKey: ${{ secrets.GPG_PRIVATE_KEY }} ORG_GRADLE_PROJECT_signingInMemoryKeyId: ${{ secrets.GPG_KEY_ID }} ORG_GRADLE_PROJECT_signingInMemoryKeyPassword: ${{ secrets.GPG_PASSPHRASE }}