Skip to content

Commit 6b64800

Browse files
committed
Port FG7's ATs to its own Gradle plugin
Also: - Modernize buildscripts - Demo project (disabled for now)
1 parent 36c6ff9 commit 6b64800

29 files changed

+1851
-213
lines changed
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
name: Publish Gradle Plugin
2+
3+
on:
4+
push:
5+
branches: [ 'master' ]
6+
paths:
7+
- at-gradle/**
8+
- '!.github/workflows/**'
9+
- '!settings.gradle'
10+
11+
permissions:
12+
contents: read
13+
14+
jobs:
15+
build:
16+
uses: MinecraftForge/SharedActions/.github/workflows/gradle.yml@v0
17+
with:
18+
java: 17
19+
gradle_tasks: ':at-gradle:publish :at-gradle:publishPlugins'
20+
artifact_name: 'accesstransformers-gradle'
21+
project_path: 'at-gradle'
22+
secrets:
23+
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}
24+
PROMOTE_ARTIFACT_WEBHOOK: ${{ secrets.PROMOTE_ARTIFACT_WEBHOOK }}
25+
PROMOTE_ARTIFACT_USERNAME: ${{ secrets.PROMOTE_ARTIFACT_USERNAME }}
26+
PROMOTE_ARTIFACT_PASSWORD: ${{ secrets.PROMOTE_ARTIFACT_PASSWORD }}
27+
MAVEN_USER: ${{ secrets.MAVEN_USER }}
28+
MAVEN_PASSWORD: ${{ secrets.MAVEN_PASSWORD }}
29+
GRADLE_PUBLISH_KEY: ${{ secrets.GRADLE_PUBLISH_KEY }}
30+
GRADLE_PUBLISH_SECRET: ${{ secrets.GRADLE_PUBLISH_SECRET }}

.gitignore

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,5 @@
2828
/forge-deobfed-new.jar
2929
/forge-deobfed.jar
3030
/out.log
31-
gradle.properties
3231
/**/logs/
3332
/test_results.html

.gitversion

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
[gradlePlugin]
2+
path = "at-gradle"
3+
tag = "gradle"
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
public net.minecraftforge.coremod.CoreModEngine LOGGER
2+
public-f net.minecraftforge.coremod.CoreModEngine COREMOD

at-gradle-demo/build.gradle

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
// TODO [AccessTransformers][at-gradle] Finish Demo project!
2+
// See rootProject's settings.gradle for includeBuild line
3+
4+
plugins {
5+
id 'java'
6+
id 'net.minecraftforge.accesstransformers'
7+
}
8+
9+
java.toolchain.languageVersion = JavaLanguageVersion.of(17)
10+
11+
accessTransformers.register {
12+
config = project.file('accesstransformer.cfg')
13+
}
14+
15+
dependencies {
16+
compileOnly accessTransformers.dep(libs.coremods)
17+
}

