Giter Site home page Giter Site logo

allure-gradle's Introduction

Allure plugin for Gradle build-badge release-badge

Gradle projects plugins for building Allure reports for TestNG, JUnit4, JUnit5, Cucumber JVM, and Spock tests.

Basic usage

allure-gradle plugin implements Allure data collecting (e.g. Test` tasks), and data reporting (both individual and aggregate reports).

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

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 tasks for report inspection.

Groovy DSL:

plugins {
    id'io.qameta.allure' version '<latest>'
}

repositories {
    // Repository is needed for downloading allure-commandline for building the report
    mavenCentral()
}

Kotlin DSL:

plugins {
    id("io.qameta.allure") version "<latest>"
}

repositories {
    // Repository is needed for downloading allure-commandline for building the report
    mavenCentral()
}

io.qameta.allure is a shortcut for io.qameta.allure-adapter + io.qameta.allure-report, so you could apply the plugins you need.

Configuring Allure version

Groovy DSL:

allure {
    value = "2.8.0"
}

Kotlin DSL:

allure {
    value.set("2.8.0")
}

Building Allure report

To build a report, and browse it use the following command:

./gradlew allureServe

Note: by default, allureServe does not execute tests, so if you want to execute the relevant tests and build report, use the following:

./gradlew allureReport --depends-on-tests

To build an aggregate report, and browse it, apply io.qameta.allure-aggregate-report plugin and use the following command:

./gradlew allureAggregateServe

If you need a report only, please use allureReport and allureAggregateReport.

By default, allureAggregate* aggregates data from the current project and its subprojects. However, you need to apply io.qameta.allure-adapter plugin to the relevant subprojects, so they provide Allure results.

Customizing data collecting

Data collecting is implemented via io.qameta.allure-adapter Gradle plugin.

The values in the sample below are the defaults. The sample uses Kotlin DSL. In Groovy DSL you could use allureJavaVersion = "2.19.0", however, that is the only difference.

allure {
    version.set("2.19.0")
    adapter {
        // Configure version for io.qameta.allure:allure-* adapters
        // It defaults to allure.version
        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)

        // By default, categories.json is detected in src/test/resources/../categories.json,
        // However, it would be better to put the file in a well-known location and configure it explicitly
        categoriesFile.set(layout.projectDirectory.file("config/allure/categories.json"))
        frameworks {
            junit5 {
                // Defaults to allureJavaVersion
                adapterVersion.set("...")
                enabled.set(true)
                // Enables allure-junit4 default test listeners via META-INF/services/...
                autoconfigureListeners.set(true)
            }
            junit4 {
                // same as junit5
            }
            testng {
                // same as junit5
            }
            spock
            cucumberJvm
            // Alternative syntax: cucumberJvm(2) {...}
            cucumber2Jvm
            cucumber3Jvm
            cucumber4Jvm
            cucumber5Jvm
            cucumber6Jvm
        }
    }
}

What if I have both JUnit5, JUnit4, and CucumberJVM on the classpath?

By default, allure-gradle would detect all of them and apply all the listeners yielding 3 reports. If you need only one or two, specify the required ones via frameworks {...} block.

Adding custom results for reporting

You could add a folder with custom results via allureRawResultElements Gradle configuration.

plugins {
    id("io.qameta.allure-adapter-base")
}

dependencies {
    allureRawResultElements(files(layout.buildDirectory.dir("custom-allure-results")))
    // or
    allureRawResultElements(files("$buildDir/custom-allure-results"))
}

// If the results are built with a task, you might want adding a dependency so aggregate report
// knows which tasks to run before building the report
allureRawResultElements.outgoing.artifact(file("...")) {
    builtBy(customTask)
}

Using custom JUnit5 listeners instead of the default ones

allure-java comes with a set of default listeners for JUnit4, JUnit5, and TestNG. However, you might want to disable them and use your own ones.

Here's how you disable default listeners:

allure.adapter.frameworks.junit5.autoconfigureListeners.set(false)

An alternative syntax is as follows:

allure {
    adapter {
        frameworks {
            // Note: every time you mention an adapter, it is added to the classpath,
            // so refrain from mentioning unused adapters here
            junit5 {
                // Disable allure-junit5 default test listeners
                autoconfigureListeners.set(false)
            }
            testng {
                // Disable allure-testng default test listeners
                autoconfigureListeners.set(false)
            }
        }
    }
}

Report generation

Aggregating results from multiple projects

Suppose you have a couple of modules /module1/build.gradle.kts, /module2/build.gradle.kts that collect raw results for Allure:

// Each submodule
plugin {
    `java-library`
    id("io.qameta.allure-adapter")
}

allure {
    adapter {
        frameworks {
            junit5
        }
    }
}

// Each Test task will write raw data for Allure automatically

Here's how you can aggregate that in their parent project (e.g. root project):

/build.gradle.kts

plugin {
    id("io.qameta.allure-aggregate-report")
}

// allure-aggregate-report requires allure-commandline, so we need a repository here
repositories {
    mavenCentral()
}

Browse report:

./gradlew allureAggregateServe

By default io.qameta.allure-aggregate-report would aggregate results from allprojects (==current project + its subprojects), however, you can configure the set of modules as follows:

// By default, aggregate-report aggregates allprojects (current + subprojects)
// So we want to exclude module3 since it has no data for Allure
configurations.allureAggregateReport.dependencies.remove(
        project.dependencies.create(project(":module3"))
)

// Removing the default allprojects:
configurations.allureAggregateReport.dependencies.clear()

// Adding a custom dependency
dependencies {
    allureAggregateReport(project(":module3"))
}

Customizing report folders

Report generation is implemented via io.qameta.allure-report Gradle plugin, so if you need reports, apply the plugin as follows:

plugins {
    id("io.qameta.allure-report")
}

By default, the report is produced into Gradle's default reporting folder under task.name subfolder:

$buildDir/reports/allure-report/allureReport $buildDir/reports/allure-report/allureAggregateReport

You could adjust the default location as follows:

plugins {
    id("io.qameta.allure-report") // the plugin is packaged with Gradle by default
}

// See https://docs.gradle.org/current/dsl/org.gradle.api.reporting.ReportingExtension.html
// Extension is provided via Gradle's `reporting-base` plugin
reporting {
    baseDir = "$buildDir/reports"
}

allure {
    report {
        // There might be several tasks producing the report, so the property
        // configures a base directory for all the reports
        // Each task creates its own subfolder there
        reportDir.set(project.reporting.baseDirectory.dir("allure-report"))
    }
}

Running tests before building the report

By default, allureReport task will NOT execute tests. This enables trying new categories.json faster, however, if you need to see the latest results, the following might help:

  • Execute tests separately: ./gradlew test
  • Use --depends-on-tests as follows (the option should come after the task name): ./gradlew allureReport --depends-on-tests
  • Configure allure.report.dependsOnTest.set(true)
allure {
    report {
        // By default, allureReport will NOT execute tests
        // If the tests are fast (e.g. UP-TO-DATE or FROM-CACHE),
        // then you might want configure dependsOnTests.set(true) so you always
        // get the latest report from allureReport
        dependsOnTests.set(false)
    }
}

Customizing allure-commandline download

Allure download is handled with io.qameta.allure-download plugin which adds allureDownload task. Typically, applying io.qameta.allure-report is enough, however, you could use io.qameta.allure-download if you do not need reporting and you need just a fresh allure-commandline binary.

By default allure-commandline is downloaded from Sonatype OSSRH (also known as Maven Central).

The plugin receives allure-commandline via io.qameta.allure:allure-commandline:$version@zip dependency.

If you have a customized version, you could configure it as follows:

allure {
    // This configures the common Allure version, so it is used for commandline as well
    version.set("2.8.0")

    commandline {
        // The following patterns are supported: `[group]`, `[module]`, `[version]`, `[extension]`
        // The patterns can appear severs times if you need
        // By default, downloadUrlPattern is NOT set.
        downloadUrlPattern.set("https://server/path/[group]/[module]-[version].[extension]")

        // groupId for allure-commandline
        group.set("io.qameta.allure")
        // module for allure-commandline
        module.set("allure-commandline")
        // extension for allure-commandline
        extension.set("zip")
    }
}

Note: if you configure downloadUrlPattern, then io.qameta.allure-download plugin configures an extra ivy repository with the provided URL, and it uses custom.io.qameta.allure:allure-commandline:... coordinates to identify custom distribution is needed.

If you use Gradle 6.2+, then the custom repository is configured with exclusive content filtering which means the repository would be used exclusively for custom.io.qameta.allure:allure-commandline.

If you use Gradle 5.1+, then the repository would be configured with regular filtering, so it would be slightly less secure and slightly less efficient.

Using local allure-commandline binary

allure-commandline is resolved via allureCommandline configuration, so you could configure local file as follows.

Remember: NEVER use relative paths in your build files since "current directory" does not exist in a multi-threaded project execution (see https://youtrack.jetbrains.com/issue/IDEA-265203#focus=Comments-27-4795223.0-0).

dependencies {
    // allureCommandline must resolve to a single zip file
    // You could use regular Gradle syntax to specify the dependency
    allureCommandline(files("/path/to/allure-commandline.zip"))
}

Technical details

io.qameta.allure-base plugin

Extensions:

  • io.qameta.allure.gradle.base.AllureExtension

    allure extension for project

io.qameta.allure-adapter-base plugin

Extensions:

  • io.qameta.allure.gradle.adapter.AllureAdapterExtension

    adapter extension for allure

Configurations:

  • allureRawResultElements

    A consumable configuration that exposes the collect raw data for building the report

Tasks:

  • copyCategories: io.qameta.allure.gradle.adapter.tasks.CopyCategories

    Copies categories.json to the raw results folders. See allure-framework/allure2#1236

io.qameta.allure-adapter plugin

Configures automatic collectint of raw data from test tasks, adds allure-java adapters to the classpath.

Configurations:

  • allureAspectjWeaverAgent

    A configuration to declare AspectJ agent jar for data collecting

io.qameta.allure-download plugin

Downloads and unpacks allure-commandline

Extensions:

  • io.qameta.allure.gradle.download.AllureCommandlineExtension

    commandline extension for allure

Configurations:

  • allureCommandline

    A configuration to resolve allure-commandline zip

Tasks:

  • allureDownload: io.qameta.allure.gradle.download.tasks.DownloadAllure

    Retrieves and unpacks allure-commandline

io.qameta.allure-report-base plugin

Applies reporting-base plugin and adds allure.report extension.

Extensions:

  • io.qameta.allure.gradle.report.AllureReportExtension

    report extension for allure

io.qameta.allure-report plugin

Builds Allure report for the current project.

Configurations:

  • allureReport

    Note: prefer exposing raw results via allureRawResultElements configuration rather than declaring them in allureReport configuration.

Tasks:

  • allureReport: io.qameta.allure.gradle.report.tasks.AllureReport

    Builds Allure report for the current project

  • allureServe: io.qameta.allure.gradle.report.tasks.AllureServe

    Launches a web server for browsing Allure report

io.qameta.allure-aggregate-report plugin

Builds Allure aggregate report.

Configurations:

  • allureAggregateReport

    A configuration for declaring projects to aggregate the results from. Each project exposes its raw results via allureRawResultElements configuration.

Tasks:

  • allureAggregateReport: io.qameta.allure.gradle.report.tasks.AllureReport

    Builds Allure aggregate report

  • allureAggregateServe: io.qameta.allure.gradle.report.tasks.AllureServe

    Launches a web server for browsing Allure aggregate report

allure-gradle's People

Contributors

abendt avatar andrcuns avatar baev avatar boolivar avatar cristiangm avatar ehborisov avatar eroshenkoam avatar joostvanwollingen avatar qameta-ci avatar vlsi avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

allure-gradle's Issues

Consequent builds are failing when allure-gradle is used with Gradle 5.0 and Kotlin DSL

I'm submitting a ...

  • [X ] bug report
  • feature request
  • support request => Please do not submit support request here, see note at the top of this template.

What is the current behavior?

Consequent builds are failing when allure-gradle is used with Gradle 5.0 and Kotlin DSL

If the current behavior is a bug, please provide the steps to reproduce and if possible a minimal demo of the problem

  1. Clone https://github.com/dkorobtsov/allure-kotlin
  2. Import repository as gradle project
  3. Open gradle console
  4. in 'verification' tab execute 'test' task
  5. in 'other' tab execute task 'allureServe'
  6. Check that report is generated as expected
  7. repeat step 4, run 'test' again (without cleaning project)
  8. Expected result:

What is the expected behavior?

test should run without cleaning project

What is the motivation / use case for changing the behavior?

Library is useless with Gradle 5.0 and Kotlin DSL.

Please tell us about your environment:

Check demo project dependencies.
NB. issue reproduces on MacOS. Haven't tried on other systems.

allure 2.8.0 fot gradle plugin

Hello,

We are using Allure as report engine in our automated test framework. The last available Allure version for gradle plugin and junit5 is 2.7.0. Is there going to be release for 2.8.0?

Need to specify systemProperty 'junit.jupiter.extensions.autodetection.enabled', 'true' for JUnit 5

I'm submitting a ...

  • [ร— ] bug report
  • [ร—] feature request
  • support request => Please do not submit support request here, see note at the top of this template.

What is the current behavior?

BDD style annotations like @Feature, @Step are disable on JUnit 5 with standard configuration.

What is the expected behavior?

BDD style annotations like @Feature, @Step are disable on JUnit 5.

What is the motivation / use case for changing the behavior?

We need to specify systemProperty 'junit.jupiter.extensions.autodetection.enabled', 'true' for JUnit 5 to use BDD style like the following.

test {
        useJUnitPlatform {
            includeEngines 'junit-jupiter'
        }
        systemProperty 'allure.results.directory', 'build/allure-results'
        systemProperty 'junit.jupiter.extensions.autodetection.enabled', 'true' // like this
}

We want this to be documented or to include this plugin as a fix.

Please tell us about your environment:

Allure version 2.5
Test framework JUnit [email protected]
Allure adaptor [email protected]
Generate report using [email protected]

Add capability to pass Host/Port config when running gradle task "allureServe"

I'm submitting a ...

  • bug report
  • [Yes ] feature request
  • support request => Please do not submit support request here, see note at the top of this template.

What is the current behavior?

When running "gradle allureServe" i cannot specify what host/port i want the reports to be served on.
running Allure command line "allure serve" give the ability to specify host/port if needed
$> allure serve -h 127.0.0.1 -p 3030

If the current behavior is a bug, please provide the steps to reproduce and if possible a minimal demo of the problem

What is the expected behavior?

i expect for gradle task "allureServe" to have same flexibility as "serve" command line
so i can setup host/port as part of the configuration

What is the motivation / use case for changing the behavior?

for data privacy we cannot use the tool if it upload results to hosts outside our domain

Please tell us about your environment:

Allure version 2.13.6
Test framework [email protected]
Allure adaptor [email protected]
Generate report using [email protected]

Other information

this is what i think can be a fast fix, based on my limited knowledge of the code

_//## **in class AllureExtension :**_ 
_//## add properties so we can set as part of allure configuration_
String host
Int port
 

_//##  **in  class AllureServe extends DefaultTask**_
_//## add extra parameters_
@Input
    String host
@Input
    int port

void configureDefaults() {
        AllureExtension allureExtension = project.extensions.findByType(AllureExtension)
        if (Objects.nonNull(extensions)) {
            resultsDirs.add(allureExtension.resultsDir)
            version = allureExtension.version
            _//## read the host/port values_ 
            port = allureExtension.port
            host = allureExtension.host
        }
    }
)

_//## add  " -p port -h host"  to  "SERVE_COMMAND"_ 
_//## make sure port/host stay optional so projects dont care to change them still work_
project.exec {
            commandLine("$allureExecutable")
            args(SERVE_COMMAND)
            resultsDirs.each {
                copyCategoriesInfo(it, project)
                copyExecutorInfo(it, project)
                args("$it.absolutePath")
            }
        }

Invalid output property causes Gradle build cache miss

I'm submitting a ...

  • bug report
  • feature request
  • support request => Please do not submit support request here, see note at the top of this template.

What is the current behavior?

The allure gradle plugin breaks gradle task caching in Android project unit test task. The allure-results folder is a task output that is not properly configured for task caching.

Build scan: https://scans.gradle.com/s/tmyymdsn62dmq

Screenshot 2023-04-25 at 2 05 49 PM

If the current behavior is a bug, please provide the steps to reproduce and if possible a minimal demo of the problem

Here is a sample project with reproduction steps: https://github.com/wbonnefond/allure-gradle-cache-failure

What is the expected behavior?

The allure gradle plugin should not make the unit test task incompatible with gradle build cache.

What is the motivation / use case for changing the behavior?

Build cache improves local and CI build times by reducing the amount of work that needs to be done on subsequent task invocations.

Please tell us about your environment:

Allure version 2.21.0
Test framework [email protected]
Allure gradle plugin 2.11.2

In Allure 2.9.3 the ability to specify allure-results folder (resultsDir) has disappeared.

I'm submitting a ...

  • bug report

What is the current behavior?

Right now, i don't have an ability to specify custom allure-results folder, using resultsDir variable.

What is the expected behavior?

Have an ability to specify custom allure-results folder, like it was in allure-gradle 2.8.1.

Please tell us about your environment:

Allure version 2.14.0
Test framework TestNG
Generate report using [email protected]

Invalid aspectjweaver path in case of spaces in path

I'm submitting a ...

  • bug report
  • feature request
  • support request => Please do not submit support request here, see note at the top of this template.

Please tell us about your environment:

Allure version any
Test framework any
Allure adaptor any
Generate report using any

Other information

in line https://github.com/allure-framework/allure-gradle/blob/master/src/main/groovy/io/qameta/allure/gradle/AllurePlugin.groovy#L131 path should be escaped:

"-javaagent:\"${aspectjConfiguration.singleFile}\""

Allure result json doesn't contain any indication of group annotation when running a test which is executed as gradle task

I'm submitting a

  • bug report

What is the current behavior?

I am trying to run a test written in Java under testng framework and trying to generate an allure report using allure gradle plugin added in my fw.
Now the test has an annotation added, but when running the tests the report that is generated doesn't contain any information about the annotation.
for instance:

@test (groups = {"myGeneratedGroup}, priority = 1)"

when looking at the results generated file (json) , I see no reference to the above annotation

here are the information added to "build.gradle" file

buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath "io.qameta.allure:allure-gradle:2.8.1"
}
}

plugins {
id 'org.springframework.boot' version '2.6.6'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java-library'
id 'maven-publish'
// id 'io.qameta.allure' version '2.8.0'
id 'io.qameta.allure-adapter' version '2.11.2'
}
allure {
version = '2.19.0'
autoconfigure = true
useTestNG {

}
adapter {
    frameworks {
        testng {
            autoconfigureListeners.set(true)
        }
    }
}

}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'io.micrometer:micrometer-registry-prometheus'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
implementation 'jakarta.xml.bind:jakarta.xml.bind-api'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
//implementation 'io.qameta.allure:allure-gradle'
//implementation 'io.qameta.allure:allure-adapter'

compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'

implementation dep.manager.get3rdCoord("jackson")
testImplementation dep.manager.get3rdCoord("assertj")
implementation dep.manager.get3rdCoord("springdoc-openapi-ui")
runtimeOnly dep.manager.get3rdCoord("jaxb-ri")

implementation dep.manager.getAmatCoord("QAutomationReporting", "DatabaseImpl")
implementation dep.manager.getAmatCoord("QTestAutomationUtils", "InternalUtils")
implementation dep.manager.getAmatCoord("QAutomationReporting", "TestCore")

}

configurations {
testCompile
}

dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
}
}

What is the expected behavior?

when opening the results json file under labels have new key value parameters
"lables" : [
{
"name": "groups",
"value": "myGeneratedGroup"
},
{
"name": "priority",
"value": "1"
}
]

What is the motivation / use case for changing the behavior?

Please tell us about your environment:

buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath "io.qameta.allure:allure-gradle:2.8.1"
}
}

plugins {
id 'org.springframework.boot' version '2.6.6'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java-library'
id 'maven-publish'
// id 'io.qameta.allure' version '2.8.0'
id 'io.qameta.allure-adapter' version '2.11.2'
}

Other information

AllureReport task produce NullPointerException

I'm submitting a ...

  • bug report
  • feature request
  • support request => Please do not submit support request here, see note at the top of this template.

What is the current behavior?

AllureReport task produce NullPointerException

If the current behavior is a bug, please provide the steps to reproduce and if possible a minimal demo of the problem

  1. Run tests
  2. Execute allureReport task

What is the expected behavior?

Allure generate report.

What is the motivation / use case for changing the behavior?

Please tell us about your environment:

Allure version 2.6.0
Test framework [email protected]
Allure adaptor [email protected]
Generate report using [email protected]

Other information

$ ./gradlew allureReport
Parallel execution with configuration on demand is an incubating feature.
:downloadAllure UP-TO-DATE
Exception in thread "main" java.lang.NullPointerException
	at io.qameta.allure.allure2.Allure2Plugin.convert(Allure2Plugin.java:152)
	at io.qameta.allure.allure2.Allure2Plugin.lambda$getTestStage$12(Allure2Plugin.java:221)
	at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
	at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1374)
	at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
	at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
	at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
	at io.qameta.allure.allure2.Allure2Plugin.convert(Allure2Plugin.java:107)
	at io.qameta.allure.allure2.Allure2Plugin.getTestStage(Allure2Plugin.java:221)
	at io.qameta.allure.allure2.Allure2Plugin.convert(Allure2Plugin.java:95)
	at io.qameta.allure.allure2.Allure2Plugin.lambda$readResults$0(Allure2Plugin.java:67)
	at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184)
	at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
	at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)
	at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
	at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1374)
	at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
	at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
	at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151)
	at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)
	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418)
	at io.qameta.allure.allure2.Allure2Plugin.readResults(Allure2Plugin.java:67)
	at io.qameta.allure.ReportGenerator.lambda$readResults$0(ReportGenerator.java:32)
	at java.util.ArrayList.forEach(ArrayList.java:1249)
	at io.qameta.allure.ReportGenerator.readResults(ReportGenerator.java:32)
	at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
	at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)
	at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1374)
	at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
	at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
	at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
	at io.qameta.allure.ReportGenerator.generate(ReportGenerator.java:54)
	at io.qameta.allure.ReportGenerator.generate(ReportGenerator.java:43)
	at io.qameta.allure.Commands.generate(Commands.java:89)
	at io.qameta.allure.CommandLine.run(CommandLine.java:129)
	at java.util.Optional.orElseGet(Optional.java:267)
	at io.qameta.allure.CommandLine.main(CommandLine.java:72)
:allureReport FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':allureReport'.

Aggregated report generation fails in case of module without tests

I'm submitting a ...

  • bug report
  • feature request
  • support request => Please do not submit support request here, see note at the top of this template.

What is the current behavior?

I am trying to generate aggregated report for multi-module project using the following task:

task allureAggregatedReport(type: AllureReport) {
    resultsDirs = subprojects.allure.resultsDir
}

but one of the modules currently has no tests and report generation fails:

> Task :allureAggregatedReport
Could not parse arguments: invalid Default parameter: directory /Users/charlie/projects/allure2/plugins/custom-logo-plugin/build/allure-results should exists
Generate the report
Usage: generate [options] The directories with allure results
  Options:
    -c, --clean
      Clean Allure report directory before generating a new one.
      Default: false
    --profile
      Allure commandline configuration profile.
    -o, --report-dir, --output
      The directory to generate Allure report into.
      Default: allure-report

What is the expected behavior?

Report generated successfully.

Please tell us about your environment:

Allure version 2.1.1
Generate report using [email protected]

Merge `version` and `allureJavaVersion` parameters

I'm submitting a ...

  • bug report
  • feature request
  • support request => Please do not submit support request here, see note at the top of this template.

What is the current behavior?

Both parameters should be specified:

allure {
    version = '2.7.0'
    autoconfigure = true
    aspectjweaver = true
    allureJavaVersion = '2.7.0'
}

If the current behavior is a bug, please provide the steps to reproduce and if possible a minimal demo of the problem

What is the expected behavior?

What is the motivation / use case for changing the behavior?

Please tell us about your environment:

Allure version 2.7.0
Test framework [email protected]
Allure adaptor [email protected]
Generate report using [email protected]

Other information

Last version of Allure plugin (gradle) does not work properly

I'm submitting a bug report cause by the latest version of the gradle plugin.

Hi,

we are having an issue with Gradle-Allure-Jacoco-Mockito combination when using the latest version of allure plugin.

Here you have a canonical piece of code to replicate this issue: allure-issue: Minimum.

We have tried downgrading the gradle allure plugin to 2.8.1 or jacoco to 0.8.8 and it works. But since our company has to meet some compliance requirements, we cannot use those versions

if you need further information, let us know please.

Thanks in advance

Aspectj dumps ajcore.txt files when applying allure-gradle plugin in project with spring-boot

I'm submitting a ...

  • bug report
  • feature request
  • support request => Please do not submit support request here, see note at the top of this template.

What is the current behavior?

When debug tests at local machine files generates at project root directory.
If configure allure, its didnt helped.

allure {
    adapter {
        autoconfigure.set(false) // and if true
        aspectjWeaver.set(true) // and if false
        aspectjVersion.set("1.9.7") // till to 1.9.8.RC3
        // in order to disable dependencySubstitution (spi-off classifier)
        autoconfigureListeners.set(true)
    }
}

Set javaagent to aspectjweaver didnt help too.
If remove allure-gradle plugin, dumps will not generates anymore.

If the current behavior is a bug, please provide the steps to reproduce and if possible a minimal demo of the problem

https://github.com/pshakhov/allure-spring-example

What is the expected behavior?

Aspectj should not dumping annoying files while tests running.

What is the motivation / use case for changing the behavior?

When debug tests at local machine files generates at project root directory. Its can be added to changes accidentially.

Please tell us about your environment:

Allure version 2.9.6
Test framework [email protected]
Spring Boot 2.5.4 and higher
Java 11 and higher

Other information

spring-projects/spring-framework#27650

jacoco/jacoco#909

eclipse-aspectj/aspectj#68

https://github.com/spring-projects/spring-boot/blob/b403877cc1de1c356e7a416ae1ae0620b87b99c5/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/jdbc/DataSourceBuilder.java#L641

[AppClassLoader@e73f9ac] abort trouble in: 
class org.springframework.boot.jdbc.DataSourceBuilder$OraclePoolDataSourceProperties extends org.springframework.boot.jdbc.DataSourceBuilder$MappedDataSourceProperties:
  public Class getDataSourceInstanceType():
                    LDC oracle.ucp.jdbc.PoolDataSourceImpl   (line 641)
                    ARETURN
  end public Class getDataSourceInstanceType()
  void <init>():
                    ALOAD_0     // Lorg/springframework/boot/jdbc/DataSourceBuilder$OraclePoolDataSourceProperties; this   (line 644)
                    INVOKESPECIAL org.springframework.boot.jdbc.DataSourceBuilder$MappedDataSourceProperties.<init> ()V
                    ALOAD_0     // Lorg/springframework/boot/jdbc/DataSourceBuilder$OraclePoolDataSourceProperties; this   (line 645)
                    GETSTATIC org.springframework.boot.jdbc.DataSourceBuilder$DataSourceProperty.URL Lorg/springframework/boot/jdbc/DataSourceBuilder$DataSourceProperty;
                    INVOKEDYNAMIC #0.get ()Lorg/springframework/boot/jdbc/DataSourceBuilder$Getter;
                    INVOKEDYNAMIC #1.set ()Lorg/springframework/boot/jdbc/DataSourceBuilder$Setter;
                    INVOKEVIRTUAL org.springframework.boot.jdbc.DataSourceBuilder$OraclePoolDataSourceProperties.add (Lorg/springframework/boot/jdbc/DataSourceBuilder$DataSourceProperty;Lorg/springframework/boot/jdbc/DataSourceBuilder$Getter;Lorg/springframework/boot/jdbc/DataSourceBuilder$Setter;)V
                    ALOAD_0     // Lorg/springframework/boot/jdbc/DataSourceBuilder$OraclePoolDataSourceProperties; this   (line 646)
                    GETSTATIC org.springframework.boot.jdbc.DataSourceBuilder$DataSourceProperty.DRIVER_CLASS_NAME Lorg/springframework/boot/jdbc/DataSourceBuilder$DataSourceProperty;
                    INVOKEDYNAMIC #2.get ()Lorg/springframework/boot/jdbc/DataSourceBuilder$Getter;
                    INVOKEDYNAMIC #3.set ()Lorg/springframework/boot/jdbc/DataSourceBuilder$Setter;
                    INVOKEVIRTUAL org.springframework.boot.jdbc.DataSourceBuilder$OraclePoolDataSourceProperties.add (Lorg/springframework/boot/jdbc/DataSourceBuilder$DataSourceProperty;Lorg/springframework/boot/jdbc/DataSourceBuilder$Getter;Lorg/springframework/boot/jdbc/DataSourceBuilder$Setter;)V
                    ALOAD_0     // Lorg/springframework/boot/jdbc/DataSourceBuilder$OraclePoolDataSourceProperties; this   (line 648)
                    GETSTATIC org.springframework.boot.jdbc.DataSourceBuilder$DataSourceProperty.USERNAME Lorg/springframework/boot/jdbc/DataSourceBuilder$DataSourceProperty;
                    INVOKEDYNAMIC #4.get ()Lorg/springframework/boot/jdbc/DataSourceBuilder$Getter;
                    INVOKEDYNAMIC #5.set ()Lorg/springframework/boot/jdbc/DataSourceBuilder$Setter;
                    INVOKEVIRTUAL org.springframework.boot.jdbc.DataSourceBuilder$OraclePoolDataSourceProperties.add (Lorg/springframework/boot/jdbc/DataSourceBuilder$DataSourceProperty;Lorg/springframework/boot/jdbc/DataSourceBuilder$Getter;Lorg/springframework/boot/jdbc/DataSourceBuilder$Setter;)V
                    ALOAD_0     // Lorg/springframework/boot/jdbc/DataSourceBuilder$OraclePoolDataSourceProperties; this   (line 649)
                    GETSTATIC org.springframework.boot.jdbc.DataSourceBuilder$DataSourceProperty.PASSWORD Lorg/springframework/boot/jdbc/DataSourceBuilder$DataSourceProperty;
                    INVOKEDYNAMIC #6.get ()Lorg/springframework/boot/jdbc/DataSourceBuilder$Getter;
                    INVOKEDYNAMIC #7.set ()Lorg/springframework/boot/jdbc/DataSourceBuilder$Setter;
                    INVOKEVIRTUAL org.springframework.boot.jdbc.DataSourceBuilder$OraclePoolDataSourceProperties.add (Lorg/springframework/boot/jdbc/DataSourceBuilder$DataSourceProperty;Lorg/springframework/boot/jdbc/DataSourceBuilder$Getter;Lorg/springframework/boot/jdbc/DataSourceBuilder$Setter;)V
                    RETURN   (line 650)
  end void <init>()
end class org.springframework.boot.jdbc.DataSourceBuilder$OraclePoolDataSourceProperties
 -- (IllegalStateException) org.aspectj.weaver.MissingResolvedTypeWithKnownSignature) (typeBindings={T=oracle.ucp.jdbc.PoolDataSource})
org.aspectj.weaver.MissingResolvedTypeWithKnownSignature) (typeBindings={T=oracle.ucp.jdbc.PoolDataSource})
java.lang.IllegalStateException: org.aspectj.weaver.MissingResolvedTypeWithKnownSignature) (typeBindings={T=oracle.ucp.jdbc.PoolDataSource})
	at org.aspectj.weaver.BoundedReferenceType.parameterize(BoundedReferenceType.java:112)
	at org.aspectj.weaver.ResolvedType.parameterize(ResolvedType.java:2549)
	at org.aspectj.weaver.ResolvedMemberImpl.parameterize(ResolvedMemberImpl.java:897)
	at org.aspectj.weaver.ResolvedMemberImpl.parameterizedWith(ResolvedMemberImpl.java:789)
	at org.aspectj.weaver.ResolvedMemberImpl.parameterizedWith(ResolvedMemberImpl.java:742)
	at org.aspectj.weaver.ReferenceType.getDeclaredMethods(ReferenceType.java:865)
	at org.aspectj.weaver.ResolvedType$MethodGetterIncludingItds.get(ResolvedType.java:271)
	at org.aspectj.weaver.ResolvedType$MethodGetterIncludingItds.get(ResolvedType.java:268)
	at org.aspectj.weaver.Iterators$4$1.hasNext(Iterators.java:213)
	at org.aspectj.weaver.Iterators$4.hasNext(Iterators.java:230)
	at org.aspectj.weaver.ResolvedType.lookupResolvedMember(ResolvedType.java:642)
	at org.aspectj.weaver.JoinPointSignatureIterator.findSignaturesFromSupertypes(JoinPointSignatureIterator.java:192)
	at org.aspectj.weaver.JoinPointSignatureIterator.hasNext(JoinPointSignatureIterator.java:68)
	at org.aspectj.weaver.patterns.SignaturePattern.matches(SignaturePattern.java:317)
	at org.aspectj.weaver.patterns.KindedPointcut.matchInternal(KindedPointcut.java:202)
	at org.aspectj.weaver.patterns.Pointcut.match(Pointcut.java:137)
	at org.aspectj.weaver.patterns.AndPointcut.matchInternal(AndPointcut.java:56)
	at org.aspectj.weaver.patterns.Pointcut.match(Pointcut.java:137)
	at org.aspectj.weaver.patterns.OrPointcut.matchInternal(OrPointcut.java:60)
	at org.aspectj.weaver.patterns.Pointcut.match(Pointcut.java:137)
	at org.aspectj.weaver.ShadowMunger.match(ShadowMunger.java:113)
	at org.aspectj.weaver.Advice.match(Advice.java:113)
	at org.aspectj.weaver.bcel.BcelAdvice.match(BcelAdvice.java:158)
	at org.aspectj.weaver.bcel.BcelClassWeaver.match(BcelClassWeaver.java:3330)
	at org.aspectj.weaver.bcel.BcelClassWeaver.match(BcelClassWeaver.java:2710)
	at org.aspectj.weaver.bcel.BcelClassWeaver.weave(BcelClassWeaver.java:483)
	at org.aspectj.weaver.bcel.BcelClassWeaver.weave(BcelClassWeaver.java:103)
	at org.aspectj.weaver.bcel.BcelWeaver.weave(BcelWeaver.java:1707)
	at org.aspectj.weaver.bcel.BcelWeaver.weaveWithoutDump(BcelWeaver.java:1651)
	at org.aspectj.weaver.bcel.BcelWeaver.weaveAndNotify(BcelWeaver.java:1418)
	at org.aspectj.weaver.bcel.BcelWeaver.weave(BcelWeaver.java:1192)
	at org.aspectj.weaver.tools.WeavingAdaptor.getWovenBytes(WeavingAdaptor.java:549)
	at org.aspectj.weaver.tools.WeavingAdaptor.weaveClass(WeavingAdaptor.java:385)
	at org.aspectj.weaver.loadtime.Aj.preProcess(Aj.java:115)
	at org.aspectj.weaver.loadtime.ClassPreProcessorAgentAdapter.transform(ClassPreProcessorAgentAdapter.java:51)
	at java.instrument/java.lang.instrument.ClassFileTransformer.transform(ClassFileTransformer.java:246)
	at java.instrument/sun.instrument.TransformerManager.transform(TransformerManager.java:188)
	at java.instrument/sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:563)
	at java.base/java.lang.ClassLoader.defineClass1(Native Method)
	at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1016)
	at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174)
	at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:801)
	at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:699)
	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:622)
	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:580)
	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
	at java.base/java.lang.Class.getDeclaringClass0(Native Method)
	at java.base/java.lang.Class.getDeclaringClass(Class.java:1472)
	at java.base/sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl.<init>(ParameterizedTypeImpl.java:51)
	at java.base/sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl.make(ParameterizedTypeImpl.java:93)
	at java.base/sun.reflect.generics.factory.CoreReflectionFactory.makeParameterizedType(CoreReflectionFactory.java:105)
	at java.base/sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Reifier.java:140)
	at java.base/sun.reflect.generics.tree.ClassTypeSignature.accept(ClassTypeSignature.java:49)
	at java.base/sun.reflect.generics.repository.ClassRepository.computeSuperclass(ClassRepository.java:104)
	at java.base/sun.reflect.generics.repository.ClassRepository.getSuperclass(ClassRepository.java:86)
	at java.base/java.lang.Class.getGenericSuperclass(Class.java:950)
	at org.springframework.core.ResolvableType.getSuperType(ResolvableType.java:471)
	at org.springframework.core.ResolvableType.as(ResolvableType.java:456)
	at org.springframework.core.ResolvableType.forClass(ResolvableType.java:1056)
	at org.springframework.boot.jdbc.DataSourceBuilder$MappedDataSourceProperties.<init>(DataSourceBuilder.java:329)
	at org.springframework.boot.jdbc.DataSourceBuilder$HikariDataSourceProperties.<init>(DataSourceBuilder.java:590)
	at org.springframework.boot.jdbc.DataSourceBuilder$MappedDataSourceProperties.lookup(DataSourceBuilder.java:419)
	at org.springframework.boot.jdbc.DataSourceBuilder$MappedDataSourceProperties.lookupPooled(DataSourceBuilder.java:386)
	at org.springframework.boot.jdbc.DataSourceBuilder$MappedDataSourceProperties.forType(DataSourceBuilder.java:376)
	at org.springframework.boot.jdbc.DataSourceBuilder.findType(DataSourceBuilder.java:248)
	at org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration$PooledDataSourceAvailableCondition.getMatchOutcome(DataSourceAutoConfiguration.java:111)
	at org.springframework.boot.autoconfigure.condition.AbstractNestedCondition$MemberOutcomes.getConditionOutcome(AbstractNestedCondition.java:194)
	at org.springframework.boot.autoconfigure.condition.AbstractNestedCondition$MemberOutcomes.<init>(AbstractNestedCondition.java:188)
	at org.springframework.boot.autoconfigure.condition.AbstractNestedCondition$MemberConditions.lambda$getMatchOutcomes$0(AbstractNestedCondition.java:168)
	at java.base/java.util.Map.forEach(Map.java:661)
	at java.base/java.util.Collections$UnmodifiableMap.forEach(Collections.java:1503)
	at org.springframework.boot.autoconfigure.condition.AbstractNestedCondition$MemberConditions.getMatchOutcomes(AbstractNestedCondition.java:168)
	at org.springframework.boot.autoconfigure.condition.AbstractNestedCondition$MemberMatchOutcomes.<init>(AbstractNestedCondition.java:78)
	at org.springframework.boot.autoconfigure.condition.AbstractNestedCondition.getMatchOutcome(AbstractNestedCondition.java:63)
	at org.springframework.boot.autoconfigure.condition.SpringBootCondition.matches(SpringBootCondition.java:47)
	at org.springframework.context.annotation.ConditionEvaluator.shouldSkip(ConditionEvaluator.java:108)
	at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:226)
	at org.springframework.context.annotation.ConfigurationClassParser.processMemberClasses(ConfigurationClassParser.java:372)
	at org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:272)
	at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:250)
	at org.springframework.context.annotation.ConfigurationClassParser.processImports(ConfigurationClassParser.java:600)
	at org.springframework.context.annotation.ConfigurationClassParser.access$800(ConfigurationClassParser.java:111)
	at org.springframework.context.annotation.ConfigurationClassParser$DeferredImportSelectorGroupingHandler.lambda$processGroupImports$1(ConfigurationClassParser.java:812)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1540)
	at org.springframework.context.annotation.ConfigurationClassParser$DeferredImportSelectorGroupingHandler.processGroupImports(ConfigurationClassParser.java:809)
	at org.springframework.context.annotation.ConfigurationClassParser$DeferredImportSelectorHandler.process(ConfigurationClassParser.java:780)
	at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:193)
	at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:331)
	at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:247)
	at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:311)
	at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:112)
	at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:746)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:564)
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145)
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754)
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:338)
	at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:123)
	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:99)
	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:124)
	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:118)
	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:83)
	at org.springframework.boot.test.autoconfigure.SpringBootDependencyInjectionTestExecutionListener.prepareTestInstance(SpringBootDependencyInjectionTestExecutionListener.java:43)
	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:244)
	at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138)
	at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$8(ClassBasedTestDescriptor.java:363)
	at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:368)
	at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$9(ClassBasedTestDescriptor.java:363)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:177)
	at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1654)
	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
	at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:312)
	at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735)
	at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734)
	at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:658)
	at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:362)
	at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:283)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:282)
	at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:272)
	at java.base/java.util.Optional.orElseGet(Optional.java:369)
	at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:271)
	at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:102)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:101)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:66)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1540)
	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1540)
	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35)
	at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)
	at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52)
	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114)
	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86)
	at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86)
	at org.junit.platform.launcher.core.SessionPerRequestLauncher.execute(SessionPerRequestLauncher.java:53)
	at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:99)
	at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:79)
	at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:75)
	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:61)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)
	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)
	at com.sun.proxy.$Proxy2.stop(Unknown Source)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:193)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:129)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:100)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:60)
	at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56)
	at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:133)
	at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71)
	at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69)
	at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74)

Sorry for my perfect english.

AllureReport task won't work with junit5

I'm submitting a ...

  • bug report
  • feature request
  • support request => Please do not submit support request here, see note at the top of this template.

What is the current behavior?

Gradle task allureReport fails with exception.

If the current behavior is a bug, please provide the steps to reproduce and if possible a minimal demo of the problem

Add plugin to classpath:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath("io.qameta.allure:allure-gradle:2.5")
    }
}

Apply plugin:
apply plugin: 'io.qameta.allure'

Configure plugin:

allure {
    autoconfigure = false
    version = '2.5.0'
    configuration = 'implementation'
    useJUnit5 {
        version = '2.0-BETA21'
    }
}

Configure test task:

junitPlatformTest {
    finalizedBy 'allureReport'
}

Run tests:
./gradlew junitPlatformTest

Allure create allure-results folder in project root [root]/allure-results not in [root]/build/allure-results path.
Create empty folder by path [root]/build/reports/allure-report
And fail with exception:

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':allureReport'.
> java.io.FileNotFoundException: /Users/<user>/<projects>/<project>/build/allure-results/executor.json (No such file or directory)

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

What is the expected behavior?

Report generated successfully.

Please tell us about your environment:

Allure version 2.5.0
Test framework [email protected]
Allure adaptor [email protected]
Generate report using [email protected]

Other information

Ignoring Aspectj version in allureAspectjWeaverAgent and allure extension without explicit implementation

I'm submitting a ...

  • bug report
  • feature request
  • support request => Please do not submit support request here, see note at the top of this template.

What is the current behavior?

Now we are use in some our projects Java 17. The Aspectj release notes says that version 1.9.8 support Java 17:
https://github.com/eclipse/org.aspectj/blob/master/docs/dist/doc/README-198.html

If I set in allureAspectjWeaverAgent version and aspectjVersion in allure extension to 1.9.8, aspectj dumps error log files.
But if I add implementation("org.aspectj:aspectjweaver:1.9.8"), errors is gone.

If the current behavior is a bug, please provide the steps to reproduce and if possible a minimal demo of the problem

What is the expected behavior?

What is the motivation / use case for changing the behavior?

No aspectj dumps.

Please tell us about your environment:

Allure version 2.9.6
Test framework [email protected]

Other information

val aspectjVersion: Property<String> = objects.property<String>().conv("1.9.5")

Seems that property version sets at configuration time and ignores version from aspectjVersion at allure extension:

add(project.dependencies.create("org.aspectj:aspectjweaver:${adapterExtension.aspectjVersion.get()}"))

I suppose this block must be applied in afterEvaluate (or another way, but not at the configuration time).
Also, probably update aspectjVersion by default to 1.9.8

Also this issue can be relating to: #87

Also, now was released version 1.9.9.1 of aspectj, it can be more improved than 1.9.8.

Example for report aggregation?

I read the readme, but I could not get report aggregation working. I get all kinds of strange errors.

Do you have an example project on Github which demonstrates the report aggregation for Gradle?

Download Allure distribution as gradle dependency cache

I'm submitting a ...

  • bug report
  • feature request
  • support request => Please do not submit support request here, see note at the top of this template.

What is the current behavior?

Currently, allure-gradle plugin downloads allure distribution to .allure in project root of each project.

What is the expected behavior?

allure-gradle plugin should create a gradle configuration which will contain allure binaries as dependency, so it will be handled by gradle dependency cache instead.
Then configuration can be used to build a classpath for executing allureReport task as JavaExec process.

This requires allure distribution to be a published artifact as runnable jar.

What is the motivation / use case for changing the behavior?

to avoid duplicate downloads (~17mb) in each project. Instead allure distribution should be in gradle dependency cache (local gradle repo)

Please tell us about your environment:

Allure version 2.8.1
allure-gradle 2.8.1
Gradle 5.5.1

Allure gradle plugin causes execution of additonal test sets as part of build task

I'm submitting a ...

  • bug report
  • feature request
  • support request => Please do not submit support request here, see note at the top of this template.

What is the current behavior?

After upgrading Allure gradle plugin from 2.8.1 to 2.9.4, the gradle build task now includes compilation and execution of test sets other than unit tests.

We use the gradle test sets plugin to manage our integration tests, which states

By default, the tests in a custom test set are not executed when you call gradle build.

https://github.com/unbroken-dome/gradle-testsets-plugin

Reverting back to allure-gradle 2.8.1, the build task only executes the unit tests, which is the expected behavior.

If the current behavior is a bug, please provide the steps to reproduce and if possible a minimal demo of the problem

What is the expected behavior?

Gradle build task should only execute unit tests.

Please tell us about your environment:

| allure-gradle version | 2.9.4 |
| Gradle version | 6.9 |
| Unbroken Dome Test-Sets version| 4.0.0 |
| Test framework | JUnit 5 |

Other information

We have included a testSets configuration in build.gradle like the following:
testSets { functionalTests {} }

Could not find io.qameta.allure.gradle.base:allure-base-plugin:2.9.1

I'm submitting a ...

  • bug report
  • feature request
  • support request => Please do not submit support request here, see note at the top of this template.

What is the current behavior?

I made an upgrade of the Allure plugin for Gradle: from 2.8.1 to 2.9.1. Now I get the following error resp. output:

$ gradle test
Starting a Gradle Daemon

FAILURE: Build failed with an exception.

* What went wrong:
A problem occurred configuring root project 'kunde'.
> Could not resolve all artifacts for configuration ':classpath'.
   > Could not find io.qameta.allure.gradle.base:allure-base-plugin:2.9.1.
     Searched in the following locations:
       - https://plugins.gradle.org/m2/io/qameta/allure/gradle/base/allure-base-plugin/2.9.1/allure-base-plugin-2.9.1.pom
       - https://repo.maven.apache.org/maven2/io/qameta/allure/gradle/base/allure-base-plugin/2.9.1/allure-base-plugin-2.9.1.pom
       - https://repo.spring.io/milestone/io/qameta/allure/gradle/base/allure-base-plugin/2.9.1/allure-base-plugin-2.9.1.pom
     Required by:
         project : > io.qameta.allure:io.qameta.allure.gradle.plugin:2.9.1 > io.qameta.allure.gradle.allure:allure-plugin:2.9.1 > io.qameta.allure.gradle.adapter:allure-adapter-plugin:2.9.1
         project : > io.qameta.allure:io.qameta.allure.gradle.plugin:2.9.1 > io.qameta.allure.gradle.allure:allure-plugin:2.9.1 > io.qameta.allure.gradle.report:allure-report-plugin:2.9.1

What is the expected behavior?

No errors like the one for allure-base-plugin

What is the motivation / use case for changing the behavior?

Upgrade should be possible

Please tell us about your environment:

| Allure version | 2.15.0 |
| Test framework | JUnit 5.8.1 |
| Allure adaptor | [email protected] |
| Generate report using | allure-gradle |

Upgrade AspectJWeaver version

I'm submitting a ...

  • bug report
  • feature request
  • support request => Please do not submit support request here, see note at the top of this template.

What is the current behavior?

If the current behavior is a bug, please provide the steps to reproduce and if possible a minimal demo of the problem

What is the expected behavior?

What is the motivation / use case for changing the behavior?

Please tell us about your environment:

Allure version 2.2.0
Test framework [email protected]
Allure adaptor [email protected]
Generate report using [email protected]

Other information

Allure does not work together with reckon plugin

I tried to use the AllureReport Plugin together with the Reckon Plugin from https://github.com/ajoberstar/reckon
When I combine these in a project, the allureReport generation goes into a loop and produces a StackOverflowError.

I'm submitting a ...

  • bug report

What is the current behavior?

Build breaks with java.lang.StackOverflowError

If the current behavior is a bug, please provide the steps to reproduce and if possible a minimal demo of the problem

The attached project shows the problem when you execute
"gradlew clean test allureReport"

My debugging hinted towards this code:
In AllureAdapterExtension.kt
fun generateExecutorInfo
executorInfo is filled with a mapping "projectVersion" to project.version
When using the Reckon Gradle Plugin this project.version is a special Object from this plugin. So maybe that causes the confusion.

What is the expected behavior?

Build works and generates a report

Please tell us about your environment:

It's all in the attached project
allure.zip

Cannot find allure commanline

I'm submitting a ...

  • bug report
  • feature request
  • support request => Please do not submit support request here, see note at the top of this template.

If the current behavior is a bug, please provide the steps to reproduce and if possible a minimal demo of the problem

  1. followed readme to add basic config
    2 $ ./gradlew app:allureServe
  2. Saw build error

`> Task :app:allureServe
Cannot find allure commanline in /Users/user/project/.allure/allure-2.4.1

Consider adding API for generating environment.properties

What is the current behavior?

Users have to generate environment.properties manually

What is the expected behavior?

There should be a way to configure custom property values to be passed to environment.properties
An alternative option is to configure which file to use for environment.properties (just like the one for categories.json)

What is the motivation / use case for changing the behavior?

https://t.me/allure_ru/12410

Able use custom java sdk

I'm submitting a ...

  • feature request

What is the current behavior?

Executing allureServe task throws ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.

What is the expected behavior?

I want to be able to set custom java sdk as gradle task option like this:

allure {
    javaHomePath = '/my/custom/sdk/path'
}

Add support for Spock2

I'm submitting a ...

  • bug report
  • feature request
  • support request => Please do not submit support request here, see note at the top of this template.

What is the current behaviour?

Allure Spock2 integration was released a long time ago, although this plugin doesn't support it yet.

Plugin not working with Gradle 7.0

I'm submitting a ...

  • bug report
  • feature request

What is the current behavior?

../gradlew clean allureReport

> Task :tailrocks-payment-api-test:allureReport FAILED

FAILURE: Build failed with an exception.

* What went wrong:
A problem was found with the configuration of task ':tailrocks-payment-api-test:allureReport' (type 'AllureReport').
  - Type 'AllureReport' property 'clean' has redundant getters: 'getClean()' and 'isClean()'.

    Reason: Boolean property 'clean' has both an `is` and a `get` getter.

    Possible solutions:
      1. Remove one of the getters.
      2. Annotate one of the getters with @Internal.

    Please refer to https://docs.gradle.org/7.0/userguide/validation_problems.html#redundant_getters for more details about this problem.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/7.0/userguide/command_line_interface.html#sec:command_line_warnings

BUILD FAILED in 618ms
3 actionable tasks: 1 executed, 2 up-to-date

Please tell us about your environment:

Allure version 2.13.9
Test framework junit5
Generate report using [email protected]

Cannot execute TestNG parallel tests when using allure

I'm submitting a ...

  • [ x] bug report
  • feature request
  • support request => Please do not submit support request here, see note at the top of this template.

What is the current behavior?

When trying to run parallel tests with testNG from a gradle project that also has allure-gradle the tests will run sequentially not in parallel.

If the current behavior is a bug, please provide the steps to reproduce and if possible a minimal demo of the problem

Gradle build is

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath "io.qameta.allure:allure-gradle:2.5"
    }
}

