Skip to content

Commit

Permalink
bump minimum supported gradle version from 5.0 to 6.0 (via #100)
Browse files Browse the repository at this point in the history
  • Loading branch information
vlsi authored Sep 16, 2022
1 parent 1b4aa17 commit 8f1aafb
Show file tree
Hide file tree
Showing 31 changed files with 212 additions and 237 deletions.
7 changes: 6 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,9 @@ Gradle projects plugins for building [Allure](https://docs.qameta.io/allure/late

Data colecting and reporting are split to different Gradle plugins, so you could apply the ones you need.

Note: 2.9+ requires Gradle 5.0+
Note:
* allure-gradle 2.9+ requires Gradle 5.0+
* allure-gradle 2.11+ requires Gradle 6.0+

The minimal configuration is as follows.
It would configure test tasks to collect Allure results and add `allureReport` and `allureServe`
Expand Down Expand Up @@ -105,6 +107,9 @@ allure {
allureJavaVersion.set("2.19.0")
aspectjVersion.set("1.9.5")

// Customize environment variables for launching Allure
environment.put("JAVA_HOME", "/path/to/java_home")

autoconfigure.set(true)
autoconfigureListeners.set(true)
aspectjWeaver.set(true)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,7 @@ open class AllureAdapterBasePlugin : Plugin<Project> {
val allureExtension = the<AllureExtension>()
allureExtension.extensions.create<AllureAdapterExtension>(
AllureAdapterExtension.NAME,
project,
// Gradle 5 can't inject objects yet
// TODO: remove when Gradle 5 support can be dropped
objects
project
)

val rawResultElements = configurations.create(ALLURE_RAW_RESULT_ELEMENTS_CONFIGURATION_NAME) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
package io.qameta.allure.gradle.adapter

import groovy.json.JsonOutput
import io.qameta.allure.gradle.base.tasks.ConditionalArgumentProvider
import io.qameta.allure.gradle.base.tasks.JavaAgentArgumentProvider
import io.qameta.allure.gradle.adapter.config.*
import io.qameta.allure.gradle.base.AllureExtension
import io.qameta.allure.gradle.util.conv
import io.qameta.allure.gradle.util.forUseAtConfigurationTimeBackport
import io.qameta.allure.gradle.base.tasks.ConditionalArgumentProvider
import io.qameta.allure.gradle.base.tasks.JavaAgentArgumentProvider
import org.gradle.api.Action
import org.gradle.api.Project
import org.gradle.api.Task
Expand Down Expand Up @@ -41,34 +39,32 @@ open class AllureAdapterExtension @Inject constructor(
/**
* `allure-java` version (adapters for test engines)
*/
val allureJavaVersion: Property<String> = objects.property<String>().conv(project.the<AllureExtension>().version)
.forUseAtConfigurationTimeBackport()
val aspectjVersion: Property<String> = objects.property<String>().conv("1.9.9.1")
val allureJavaVersion: Property<String> =
objects.property<String>().convention(project.the<AllureExtension>().version)
val aspectjVersion: Property<String> = objects.property<String>().convention("1.9.9.1")


/**
* Automatically add the relevant test engine adapters
*/
val autoconfigure: Property<Boolean> = objects.property<Boolean>().conv(true)
.forUseAtConfigurationTimeBackport()
val autoconfigure: Property<Boolean> = objects.property<Boolean>().convention(true)

/**
* Configure default listeners by default (e.g. JUnit5, TestNG).
* This should be disabled if the project uses custom listeners
*/
val autoconfigureListeners: Property<Boolean> = objects.property<Boolean>().conv(autoconfigure)
val autoconfigureListeners: Property<Boolean> = objects.property<Boolean>().convention(autoconfigure)

/**
* Automatically add AspectJ waver
*/
val aspectjWeaver = objects.property<Boolean>().conv(autoconfigure)
.forUseAtConfigurationTimeBackport()
val aspectjWeaver = objects.property<Boolean>().convention(autoconfigure)

/**
* Path to `categories.json` file for Allure.
* The default path is `test/resources/**/categories.json`.
*/
val categoriesFile: Property<RegularFile> = objects.fileProperty().conv(defaultCategoriesFile(project))
val categoriesFile: Property<RegularFile> = objects.fileProperty().convention(defaultCategoriesFile(project))

val frameworks = AdapterHandler(project.container {
objects.newInstance<AdapterConfig>(it, objects, this).also { adapter ->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import adapter
import io.qameta.allure.gradle.base.AllureBasePlugin
import io.qameta.allure.gradle.base.AllureExtension
import io.qameta.allure.gradle.adapter.autoconfigure.BaseTrimMetaInfServices
import io.qameta.allure.gradle.adapter.autoconfigure.TrimMetaInfServices53
import io.qameta.allure.gradle.adapter.autoconfigure.TrimMetaInfServices54
import io.qameta.allure.gradle.adapter.config.AdapterHandler
import io.qameta.allure.gradle.adapter.config.AllureJavaAdapter
Expand Down Expand Up @@ -70,12 +69,7 @@ open class AllureAdapterPlugin : Plugin<Project> {
// Older Gradle do not have "substitute with classifier" feature
// so we use ArtifactTransformation to trim META-INF/services from the jar
dependencies {
val transformClass = if (GradleVersion.current() >= GradleVersion.version("5.4")) {
TrimMetaInfServices54::class
} else {
TrimMetaInfServices53::class
}
registerTransform(transformClass) {
registerTransform(TrimMetaInfServices54::class) {
from.attribute(artifactType, "jar")
to.attribute(artifactType, BaseTrimMetaInfServices.NO_SPI_JAR)
}
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,10 @@ import io.qameta.allure.gradle.adapter.AllureAdapterExtension
import io.qameta.allure.gradle.adapter.autoconfigure.AutoconfigureRule
import io.qameta.allure.gradle.adapter.autoconfigure.AutoconfigureRuleBuilder
import io.qameta.allure.gradle.adapter.autoconfigure.DefaultAutoconfigureRuleBuilder
import io.qameta.allure.gradle.util.conv
import io.qameta.allure.gradle.util.domainObjectSetBackport
import io.qameta.allure.gradle.util.forUseAtConfigurationTimeBackport
import org.gradle.api.Action
import org.gradle.api.model.ObjectFactory
import org.gradle.kotlin.dsl.property
import org.gradle.kotlin.dsl.domainObjectSet
import javax.inject.Inject

open class AdapterConfig @Inject constructor(
Expand All @@ -23,7 +21,7 @@ open class AdapterConfig @Inject constructor(
* The value defaults to [AllureExtension.allureJavaVersion]
*/
val adapterVersion = objects.property<String>()
.conv(allureAdapterExtension.allureJavaVersion)
.convention(allureAdapterExtension.allureJavaVersion)

@Deprecated(
level = DeprecationLevel.WARNING,
Expand All @@ -37,11 +35,10 @@ open class AdapterConfig @Inject constructor(
/**
* By default, the adapter is enabled. This property allows deactivating the adapter.
*/
val enabled = objects.property<Boolean>().conv(true)
val enabled = objects.property<Boolean>().convention(true)

val autoconfigureListeners = objects.property<Boolean>()
.forUseAtConfigurationTimeBackport()
.conv(
.convention(
enabled.map { it && allureAdapterExtension.autoconfigureListeners.get() }
)

Expand All @@ -57,16 +54,15 @@ open class AdapterConfig @Inject constructor(
* Autoconfigure listeners is available only for the subset of adapters only (e.g [AdapterHandlerScope.testng],
* [AdapterHandlerScope.junit5])
*/
val supportsAutoconfigureListeners = objects.property<Boolean>().conv(false)
.forUseAtConfigurationTimeBackport()
val supportsAutoconfigureListeners = objects.property<Boolean>().convention(false)

/**
* Returns `true` if `META-INF/services` should be removed from the dependency.
*/
internal val trimServicesFromJar =
supportsAutoconfigureListeners.map { it && !autoconfigureListeners.get() }

internal val activateOn = objects.domainObjectSetBackport<AutoconfigureRule>()
internal val activateOn = objects.domainObjectSet(AutoconfigureRule::class)

/**
* Adds a basic autoconfigure rule: add [adapterDependency] to `compile` and `runtime` classpath
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,10 +60,10 @@ internal enum class AllureJavaAdapter(
compileAndRuntime(dep) {
val gradleVersion = GradleVersion.current()
if (gradleVersion < GradleVersion.version("6.6") && trimServices.get()) {
if (gradleVersion < GradleVersion.version("5.3")) {
if (gradleVersion < GradleVersion.version("6.0")) {
throw IllegalStateException(
"Autoconfiguration for $name with autoconfigureListeners=false" +
" requires Gradle 5.3+. Please upgrade Gradle to 5.3+ or add ${dep.get()}:spi-off " +
" requires Gradle 6.0+. Please upgrade Gradle to 6.0+ or add ${dep.get()}:spi-off " +
"to the relevant configurations (e.g. testImplementation) manually and " +
"turn off autoconfiguration with $name { enabled.set(false) }"
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package io.qameta.allure.gradle.adapter.tasks

import adapter
import io.qameta.allure.gradle.base.AllureExtension
import io.qameta.allure.gradle.util.conv
import org.gradle.api.DefaultTask
import org.gradle.api.model.ObjectFactory
import org.gradle.api.tasks.*
Expand All @@ -17,7 +16,7 @@ open class CopyCategories @Inject constructor(objects: ObjectFactory) : DefaultT
@SkipWhenEmpty
@PathSensitive(PathSensitivity.NONE)
val categoriesFile = objects.fileProperty()
.conv(project.the<AllureExtension>().adapter.categoriesFile)
.convention(project.the<AllureExtension>().adapter.categoriesFile)

@Internal
val destinationDirs = objects.setProperty<File>()
Expand All @@ -29,7 +28,7 @@ open class CopyCategories @Inject constructor(objects: ObjectFactory) : DefaultT

@OutputFile
val markerFile = objects.directoryProperty()
.conv(project.layout.buildDirectory.dir("copy-categories/$name"))
.convention(project.layout.buildDirectory.dir("copy-categories/$name"))

@TaskAction
fun run() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ class AdaptersTest {
"[AdapterConfig{junit5}, AdapterConfig{spock}]"
),
arrayOf(
"5.0",
"6.0",
"src/it/adapter-junit5-spock-kts",
arrayOf("printAdapters"),
"[AdapterConfig{junit5}, AdapterConfig{spock}]"
Expand All @@ -56,14 +56,15 @@ class AdaptersTest {
"src/it/adapter-all",
arrayOf("printAdapters"),
"[AdapterConfig{cucumber2Jvm}, AdapterConfig{cucumber3Jvm}, AdapterConfig{cucumber4Jvm}, AdapterConfig{cucumber5Jvm}, AdapterConfig{cucumber6Jvm}, AdapterConfig{cucumberJvm}, AdapterConfig{junit4}, AdapterConfig{junit5}, AdapterConfig{spock}, AdapterConfig{testng}]"
), arrayOf(
),
arrayOf(
"7.0",
"src/it/adapter-all",
arrayOf("printAdapters"),
"[AdapterConfig{cucumber2Jvm}, AdapterConfig{cucumber3Jvm}, AdapterConfig{cucumber4Jvm}, AdapterConfig{cucumber5Jvm}, AdapterConfig{cucumber6Jvm}, AdapterConfig{cucumberJvm}, AdapterConfig{junit4}, AdapterConfig{junit5}, AdapterConfig{spock}, AdapterConfig{testng}]"
),
arrayOf(
"5.0",
"6.0",
"src/it/adapter-all",
arrayOf("printAdapters"),
"[AdapterConfig{cucumber2Jvm}, AdapterConfig{cucumber3Jvm}, AdapterConfig{cucumber4Jvm}, AdapterConfig{cucumber5Jvm}, AdapterConfig{cucumber6Jvm}, AdapterConfig{cucumberJvm}, AdapterConfig{junit4}, AdapterConfig{junit5}, AdapterConfig{spock}, AdapterConfig{testng}]"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ class AssembleTest {
arrayOf("assemble")
),
arrayOf(
"5.0",
"6.0",
"src/it/adapter-assemble",
arrayOf("assemble")
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ open class AllureBasePlugin : Plugin<Project> {
override fun apply(target: Project): Unit = target.run {
// TODO: migrate to precompiled script plugin once Gradle 6.0 could be the minimal supported Gradle version
// See https://docs.gradle.org/current/userguide/custom_plugins.html#sec:precompiled_plugins
extensions.create<AllureExtension>(AllureExtension.NAME, objects)
extensions.create<AllureExtension>(AllureExtension.NAME)

configurations.create("allureWorkaroundGradleBug") {
isCanBeConsumed = true
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
package io.qameta.allure.gradle.base

import io.qameta.allure.gradle.util.conv
import org.gradle.api.Action
import org.gradle.api.model.ObjectFactory
import org.gradle.api.plugins.ExtensionAware
import org.gradle.api.provider.MapProperty
import org.gradle.api.provider.Property
import org.gradle.kotlin.dsl.property
import org.gradle.kotlin.dsl.provideDelegate

/**
* Provides API for configuring common properties for Allure.
*/
open class AllureExtension(
abstract class AllureExtension(
objects: ObjectFactory
) {
companion object {
Expand All @@ -21,7 +21,12 @@ open class AllureExtension(
/**
* `allure-commandline` version
*/
val version: Property<String> = objects.property<String>().conv("2.19.0")
val version: Property<String> = objects.property<String>().convention("2.19.0")

/**
* Default environment variables for launching `allure-commandline`.
*/
abstract val environment: MapProperty<String, Any>

// TODO: remove when deprecated [aspectjweaver] is removed
private val aspectjWeaver by lazy {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,57 +1,19 @@
package io.qameta.allure.gradle.util

import org.gradle.api.DomainObjectSet
import org.gradle.api.attributes.AttributeContainer
import org.gradle.api.attributes.Category
import org.gradle.api.attributes.LibraryElements
import org.gradle.api.model.ObjectFactory
import org.gradle.api.provider.ListProperty
import org.gradle.api.provider.MapProperty
import org.gradle.api.provider.Property
import org.gradle.api.provider.Provider
import org.gradle.kotlin.dsl.named
import org.gradle.util.GradleVersion
import org.gradle.util.WrapUtil

val gradleGe51 = GradleVersion.current() >= GradleVersion.version("5.1")
val gradleGe53 = GradleVersion.current() >= GradleVersion.version("5.3")
val gradleGe55 = GradleVersion.current() >= GradleVersion.version("5.5")
val gradleGe56 = GradleVersion.current() >= GradleVersion.version("5.6")
val gradleGe65 = GradleVersion.current() >= GradleVersion.version("6.5")

fun <T> Property<T>.conv(v: T) = if (gradleGe51) convention(v) else apply { set(v) }
fun <T> Property<T>.conv(v: Provider<out T>) = if (gradleGe51) convention(v) else apply { set(v) }

fun <T> ListProperty<T>.conv(v: Iterable<T>) = if (gradleGe51) convention(v) else apply { set(v) }
fun <T> ListProperty<T>.conv(v: Provider<out Iterable<T>>) = if (gradleGe51) convention(v) else apply { set(v) }

fun <K, V> MapProperty<K, V>.conv(v: Map<K, V>) = if (gradleGe51) convention(v) else apply { set(v) }
fun <K, V> MapProperty<K, V>.conv(v: Provider<out Map<K, V>>) = if (gradleGe51) convention(v) else apply { set(v) }

fun <T> Property<T>.forUseAtConfigurationTimeBackport(): Property<T> = apply {
if (gradleGe65) {
// forUseAtConfigurationTime is Gradle 6.5+ feature
forUseAtConfigurationTime()
}
}

inline fun <reified T> ObjectFactory.domainObjectSetBackport(): DomainObjectSet<T> =
if (gradleGe55) domainObjectSet(T::class.java) else WrapUtil.toDomainObjectSet(T::class.java)

fun AttributeContainer.categoryLibrary(objects: ObjectFactory) {
if (gradleGe53) {
attribute(Category.CATEGORY_ATTRIBUTE, objects.named(Category.LIBRARY))
}
attribute(Category.CATEGORY_ATTRIBUTE, objects.named(Category.LIBRARY))
}

fun AttributeContainer.categoryDocumentation(objects: ObjectFactory) {
if (gradleGe53) {
attribute(Category.CATEGORY_ATTRIBUTE, objects.named(Category.DOCUMENTATION))
}
attribute(Category.CATEGORY_ATTRIBUTE, objects.named(Category.DOCUMENTATION))
}

fun AttributeContainer.libraryElementsJar(objects: ObjectFactory) {
if (gradleGe56) {
attribute(LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE, objects.named(LibraryElements.JAR))
}
attribute(LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE, objects.named(LibraryElements.JAR))
}
Loading

0 comments on commit 8f1aafb

Please sign in to comment.