at-gradle-demo/settings.gradle

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import org.gradle.api.initialization.resolve.RepositoriesMode
2+
3+
pluginManagement {
4+
includeBuild '../at-gradle'
5+
6+
repositories {
7+
maven { url = 'https://maven.minecraftforge.net' }
8+
}
9+
}
10+
11+
rootProject.name = 'at-gradle-demo'
12+
13+
dependencyResolutionManagement {
14+
repositories {
15+
maven { url = 'https://maven.minecraftforge.net' }
16+
}
17+
18+
repositoriesMode = RepositoriesMode.FAIL_ON_PROJECT_REPOS
19+
20+
versionCatalogs.register('libs') {
21+
library 'coremods', 'net.minecraftforge', 'coremods' version '5.2.6'
22+
}
23+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package net.minecraftforge.debug.accesstransformers;
2+
3+
import net.minecraftforge.coremod.CoreMod;
4+
import net.minecraftforge.coremod.CoreModEngine;
5+
6+
public class TestClass {
7+
public static void main(String[] args) {
8+
System.out.println(CoreMod.COREMODLOG);
9+
System.out.println(CoreModEngine.LOGGER);
10+
}
11+
}

at-gradle/build.gradle

Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
1+
import org.gradle.util.GradleVersion
2+
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
3+
import io.freefair.gradle.plugins.maven.javadoc.JavadocLinkUtil
4+
5+
plugins {
6+
id 'dev.gradleplugins.java-gradle-plugin'
7+
id 'idea'
8+
id 'eclipse'
9+
id 'maven-publish'
10+
alias libs.plugins.licenser
11+
alias libs.plugins.gradleutils
12+
alias libs.plugins.javadoc.links
13+
alias libs.plugins.plugin.publish
14+
alias libs.plugins.shadow
15+
}
16+
17+
final rootBuild = gradle.includedBuild('AccessTransformers')
18+
19+
final projectDisplayName = 'AccessTransformers Gradle Plugin'
20+
final projectArtifactId = base.archivesName = 'accesstransformers-gradle'
21+
description = 'Enables Gradle projects to use AccessTransformers on dependencies with minimal hassle.'
22+
group = 'net.minecraftforge'
23+
version = gitversion.tagOffset
24+
25+
println "Version: $version"
26+
27+
java.toolchain.languageVersion = JavaLanguageVersion.of 8
28+
29+
repositories {
30+
maven { url = 'https://maven.minecraftforge.net' }
31+
mavenCentral()
32+
}
33+
34+
dependencies {
35+
// Utils
36+
implementation libs.bundles.utils
37+
38+
// Static Analysis
39+
compileOnly libs.nulls
40+
}
41+
42+
// Removes local Gradle API from compileOnly. This is a workaround for bugged plugins.
43+
// TODO [GradleUtils][GradleAPI] Remove this once they are fixed.
44+
// Publish Plugin: https://github.com/gradle/plugin-portal-requests/issues/260
45+
// Shadow: https://github.com/GradleUp/shadow/pull/1422
46+
afterEvaluate { project ->
47+
project.configurations.named(JavaPlugin.COMPILE_ONLY_CONFIGURATION_NAME) { compileOnly ->
48+
compileOnly.dependencies.remove project.dependencies.gradleApi()
49+
}
50+
}
51+
52+
license {
53+
header = new File(rootBuild.projectDir, '/LICENSE-header.txt')
54+
newLine = false
55+
exclude '**/*.properties'
56+
}
57+
58+
tasks.named('jar', Jar) {
59+
archiveClassifier = 'thin'
60+
}
61+
62+
tasks.named('shadowJar', ShadowJar) {
63+
enableRelocation = true
64+
archiveClassifier = null
65+
relocationPrefix = 'net.minecraftforge.accesstransformers.gradle.shadow'
66+
}
67+
68+
tasks.withType(Javadoc).configureEach {
69+
javadocTool = javaToolchains.javadocToolFor { languageVersion = JavaLanguageVersion.of 23 }
70+
71+
options { StandardJavadocDocletOptions options ->
72+
options.links(
73+
// Manually included here, since the one at javadoc.io is ass
74+
JavadocLinkUtil.getGradleApiLink(GradleVersion.version(libs.versions.gradle.get()))
75+
)
76+
77+
options.windowTitle = projectDisplayName + project.version
78+
options.tags 'apiNote:a:API Note:', 'implNote:a:Implementation Note:'
79+
}
80+
}
81+
82+
changelog {
83+
fromBase()
84+
publishAll = false
85+
}
86+
87+
gradlePlugin {
88+
website.set gitversion.url
89+
vcsUrl.set gitversion.url + '.git'
90+
91+
compatibility {
92+
minimumGradleVersion = libs.versions.gradle.get()
93+
}
94+
95+
java {
96+
withSourcesJar()
97+
withJavadocJar()
98+
}
99+
100+
plugins.register('accesstransformers') {
101+
id = 'net.minecraftforge.accesstransformers'
102+
implementationClass = 'net.minecraftforge.accesstransformers.gradle.AccessTransformersPlugin'
103+
displayName = projectDisplayName
104+
description = project.description
105+
tags = ['minecraftforge']
106+
}
107+
}
108+
109+
publishing {
110+
publications.register('pluginMaven', MavenPublication) {
111+
artifactId = projectArtifactId
112+
113+
changelog.publish it
114+
115+
pom { pom ->
116+
name = projectDisplayName
117+
description = project.description
118+
119+
gradleutils.pom.setGitHubDetails pom
120+
121+
licenses {
122+
license gradleutils.pom.licenses.LGPLv2_1
123+
}
124+
125+
developers {
126+
developer gradleutils.pom.developers.Jonathing
127+
}
128+
}
129+
}
130+
131+
repositories {
132+
maven gradleutils.getPublishingForgeMaven(new File(rootBuild.projectDir, 'repo'))
133+
134+
maven {
135+
name = 'ModdingLegacyMaven'
136+
url = 'https://maven.moddinglegacy.com/repository/modding-legacy/'
137+
credentials PasswordCredentials
138+
}
139+
}
140+
}
141+
142+
idea.module { downloadSources = downloadJavadoc = true }

at-gradle/gradle.properties

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
org.gradle.caching=true
2+
#org.gradle.parallel=true
3+
#org.gradle.configureondemand=true
4+
5+
#org.gradle.configuration-cache=true
6+
#org.gradle.configuration-cache.parallel=true
7+
8+
systemProp.org.gradle.unsafe.suppress-gradle-api=true

at-gradle/settings.gradle

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import org.gradle.api.initialization.resolve.RepositoriesMode
2+
3+
plugins {
4+
id 'dev.gradleplugins.gradle-plugin-development' version '1.9.0'
5+
id 'org.gradle.toolchains.foojay-resolver-convention' version '0.10.0'
6+
}
7+
8+
rootProject.name = 'at-gradle'
9+
10+
includeBuild '..'
11+
12+
dependencyResolutionManagement {
13+
// Repositories are located in build.gradle for this project
14+
// dev.gradleplugins.groovy-gradle-plugin is bugged and force adds repositories on the project
15+
// so, we can't declare the repositories in here
16+
repositoriesMode = RepositoriesMode.PREFER_PROJECT
17+
18+
versionCatalogs.register('libs') {
19+
plugin 'licenser', 'net.minecraftforge.licenser' version '1.2.0'
20+
plugin 'gradleutils', 'net.minecraftforge.gradleutils' version '2.6.0'
21+
plugin 'javadoc-links', 'io.freefair.javadoc-links' version '8.13.1'
22+
plugin 'plugin-publish', 'com.gradle.plugin-publish' version '1.3.1'
23+
plugin 'shadow', 'com.gradleup.shadow' version '9.0.0-beta13'
24+
25+
// Gradle API
26+
version 'gradle', '7.3'
27+
28+
// Utils
29+
library 'utils-hash', 'net.minecraftforge', 'hash-utils' version '0.1.9'
30+
library 'utils-download', 'net.minecraftforge', 'download-utils' version '0.3.1'
31+
bundle 'utils', ['utils-hash', 'utils-download']
32+
33+
// Static Analysis
34+
library 'nulls', 'org.jetbrains', 'annotations' version '26.0.2'
35+
}
36+
}

0 commit comments

Comments
 (0)