plugins {
    id 'java'
    id 'idea'
}

group 'sw'
version '1.0-SNAPSHOT'

sourceCompatibility = 1.8

test.dependsOn 'cleanTest'

repositories {
    mavenCentral()
    jcenter()
}

apply plugin: 'io.qameta.allure'

allure {
    version = '2.4.1'
    autoconfigure = true
    aspectjweaver = true
}

dependencies {
    compile group: 'org.testng', name: 'testng', version: '6.8.+'
    compile group: 'org.seleniumhq.selenium', name: 'selenium-java', version: '3.12.+'
    compile group:'com.browserstack', name: 'browserstack-local-java', version: '0.1.0'
    compile group: 'com.googlecode.json-simple', name: 'json-simple', version: '1.1.1'
    compile "org.slf4j:slf4j-api:1.6.1"
    compile "org.slf4j:slf4j-simple:1.6.1"
    testCompile 'org.uncommons:reportng:1.1.4'
    testCompile 'com.google.inject:guice:4.2.+'
    testCompile 'mysql:mysql-connector-java:5.1.+'
}

ext{

    if (!project.hasProperty('testSuite')) {
        testSuite = 'default.xml'
    }
}

test{

    useTestNG(){
        suites "src/test/resources/suites/"+testSuite
    }
}
test.finalizedBy("allureReport")

