Skip to content

Commit 360e1f2

Browse files
committed
0.6 - Dedicated Gradle plugin, Changelog from CLI, API restructuring (MinecraftForge#2)
1 parent 6d2517f commit 360e1f2

39 files changed

+1875
-377
lines changed

.github/workflows/plugin-publish.yml

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
name: Publish
2+
3+
on:
4+
push:
5+
branches: [ 'master' ]
6+
paths:
7+
- 'gradle-plugin/**'
8+
- '!.github/workflows/**'
9+
- '!README.md'
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: ':gradle-plugin:check :gradle-plugin:publish'
20+
artifact_name: 'gitversion-gradle'
21+
project_path: 'gradle-plugin'
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 }}

.github/workflows/publish.yml

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,10 @@ name: Publish
22

33
on:
44
push:
5-
branches: [ "master" ]
5+
branches: [ 'master' ]
66
paths-ignore:
77
- '.github/workflows/**'
88
- 'README.md'
9-
- 'settings.gradle'
109

1110
permissions:
1211
contents: read
@@ -16,8 +15,8 @@ jobs:
1615
uses: MinecraftForge/SharedActions/.github/workflows/gradle.yml@v0
1716
with:
1817
java: 17
19-
gradle_tasks: "check publish"
20-
artifact_name: "gitversion"
18+
gradle_tasks: 'check publish'
19+
artifact_name: 'gitversion'
2120
secrets:
2221
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}
2322
PROMOTE_ARTIFACT_WEBHOOK: ${{ secrets.PROMOTE_ARTIFACT_WEBHOOK }}

.gitversion

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
[gradlePlugin]
2+
path = "gradle-plugin"
3+
tag = "gradle"

build.gradle

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ final projectArtifactId = base.archivesName = 'gitversion'
1414
final projectVendor = 'Forge Development LLC'
1515
description = 'Used by MinecraftForge projects to calculate project versions based on Git history.'
1616
group = 'net.minecraftforge'
17-
version = gitversion.tagOffset
17+
//version = gitversion.tagOffset
18+
version = '0.6.0-alpha.1'
1819

1920
println "Version: $version"
2021

