Skip to content

Commit

Permalink
draft
Browse files Browse the repository at this point in the history
  • Loading branch information
remal committed May 12, 2024
1 parent 0870ccf commit f1bc8e4
Show file tree
Hide file tree
Showing 9 changed files with 117 additions and 119 deletions.
38 changes: 0 additions & 38 deletions .github/sync-with-template-local-transformations.yml

This file was deleted.

2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,6 @@

# `name.remal.template` plugin

[![configuration cache: not supported](https://img.shields.io/static/v1?label=configuration%20cache&message=not%20supported&color=inactive)](https://docs.gradle.org/current/userguide/configuration_cache.html)
[![configuration cache: supported](https://img.shields.io/static/v1?label=configuration%20cache&message=supported&color=success)](https://docs.gradle.org/current/userguide/configuration_cache.html)

Gradle plugin template
63 changes: 5 additions & 58 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
import org.gradle.util.GradleVersion

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

buildscript {
String rootGroupId = project.ext.rootGroupId = "name.remal.gradle-plugins.${rootProject.name}"
String rootArtifactId = project.ext.rootArtifactId = rootProject.name
String rootSnapshotVersion = project.ext.rootSnapshotVersion = '2-SNAPSHOT'
String rootSnapshotVersion = project.ext.rootSnapshotVersion = '1-SNAPSHOT'
dependencies {
//classpath("$rootGroupId:$rootArtifactId:$rootSnapshotVersion") { version { strictly(rootSnapshotVersion) } }
classpath 'name.remal.gradle-plugins.toolkit:build-logic:0.64.2'
Expand All @@ -27,68 +25,17 @@ apply plugin: 'name.remal.toolkit.build-logic'

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

// TODO: REMOVE THIS SECTION FOR REAL PLUGIN
if (project.isRunningOnCi) {
TaskProvider processGradleProperties = tasks.register('processGradleProperties') {
outputs.upToDateWhen { false }

doLast {
String repositoryName = project.ext['repository-name'] ?: ''
if (repositoryName.isEmpty()) {
throw new GradleException('`repository-name` property is empty')
}
if (repositoryName != 'template') {
throw new GradleException('This code should be executed for template repository only')
}

File file = project.file('gradle.properties')
Properties currentProperties = new Properties()
file.withReader('UTF-8') { currentProperties.load(it) }

String content = file.getText('UTF-8')
Map<String, String> handledProperties = [:]
content = content.replaceFirst(/((?:^|[\r\n]\s*)(gradle-api.min-version))\s*=\s*\d+\S*(\s|$)/) { List<String> groups ->
GradleVersion lastMinorVersion = project.getAllGradleVersions().findAll { GradleVersion ver ->
ver == ver.baseVersion && ver.version.count('.') == 1
}[1]
String value = lastMinorVersion.version
handledProperties[groups[2]] = value
return "${groups[1]} = ${value}${groups[3]}"
}

handledProperties.entrySet().removeIf { entry ->
String currentValue = currentProperties.getProperty(entry.key)
return currentValue == entry.value
}

handledProperties.keySet().forEach { key ->
println " Changing property: $key"
}

if (!handledProperties.isEmpty()) {
file.setText(content, 'UTF-8')
}
}
}

tasks.named('processReadme').configure {
dependsOn(processGradleProperties)
}
}

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

apply plugin: 'java-gradle-plugin'

dependencies {
}

gradlePlugin {
plugins {
'name.remal.template-plugin' {
id = 'name.remal.template-plugin'
implementationClass = 'name.remal.gradle_plugins.template.TemplatePlugin'
displayName = 'Template plugin'
'name.remal.finalize-by-jacoco' {
id = 'name.remal.finalize-by-jacoco'
implementationClass = 'name.remal.gradle_plugins.finalize_by_jacoco.FinalizeByJacocoPlugin'
displayName = 'Finalize Test tasks with Jacoco tasks'
description = property('repository-description')
}
}
Expand Down
2 changes: 1 addition & 1 deletion settings.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@ plugins {
id 'org.gradle.toolchains.foojay-resolver-convention' version '0.8.0'
}

rootProject.name = 'template'
rootProject.name = 'finalize-by-jacoco'
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
package name.remal.gradle_plugins.finalize_by_jacoco;

import static java.util.Collections.emptyList;
import static java.util.stream.Collectors.toList;
import static name.remal.gradle_plugins.toolkit.ExtensionContainerUtils.getOptionalExtension;
import static name.remal.gradle_plugins.toolkit.PredicateUtils.not;

import java.io.File;
import java.util.Collection;
import java.util.List;
import javax.annotation.Nullable;
import lombok.val;
import org.gradle.api.Plugin;
import org.gradle.api.Project;
import org.gradle.api.Task;
import org.gradle.testing.jacoco.plugins.JacocoTaskExtension;
import org.gradle.testing.jacoco.tasks.JacocoBase;
import org.gradle.testing.jacoco.tasks.JacocoReportBase;

public abstract class FinalizeByJacocoPlugin implements Plugin<Project> {

@Override
public void apply(Project project) {
project.getPluginManager().withPlugin("jacoco", __ -> {
configureFinalizedBy(project);
configureDependsOn(project);
});
}


private void configureFinalizedBy(Project project) {
project.getTasks()
.matching(task -> !(task instanceof JacocoBase))
.configureEach(task ->
task.finalizedBy(project.provider(() -> getFinalizedBy(task)))
);
}

private List<Object> getFinalizedBy(Task task) {
val taskExecutionDataFile = getOptionalExtension(task, JacocoTaskExtension.class)
.map(JacocoTaskExtension::getDestinationFile)
.map(File::getAbsoluteFile)
.orElse(null);
if (taskExecutionDataFile == null) {
return emptyList();
}

return task.getProject().getTasks().stream()
.filter(JacocoReportBase.class::isInstance)
.map(JacocoReportBase.class::cast)
.filter(reportTask -> {
val reportExecutionDataFile = singleOrNullFile(reportTask.getExecutionData().getFiles());
if (reportExecutionDataFile == null) {
return false;
}
return reportExecutionDataFile.equals(taskExecutionDataFile);
})
.collect(toList());
}


private void configureDependsOn(Project project) {
project.getTasks()
.withType(JacocoReportBase.class)
.configureEach(reportTask ->
reportTask.dependsOn(project.provider(() -> getDependsOn(reportTask)))
);
}

private List<Object> getDependsOn(JacocoReportBase reportTask) {
val reportExecutionDataFile = singleOrNullFile(reportTask.getExecutionData().getFiles());
if (reportExecutionDataFile == null) {
return emptyList();
}

return reportTask.getProject().getTasks().stream()
.filter(not(JacocoBase.class::isInstance))
.filter(task -> {
val taskExecutionDataFile = getOptionalExtension(task, JacocoTaskExtension.class)
.map(JacocoTaskExtension::getDestinationFile)
.map(File::getAbsoluteFile)
.orElse(null);
if (taskExecutionDataFile == null) {
return false;
}

return taskExecutionDataFile.equals(reportExecutionDataFile);
})
.collect(toList());
}


@Nullable
private static File singleOrNullFile(Collection<? extends File> collection) {
if (collection.size() == 1) {
return collection.iterator().next().getAbsoluteFile();
}

return null;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
@NonNullApi
package name.remal.gradle_plugins.finalize_by_jacoco;

import org.gradle.api.NonNullApi;

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package name.remal.gradle_plugins.template;
package name.remal.gradle_plugins.finalize_by_jacoco;

import static org.junit.jupiter.api.Assertions.assertTrue;

Expand All @@ -8,18 +8,18 @@
import org.junit.jupiter.api.Test;

@RequiredArgsConstructor
class TemplatePluginTest {
class FinalizeByJacocoPluginTest {

final Project project;

@BeforeEach
void beforeEach() {
project.getPluginManager().apply(TemplatePlugin.class);
project.getPluginManager().apply(FinalizeByJacocoPlugin.class);
}

@Test
void test() {
assertTrue(project.getPlugins().hasPlugin(TemplatePlugin.class));
assertTrue(project.getPlugins().hasPlugin(FinalizeByJacocoPlugin.class));
}

}

0 comments on commit f1bc8e4

Please sign in to comment.