testNG xml file is

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

<suite name="test_initial" verbose="1" parallel="tests">
    <test name="poc">
        <parameter name="browser" value="CHROME"/>
        <parameter name="environment" value="default"/>
        <parameter name="server" value="TEST"/>
        <classes>
            <class name="test.fiddleShit"/>
        </classes>
    </test>
    <test name="poc2">
        <parameter name="browser" value="FIREFOX"/>
        <parameter name="environment" value="default"/>
        <parameter name="server" value="TEST"/>
        <classes>
            <class name="test.fiddleShit"/>
        </classes>
    </test>
    <test name="poc3">
        <parameter name="browser" value="IE"/>
        <parameter name="environment" value="default"/>
        <parameter name="server" value="TEST"/>
        <classes>
            <class name="test.fiddleShit"/>
        </classes>
    </test>
</suite>

What is the expected behavior?

poc, poc2 and poc3 should be run on parallel threads.

What is the motivation / use case for changing the behavior?

allure-gradle forces gradle to run version 4.4 which has this issue
gradle/gradle#4457

Please tell us about your environment:

Allure version 2.2.0
Test framework [email protected]
Allure adaptor [email protected]
Generate report using [email protected]

Other information

Allure reports not generating after upgrading allure version from 2.8.1 to 2.9.4

