Skip to content

Commit fe143a6

Browse files
feat: New breaking version
1 parent c7bb845 commit fe143a6

14 files changed

Lines changed: 159 additions & 279 deletions

build.gradle.kts

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,36 @@
11
plugins {
22
`java-library`
33
`maven-publish`
4-
alias(libs.plugins.gradlePublish)
4+
id("com.gradle.plugin-publish") version "1.3.0"
55
}
66

77
group = "studio.o7"
8+
version = "0.0.0"
89

910
repositories {
1011
mavenCentral()
1112
gradlePluginPortal()
1213
}
1314

1415
dependencies {
15-
compileOnly(libs.lombok)
16-
annotationProcessor(libs.lombok)
16+
compileOnly("org.projectlombok:lombok:1.18.36")
17+
annotationProcessor("org.projectlombok:lombok:1.18.36")
1718

18-
implementation(libs.shadow)
19-
implementation(libs.mavenCentralPublisher)
19+
implementation("com.gradleup.shadow:shadow-gradle-plugin:8.3.5")
20+
implementation("net.thebugmc.gradle.sonatype-central-portal-publisher:net.thebugmc.gradle.sonatype-central-portal-publisher.gradle.plugin:1.2.4")
21+
implementation("org.cthing.build-constants:org.cthing.build-constants.gradle.plugin:2.0.0")
2022

2123
compileOnly(gradleApi())
2224
testImplementation(gradleTestKit())
2325

24-
testImplementation(libs.junit.api)
25-
testRuntimeOnly(libs.junit.engine)
26+
testImplementation("org.junit.jupiter:junit-jupiter-api:5.13.1")
27+
testImplementation("org.junit.jupiter:junit-jupiter:5.13.1")
28+
testImplementation("org.junit.jupiter:junit-jupiter-params:5.13.1")
29+
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.13.1")
30+
testRuntimeOnly("org.junit.platform:junit-platform-launcher:1.12.1")
31+
32+
testImplementation("org.assertj:assertj-core:3.27.3")
33+
testImplementation("org.cthing:assertj-gradle:1.0.0")
2634
}
2735

