I want to fail the gradle build if the current project still has snapshot dependencies.
My code so far only looks for java dependencies, missing the .NET ones so it only works for java projects. I want to make it work for all projects.
def addSnapshotCheckingTask(Project project) { project.tasks.withType(JavaCompile) { compileJava -> project.tasks.create(compileJava.name + 'SnapshotChecking', { onlyIf { project.ext.isRelease || project.ext.commitVersion != null } compileJava.dependsOn it doLast { def snapshots = compileJava.classpath .filter { project.ext.isRelease || !(it.path ==~ /(?i)${project.rootProject.projectDir.toString().replace('\', '\\')}.*build.libs.*/) } .filter { it.path =~ /(?i)-SNAPSHOT/ } .collect { it.name } .unique() if (!snapshots.isEmpty()) { throw new GradleException("Please get rid of snapshots for following dependencies before releasing $snapshots") } } }) } }
I need some help in generifying this snippet to be applicable to all types of dependencies(not just java)
Thanks!
L.E. Could something like this work? https://discuss.gradle.org/t/how-can-i-check-for-snapshot-dependencies-and-throw-an-exception-if-some-where-found/4064
Advertisement
Answer
Something like
Collection<ResolvedArtifact> snapshotArtifacts = project.configurations*.resolvedConfiguration.resolvedArtifacts.filter { it.moduleVersion.id.version.endsWith('-SNAPSHOT') } if (!snapshotArtifacts.empty) { // throw exception }
See https://docs.gradle.org/current/javadoc/org/gradle/api/artifacts/Configuration.html#getResolvedConfiguration– https://docs.gradle.org/current/javadoc/org/gradle/api/artifacts/ResolvedConfiguration.html#getResolvedArtifacts–