I'm submitting a ...

  • bug report
  • feature request
  • support request => Please do not submit support request here, see note at the top of this template.

What is the current behavior?

I am working on generating allure reports with Marathon library for my Espresso automation test to embedd screenshots in the report. The test reports were generating fine with screenshots for below configuration
Allure-gradle @2.8.1
Marathon-gradle plugin @0.6.2
Gradle 6.0

Since we migrated to Gradle 7.0 and we had open issues of multiple getters with allure-gradle version 2.8.1, so I upgraded allure-gradle version from 2.8.1 to 2.9.4 but I was not able to make this reports generate with current configuration. When tried with running it with warning mode - ./gradlew allureReport --warning-mode=all
I am getting below error:
image

Resolution of the configuration :allureRawResultDirs was attempted from a context different than the project context. Have a look at the documentation to understand why this is a problem and how it can be resolved. This behaviour has been deprecated and is scheduled to be removed in Gradle 8.0. See

allure-results are generating under marathon reports but allure reports are not getting generated

What is the expected behavior?

Allure reports should generate under app/build/reports/allure-report

Please tell us about your environment:

Allure version 2.2.0
Test framework junit4
Allure 2.13.9
Generate report using [email protected]

allure {
report {
version.set("2.13.9")
reportDir.file(project.rootDir.absolutePath+"/app/build/reports/allure-report")
}
}

Other information

allure-gradle can't work correctly with TestNG Factory

I'm submitting a ...

  • [1 ] bug report

What is the current behavior?

when i use allure-gradle plugin in my test project which use data driven @factory annotation, output will generate 9 test case based on 3 base test cases

in my test project, i use both allure-gradle and allure-testng-adapter to generate report as comparison

allure-testng-adapter can recognize all 9 test case
allure-gradle will only see 3 test case

If the current behavior is a bug, please provide the steps to reproduce and if possible a

allure-test.zip

open the project

  1. ./gradlew test
  2. ./gradlew allureReoport

see the generated allure report

What is the expected behavior?

allure-gradle should recognize data driven test case as different one

What is the motivation / use case for changing the behavior?

Please tell us about your environment:

| Allure version | 2.6.0 |

Other information

Gradle 3.5 compatibility problem

I'm submitting a ...

  • bug report
  • feature request
  • support request => Please do not submit support request here, see note at the top of this template.

What is the current behavior?

Caused by: java.lang.NoSuchMethodError: org.gradle.api.tasks.testing.Test.setJvmArgs(Ljava/util/List;)V
        at io.qameta.allure.gradle.AllurePlugin$_applyAspectjweaver_closure4$_closure6.doCall(AllurePlugin.groovy:132)
        at io.qameta.allure.gradle.AllurePlugin$_applyAspectjweaver_closure4$_closure6.call(AllurePlugin.groovy)
        at org.gradle.api.internal.AbstractTask$ClosureTaskAction.execute(AbstractTask.java:656)
        at org.gradle.api.internal.AbstractTask$ClosureTaskAction.execute(AbstractTask.java:637)