2836
gradlePlugin {

settings.gradle.kts

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -2,30 +2,7 @@ rootProject.name = "remora"
22

33
pluginManagement {
44
repositories {
5-
mavenLocal()
65
mavenCentral()
76
gradlePluginPortal()
87
}
98
}
10-
11-
dependencyResolutionManagement {
12-
versionCatalogs {
13-
create("libs") {
14-
version("gradlePublish", "1.3.0")
15-
version("lombok", "1.18.36")
16-
version("shadow", "8.3.5")
17-
version("mavenCentralPublisher", "1.2.4")
18-
19-
version("junit", "5.8.1")
20-
21-
library("lombok", "org.projectlombok", "lombok").versionRef("lombok")
22-
library("shadow", "com.gradleup.shadow", "shadow-gradle-plugin").versionRef("shadow")
23-
library("mavenCentralPublisher", "net.thebugmc.gradle.sonatype-central-portal-publisher", "net.thebugmc.gradle.sonatype-central-portal-publisher.gradle.plugin").versionRef("mavenCentralPublisher")
24-
25-
library("junit-api", "org.junit.jupiter", "junit-jupiter").versionRef("junit")
26-
library("junit-engine", "org.junit.jupiter", "junit-engine").versionRef("junit")
27-
28-
plugin("gradlePublish", "com.gradle.plugin-publish").versionRef("gradlePublish")
29-
}
30-
}
31-
}

src/main/java/studio/o7/remora/RemoraPlugin.java

Lines changed: 68 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -5,72 +5,38 @@
55
import net.thebugmc.gradle.sonatypepublisher.CentralPortalExtension;
66
import net.thebugmc.gradle.sonatypepublisher.PublishingType;
77
import net.thebugmc.gradle.sonatypepublisher.SonatypeCentralPortalPublisherPlugin;
8+
import org.cthing.gradle.plugins.buildconstants.BuildConstantsPlugin;
9+
import org.cthing.gradle.plugins.buildconstants.BuildConstantsTask;
810
import org.gradle.api.Plugin;
911
import org.gradle.api.Project;
1012
import org.gradle.api.artifacts.dsl.DependencyHandler;
1113
import org.gradle.api.artifacts.dsl.RepositoryHandler;
1214
import org.gradle.api.logging.Logger;
15+
import org.gradle.api.plugins.ExtensionContainer;
1316
import org.gradle.api.plugins.JavaLibraryPlugin;
14-
import org.gradle.api.plugins.JavaPluginExtension;
15-
import org.gradle.api.plugins.PluginManager;
1617
import org.gradle.api.publish.PublishingExtension;
17-
import org.gradle.api.publish.maven.plugins.MavenPublishPlugin;
1818
import org.gradle.plugins.signing.SigningExtension;
19-
import org.gradle.plugins.signing.SigningPlugin;
20-
import studio.o7.remora.extensions.RemoraExtension;
21-
import studio.o7.remora.extensions.framework.FastUtilsExtension;
22-
import studio.o7.remora.extensions.framework.FrameworkExtension;
23-
import studio.o7.remora.extensions.framework.LombokExtension;
24-
import studio.o7.remora.extensions.publish.SonatypeMavenCentralExtension;
19+
import studio.o7.remora.extensions.DefaultInformationExtension;
20+
import studio.o7.remora.extensions.InformationExtension;
2521

26-
public class RemoraPlugin implements Plugin<Project> {
27-
28-
@Override
29-
public void apply(Project project) {
30-
Logger logger = project.getLogger();
31-
32-
applyNecessaryPlugins(logger, project);
33-
applyNecessaryRepositories(logger, project);
34-
35-
RemoraExtension extension = setupExtension(logger, project);
36-
37-
applyNecessaryProjectConfiguration(logger, project, extension);
38-
applyJavaPluginConfiguration(logger, project, extension);
39-
40-
applyDependencies(logger, project, extension);
41-
42-
applyMavenPublishPluginConfiguration(logger, project, extension);
22+
import java.net.URI;
4323

44-
// todo
45-
// applyPlaceholderConfiguration(logger, project, extension);
46-
}
47-
48-
public static RemoraExtension setupExtension(@NonNull Logger logger, @NonNull Project project) {
49-
logger.info("Setting up the `remora` extension");
50-
return project.getExtensions().create("remora", RemoraExtension.class, project.getObjects());
51-
}
52-
53-
public static void applyNecessaryProjectConfiguration(@NonNull Logger logger, @NonNull Project project, @NonNull RemoraExtension extension) {
54-
logger.info("Applying project `group` and `description` configuration");
55-
project.setGroup(extension.getGroupId());
56-
project.setDescription(extension.getDescription());
57-
}
24+
public class RemoraPlugin implements Plugin<Project> {
5825

59-
public static void applyJavaPluginConfiguration(@NonNull Logger logger, @NonNull Project project, @NonNull RemoraExtension extension) {
60-
logger.info("Applying java configuration");
61-
JavaPluginExtension javaExtension = project.getExtensions().getByType(JavaPluginExtension.class);
62-
javaExtension.getToolchain().getLanguageVersion().set(extension.getJavaVersion());
26+
public static InformationExtension setupExtension(@NonNull Logger logger, @NonNull ExtensionContainer extensions) throws IllegalArgumentException {
27+
logger.info("Setting up the `information` extension");
28+
return extensions.create("information", DefaultInformationExtension.class);
6329
}
6430

6531
public static void applyNecessaryPlugins(@NonNull Logger logger, @NonNull Project project) {
66-
logger.info("Applying necessary plugins `java-library`, `shadow`, `maven-publish`, and `signing`");
32+
logger.info("Applying necessary plugins `java-library`, `shadow`, `build-constants`, and `sonatype-central-publisher`");
6733

68-
PluginManager pluginManager = project.getPluginManager();
34+
var pluginManager = project.getPluginManager();
6935

7036
pluginManager.apply(JavaLibraryPlugin.class);
7137
pluginManager.apply(ShadowPlugin.class);
72-
pluginManager.apply(MavenPublishPlugin.class);
73-
pluginManager.apply(SigningPlugin.class);
38+
pluginManager.apply(BuildConstantsPlugin.class);
39+
pluginManager.apply(SonatypeCentralPortalPublisherPlugin.class);
7440
}
7541

7642
public static void applyNecessaryRepositories(@NonNull Logger logger, @NonNull Project project) {
@@ -79,50 +45,45 @@ public static void applyNecessaryRepositories(@NonNull Logger logger, @NonNull P
7945
RepositoryHandler repositories = project.getRepositories();
8046

8147
repositories.mavenCentral();
48+
repositories.maven(repo -> {
49+
repo.setName("papermc");
50+
repo.setUrl(URI.create("https://repo.papermc.io/repository/maven-public/"));
51+
});
52+
repositories.maven(repo -> {
53+
repo.setName("opencollab-snapshot");
54+
repo.setUrl(URI.create("https://repo.opencollab.dev/main/"));
55+
});
8256
}
8357

84-
public static void applyDependencies(@NonNull Logger logger, @NonNull Project project, @NonNull RemoraExtension extension) {
58+
public static void applyDependencies(@NonNull Logger logger, @NonNull Project project) {
8559
DependencyHandler dependencies = project.getDependencies();
8660

87-
FrameworkExtension framework = extension.getFramework();
88-
89-
LombokExtension lombok = framework.getLombok();
90-
if (lombok.isEnabled()) {
91-
logger.info("Adding dependency `lombok`");
92-
93-
String id = "org.projectlombok:lombok:" + lombok.getVersion();
94-
95-
dependencies.add("compileOnly", id);
96-
dependencies.add("annotationProcessor", id);
97-
}
98-
99-
FastUtilsExtension fastUtils = framework.getFastUtils();
100-
if (fastUtils.isEnabled()) {
101-
logger.info("Adding dependency `fastUtils`");
102-
103-
String id = "it.unimi.dsi:fastutil:" + fastUtils.getVersion();
104-
105-
dependencies.add(fastUtils.getScope().getConfigurationName(), id);
106-
}
61+
logger.info("Adding dependency `lombok`");
62+
String lombokId = "org.projectlombok:lombok:1.18.36";
63+
dependencies.add("compileOnly", lombokId);
64+
dependencies.add("annotationProcessor", lombokId);
10765
}
10866

109-
public static void applyMavenPublishPluginConfiguration(@NonNull Logger logger, @NonNull Project project, RemoraExtension extension) {
110-
SonatypeMavenCentralExtension mavenCentral = extension.getMavenCentral();
111-
if (!mavenCentral.isEnabled()) return;
112-
113-
logger.info("Applying necessary singing configuration");
114-
115-
logger.info("Applying necessary plugin `sonatype-central-publisher`");
116-
project.getPlugins().apply(SonatypeCentralPortalPublisherPlugin.class);
117-
67+
public static void applyMavenPublishPluginConfiguration(@NonNull Logger logger, @NonNull Project project) {
11868
logger.info("Configuring `centralPortal` extension");
11969
project.getExtensions().configure(CentralPortalExtension.class, centralPortal -> {
12070
centralPortal.getUsername().set(System.getenv("SONATYPE_USERNAME"));
12171
centralPortal.getPassword().set(System.getenv("SONATYPE_PASSWORD"));
122-
centralPortal.getName().set(extension.getArtifactId());
12372
centralPortal.getPublishingType().set(PublishingType.USER_MANAGED);
12473
});
12574

75+
project.afterEvaluate(proj -> {
76+
var information = (DefaultInformationExtension) proj.getExtensions().getByType(InformationExtension.class);
77+
proj.getExtensions().configure(CentralPortalExtension.class, centralPortal -> {
78+
centralPortal.getName().set(proj.getName());
79+
centralPortal.pom(pom -> {
80+
if (information.url().isPresent())
81+
pom.getUrl().set(information.url());
82+
information.configurePom(pom);
83+
});
84+
});
85+
});
86+
12687
logger.info("Configuring `signing` extension");
12788
project.getExtensions().configure(SigningExtension.class, signing -> {
12889
signing.useInMemoryPgpKeys(
@@ -133,8 +94,34 @@ public static void applyMavenPublishPluginConfiguration(@NonNull Logger logger,
13394
});
13495
}
13596

136-
public static void applyPlaceholderConfiguration(@NonNull Logger logger, @NonNull Project project, @NonNull RemoraExtension extension) {
137-
logger.info("Applying placeholder replacements");
97+
public static void applyTaskConfiguration(@NonNull Logger logger, @NonNull Project project) {
98+
logger.info("Configuring task `generateBuildConstants`");
99+
project.getTasks().withType(BuildConstantsTask.class).configureEach(task -> {
100+
task.getClassname().set(project.getGroup() + ".BuildConstants");
101+
102+
var information = project.getExtensions().getByType(InformationExtension.class);
103+
var additionalConstants = task.getAdditionalConstants();
104+
105+
if (information.url().isPresent())
106+
additionalConstants.put("PROJECT_URL", information.url());
107+
});
108+
}
109+
110+
@Override
111+
public void apply(Project project) {
112+
var logger = project.getLogger();
113+
114+
applyNecessaryRepositories(logger, project);
115+
applyNecessaryPlugins(logger, project);
116+
117+
var extensions = project.getExtensions();
118+
var extension = setupExtension(logger, extensions);
119+
if (!extension.url().isPresent())
120+
extension.url().set("https://github.com/XXX/YYY");
121+
122+
applyDependencies(logger, project);
123+
applyMavenPublishPluginConfiguration(logger, project);
138124

125+
applyTaskConfiguration(logger, project);
139126
}
140127
}

src/main/java/studio/o7/remora/enums/PublisherType.java

Lines changed: 0 additions & 7 deletions
This file was deleted.

src/main/java/studio/o7/remora/enums/Scope.java

Lines changed: 0 additions & 14 deletions
This file was deleted.
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package studio.o7.remora.extensions;
2+
3+
import org.gradle.api.Action;
4+
import org.gradle.api.publish.maven.*;
5+
import org.gradle.api.reflect.HasPublicType;
6+
import org.gradle.api.reflect.TypeOf;
7+
8+
import static org.gradle.api.reflect.TypeOf.typeOf;
9+
10+
public abstract class DefaultInformationExtension implements InformationExtension, HasPublicType {
11+
private Action<? super MavenPomLicenseSpec> licenseConfigurator;
12+
private Action<? super MavenPomDeveloperSpec> developerConfigurator;
13+
private Action<? super MavenPomScm> scmConfigurator;
14+
private Action<? super MavenPomOrganization> organizationConfigurator;
15+
private Action<? super MavenPomCiManagement> ciConfigurator;
16+
17+
public void configurePom(MavenPom pom) {
18+
if (licenseConfigurator != null)
19+
pom.licenses(licenseConfigurator);
20+
if (developerConfigurator != null)
21+
pom.developers(developerConfigurator);
22+
if (scmConfigurator != null)
23+
pom.scm(scmConfigurator);
24+
if (organizationConfigurator != null)
25+
pom.organization(organizationConfigurator);
26+
if (ciConfigurator != null)
27+
pom.ciManagement(ciConfigurator);
28+
}
29+
30+
public void licenses(Action<? super MavenPomLicenseSpec> action) {
31+
licenseConfigurator = action;
32+
}
33+
34+
public void developers(Action<? super MavenPomDeveloperSpec> action) {
35+
developerConfigurator = action;
36+
}
37+
38+
public void scm(Action<? super MavenPomScm> action) {
39+
scmConfigurator = action;
40+
}
41+
42+
public void organization(Action<? super MavenPomOrganization> action) {
43+
organizationConfigurator = action;
44+
}
45+
46+
public void ciManagement(Action<? super MavenPomCiManagement> action) {
47+
ciConfigurator = action;
48+
}
49+
50+
public TypeOf<?> getPublicType() {
51+
return typeOf(InformationExtension.class);
52+
}
53+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package studio.o7.remora.extensions;
2+
3+
import org.gradle.api.Action;
4+
import org.gradle.api.provider.Property;
5+
import org.gradle.api.publish.maven.*;
6+
import org.gradle.api.tasks.Optional;
7+
8+
public interface InformationExtension {
9+
10+
@Optional
11+
Property<String> url();
12+
13+
void licenses(Action<? super MavenPomLicenseSpec> action);
14+
15+
void developers(Action<? super MavenPomDeveloperSpec> action);
16+
17+
void scm(Action<? super MavenPomScm> action);
18+
19+
@Optional
20+
void organization(Action<? super MavenPomOrganization> action);
21+
22+
void ciManagement(Action<? super MavenPomCiManagement> action);
23+
}

0 commit comments

Comments
 (0)