@@ -44,6 +45,9 @@ dependencies {
4445
// Config
4546
implementation libs.toml
4647

48+
// JSON Output
49+
implementation libs.gson
50+
4751
// CLI
4852
shadowOnly libs.slf4j
4953
shadowOnly libs.jopt

gradle-plugin/build.gradle

Lines changed: 162 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,162 @@
1+
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
2+
import org.gradle.api.attributes.plugin.GradlePluginApiVersion
3+
4+
plugins {
5+
id 'java-gradle-plugin'
6+
id 'groovy'
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 projectDisplayName = 'Git Version Gradle Plugin'
18+
final projectArtifactId = base.archivesName = 'gitversion-gradle'
19+
description = 'A gradle plugin for using Git Version to manage version numbers.'
20+
group = 'net.minecraftforge'
21+
version = gitversion.tagOffset
22+
23+
println "Version: $version"
24+
25+
java {
26+
toolchain.languageVersion = JavaLanguageVersion.of(17)
27+
withSourcesJar()
28+
withJavadocJar()
29+
}
30+
31+
configurations {
32+
named(JavaPlugin.RUNTIME_CLASSPATH_CONFIGURATION_NAME) {
33+
// Fixes a conflict between Git Version's shadowed SLF4J from JGit and Gradle's own loggers
34+
exclude group: 'org.slf4j', module: 'slf4j-api'
35+
}
36+
37+
// Applies the "Gradle Plugin API Version" attribute to configuration
38+
// This was added in Gradle 7, gives consumers useful errors if they are on an old version
39+
def applyGradleVersionAttribute = { Configuration configuration ->
40+
configuration.attributes {
41+
attribute(GradlePluginApiVersion.GRADLE_PLUGIN_API_VERSION_ATTRIBUTE, objects.named(GradlePluginApiVersion, libs.versions.gradle.get()))
42+
}
43+
}
44+
45+
named('apiElements', applyGradleVersionAttribute)
46+
named('runtimeElements', applyGradleVersionAttribute)
47+
named('shadowRuntimeElements', applyGradleVersionAttribute)
48+
}
49+
50+
dependencies {
51+
// Gradle API
52+
compileOnly libs.gradle
53+
compileOnly libs.nulls
54+
55+
runtimeOnly libs.gradleutils.plugin
56+
compileOnly libs.gradleutils.binary
57+
58+
// Git Version
59+
implementation libs.gitver
60+
implementation libs.gson
61+
}
62+
63+
// Removes local Gradle API from compileOnly. This is a workaround for bugged plugins.
64+
// TODO [GradleUtils][GradleAPI] Remove this once they are fixed.
65+
// Publish Plugin: https://github.com/gradle/plugin-portal-requests/issues/260
66+
// Shadow: https://github.com/GradleUp/shadow/pull/1422
67+
afterEvaluate { project ->
68+
project.configurations.named(JavaPlugin.COMPILE_ONLY_CONFIGURATION_NAME) { compileOnly ->
69+
compileOnly.dependencies.remove project.dependencies.gradleApi()
70+
}
71+
}
72+
73+
license {
74+
header = rootProject.file('../LICENSE-header.txt')
75+
newLine = false
76+
exclude '**/*.properties'
77+
}
78+
79+
tasks.named('jar', Jar) {
80+
archiveClassifier = 'thin'
81+
}
82+
83+
tasks.named('shadowJar', ShadowJar) {
84+
enableAutoRelocation = true
85+
archiveClassifier = null
86+
relocationPrefix = 'net.minecraftforge.gitversion.gradle.shadow'
87+
}
88+
89+
tasks.withType(GroovyCompile).configureEach {
90+
groovyOptions.optimizationOptions.indy = true
91+
}
92+
93+
tasks.withType(Javadoc).configureEach {
94+
javadocTool = javaToolchains.javadocToolFor { languageVersion = JavaLanguageVersion.of(24) }
95+
96+
options { StandardJavadocDocletOptions options ->
97+
options.windowTitle = projectDisplayName + project.version
98+
options.tags 'apiNote:a:API Note:', 'implNote:a:Implementation Note:'
99+
}
100+
}
101+
102+
changelog {
103+
fromBase()
104+
publishAll = false
105+
}
106+
107+
gradlePlugin {
108+
website.set gitversion.url
109+
vcsUrl.set gitversion.url + '.git'
110+
111+
plugins {
112+
register('gitversion') {
113+
id = 'net.minecraftforge.gitversion'
114+
implementationClass = 'net.minecraftforge.gitversion.gradle.GitVersionPlugin'
115+
displayName = projectDisplayName
116+
description = project.description
117+
tags.set(['git', 'version'])
118+
}
119+
120+
register('changelog') {
121+
id = 'net.minecraftforge.changelog'
122+
implementationClass = 'net.minecraftforge.gitversion.gradle.ChangelogPlugin'
123+
displayName = 'Git Changelog'
124+
description = 'Creates a changelog text file based on git history using GitVersion.'
125+
tags.set(['git', 'changelog'])
126+
}
127+
}
128+
}
129+
130+
// Allows the thin jar to be published, but won't be considered as the java-runtime variant in the module
131+
// This forces Gradle to use the fat jar when applying the plugin
132+
(components.java as AdhocComponentWithVariants).withVariantsFromConfiguration(configurations.runtimeElements) {
133+
skip()
134+
}
135+
136+
publishing {
137+
publications.register('pluginMaven', MavenPublication) {
138+
artifactId = projectArtifactId
139+
changelog.publish it
140+
141+
pom { pom ->
142+
name = projectDisplayName
143+
description = project.description
144+
145+
gradleutils.pom.setGitHubDetails pom
146+
147+
licenses {
148+
license gradleutils.pom.licenses.LGPLv2_1
149+
}
150+
151+
developers {
152+
developer gradleutils.pom.developers.Jonathing
153+
}
154+
}
155+
}
156+
157+
repositories {
158+
maven gradleutils.publishingForgeMaven
159+
}
160+
}
161+
162+
idea.module { downloadSources = downloadJavadoc = true }

gradle-plugin/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

gradle-plugin/settings.gradle

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
plugins {
2+
id 'org.gradle.toolchains.foojay-resolver-convention' version '0.10.0'
3+
}
4+
5+
rootProject.name = 'gitversion-gradle'
6+
7+
dependencyResolutionManagement {
8+
repositories {
9+
maven { url = 'https://maven.minecraftforge.net/' }
10+
maven { url = 'https://maven.moddinglegacy.com' } // Gradle API
11+
mavenCentral()
12+
mavenLocal()
13+
}
14+
15+
versionCatalogs.register('libs') {
16+
plugin 'licenser', 'net.minecraftforge.licenser' version '1.2.0' // https://plugins.gradle.org/plugin/net.minecraftforge.licenser
17+
plugin 'gradleutils', 'net.minecraftforge.gradleutils' version '2.6.0' // https://plugins.gradle.org/plugin/net.minecraftforge.gradleutils
18+
plugin 'javadoc-links', 'io.freefair.javadoc-links' version '8.14' // https://plugins.gradle.org/plugin/io.freefair.javadoc-links
19+
plugin 'plugin-publish', 'com.gradle.plugin-publish' version '1.3.1' // https://plugins.gradle.org/plugin/com.gradle.plugin-publish
20+
plugin 'shadow', 'com.gradleup.shadow' version '9.0.0-rc3' // https://plugins.gradle.org/plugin/com.gradleup.shadow
21+
22+
//https://repos.moddinglegacy.com/modding-legacy/name/remal/gradle-api/gradle-api/9.0.0/gradle-api-9.0.0.pom
23+
//https://repos.moddinglegacy.com/modding-legacy/#/name/remal/gradle-api/gradle-api/9.0.0/gradle-api-9.0.0.pom
24+
// Gradle API
25+
// TODO [ForgeGradle][FG7][Gradle Api] REMOVE once Gradle publish their own API artifacts
26+
// Original: https://github.com/remal-gradle-api/packages/packages/760197
27+
// Mirror: https://maven.moddinglegacy.com/#browse/browse:maven-public:name%2Fremal%2Fgradle-api%2Fgradle-api%2F8.14.1
28+
version 'gradle', '9.0.0'
29+
library 'gradle', 'name.remal.gradle-api', 'gradle-api' versionRef 'gradle'
30+
library 'nulls', 'org.jetbrains', 'annotations' version '26.0.2'
31+
32+
// GradleUtils
33+
// https://plugins.gradle.org/plugin/net.minecraftforge.gradleutils
34+
version 'gradleutils', '3.0.0-alpha.1'
35+
library 'gradleutils-plugin', 'net.minecraftforge.gradleutils', 'net.minecraftforge.gradleutils.gradle.plugin' versionRef 'gradleutils'
36+
library 'gradleutils-binary', 'net.minecraftforge', 'gradleutils' versionRef 'gradleutils'
37+
bundle 'gradleutils', ['gradleutils-plugin', 'gradleutils-binary']
38+
39+
// Git Version
40+
library 'gitver', 'net.minecraftforge', 'gitversion' version '0.6.0-alpha.1'
41+
42+
// JSON Output
43+
library 'gson', 'com.google.code.gson', 'gson' version '2.13.1'
44+
}
45+
}

0 commit comments

Comments
 (0)