If the current behavior is a bug, please provide the steps to reproduce and if possible a minimal demo of the problem

allure {
   autoconfigure = true
   version = 2.1.1
}

./gradlew build

What is the expected behavior?

build passed

What is the motivation / use case for changing the behavior?

Please tell us about your environment:

  • Allure version: 2.1.1
  • Test framework: any
  • Allure adaptor: any
  • Generate report using: [email protected]

Other information

  • Gradle version: 3.5

No reports are generated when using latest Allure version (2.16.1)

I'm submitting a ...

  • bug report
  • feature request
  • support request => Please do not submit support request here, see note at the top of this template.

What is the current behavior?

No reports are generated when using latest Allure version (2.16.1)

allure_gradle_bug

If the current behavior is a bug, please provide the steps to reproduce and if possible a minimal demo of the problem

This can be easily observed using this project
Do

git checkout allure-2.16.1
./gradlew clean runTestsOne
./gradlew allureAggregateServe  

Click the link provided by allureAggregateServe in the output - no report is served.
The report is successfully generated when using Allure version 2.14.0 and below (check the same project on master branch).

What is the expected behavior?

Report should be properly generated and viewed while served.

Please tell us about your environment:

Allure version 2.16.1
Test framework junit 5
Allure adaptor [email protected]
Generate report using [email protected]

Usage of useCucumberJVM property raises build error Configuration with name 'testCompile' not found

I'm submitting a ...

  • bug report
  • feature request
  • support request => Please do not submit support request here, see note at the top of this template.

What is the current behavior?

Usage of useCucumberJVM property raises build error Configuration with name 'testCompile' not found

Excerpt from build.gradle:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath "io.qameta.allure:allure-gradle:2.5"
    }
}
apply plugin: 'io.qameta.allure'
allure {
    version = '2.4.1'
    autoconfigure = true
    aspectjweaver = true
    allureJavaVersion = '2.0-BETA20'
    clean = true
    resultsDir = new File(project.getBuildDir(),  "all-allure-results")
// Causes errors if uncommented
//    useCucumberJVM {
//        version = '2.0-BETA20'
//    }
}

If useCucumberJVM closure definition is uncommented, it causes the following effect:

FAILURE: Build failed with an exception.

* What went wrong:
A problem occurred configuring root project 'my-tests'.
> Configuration with name 'testCompile' not found.

If the current behavior is a bug, please provide the steps to reproduce and if possible a minimal demo of the problem

Use the code above to reproduce.

What is the expected behavior?

No errors during the build

Please tell us about your environment:

Allure version 2.0-BETA20
Test framework [email protected]
Allure adaptor [email protected]
Generate report using [email protected]
Gradle version 4.1, 4.5

Other information

Deprecated Gradle features were used in this build, making it incompatible with Gradle 9.0.

I'm submitting a ...

  • bug report
  • feature request
  • maintenance
  • support request => Please do not submit support request here, see note at the top of this template.

What is the current behavior?

Warning message is displayed when use this plugin after each execution:

Deprecated Gradle features were used in this build, making it incompatible with Gradle 9.0.

By default, Gradle uses --warning-mode=summary as work around we set --warning-mode=none but we want to know any summary of other plugins in the future. In 9.0 Gradle release this warning will be an error, so as part of the maintenance we would appreciate it very much if you guys have this in the radar for future release.

Warning:

The Project.getConvention() method has been deprecated. This is scheduled to be removed in Gradle 9.0. Consult the upgrading guide for further information: https://docs.gradle.org/8.5/userguide/upgrading_version_8.html#deprecated_access_to_conventions

What is the expected behavior?

Do not show deprecation warnings.

What is the motivation / use case for changing the behavior?

Maintenance

Other information

Reviewing with --stacktrace I noticed that it is referring to AllureAdapterBasePlugin.kt file at line 80. But in last commit this part was removed so I don't understand why it goes through a line that should not be there... PSB:

image

Issue integrating allure-plugin into build-conventions

I'm submitting a ...

  • bug report
  • feature request
  • support request => Please do not submit support request here, see note at the top of this template.

What is the current behavior?

If io.qameta.allure is used in a kotlin-dsl enabled build-convention plugin, the Kotlin DSL code generator cannot find the type like io.qameta.allure.gradle.adapter.AllureAdapterExtension (and neither are those available during script editing) and as such the plugin cannot be configured. The :build-conventions:dependencies output however properly lists the main plugin dependencies (namely *-report and *-adapter) properly.

If the current behavior is a bug, please provide the steps to reproduce and if possible a minimal demo of the problem

/build-conventions/build.gradle.kts:

plugins {
    `kotlin-dsl`
}

dependencies {
    implementation("io.qameta.allure.gradle.allure:allure-plugin:2.9.6")
}

/build-conventions/src/main/kotlin/my-shared-conventions.gradle.kts:

plugins {
    id("java")
    id("org.jetbrains.kotlin.jvm")
    id("io.qameta.allure")
}

val allureVersion = "2.17.2"
allure.version.set(allureVersion)
allure.adapter.allureJavaVersion.set(allureVersion)
allure.adapter.aspectjWeaver.set(true)

Error:

e: /path/to/build-conventions/src/main/kotlin/my-shared-conventions.gradle.kts: (26, 8): Function invocation 'version(...)' expected
e: /path/to/build-conventions/src/main/kotlin/my-shared-conventions.gradle.kts: (8, 8): Unresolved reference. None of the following candidates is applicable because of receiver type mismatch: 
public infix fun PluginDependencySpec.version(version: String?): PluginDependencySpec defined in org.gradle.kotlin.dsl
public infix fun PluginDependencySpec.version(version: Provider<String>): PluginDependencySpec defined in org.gradle.kotlin.dsl
e: /path/to/build-conventions/src/main/kotlin/my-shared-conventions.gradle.kts: (9, 8): Unresolved reference: adapter

What is the expected behavior?

Plugin application should work. My current workaround ist to apply the base and adapter / reporting plugins manually, like so:

dependencies {
    val allurePlugin = "2.9.6"
    implementation("io.qameta.allure.gradle.base:allure-base-plugin:$allurePlugin")
    implementation("io.qameta.allure.gradle.adapter:allure-adapter-plugin:$allurePlugin")
    implementation("io.qameta.allure.gradle.report:allure-report-plugin:$allurePlugin")
}
...
plugins {
    id("java")
    id("org.jetbrains.kotlin.jvm")
    id("io.qameta.allure-base")
    id("io.qameta.allure-adapter")
    id("io.qameta.allure-report")
}

Please tell us about your environment:

| Allure Gradle version | 2.9.6 |

Add support for Geb

Can you please add support for Geb framework? It would be helpful for many Geb users.

HTTP 403 error on getting https://dl.bintray.com/qameta/generic/io/qameta/allure/allure/2.4.1/allure-2.4.1.zip

