Skip to content

Commit 6c7ccbc

Browse files
committed
Do not use Problems API, addresses #21
1 parent 993f9d4 commit 6c7ccbc

11 files changed

+112
-171
lines changed

src/main/groovy/net/minecraftforge/gradleutils/ConfigureTeamCity.groovy

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,6 @@ package net.minecraftforge.gradleutils
77
import groovy.transform.CompileStatic
88
import org.gradle.api.DefaultTask
99
import org.gradle.api.Project
10-
import org.gradle.api.problems.ProblemId
11-
import org.gradle.api.problems.Problems
12-
import org.gradle.api.problems.Severity
1310
import org.gradle.api.provider.Property
1411
import org.gradle.api.provider.ProviderFactory
1512
import org.gradle.api.tasks.Input
@@ -36,15 +33,12 @@ abstract class ConfigureTeamCity extends DefaultTask {
3633
project.tasks.register(name, ConfigureTeamCity)
3734
}
3835

39-
@Inject
40-
abstract Problems getProblems()
41-
4236
@Inject
4337
abstract ProviderFactory getProviders()
4438

4539
ConfigureTeamCity() {
4640
this.description = 'Prints the marker lines into the log which configure the pipeline. [deprecated]'
47-
this.onlyIf('Only runs on TeamCity, so the TEAMCITY_VERSION environment variable must be set.') { System.getenv('TEAMCITY_VERSION') }
41+
this.onlyIf('Only runs on TeamCity, so the TEAMCITY_VERSION environment variable must be set.') { GradleUtils.hasEnvVar('TEAMCITY_VERSION', this.providers).get() }
4842

4943
this.version.convention this.providers.provider { this.project.version?.toString() }
5044
}
@@ -55,14 +49,10 @@ abstract class ConfigureTeamCity extends DefaultTask {
5549

5650
@TaskAction
5751
void exec() {
58-
this.problems.reporter.report(ProblemId.create('teamcity-deprecated', 'Usage of TeamCity is deprecated within Minecraft Forge', GradleUtils.PROBLEM_GROUP)) { spec ->
59-
spec.details("""
60-
Minecraft Forge has been gradually moving off of TeamCity and into GitHub Actions.
61-
When the migration is fully complete, this task along with its automatic setup will be removed.""")
62-
.severity(Severity.WARNING)
63-
.solution('Stop using TeamCity.')
64-
.solution('If you still need to use TeamCity, consider using an alternative plugin or making a custom task.')
65-
}
52+
this.logger.warn """
53+
WARNING: Usage of TeamCity is deprecated within Minecraft Forge
54+
Minecraft Forge has been gradually moving off of TeamCity and into GitHub Actions.
55+
When the migration is fully complete, this task along with its automatic setup will be removed."""
6656

6757
this.logger.lifecycle 'Setting project variables and parameters.'
6858
println "##teamcity[buildNumber '${this.version.get()}']"

src/main/groovy/net/minecraftforge/gradleutils/GradleUtils.groovy

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ package net.minecraftforge.gradleutils
66

77
import groovy.transform.CompileDynamic
88
import groovy.transform.CompileStatic
9-
import groovy.transform.PackageScope
109
import net.minecraftforge.gitver.api.GitVersion
1110
import org.eclipse.jgit.api.Git
1211
import org.eclipse.jgit.api.errors.GitAPIException
@@ -18,7 +17,8 @@ import org.eclipse.jgit.util.SystemReader
1817
import org.gradle.api.Action
1918
import org.gradle.api.Project
2019
import org.gradle.api.artifacts.repositories.MavenArtifactRepository
21-
import org.gradle.api.problems.ProblemGroup
20+
import org.gradle.api.provider.Provider
21+
import org.gradle.api.provider.ProviderFactory
2222
import org.gradle.authentication.http.BasicAuthentication
2323
import org.jetbrains.annotations.ApiStatus
2424
import org.jetbrains.annotations.Nullable
@@ -33,15 +33,17 @@ import org.jetbrains.annotations.Nullable
3333
@CompileStatic
3434
@ApiStatus.Internal
3535
class GradleUtils {
36-
@PackageScope static final ProblemGroup PROBLEM_GROUP = ProblemGroup.create(GradleUtilsExtension.NAME, 'MinecraftForge GradleUtils')
37-
3836
static void ensureAfterEvaluate(Project project, Action<? super Project> action) {
3937
if (project.state.executed)
4038
action.execute(project)
4139
else
4240
project.afterEvaluate(action)
4341
}
4442

43+
static Provider<Boolean> hasEnvVar(String name, ProviderFactory providers) {
44+
providers.of(GradleUtilsSources.HasEnvVar) { it.parameters.variableName.set name }
45+
}
46+
4547
//@formatter:off
4648
@CompileDynamic
4749
@Deprecated(forRemoval = true, since = '2.4')

src/main/groovy/net/minecraftforge/gradleutils/GradleUtilsExtension.groovy

Lines changed: 14 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,6 @@ import org.gradle.api.Project
1111
import org.gradle.api.artifacts.repositories.MavenArtifactRepository
1212
import org.gradle.api.file.DirectoryProperty
1313
import org.gradle.api.model.ObjectFactory
14-
import org.gradle.api.problems.ProblemId
15-
import org.gradle.api.problems.Problems
16-
import org.gradle.api.problems.Severity
1714
import org.gradle.api.provider.ProviderFactory
1815

1916
import javax.inject.Inject
@@ -27,7 +24,6 @@ class GradleUtilsExtension {
2724
public static final String NAME = 'gradleutils'
2825

2926
private final Project project
30-
private final Problems problems
3127
private final ProviderFactory providers
3228
private final ObjectFactory objects
3329

@@ -38,25 +34,19 @@ class GradleUtilsExtension {
3834

3935
/** @deprecated Use {@link net.minecraftforge.gitver.api.GitVersion#getRoot() GitVersion.getRoot()} via {@link GitVersionExtension#getVersion()} instead. */
4036
@Deprecated(forRemoval = true, since = '2.4') @Lazy DirectoryProperty gitRoot = {
41-
this.problems.reporter.report(ProblemId.create('deprecated-git-root', 'Usage of deprecated gitRoot', GradleUtils.PROBLEM_GROUP)) { spec ->
42-
spec.details("""
43-
This project is still using 'gradleutils.gitRoot'.
44-
It has been deprecated and will be removed in GradleUtils 3.0.""")
45-
.severity(Severity.WARNING)
46-
.solution("Consider using 'gitversion.version.root' instead.")
47-
}
37+
this.project.logger.warn """
38+
WARNING: This project is still using 'gradleutils.gitRoot'.
39+
It has been deprecated and will be removed in GradleUtils 3.0.
40+
Consider using 'gitversion.version.root' instead."""
4841

4942
objects.directoryProperty().fileProvider providers.provider { this.gitversion.version.root }
5043
}()
5144
/** @deprecated Use {@link net.minecraftforge.gitver.api.GitVersion#getInfo() GitVersion.getInfo()} via {@link GitVersionExtension#getVersion()} instead. */
5245
@Deprecated(forRemoval = true, since = '2.4') @Lazy Map<String, String> gitInfo = {
53-
this.problems.reporter.report(ProblemId.create('deprecated-git-info', 'Usage of deprecated Git Info', GradleUtils.PROBLEM_GROUP)) { spec ->
54-
spec.details("""
55-
This project is still using 'gradleutils.gitInfo'.
56-
It has been deprecated and will be removed in GradleUtils 3.0.""")
57-
.severity(Severity.WARNING)
58-
.solution("Consider using 'gitversion.version.info' instead.")
59-
}
46+
this.project.logger.warn """
47+
WARNING: This project is still using 'gradleutils.gitInfo'.
48+
It has been deprecated and will be removed in GradleUtils 3.0.
49+
Consider using 'gitversion.version.info' instead."""
6050

6151
var version = this.project.extensions.getByType(GitVersionExtension).version
6252
[
@@ -72,17 +62,16 @@ class GradleUtilsExtension {
7262
}()
7363

7464
@Inject
75-
GradleUtilsExtension(Project project, Problems problems, ProviderFactory providers, ObjectFactory objects) {
65+
GradleUtilsExtension(Project project, ProviderFactory providers, ObjectFactory objects) {
7666
this.project = project
77-
this.problems = problems
7867
this.providers = providers
7968
this.objects = objects
8069

8170
// Git Version
8271
this.gitversion = project.extensions.getByType(GitVersionExtension)
8372

8473
// Pom Utils
85-
this.pom = new PomUtils(problems, this.gitversion)
74+
this.pom = new PomUtils(project.logger, providers, this.gitversion)
8675

8776
// Tasks
8877
GenerateActionsWorkflow.register(this.project)
@@ -213,13 +202,10 @@ class GradleUtilsExtension {
213202
}
214203

215204
private void logDeprecation(String name, String fullName) {
216-
this.problems.reporter.report(ProblemId.create("deprecated-$name", "Usage of deprecated method $name", GradleUtils.PROBLEM_GROUP)) { spec ->
217-
spec.details("""
218-
This project is still using 'gradleutils.$fullName'.
219-
It has been deprecated and will be removed in GradleUtils 3.0.""")
220-
.severity(Severity.WARNING)
221-
.solution("Consider using 'gitversion.version.$fullName' instead.")
222-
}
205+
this.project.logger.warn """
206+
WARNING: This project is still using 'gradleutils.$name'.
207+
It has been deprecated and will be removed in GradleUtils 3.0.
208+
Consider using 'gitversion.version.$fullName' instead."""
223209
}
224210

225211
/** @see GradleUtils#getPublishingForgeMaven(Project, File) */

src/main/groovy/net/minecraftforge/gradleutils/GradleUtilsPlugin.groovy

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,13 @@ import net.minecraftforge.gradleutils.gitversion.GitVersionPlugin
1010
import org.gradle.api.Plugin
1111
import org.gradle.api.Project
1212
import org.gradle.api.model.ObjectFactory
13-
import org.gradle.api.problems.Problems
1413
import org.gradle.api.provider.ProviderFactory
1514

1615
import javax.inject.Inject
1716

1817
/** The entry point for the Gradle Utils plugin. Exists to create the {@linkplain GradleUtilsExtension extension}. */
1918
@CompileStatic
2019
abstract class GradleUtilsPlugin implements Plugin<Project> {
21-
@Inject
22-
abstract Problems getProblems()
23-
2420
@Inject
2521
abstract ProviderFactory getProviders()
2622

@@ -31,6 +27,6 @@ abstract class GradleUtilsPlugin implements Plugin<Project> {
3127
void apply(Project project) {
3228
project.plugins.apply(GitVersionPlugin)
3329
project.plugins.apply(ChangelogPlugin)
34-
project.extensions.create(GradleUtilsExtension.NAME, GradleUtilsExtension, project, this.problems, this.providers, this.objects)
30+
project.extensions.create(GradleUtilsExtension.NAME, GradleUtilsExtension, project, this.providers, this.objects)
3531
}
3632
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package net.minecraftforge.gradleutils
2+
3+
import groovy.transform.CompileStatic
4+
import groovy.transform.PackageScope
5+
import org.gradle.api.Describable
6+
import org.gradle.api.provider.Property
7+
import org.gradle.api.provider.ValueSource
8+
import org.gradle.api.provider.ValueSourceParameters
9+
10+
@CompileStatic
11+
@PackageScope
12+
final class GradleUtilsSources {
13+
@CompileStatic
14+
static abstract class HasEnvVar implements ValueSource<Boolean, Parameters>, Describable {
15+
interface Parameters extends ValueSourceParameters {
16+
Property<String> getVariableName();
17+
}
18+
19+
@Override
20+
Boolean obtain() {
21+
final env = System.getenv(this.parameters.variableName.get())
22+
env !== null && !env.isBlank() && !"false".equalsIgnoreCase(env)
23+
}
24+
25+
@Override
26+
String getDisplayName() {
27+
"Environment Variable presense: ${this.parameters.variableName.get()}"
28+
}
29+
}
30+
31+
private GradleUtilsSources() {}
32+
}

src/main/groovy/net/minecraftforge/gradleutils/PomUtils.groovy

Lines changed: 31 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,8 @@ import groovy.transform.CompileStatic
88
import groovy.transform.PackageScope
99
import net.minecraftforge.gradleutils.gitversion.GitVersionExtension
1010
import org.gradle.api.Action
11-
import org.gradle.api.problems.ProblemId
12-
import org.gradle.api.problems.Problems
13-
import org.gradle.api.problems.Severity
11+
import org.gradle.api.logging.Logger
12+
import org.gradle.api.provider.ProviderFactory
1413
import org.gradle.api.publish.maven.MavenPom
1514
import org.gradle.api.publish.maven.MavenPomDeveloper
1615
import org.gradle.api.publish.maven.MavenPomLicense
@@ -19,12 +18,14 @@ import org.gradle.api.publish.maven.MavenPomLicense
1918
@CompileStatic
2019
@SuppressWarnings('unused')
2120
final class PomUtils {
22-
private final Problems problems
21+
private final Logger logger
22+
private final ProviderFactory providers
2323

2424
private final GitVersionExtension gitversion
2525

26-
@PackageScope PomUtils(Problems problems, GitVersionExtension gitversion) {
27-
this.problems = problems
26+
@PackageScope PomUtils(Logger logger, ProviderFactory providers, GitVersionExtension gitversion) {
27+
this.logger = logger
28+
this.providers = providers
2829
this.gitversion = gitversion
2930
}
3031

@@ -82,14 +83,23 @@ final class PomUtils {
8283
}
8384
}
8485

86+
/**
87+
* Reduces boilerplate when setting up GitHub details in a {@link MavenPom}.
88+
*
89+
* @param pom The pom to configure
90+
*/
91+
void setGitHubDetails(MavenPom pom) {
92+
this.setGitHubDetails(pom, '')
93+
}
94+
8595
/**
8696
* Reduces boilerplate when setting up GitHub details in a {@link MavenPom}. The organization is assumed to be
8797
* {@literal 'MinecraftForge'}.
8898
*
8999
* @param pom The pom to configure
90100
* @param repo The name of the repository on GitHub
91101
*/
92-
void setGitHubDetails(MavenPom pom, String repo = '') {
102+
void setGitHubDetails(MavenPom pom, String repo) {
93103
this.setGitHubDetails(pom, 'MinecraftForge', repo)
94104
}
95105

@@ -113,54 +123,31 @@ final class PomUtils {
113123
url = "github.com/${organization}/${repo}".toString()
114124

115125
if (url && url == remoteUrl) {
116-
this.problems.reporter.report(ProblemId.create('github-details-redundant-repo', 'Usage of redundant repo name', GradleUtils.PROBLEM_GROUP)) { spec ->
117-
spec.details("""
118-
The repository name was specified in the 'setGitHubDetails' method, but it was already present in the Git remote URL.
119-
This is redundant and may cause issues if the remote repository URL changes in the future.""")
120-
.severity(Severity.ADVICE)
121-
.stackLocation()
122-
.solution("Remove the repository name from the 'setGitHubDetails' method")
123-
}
126+
this.logger.warn """
127+
WARNING: The repository name was specified in the 'setGitHubDetails' method, but it was already present in the Git remote URL.
128+
This is redundant and may cause issues if the remote repository URL changes in the future."""
124129
}
125130
}
126131

127132
if (!url) {
128-
this.problems.reporter.report(ProblemId.create('github-details-failed', 'Failed to get GitHub URL', GradleUtils.PROBLEM_GROUP)) { spec ->
129-
spec.details("""
130-
The GitHub URL for this repo could not be automatically determined by GitVersion.
131-
This is likely due to the repository not having any remotes, or not having one set.""")
132-
.severity(Severity.ERROR)
133-
.stackLocation()
134-
.solution('Ensure that you have a remote set for your repository')
135-
.solution("Alternatively, define the URL using gradleutils.pom.setGitHubDetails(pom, 'MyOrganization', 'MyRepo') (the organization can be omitted if you are using 'MinecraftForge')")
136-
}
133+
this.logger.warn """
134+
WARNING: The GitHub URL for this repo could not be automatically determined by GitVersion.
135+
This is likely due to the repository not having any remotes, or not having one set."""
137136
return
138137
}
139138

140139
if (!url.contains('github.com')) {
141-
this.problems.reporter.report(ProblemId.create('github-details-not-github', 'GitHub.com not found in repository URL', GradleUtils.PROBLEM_GROUP)) { spec ->
142-
spec.details("""
143-
The repository URL found or created in 'setGitHubDetails' does not include 'github.com'
144-
This is problematic since all Minecraft Forge projects are hosted on GitHub.""")
145-
.severity(Severity.WARNING)
146-
.stackLocation()
147-
.withException(new IllegalArgumentException("Repository URL: ${url}"))
148-
.solution('Ensure that the repository remote URL is a GitHub repository')
149-
.solution("Alternatively, define the URL using gradleutils.pom.setGitHubDetails(pom, 'MyOrganization', 'MyRepo') (the organization can be omitted if you are using 'MinecraftForge')")
150-
}
140+
this.logger.warn """
141+
WARNING: The repository URL found or created in 'setGitHubDetails' does not include 'github.com'
142+
This is problematic since all Minecraft Forge projects are hosted on GitHub.
143+
Found url: ${url}"""
151144
}
152145

153146
if (!url.contains('github.com/MinecraftForge')) {
154-
this.problems.reporter.report(ProblemId.create('github-details-not-forge', 'MinecraftForge not found in repository URL', GradleUtils.PROBLEM_GROUP)) { spec ->
155-
spec.details("""
156-
The repository URL found or created in 'setGitHubDetails' does not include 'github.com/MinecraftForge'
157-
This is problematic if you are attempting to publish this project, especially from GitHub Actions.""")
158-
.severity(Severity.WARNING)
159-
.stackLocation()
160-
.withException(new IllegalArgumentException("Repository URL: ${url}"))
161-
.solution('Ensure that the repository remote URL is a MinecraftForge repository')
162-
.solution("Alternatively, define the URL using gradleutils.pom.setGitHubDetails(pom, 'MyRepo')")
163-
}
147+
this.logger.warn """
148+
WARNING: The repository URL found or created in 'setGitHubDetails' does not include 'github.com/MinecraftForge'
149+
This is problematic if you are attempting to publish this project, especially from GitHub Actions.
150+
Found url: ${url}"""
164151
}
165152

166153
var fullURL = "https://${url}".toString()

src/main/groovy/net/minecraftforge/gradleutils/changelog/ChangelogExtension.groovy

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,8 @@ package net.minecraftforge.gradleutils.changelog
66

77
import groovy.transform.CompileStatic
88
import groovy.transform.PackageScope
9-
import net.minecraftforge.gradleutils.GradleUtils
109
import org.gradle.api.Project
1110
import org.gradle.api.file.Directory
12-
import org.gradle.api.problems.ProblemGroup
13-
import org.gradle.api.problems.Problems
1411
import org.gradle.api.publish.maven.MavenPublication
1512
import org.gradle.api.tasks.TaskProvider
1613
import org.jetbrains.annotations.Nullable
@@ -21,20 +18,17 @@ import javax.inject.Inject
2118
@CompileStatic
2219
class ChangelogExtension {
2320
public static final String NAME = 'changelog'
24-
@PackageScope static final ProblemGroup PROBLEM_GROUP = ProblemGroup.create("gradleutils-changelog", "Changelog Generation")
2521

2622
@PackageScope final Project project
27-
@PackageScope final Problems problems
2823
@PackageScope @Nullable TaskProvider<GenerateChangelog> task
2924

3025
boolean publishAll = true
3126
/** @deprecated The Git root is automatically discovered by Git Version on Changelog generation. */
3227
@Deprecated(forRemoval = true, since = '2.4') @Nullable Directory gitRoot
3328

3429
@Inject
35-
ChangelogExtension(Project project, Problems problems) {
30+
ChangelogExtension(Project project) {
3631
this.project = project
37-
this.problems = problems
3832
}
3933

4034
private void setupTask() {

0 commit comments

Comments
 (0)