[//]: # (
. Hello, I'm trying to generate Allure report and receive 403 HTTP error on URL https://dl.bintray.com/qameta/generic/io/qameta/allure/allure/2.4.1/allure-2.4.1.zip
. Allure Reports 2.4.1

If I understand this zip archive should be enabled not forbidden

On Jenkins job results we receive following error:
Can't get https://dl.bintray.com/qameta/generic/io/qameta/allure/allure/2.4.1/allure-2.4.1.zip to C:\jenkins\workspace\Arvi.Arvini2\ArviAutotests\Arvi.Arvini2.ErpSanity.Autotests\erp-sanity\build\allure-2.4.1.zip

Allure gradle go live

Can you publish this plugin, so that people will be able to use this plugin with testng?

allureServe/allureReport task failing after the second run if category.json is saved under test/resources

I'm submitting a ...

  • [ x ] bug report

What is the current behavior?

Essential tasks are failing when running multiple times.

If the current behavior is a bug, please provide the steps to reproduce and if possible a minimal demo of the problem

  • include any categories.json file in the test/resource folder.
  • run tests
  • run gradle allureReportagain (fine)
  • run gradle allureReport again
> Task :copyCategories FAILED

FAILURE: Build failed with an exception.

* What went wrong:
A problem was found with the configuration of task ':copyCategories' (type 'CopyCategories').
  - In plugin 'io.qameta.allure.gradle.adapter.AllureAdapterBasePlugin' type 'io.qameta.allure.gradle.adapter.tasks.CopyCategories' property 'markerFile' is not writable because '/Users/vinogradov/git/bb-selenide/build/copy-categories/copyCategories' is not a file.
    
    Reason: Cannot write a file to a location pointing at a directory.
    
    Possible solutions:
      1. Configure 'markerFile' to point to a file, not a directory.
      2. Annotate 'markerFile' with @OutputDirectory instead of @OutputFiles.
    
    Please refer to https://docs.gradle.org/8.0/userguide/validation_problems.html#cannot_write_output for more details about this problem.


What is the expected behavior?

Tasks run multiple time without any problems.

Please tell us about your environment:

| Allure version | 2.21.1 |
| Gradle | 7.4 and 8.0 |
| Gradle Allure Plugin | 2.11.2 |

Option 'report-dir' cannot be cast to type 'org.gradle.api.file.Directory' in class 'io.qameta.allure.gradle.report.tasks.AllureReport'.

I'm submitting a ...

  • bug report

What is the current behavior?

I'm getting this error by using the latest Allure Gradle plugin:

~/Projects/myorg/my-project master โฏ ./gradlew allureReport --depends-on-tests --stacktrace --info                                                                        1m 51s
Initialized native services in: /Users/donbeave/.gradle/native
Initialized jansi services in: /Users/donbeave/.gradle/native
The client will now receive all logging from the daemon (pid: 22009). The daemon log file: /Users/donbeave/.gradle/daemon/7.2/daemon-22009.out.log
Starting 2nd build in daemon [uptime: 2 mins 5.023 secs, performance: 100%]
Using 12 worker leases.
Now considering [/Users/donbeave/Projects/myorg/my-project, /Users/donbeave/Projects/myorg/my-project/buildSrc] as hierarchies to watch
Watching the file system is configured to be enabled if available
File system watching is active
Starting Build
Settings evaluated using settings file '/Users/donbeave/Projects/myorg/my-project/settings.gradle.kts'.
Projects loaded. Root project using build file '/Users/donbeave/Projects/myorg/my-project/build.gradle.kts'.
Included projects: [root project 'my-project']
Now considering [/Users/donbeave/Projects/myorg/my-project/buildSrc, /Users/donbeave/Projects/myorg/my-project] as hierarchies to watch

> Configure project :buildSrc
Evaluating project ':buildSrc' using build file '/Users/donbeave/Projects/myorg/my-project/buildSrc/build.gradle.kts'.
kotlin scripting plugin: created the scripting discovery configuration: kotlinScriptDef
kotlin scripting plugin: created the scripting discovery configuration: testKotlinScriptDef
file or directory '/Users/donbeave/Projects/myorg/my-project/buildSrc/src/main/resources', not found
Caching disabled for Kotlin DSL accessors for project ':buildSrc' because:
  Build cache is disabled
Skipping Kotlin DSL accessors for project ':buildSrc' as it is up-to-date.
file or directory '/Users/donbeave/Projects/myorg/my-project/buildSrc/src/main/resources', not found
Selected primary task 'build' from project :
file or directory '/Users/donbeave/Projects/myorg/my-project/buildSrc/src/main/resources', not found
file or directory '/Users/donbeave/Projects/myorg/my-project/buildSrc/src/main/resources', not found
:buildSrc:extractPrecompiledScriptPluginPlugins (Thread[Execution worker for ':buildSrc',5,main]) started.

> Task :buildSrc:extractPrecompiledScriptPluginPlugins UP-TO-DATE
Caching disabled for task ':buildSrc:extractPrecompiledScriptPluginPlugins' because:
  Build cache is disabled
Skipping task ':buildSrc:extractPrecompiledScriptPluginPlugins' as it is up-to-date.
:buildSrc:extractPrecompiledScriptPluginPlugins (Thread[Execution worker for ':buildSrc',5,main]) completed. Took 0.004 secs.
:buildSrc:generateExternalPluginSpecBuilders (Thread[Execution worker for ':buildSrc',5,main]) started.

> Task :buildSrc:generateExternalPluginSpecBuilders UP-TO-DATE
Caching disabled for task ':buildSrc:generateExternalPluginSpecBuilders' because:
  Build cache is disabled
Skipping task ':buildSrc:generateExternalPluginSpecBuilders' as it is up-to-date.
:buildSrc:generateExternalPluginSpecBuilders (Thread[Execution worker for ':buildSrc',5,main]) completed. Took 0.007 secs.
:buildSrc:compilePluginsBlocks (Thread[Execution worker for ':buildSrc',5,main]) started.

> Task :buildSrc:compilePluginsBlocks UP-TO-DATE
Caching disabled for task ':buildSrc:compilePluginsBlocks' because:
  Build cache is disabled
Skipping task ':buildSrc:compilePluginsBlocks' as it is up-to-date.
:buildSrc:compilePluginsBlocks (Thread[Execution worker for ':buildSrc',5,main]) completed. Took 0.003 secs.
:buildSrc:generatePrecompiledScriptPluginAccessors (Thread[Execution worker for ':buildSrc',5,main]) started.

> Task :buildSrc:generatePrecompiledScriptPluginAccessors UP-TO-DATE
Caching disabled for task ':buildSrc:generatePrecompiledScriptPluginAccessors' because:
  Build cache is disabled
Skipping task ':buildSrc:generatePrecompiledScriptPluginAccessors' as it is up-to-date.
:buildSrc:generatePrecompiledScriptPluginAccessors (Thread[Execution worker for ':buildSrc',5,main]) completed. Took 0.009 secs.
:buildSrc:configurePrecompiledScriptDependenciesResolver (Thread[Execution worker for ':buildSrc',5,main]) started.

> Task :buildSrc:configurePrecompiledScriptDependenciesResolver
Caching disabled for task ':buildSrc:configurePrecompiledScriptDependenciesResolver' because:
  Build cache is disabled
Task ':buildSrc:configurePrecompiledScriptDependenciesResolver' is not up-to-date because:
  Task has not declared any outputs despite executing actions.
:buildSrc:configurePrecompiledScriptDependenciesResolver (Thread[Execution worker for ':buildSrc',5,main]) completed. Took 0.004 secs.
:buildSrc:extractPluginRequests (Thread[Execution worker for ':buildSrc',5,main]) started.

> Task :buildSrc:extractPluginRequests UP-TO-DATE
Caching disabled for task ':buildSrc:extractPluginRequests' because:
  Build cache is disabled
Skipping task ':buildSrc:extractPluginRequests' as it is up-to-date.
:buildSrc:extractPluginRequests (Thread[Execution worker for ':buildSrc',5,main]) completed. Took 0.0 secs.
:buildSrc:generatePluginAdapters (Thread[Execution worker for ':buildSrc',5,main]) started.

> Task :buildSrc:generatePluginAdapters UP-TO-DATE
Caching disabled for task ':buildSrc:generatePluginAdapters' because:
  Build cache is disabled
Skipping task ':buildSrc:generatePluginAdapters' as it is up-to-date.
:buildSrc:generatePluginAdapters (Thread[Execution worker for ':buildSrc',5,main]) completed. Took 0.0 secs.
:buildSrc:generateScriptPluginAdapters (Thread[Execution worker for ':buildSrc',5,main]) started.

> Task :buildSrc:generateScriptPluginAdapters UP-TO-DATE
Caching disabled for task ':buildSrc:generateScriptPluginAdapters' because:
  Build cache is disabled
Skipping task ':buildSrc:generateScriptPluginAdapters' as it is up-to-date.
:buildSrc:generateScriptPluginAdapters (Thread[Execution worker for ':buildSrc',5,main]) completed. Took 0.0 secs.
:buildSrc:compileKotlin (Thread[Execution worker for ':buildSrc',5,main]) started.

> Task :buildSrc:compileKotlin UP-TO-DATE
Caching disabled for task ':buildSrc:compileKotlin' because:
  Build cache is disabled
Skipping task ':buildSrc:compileKotlin' as it is up-to-date.
:buildSrc:compileKotlin (Thread[Execution worker for ':buildSrc',5,main]) completed. Took 0.042 secs.
:buildSrc:compileJava (Thread[Execution worker for ':buildSrc',5,main]) started.

> Task :buildSrc:compileJava UP-TO-DATE
Caching disabled for task ':buildSrc:compileJava' because:
  Build cache is disabled
Skipping task ':buildSrc:compileJava' as it is up-to-date.
:buildSrc:compileJava (Thread[Execution worker for ':buildSrc',5,main]) completed. Took 0.008 secs.
:buildSrc:compileGroovy (Thread[Execution worker for ':buildSrc',5,main]) started.

> Task :buildSrc:compileGroovy NO-SOURCE
Skipping task ':buildSrc:compileGroovy' as it has no source files and no previous output files.
:buildSrc:compileGroovy (Thread[Execution worker for ':buildSrc',5,main]) completed. Took 0.001 secs.
:buildSrc:compileGroovyPlugins (Thread[Execution worker for ':buildSrc',5,main]) started.

> Task :buildSrc:compileGroovyPlugins UP-TO-DATE
Caching disabled for task ':buildSrc:compileGroovyPlugins' because:
  Build cache is disabled
Skipping task ':buildSrc:compileGroovyPlugins' as it is up-to-date.
:buildSrc:compileGroovyPlugins (Thread[Execution worker for ':buildSrc',5,main]) completed. Took 0.003 secs.
:buildSrc:pluginDescriptors (Thread[Execution worker for ':buildSrc',5,main]) started.

> Task :buildSrc:pluginDescriptors UP-TO-DATE
Caching disabled for task ':buildSrc:pluginDescriptors' because:
  Build cache is disabled
Skipping task ':buildSrc:pluginDescriptors' as it is up-to-date.
:buildSrc:pluginDescriptors (Thread[Execution worker for ':buildSrc',5,main]) completed. Took 0.001 secs.
:buildSrc:processResources (Thread[Execution worker for ':buildSrc',5,main]) started.

> Task :buildSrc:processResources UP-TO-DATE
file or directory '/Users/donbeave/Projects/myorg/my-project/buildSrc/src/main/resources', not found
Caching disabled for task ':buildSrc:processResources' because:
  Build cache is disabled
Skipping task ':buildSrc:processResources' as it is up-to-date.
:buildSrc:processResources (Thread[Execution worker for ':buildSrc',5,main]) completed. Took 0.002 secs.
:buildSrc:classes (Thread[Execution worker for ':buildSrc',5,main]) started.

> Task :buildSrc:classes UP-TO-DATE
Skipping task ':buildSrc:classes' as it has no actions.
:buildSrc:classes (Thread[Execution worker for ':buildSrc',5,main]) completed. Took 0.0 secs.
:buildSrc:inspectClassesForKotlinIC (Thread[Execution worker for ':buildSrc',5,main]) started.

> Task :buildSrc:inspectClassesForKotlinIC UP-TO-DATE
Caching disabled for task ':buildSrc:inspectClassesForKotlinIC' because:
  Build cache is disabled
Skipping task ':buildSrc:inspectClassesForKotlinIC' as it is up-to-date.
:buildSrc:inspectClassesForKotlinIC (Thread[Execution worker for ':buildSrc',5,main]) completed. Took 0.002 secs.
:buildSrc:jar (Thread[Execution worker for ':buildSrc',5,main]) started.

> Task :buildSrc:jar UP-TO-DATE
Caching disabled for task ':buildSrc:jar' because:
  Build cache is disabled
Skipping task ':buildSrc:jar' as it is up-to-date.
:buildSrc:jar (Thread[Execution worker for ':buildSrc',5,main]) completed. Took 0.003 secs.
:buildSrc:assemble (Thread[Execution worker for ':buildSrc',5,main]) started.

> Task :buildSrc:assemble UP-TO-DATE
Skipping task ':buildSrc:assemble' as it has no actions.
:buildSrc:assemble (Thread[Execution worker for ':buildSrc',5,main]) completed. Took 0.0 secs.
:buildSrc:compileTestKotlin (Thread[Execution worker for ':buildSrc',5,main]) started.

> Task :buildSrc:compileTestKotlin NO-SOURCE
file or directory '/Users/donbeave/Projects/myorg/my-project/buildSrc/src/test/kotlin', not found
file or directory '/Users/donbeave/Projects/myorg/my-project/buildSrc/src/test/java', not found
Skipping task ':buildSrc:compileTestKotlin' as it has no source files and no previous output files.
:buildSrc:compileTestKotlin (Thread[Execution worker for ':buildSrc',5,main]) completed. Took 0.0 secs.
:buildSrc:pluginUnderTestMetadata (Thread[Execution worker for ':buildSrc',5,main]) started.

> Task :buildSrc:pluginUnderTestMetadata UP-TO-DATE
Caching disabled for task ':buildSrc:pluginUnderTestMetadata' because:
  Build cache is disabled
Skipping task ':buildSrc:pluginUnderTestMetadata' as it is up-to-date.
:buildSrc:pluginUnderTestMetadata (Thread[Execution worker for ':buildSrc',5,main]) completed. Took 0.001 secs.
:buildSrc:compileTestJava (Thread[Execution worker for ':buildSrc',5,main]) started.

> Task :buildSrc:compileTestJava NO-SOURCE
file or directory '/Users/donbeave/Projects/myorg/my-project/buildSrc/src/test/java', not found
Skipping task ':buildSrc:compileTestJava' as it has no source files and no previous output files.
:buildSrc:compileTestJava (Thread[Execution worker for ':buildSrc',5,main]) completed. Took 0.0 secs.
:buildSrc:compileTestGroovy (Thread[Execution worker for ':buildSrc',5,main]) started.

> Task :buildSrc:compileTestGroovy NO-SOURCE
file or directory '/Users/donbeave/Projects/myorg/my-project/buildSrc/src/test/groovy', not found
Skipping task ':buildSrc:compileTestGroovy' as it has no source files and no previous output files.
:buildSrc:compileTestGroovy (Thread[Execution worker for ':buildSrc',5,main]) completed. Took 0.0 secs.
:buildSrc:processTestResources (Thread[Execution worker for ':buildSrc',5,main]) started.

> Task :buildSrc:processTestResources NO-SOURCE
file or directory '/Users/donbeave/Projects/myorg/my-project/buildSrc/src/test/resources', not found
Skipping task ':buildSrc:processTestResources' as it has no source files and no previous output files.
:buildSrc:processTestResources (Thread[Execution worker for ':buildSrc',5,main]) completed. Took 0.0 secs.
:buildSrc:testClasses (Thread[Execution worker for ':buildSrc',5,main]) started.

> Task :buildSrc:testClasses UP-TO-DATE
Skipping task ':buildSrc:testClasses' as it has no actions.
:buildSrc:testClasses (Thread[Execution worker for ':buildSrc',5,main]) completed. Took 0.0 secs.
:buildSrc:test (Thread[Execution worker for ':buildSrc',5,main]) started.

> Task :buildSrc:test NO-SOURCE
file or directory '/Users/donbeave/Projects/myorg/my-project/buildSrc/build/classes/java/test', not found
file or directory '/Users/donbeave/Projects/myorg/my-project/buildSrc/build/classes/groovy/test', not found
file or directory '/Users/donbeave/Projects/myorg/my-project/buildSrc/build/classes/kotlin/test', not found
Skipping task ':buildSrc:test' as it has no source files and no previous output files.
:buildSrc:test (Thread[Execution worker for ':buildSrc',5,main]) completed. Took 0.0 secs.
:buildSrc:validatePlugins (Thread[Execution worker for ':buildSrc',5,main]) started.

> Task :buildSrc:validatePlugins UP-TO-DATE
Caching disabled for task ':buildSrc:validatePlugins' because:
  Build cache is disabled
Skipping task ':buildSrc:validatePlugins' as it is up-to-date.
:buildSrc:validatePlugins (Thread[Execution worker for ':buildSrc',5,main]) completed. Took 0.003 secs.
:buildSrc:check (Thread[Execution worker for ':buildSrc',5,main]) started.

> Task :buildSrc:check UP-TO-DATE
Skipping task ':buildSrc:check' as it has no actions.
:buildSrc:check (Thread[Execution worker for ':buildSrc',5,main]) completed. Took 0.0 secs.
:buildSrc:build (Thread[Execution worker for ':buildSrc',5,main]) started.

> Task :buildSrc:build UP-TO-DATE
Skipping task ':buildSrc:build' as it has no actions.
:buildSrc:build (Thread[Execution worker for ':buildSrc',5,main]) completed. Took 0.0 secs.

> Configure project :
Evaluating root project 'my-project' using build file '/Users/donbeave/Projects/myorg/my-project/build.gradle.kts'.
Caching disabled for Kotlin DSL accessors for root project 'my-project' because:
  Build cache is disabled
Skipping Kotlin DSL accessors for root project 'my-project' as it is up-to-date.
All projects evaluated.

FAILURE: Build failed with an exception.

* What went wrong:
Option 'report-dir' cannot be cast to type 'org.gradle.api.file.Directory' in class 'io.qameta.allure.gradle.report.tasks.AllureReport'.

* Try:
Run with --debug option to get more log output. Run with --scan to get full insights.

* Exception is:
org.gradle.api.internal.tasks.options.OptionValidationException: Option 'report-dir' cannot be cast to type 'org.gradle.api.file.Directory' in class 'io.qameta.allure.gradle.report.tasks.AllureReport'.
        at org.gradle.api.internal.tasks.options.AbstractOptionElement.createNotationParserOrFail(AbstractOptionElement.java:86)
        at org.gradle.api.internal.tasks.options.SingleValueOptionElement.<init>(SingleValueOptionElement.java:37)
        at org.gradle.api.internal.tasks.options.AbstractOptionElement.of(AbstractOptionElement.java:56)
        at org.gradle.api.internal.tasks.options.FieldOptionElement.create(FieldOptionElement.java:38)
        at org.gradle.api.internal.tasks.options.OptionReader.getFieldAnnotations(OptionReader.java:110)
        at org.gradle.api.internal.tasks.options.OptionReader.getOptionElements(OptionReader.java:99)
        at org.gradle.api.internal.tasks.options.OptionReader.loadClassDescriptorInCache(OptionReader.java:56)
        at org.gradle.api.internal.tasks.options.OptionReader.getOptions(OptionReader.java:46)
        at org.gradle.execution.commandline.CommandLineTaskConfigurer.configureTasksNow(CommandLineTaskConfigurer.java:51)
        at org.gradle.execution.commandline.CommandLineTaskConfigurer.configureTasks(CommandLineTaskConfigurer.java:44)
        at org.gradle.execution.commandline.CommandLineTaskParser.parseTasks(CommandLineTaskParser.java:45)
        at org.gradle.execution.TaskNameResolvingBuildConfigurationAction.configure(TaskNameResolvingBuildConfigurationAction.java:46)
        at org.gradle.execution.DefaultBuildConfigurationActionExecuter.configure(DefaultBuildConfigurationActionExecuter.java:51)
        at org.gradle.execution.DefaultBuildConfigurationActionExecuter.access$000(DefaultBuildConfigurationActionExecuter.java:25)
        at org.gradle.execution.DefaultBuildConfigurationActionExecuter$1.proceed(DefaultBuildConfigurationActionExecuter.java:59)
        at org.gradle.execution.DefaultTasksBuildExecutionAction.configure(DefaultTasksBuildExecutionAction.java:45)
        at org.gradle.execution.DefaultBuildConfigurationActionExecuter.configure(DefaultBuildConfigurationActionExecuter.java:51)
        at org.gradle.execution.DefaultBuildConfigurationActionExecuter.lambda$select$0(DefaultBuildConfigurationActionExecuter.java:38)
        at org.gradle.internal.Factories$1.create(Factories.java:31)
        at org.gradle.api.internal.project.DefaultProjectStateRegistry.withMutableStateOfAllProjects(DefaultProjectStateRegistry.java:160)
        at org.gradle.api.internal.project.DefaultProjectStateRegistry.withMutableStateOfAllProjects(DefaultProjectStateRegistry.java:147)
        at org.gradle.execution.DefaultBuildConfigurationActionExecuter.select(DefaultBuildConfigurationActionExecuter.java:37)
        at org.gradle.initialization.DefaultTaskExecutionPreparer.prepareForTaskExecution(DefaultTaskExecutionPreparer.java:39)
        at org.gradle.initialization.VintageBuildModelController.prepareTaskExecution(VintageBuildModelController.java:111)
        at org.gradle.initialization.VintageBuildModelController.doBuildStages(VintageBuildModelController.java:85)
        at org.gradle.initialization.VintageBuildModelController.scheduleRequestedTasks(VintageBuildModelController.java:69)
        at org.gradle.internal.build.DefaultBuildLifecycleController.lambda$scheduleRequestedTasks$1(DefaultBuildLifecycleController.java:114)
        at org.gradle.internal.build.DefaultBuildWorkPreparer.populateWorkGraph(DefaultBuildWorkPreparer.java:28)
        at org.gradle.internal.build.BuildOperationFiringBuildWorkPreparer$PopulateWorkGraph.populateTaskGraph(BuildOperationFiringBuildWorkPreparer.java:120)
        at org.gradle.internal.build.BuildOperationFiringBuildWorkPreparer$PopulateWorkGraph.run(BuildOperationFiringBuildWorkPreparer.java:76)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:56)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$run$1(DefaultBuildOperationExecutor.java:74)
        at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.runWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:45)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:74)
        at org.gradle.internal.build.BuildOperationFiringBuildWorkPreparer.populateWorkGraph(BuildOperationFiringBuildWorkPreparer.java:60)
        at org.gradle.internal.build.DefaultBuildLifecycleController.lambda$scheduleRequestedTasks$2(DefaultBuildLifecycleController.java:114)
        at org.gradle.internal.build.DefaultBuildLifecycleController.lambda$withModelOrThrow$5(DefaultBuildLifecycleController.java:142)
        at org.gradle.internal.build.DefaultBuildLifecycleController.withModel(DefaultBuildLifecycleController.java:157)
        at org.gradle.internal.build.DefaultBuildLifecycleController.withModelOrThrow(DefaultBuildLifecycleController.java:140)
        at org.gradle.internal.build.DefaultBuildLifecycleController.scheduleRequestedTasks(DefaultBuildLifecycleController.java:111)
        at org.gradle.internal.buildtree.DefaultBuildTreeWorkPreparer.lambda$scheduleRequestedTasks$0(DefaultBuildTreeWorkPreparer.java:35)
        at org.gradle.composite.internal.DefaultIncludedBuildTaskGraph$1.run(DefaultIncludedBuildTaskGraph.java:113)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:56)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$run$1(DefaultBuildOperationExecutor.java:74)
        at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.runWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:45)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:74)
        at org.gradle.composite.internal.DefaultIncludedBuildTaskGraph.lambda$prepareTaskGraph$0(DefaultIncludedBuildTaskGraph.java:110)
        at org.gradle.composite.internal.DefaultIncludedBuildTaskGraph.withState(DefaultIncludedBuildTaskGraph.java:236)
        at org.gradle.composite.internal.DefaultIncludedBuildTaskGraph.prepareTaskGraph(DefaultIncludedBuildTaskGraph.java:107)
        at org.gradle.internal.buildtree.DefaultBuildTreeWorkPreparer.scheduleRequestedTasks(DefaultBuildTreeWorkPreparer.java:34)
        at org.gradle.internal.buildtree.DefaultBuildTreeLifecycleController.lambda$doScheduleAndRunTasks$1(DefaultBuildTreeLifecycleController.java:83)
        at org.gradle.composite.internal.DefaultIncludedBuildTaskGraph.withNewTaskGraph(DefaultIncludedBuildTaskGraph.java:94)
        at org.gradle.internal.buildtree.DefaultBuildTreeLifecycleController.doScheduleAndRunTasks(DefaultBuildTreeLifecycleController.java:82)
        at org.gradle.internal.buildtree.DefaultBuildTreeLifecycleController.runBuild(DefaultBuildTreeLifecycleController.java:104)
        at org.gradle.internal.buildtree.DefaultBuildTreeLifecycleController.scheduleAndRunTasks(DefaultBuildTreeLifecycleController.java:64)
        at org.gradle.tooling.internal.provider.ExecuteBuildActionRunner.run(ExecuteBuildActionRunner.java:31)
        at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
        at org.gradle.internal.buildtree.ProblemReportingBuildActionRunner.run(ProblemReportingBuildActionRunner.java:47)
        at org.gradle.launcher.exec.BuildOutcomeReportingBuildActionRunner.run(BuildOutcomeReportingBuildActionRunner.java:69)
        at org.gradle.tooling.internal.provider.FileSystemWatchingBuildActionRunner.run(FileSystemWatchingBuildActionRunner.java:91)
        at org.gradle.launcher.exec.BuildCompletionNotifyingBuildActionRunner.run(BuildCompletionNotifyingBuildActionRunner.java:41)
        at org.gradle.launcher.exec.RootBuildLifecycleBuildActionExecutor.lambda$execute$0(RootBuildLifecycleBuildActionExecutor.java:40)
        at org.gradle.composite.internal.DefaultRootBuildState.run(DefaultRootBuildState.java:154)
        at org.gradle.launcher.exec.RootBuildLifecycleBuildActionExecutor.execute(RootBuildLifecycleBuildActionExecutor.java:40)
        at org.gradle.internal.buildtree.DefaultBuildTreeContext.execute(DefaultBuildTreeContext.java:40)
        at org.gradle.launcher.exec.BuildTreeLifecycleBuildActionExecutor.lambda$execute$0(BuildTreeLifecycleBuildActionExecutor.java:56)
        at org.gradle.internal.buildtree.BuildTreeState.run(BuildTreeState.java:53)
        at org.gradle.launcher.exec.BuildTreeLifecycleBuildActionExecutor.execute(BuildTreeLifecycleBuildActionExecutor.java:56)
        at org.gradle.launcher.exec.RunAsBuildOperationBuildActionExecutor$3.call(RunAsBuildOperationBuildActionExecutor.java:61)
        at org.gradle.launcher.exec.RunAsBuildOperationBuildActionExecutor$3.call(RunAsBuildOperationBuildActionExecutor.java:57)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:200)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:195)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:62)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$call$2(DefaultBuildOperationExecutor.java:79)
        at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.callWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:54)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:79)
        at org.gradle.launcher.exec.RunAsBuildOperationBuildActionExecutor.execute(RunAsBuildOperationBuildActionExecutor.java:57)
        at org.gradle.launcher.exec.RunAsWorkerThreadBuildActionExecutor.lambda$execute$0(RunAsWorkerThreadBuildActionExecutor.java:38)
        at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:211)
        at org.gradle.launcher.exec.RunAsWorkerThreadBuildActionExecutor.execute(RunAsWorkerThreadBuildActionExecutor.java:38)
        at org.gradle.tooling.internal.provider.ContinuousBuildActionExecutor.execute(ContinuousBuildActionExecutor.java:103)
        at org.gradle.tooling.internal.provider.SubscribableBuildActionExecutor.execute(SubscribableBuildActionExecutor.java:64)
        at org.gradle.internal.session.DefaultBuildSessionContext.execute(DefaultBuildSessionContext.java:46)
        at org.gradle.tooling.internal.provider.BuildSessionLifecycleBuildActionExecuter.lambda$execute$0(BuildSessionLifecycleBuildActionExecuter.java:56)
        at org.gradle.internal.session.BuildSessionState.run(BuildSessionState.java:69)
        at org.gradle.tooling.internal.provider.BuildSessionLifecycleBuildActionExecuter.execute(BuildSessionLifecycleBuildActionExecuter.java:55)
        at org.gradle.tooling.internal.provider.BuildSessionLifecycleBuildActionExecuter.execute(BuildSessionLifecycleBuildActionExecuter.java:37)
        at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:36)
        at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:25)
        at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:63)
        at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:31)
        at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:58)
        at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:42)
        at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:47)
        at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:31)
        at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:65)
        at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
        at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:39)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
        at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:29)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
        at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:35)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
        at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.create(ForwardClientInput.java:78)
        at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.create(ForwardClientInput.java:75)
        at org.gradle.util.internal.Swapper.swap(Swapper.java:38)
        at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:75)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
        at org.gradle.launcher.daemon.server.exec.LogAndCheckHealth.execute(LogAndCheckHealth.java:55)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
        at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:63)
        at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
        at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:84)
        at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
        at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:52)
        at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:297)
        at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
        at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
        at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:61)


* Get more help at https://help.gradle.org

Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0.

You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.

See https://docs.gradle.org/7.2/userguide/command_line_interface.html#sec:command_line_warnings

BUILD FAILED in 884ms
17 actionable tasks: 1 executed, 16 up-to-date
Watched directory hierarchies: [/Users/donbeave/Projects/myorg/my-project]

Please tell us about your environment:

Allure version 2.14.0
Test framework junit5
Generate report using [email protected]

It can be related to this issue as well: #60

'Allure Reportโ€™ aborted due to exception

I'm submitting a ...

  • bug report
  • feature request
  • support request

Current behavior:

My jenkins jobs execution stuck (~12 hours) when performing report generation...

Environment:

Allure version 2.3.5
Test framework [email protected]
Generate report using (jenkins) [email protected]
OS Windows 10
Jenkins catched in 2.75, Still reproduce in 2.85

Stacktrace

09:26:34 ERROR: Step โ€˜Allure Reportโ€™ aborted due to exception: 
09:26:34 java.lang.InterruptedException
09:26:34 	at java.lang.ProcessImpl.waitFor(Unknown Source)
09:26:34 	at hudson.Proc$LocalProc.join(Proc.java:324)
09:26:34 	at hudson.Launcher$ProcStarter.join(Launcher.java:475)
09:26:34 	at ru.yandex.qatools.allure.jenkins.ReportBuilder.build(ReportBuilder.java:47)
09:26:34 	at ru.yandex.qatools.allure.jenkins.AllureReportPublisher.generateReport(AllureReportPublisher.java:287)
09:26:34 	at ru.yandex.qatools.allure.jenkins.AllureReportPublisher.perform(AllureReportPublisher.java:210)
09:26:34 	at hudson.tasks.BuildStepCompatibilityLayer.perform(BuildStepCompatibilityLayer.java:81)
09:26:34 	at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:20)
09:26:34 	at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:736)
09:26:34 	at hudson.model.AbstractBuild$AbstractBuildExecution.performAllBuildSteps(AbstractBuild.java:682)
09:26:34 	at hudson.model.Build$BuildExecution.post2(Build.java:186)
09:26:34 	at hudson.model.AbstractBuild$AbstractBuildExecution.post(AbstractBuild.java:627)
09:26:34 	at hudson.model.Run.execute(Run.java:1749)
09:26:34 	at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
09:26:34 	at hudson.model.ResourceController.execute(ResourceController.java:97)
09:26:34 	at hudson.model.Executor.run(Executor.java:421)
09:26:34 Archiving artifacts

support resultsDir per test task

I'm submitting a ...

  • bug report
  • [ X] feature request
  • support request => Please do not submit support request here, see note at the top of this template.

What is the current behavior?

we have a project that has multiple test sourceSets. The plugin currently uses one resultsDir per project. Thus the generated allure results files from multiple tasks end up in the same directory.

If the current behavior is a bug, please provide the steps to reproduce and if possible a minimal demo of the problem

What is the expected behavior?

What is the motivation / use case for changing the behavior?

this does not play well together with the gradle build cache:
Gradle does not know how file 'build/allure-results/0c15ba66-f079-463a-a65c-cd606fb2995c-result.json' was created (output property '$1'). Task output caching requires exclusive access to output paths to guarantee correctness.

I think it would be helpful if the plugin would add the name of the sourceSet to the resultsDir.
this way results from different tasks would end up seperately. similiar to XML test reports generated by the test task.

Please tell us about your environment:

plugins {
      id("io.qameta.allure") version "2.8.1"
}

allure {
    autoconfigure = true
    version = "2.12.1"
    aspectjVersion = "1.9.4"

    useJUnit5 {
        version = "2.12.1"
    }
}

Other information

Allure commandline is downloaded into `build/allure` folder, but previously it was donwloaded into `.allure` folder in the project root

I'm submitting a ...

  • bug report
  • feature request
  • support request => Please do not submit support request here, see note at the top of this template.

What is the current behavior?

When using the current version of allure gradle plugin 2.9.6, the downloadAllure task downloads the allure commandline into the folder /build/allure.
When using a previous version, e.g. 2.8.1, it was downloaded into .allure folder directly under the project root.
Thus, previously, when the clean task deleted the build folder, there were no need to download Allure commandline again.
Now, it must be downloaded each time after clean task.

If the current behavior is a bug, please provide the steps to reproduce and if possible a minimal demo of the problem

Just run downloadAllure task and find that allure is downloaded into build/allure folder.

What is the expected behavior?

Allure is downloaded into .allure folder under the project root.

What is the motivation / use case for changing the behavior?

Previously (e.g. in version 2.8.1) the task downloadAllure would be considered up-to-date after executing ./gradlew clean, and no redundant allure download would be performed.
Now, allure needs to be downloaded again after ./gradlew clean.

Please tell us about your environment:

Allure Gradle plugin version 2.9.6
Gradle (wrapper) 7.3
Allure version 2.16.1
Test framework [email protected]

Other information

I think no other information is needed.
However, maybe downloading into /build/allure folder is a new expected behavior?

Copy categories.json from resources

I'm submitting a ...

  • bug report
  • feature request
  • support request => Please do not submit support request here, see note at the top of this template.

What is the current behavior?

If the current behavior is a bug, please provide the steps to reproduce and if possible a minimal demo of the problem

What is the expected behavior?

What is the motivation / use case for changing the behavior?

Please tell us about your environment:

Allure version 2.2.0
Test framework [email protected]
Allure adaptor [email protected]
Generate report using [email protected]

Other information

ClassCastException with Gradle 7.5-milestone-1

I'm submitting a ...

  • bug report
  • feature request
  • support request => Please do not submit support request here, see note at the top of this template.

What is the current behavior?

After upgrading from Gradle 7.4.2 to 7.5-milestone-1 I get a stacktrace (see below).

If the current behavior is a bug, please provide the steps to reproduce and if possible a minimal demo of the problem

Invoke gradle allureServe with Gradle 7.5-milestone-1

What is the expected behavior?

No stacktrace as before.

What is the motivation / use case for changing the behavior?

Using Allure as before

Please tell us about your environment:

Allure version 2.17.3
Test framework JUnit 5.8.2
Allure adaptor allure-junit 2.17.3
Generate report using Gradle Plugin 2.9.6

Other information

> gradle allureServe --info --stacktrace
...
Task name matched 'allureServe'
Selected primary task 'allureServe' from project :

FAILURE: Build failed with an exception.

* What went wrong:
class org.gradle.execution.plan.ActionNode cannot be cast to class org.gradle.execution.plan.TaskNode (org.gradle.execution.plan.ActionNode and org.gradle.execution.plan.TaskNode are in unnamed module of loader org.gradle.internal.classloader.VisitableURLClassLoader @1c4af82c)

...

* Exception is:
java.lang.ClassCastException: class org.gradle.execution.plan.ActionNode cannot be cast to class org.gradle.execution.plan.TaskNode (org.gradle.execution.plan.ActionNode and org.gradle.execution.plan.TaskNode are in unnamed module of loader org.gradle.internal.classloader.VisitableURLClassLoader @1c4af82c)
        at org.gradle.execution.plan.LocalTaskNode.resolveDependencies(LocalTaskNode.java:148)
        at org.gradle.execution.plan.DefaultExecutionPlan.doAddNodes(DefaultExecutionPlan.java:209)
        at org.gradle.execution.plan.DefaultExecutionPlan.addEntryTasks(DefaultExecutionPlan.java:174)
        at org.gradle.execution.plan.DefaultExecutionPlan.addEntryTasks(DefaultExecutionPlan.java:159)
        at org.gradle.execution.TaskNameResolvingBuildConfigurationAction.configure(TaskNameResolvingBuildConfigurationAction.java:47)
        at org.gradle.execution.DefaultBuildConfigurationActionExecuter.configure(DefaultBuildConfigurationActionExecuter.java:49)
        at org.gradle.execution.DefaultBuildConfigurationActionExecuter.access$000(DefaultBuildConfigurationActionExecuter.java:25)
        at org.gradle.execution.DefaultBuildConfigurationActionExecuter$1.proceed(DefaultBuildConfigurationActionExecuter.java:62)
        at org.gradle.execution.DefaultTasksBuildExecutionAction.configure(DefaultTasksBuildExecutionAction.java:48)
        at org.gradle.execution.DefaultBuildConfigurationActionExecuter.configure(DefaultBuildConfigurationActionExecuter.java:49)
        at org.gradle.execution.DefaultBuildConfigurationActionExecuter.lambda$select$0(DefaultBuildConfigurationActionExecuter.java:36)
        at org.gradle.internal.Factories$1.create(Factories.java:31)
        at org.gradle.internal.work.DefaultWorkerLeaseService.withReplacedLocks(DefaultWorkerLeaseService.java:345)
        at org.gradle.api.internal.project.DefaultProjectStateRegistry$DefaultBuildProjectRegistry.withMutableStateOfAllProjects(DefaultProjectStateRegistry.java:197)
        at org.gradle.api.internal.project.DefaultProjectStateRegistry$DefaultBuildProjectRegistry.withMutableStateOfAllProjects(DefaultProjectStateRegistry.java:190)
        at org.gradle.execution.DefaultBuildConfigurationActionExecuter.select(DefaultBuildConfigurationActionExecuter.java:35)
        at org.gradle.initialization.DefaultTaskExecutionPreparer.prepareForTaskExecution(DefaultTaskExecutionPreparer.java:42)
        at org.gradle.initialization.VintageBuildModelController.lambda$scheduleRequestedTasks$1(VintageBuildModelController.java:81)
        at org.gradle.internal.model.StateTransitionController.lambda$inState$1(StateTransitionController.java:110)
        at org.gradle.internal.model.StateTransitionController.lambda$inState$2(StateTransitionController.java:125)
        at org.gradle.internal.work.DefaultSynchronizer.withLock(DefaultSynchronizer.java:44)
        at org.gradle.internal.model.StateTransitionController.inState(StateTransitionController.java:121)
        at org.gradle.internal.model.StateTransitionController.inState(StateTransitionController.java:109)
        at org.gradle.initialization.VintageBuildModelController.scheduleRequestedTasks(VintageBuildModelController.java:81)
        at org.gradle.internal.build.DefaultBuildLifecycleController$DefaultWorkGraphBuilder.addRequestedTasks(DefaultBuildLifecycleController.java:242)
        at org.gradle.internal.build.DefaultBuildLifecycleController.lambda$populateWorkGraph$4(DefaultBuildLifecycleController.java:143)
        at org.gradle.internal.build.DefaultBuildWorkPreparer.populateWorkGraph(DefaultBuildWorkPreparer.java:41)
        at org.gradle.internal.build.BuildOperationFiringBuildWorkPreparer$PopulateWorkGraph.populateTaskGraph(BuildOperationFiringBuildWorkPreparer.java:138)
        at org.gradle.internal.build.BuildOperationFiringBuildWorkPreparer$PopulateWorkGraph.run(BuildOperationFiringBuildWorkPreparer.java:89)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:47)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:68)
        at org.gradle.internal.build.BuildOperationFiringBuildWorkPreparer.populateWorkGraph(BuildOperationFiringBuildWorkPreparer.java:66)
        at org.gradle.internal.build.DefaultBuildLifecycleController.lambda$populateWorkGraph$5(DefaultBuildLifecycleController.java:143)
        at org.gradle.internal.model.StateTransitionController.lambda$inState$1(StateTransitionController.java:110)
        at org.gradle.internal.model.StateTransitionController.lambda$inState$2(StateTransitionController.java:125)
        at org.gradle.internal.work.DefaultSynchronizer.withLock(DefaultSynchronizer.java:44)
        at org.gradle.internal.model.StateTransitionController.inState(StateTransitionController.java:121)
        at org.gradle.internal.model.StateTransitionController.inState(StateTransitionController.java:109)
        at org.gradle.internal.build.DefaultBuildLifecycleController.populateWorkGraph(DefaultBuildLifecycleController.java:143)
        at org.gradle.internal.build.DefaultBuildWorkGraphController$DefaultBuildWorkGraph.populateWorkGraph(DefaultBuildWorkGraphController.java:126)
        at org.gradle.composite.internal.DefaultBuildController.populateWorkGraph(DefaultBuildController.java:71)
        at org.gradle.composite.internal.DefaultIncludedBuildTaskGraph$DefaultBuildTreeWorkGraphBuilder.withWorkGraph(DefaultIncludedBuildTaskGraph.java:141)
        at org.gradle.internal.buildtree.DefaultBuildTreeWorkPreparer.lambda$scheduleRequestedTasks$0(DefaultBuildTreeWorkPreparer.java:34)
        at org.gradle.composite.internal.DefaultIncludedBuildTaskGraph$DefaultBuildTreeWorkGraph$1.run(DefaultIncludedBuildTaskGraph.java:169)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:47)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:68)
        at org.gradle.composite.internal.DefaultIncludedBuildTaskGraph$DefaultBuildTreeWorkGraph.scheduleWork(DefaultIncludedBuildTaskGraph.java:166)
        at org.gradle.internal.buildtree.DefaultBuildTreeWorkPreparer.scheduleRequestedTasks(DefaultBuildTreeWorkPreparer.java:34)
        at org.gradle.internal.buildtree.DefaultBuildTreeLifecycleController.lambda$doScheduleAndRunTasks$2(DefaultBuildTreeLifecycleController.java:89)
        at org.gradle.composite.internal.DefaultIncludedBuildTaskGraph.withNewWorkGraph(DefaultIncludedBuildTaskGraph.java:100)
        at org.gradle.internal.buildtree.DefaultBuildTreeLifecycleController.doScheduleAndRunTasks(DefaultBuildTreeLifecycleController.java:88)
        at org.gradle.internal.buildtree.DefaultBuildTreeLifecycleController.lambda$runBuild$4(DefaultBuildTreeLifecycleController.java:106)
        at org.gradle.internal.model.StateTransitionController.lambda$transition$5(StateTransitionController.java:166)
        at org.gradle.internal.model.StateTransitionController.doTransition(StateTransitionController.java:247)
        at org.gradle.internal.model.StateTransitionController.lambda$transition$6(StateTransitionController.java:166)
        at org.gradle.internal.work.DefaultSynchronizer.withLock(DefaultSynchronizer.java:44)
        at org.gradle.internal.model.StateTransitionController.transition(StateTransitionController.java:166)
        at org.gradle.internal.buildtree.DefaultBuildTreeLifecycleController.runBuild(DefaultBuildTreeLifecycleController.java:103)
        at org.gradle.internal.buildtree.DefaultBuildTreeLifecycleController.scheduleAndRunTasks(DefaultBuildTreeLifecycleController.java:69)
        at org.gradle.tooling.internal.provider.ExecuteBuildActionRunner.run(ExecuteBuildActionRunner.java:31)
        at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
        at org.gradle.internal.buildtree.ProblemReportingBuildActionRunner.run(ProblemReportingBuildActionRunner.java:49)
        at org.gradle.launcher.exec.BuildOutcomeReportingBuildActionRunner.run(BuildOutcomeReportingBuildActionRunner.java:65)
        at org.gradle.tooling.internal.provider.FileSystemWatchingBuildActionRunner.run(FileSystemWatchingBuildActionRunner.java:136)
        at org.gradle.launcher.exec.BuildCompletionNotifyingBuildActionRunner.run(BuildCompletionNotifyingBuildActionRunner.java:41)
        at org.gradle.launcher.exec.RootBuildLifecycleBuildActionExecutor.lambda$execute$0(RootBuildLifecycleBuildActionExecutor.java:40)
        at org.gradle.composite.internal.DefaultRootBuildState.run(DefaultRootBuildState.java:122)
        at org.gradle.launcher.exec.RootBuildLifecycleBuildActionExecutor.execute(RootBuildLifecycleBuildActionExecutor.java:40)
        at org.gradle.internal.buildtree.DefaultBuildTreeContext.execute(DefaultBuildTreeContext.java:40)
        at org.gradle.launcher.exec.BuildTreeLifecycleBuildActionExecutor.lambda$execute$0(BuildTreeLifecycleBuildActionExecutor.java:65)
        at org.gradle.internal.buildtree.BuildTreeState.run(BuildTreeState.java:53)
        at org.gradle.launcher.exec.BuildTreeLifecycleBuildActionExecutor.execute(BuildTreeLifecycleBuildActionExecutor.java:65)
        at org.gradle.launcher.exec.RunAsBuildOperationBuildActionExecutor$3.call(RunAsBuildOperationBuildActionExecutor.java:61)
        at org.gradle.launcher.exec.RunAsBuildOperationBuildActionExecutor$3.call(RunAsBuildOperationBuildActionExecutor.java:57)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
        at org.gradle.launcher.exec.RunAsBuildOperationBuildActionExecutor.execute(RunAsBuildOperationBuildActionExecutor.java:57)
        at org.gradle.launcher.exec.RunAsWorkerThreadBuildActionExecutor.lambda$execute$0(RunAsWorkerThreadBuildActionExecutor.java:36)
        at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:249)
        at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:109)
        at org.gradle.launcher.exec.RunAsWorkerThreadBuildActionExecutor.execute(RunAsWorkerThreadBuildActionExecutor.java:36)
        at org.gradle.tooling.internal.provider.continuous.ContinuousBuildActionExecutor.execute(ContinuousBuildActionExecutor.java:110)
        at org.gradle.tooling.internal.provider.SubscribableBuildActionExecutor.execute(SubscribableBuildActionExecutor.java:64)
        at org.gradle.internal.session.DefaultBuildSessionContext.execute(DefaultBuildSessionContext.java:46)
        at org.gradle.tooling.internal.provider.BuildSessionLifecycleBuildActionExecuter$ActionImpl.apply(BuildSessionLifecycleBuildActionExecuter.java:100)
        at org.gradle.tooling.internal.provider.BuildSessionLifecycleBuildActionExecuter$ActionImpl.apply(BuildSessionLifecycleBuildActionExecuter.java:88)
        at org.gradle.internal.session.BuildSessionState.run(BuildSessionState.java:69)
        at org.gradle.tooling.internal.provider.BuildSessionLifecycleBuildActionExecuter.execute(BuildSessionLifecycleBuildActionExecuter.java:62)
        at org.gradle.tooling.internal.provider.BuildSessionLifecycleBuildActionExecuter.execute(BuildSessionLifecycleBuildActionExecuter.java:41)
        at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:63)
        at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:31)
        at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:52)
        at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:40)
        at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:47)
        at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:31)
        at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:65)
        at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
        at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:39)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
        at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:29)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
        at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:35)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
        at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.create(ForwardClientInput.java:78)
        at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.create(ForwardClientInput.java:75)
        at org.gradle.util.internal.Swapper.swap(Swapper.java:38)
        at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:75)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
        at org.gradle.launcher.daemon.server.exec.LogAndCheckHealth.execute(LogAndCheckHealth.java:55)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
        at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:63)
        at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
        at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:84)
        at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
        at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:52)
        at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:297)
        at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
        at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)

Instead of the "allureServe" gradle task, the "test" task is executed

I'm submitting a ...

  • bug report

What is the current behavior?

Instead of the "allureServe" gradle task, the "test" task is executed

If the current behavior is a bug, please provide the steps to reproduce and if possible a minimal demo of the problem

Updated gradle plugin from version 2.8.1 to version 2.9.3

  1. Opening the gradle panel in Idea
  2. Run the "allureServe" task
  3. The build of the project started, incl. "test" task
    (screen in atach)

What is the expected behavior?

The server will start and the browser tab will open with the Allure report

Please tell us about your environment:

Allure version 2.9.3
Test framework JUnit5

Other information

photo_2021-09-29_10-13-30

The testCompile configuration is deprecated in Gradle 4

I'm submitting a ...

  • bug report

What is the current behavior?

When building an Android project using gradle 4.1 and the android gradle plugin 3.0 a warning message is emitted when running any gradle command:

Configuration 'testCompile' in project ':app' is deprecated. Use 'testImplementation' instead.

The relevant config details:

gradle/wrapper/gradle-wrapper.properties:

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-milestone-1-all.zip

build.gradle:

buildscript {
	dependencies {
		classpath 'com.android.tools.build:gradle:3.0.0-alpha8'
	}
}

If the configuration option is manually set to "testImplementation" the warning disappears.

allure {
	version = "2.2.1"
	autoconfigure = true
	configuration = "testImplementation"
}

What is the expected behavior?

Android is using the new dependency configurations. It would be nice if this plugin could be cognizant of that setup and use the correct default configuration.

Please tell us about your environment:

| Allure version | 2.2.0 |

jUnit 5 support

I'm submitting a ...

  • bug report
  • feature request
  • support request => Please do not submit support request here, see note at the top of this template.

What is the current behavior?

Allure Gradle doesn't support junit 5 integration

What is the expected behavior?

useJunit5 {
}

What is the motivation / use case for changing the behavior?

Please tell us about your environment:

Allure version any
Test framework [email protected]
Allure adaptor any
Generate report using [email protected]

Other information

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.