Skip to content

0.6 - Dedicated Gradle plugin, Changelog from CLI, API restructuring #2

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Aug 11, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 30 additions & 0 deletions .github/workflows/plugin-publish.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
name: Publish

on:
push:
branches: [ 'master' ]
paths:
- 'gradle-plugin/**'
- '!.github/workflows/**'
- '!README.md'

permissions:
contents: read

jobs:
build:
uses: MinecraftForge/SharedActions/.github/workflows/gradle.yml@v0
with:
java: 17
gradle_tasks: ':gradle-plugin:check :gradle-plugin:publish :gradle-plugin:publishPlugins'
artifact_name: 'gitversion-gradle'
project_path: 'gradle-plugin'
secrets:
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}
PROMOTE_ARTIFACT_WEBHOOK: ${{ secrets.PROMOTE_ARTIFACT_WEBHOOK }}
PROMOTE_ARTIFACT_USERNAME: ${{ secrets.PROMOTE_ARTIFACT_USERNAME }}
PROMOTE_ARTIFACT_PASSWORD: ${{ secrets.PROMOTE_ARTIFACT_PASSWORD }}
MAVEN_USER: ${{ secrets.MAVEN_USER }}
MAVEN_PASSWORD: ${{ secrets.MAVEN_PASSWORD }}
GRADLE_PUBLISH_KEY: ${{ secrets.GRADLE_PUBLISH_KEY }}
GRADLE_PUBLISH_SECRET: ${{ secrets.GRADLE_PUBLISH_SECRET }}
7 changes: 3 additions & 4 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,10 @@ name: Publish

on:
push:
branches: [ "master" ]
branches: [ 'master' ]
paths-ignore:
- '.github/workflows/**'
- 'README.md'
- 'settings.gradle'

permissions:
contents: read
Expand All @@ -16,8 +15,8 @@ jobs:
uses: MinecraftForge/SharedActions/.github/workflows/gradle.yml@v0
with:
java: 17
gradle_tasks: "check publish"
artifact_name: "gitversion"
gradle_tasks: 'check publish'
artifact_name: 'gitversion'
secrets:
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}
PROMOTE_ARTIFACT_WEBHOOK: ${{ secrets.PROMOTE_ARTIFACT_WEBHOOK }}
Expand Down
3 changes: 3 additions & 0 deletions .gitversion
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[gradlePlugin]
path = "gradle-plugin"
tag = "gradle"
3 changes: 3 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,9 @@ dependencies {
// Config
implementation libs.toml

// JSON Output
implementation libs.gson

// CLI
shadowOnly libs.slf4j
shadowOnly libs.jopt
Expand Down
168 changes: 168 additions & 0 deletions gradle-plugin/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,168 @@
//import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
import org.gradle.api.attributes.plugin.GradlePluginApiVersion

plugins {
id 'java-gradle-plugin'
id 'groovy'
id 'idea'
id 'eclipse'
id 'maven-publish'
alias libs.plugins.licenser
alias libs.plugins.gradleutils
alias libs.plugins.javadoc.links
alias libs.plugins.plugin.publish
//alias libs.plugins.shadow
}

final projectDisplayName = 'Git Version Gradle Plugin'
final projectArtifactId = base.archivesName = 'gitversion-gradle'
description = 'A gradle plugin for using Git Version to manage version numbers.'
group = 'net.minecraftforge'
version = gitversion.tagOffset

println "Version: $version"

java {
toolchain.languageVersion = JavaLanguageVersion.of(17)
withSourcesJar()
withJavadocJar()
}

configurations {
named(JavaPlugin.RUNTIME_CLASSPATH_CONFIGURATION_NAME) {
// Fixes a conflict between Git Version's shadowed SLF4J from JGit and Gradle's own loggers
exclude group: 'org.slf4j', module: 'slf4j-api'
}

// Applies the "Gradle Plugin API Version" attribute to configuration
// This was added in Gradle 7, gives consumers useful errors if they are on an old version
def applyGradleVersionAttribute = { Configuration configuration ->
configuration.attributes {
attribute(GradlePluginApiVersion.GRADLE_PLUGIN_API_VERSION_ATTRIBUTE, objects.named(GradlePluginApiVersion, libs.versions.gradle.get()))
}
}

named('apiElements', applyGradleVersionAttribute)
named('runtimeElements', applyGradleVersionAttribute)
//named('shadowRuntimeElements', applyGradleVersionAttribute)
}

dependencies {
// Gradle API
compileOnly libs.gradle
compileOnly libs.nulls

runtimeOnly libs.gradleutils.plugin
compileOnly libs.gradleutils.binary

// Git Version
implementation libs.gitver
implementation libs.gson
}

/*
// Removes local Gradle API from compileOnly. This is a workaround for bugged plugins.
// TODO [GradleUtils][GradleAPI] Remove this once they are fixed.
// Publish Plugin: https://github.com/gradle/plugin-portal-requests/issues/260
// Shadow: https://github.com/GradleUp/shadow/pull/1422
afterEvaluate { project ->
project.configurations.named(JavaPlugin.COMPILE_ONLY_CONFIGURATION_NAME) { compileOnly ->
compileOnly.dependencies.remove project.dependencies.gradleApi()
}
}
*/

license {
header = rootProject.file('../LICENSE-header.txt')
newLine = false
exclude '**/*.properties'
}

tasks.named('jar', Jar) {
archiveClassifier = 'thin'
}

/*
tasks.named('shadowJar', ShadowJar) {
enableAutoRelocation = true
archiveClassifier = null
relocationPrefix = 'net.minecraftforge.gitversion.gradle.shadow'
}
*/

tasks.withType(GroovyCompile).configureEach {
groovyOptions.optimizationOptions.indy = true
}

tasks.withType(Javadoc).configureEach {
javadocTool = javaToolchains.javadocToolFor { languageVersion = JavaLanguageVersion.of(24) }

options { StandardJavadocDocletOptions options ->
options.windowTitle = projectDisplayName + project.version
options.tags 'apiNote:a:API Note:', 'implNote:a:Implementation Note:'
}
}

changelog {
fromBase()
publishAll = false
}

gradlePlugin {
website.set gitversion.url
vcsUrl.set gitversion.url + '.git'

plugins {
register('gitversion') {
id = 'net.minecraftforge.gitversion'
implementationClass = 'net.minecraftforge.gitversion.gradle.GitVersionPlugin'
displayName = projectDisplayName
description = project.description
tags.set(['git', 'version'])
}

register('changelog') {
id = 'net.minecraftforge.changelog'
implementationClass = 'net.minecraftforge.gitversion.gradle.ChangelogPlugin'
displayName = 'Git Changelog'
description = 'Creates a changelog text file based on git history using GitVersion.'
tags.set(['git', 'changelog'])
}
}
}

/*
// Allows the thin jar to be published, but won't be considered as the java-runtime variant in the module
// This forces Gradle to use the fat jar when applying the plugin
(components.java as AdhocComponentWithVariants).withVariantsFromConfiguration(configurations.runtimeElements) {
skip()
}
*/

publishing {
publications.register('pluginMaven', MavenPublication) {
artifactId = projectArtifactId
changelog.publish it

pom { pom ->
name = projectDisplayName
description = project.description

gradleutils.pom.setGitHubDetails pom

licenses {
license gradleutils.pom.licenses.LGPLv2_1
}

developers {
developer gradleutils.pom.developers.Jonathing
}
}
}

repositories {
maven gradleutils.publishingForgeMaven
}
}

idea.module { downloadSources = downloadJavadoc = true }
8 changes: 8 additions & 0 deletions gradle-plugin/gradle.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
org.gradle.caching=true
org.gradle.parallel=true
org.gradle.configureondemand=true

#org.gradle.configuration-cache=true
#org.gradle.configuration-cache.parallel=true

systemProp.org.gradle.unsafe.suppress-gradle-api=true
45 changes: 45 additions & 0 deletions gradle-plugin/settings.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
plugins {
id 'org.gradle.toolchains.foojay-resolver-convention' version '0.10.0'
}

rootProject.name = 'gitversion-gradle'

dependencyResolutionManagement {
repositories {
maven { url = 'https://maven.minecraftforge.net/' }
maven { url = 'https://maven.moddinglegacy.com' } // Gradle API
mavenCentral()
mavenLocal()
}

versionCatalogs.register('libs') {
plugin 'licenser', 'net.minecraftforge.licenser' version '1.2.0' // https://plugins.gradle.org/plugin/net.minecraftforge.licenser
plugin 'gradleutils', 'net.minecraftforge.gradleutils' version '2.6.0' // https://plugins.gradle.org/plugin/net.minecraftforge.gradleutils
plugin 'javadoc-links', 'io.freefair.javadoc-links' version '8.14' // https://plugins.gradle.org/plugin/io.freefair.javadoc-links
plugin 'plugin-publish', 'com.gradle.plugin-publish' version '1.3.1' // https://plugins.gradle.org/plugin/com.gradle.plugin-publish
plugin 'shadow', 'com.gradleup.shadow' version '9.0.0-rc3' // https://plugins.gradle.org/plugin/com.gradleup.shadow

//https://repos.moddinglegacy.com/modding-legacy/name/remal/gradle-api/gradle-api/9.0.0/gradle-api-9.0.0.pom
//https://repos.moddinglegacy.com/modding-legacy/#/name/remal/gradle-api/gradle-api/9.0.0/gradle-api-9.0.0.pom
// Gradle API
// TODO [ForgeGradle][FG7][Gradle Api] REMOVE once Gradle publish their own API artifacts
// Original: https://github.com/remal-gradle-api/packages/packages/760197
// Mirror: https://maven.moddinglegacy.com/#browse/browse:maven-public:name%2Fremal%2Fgradle-api%2Fgradle-api%2F8.14.1
version 'gradle', '9.0.0'
library 'gradle', 'name.remal.gradle-api', 'gradle-api' versionRef 'gradle'
library 'nulls', 'org.jetbrains', 'annotations' version '26.0.2'

// GradleUtils
// https://plugins.gradle.org/plugin/net.minecraftforge.gradleutils
version 'gradleutils', '3.0.0-alpha.1'
library 'gradleutils-plugin', 'net.minecraftforge.gradleutils', 'net.minecraftforge.gradleutils.gradle.plugin' versionRef 'gradleutils'
library 'gradleutils-binary', 'net.minecraftforge', 'gradleutils' versionRef 'gradleutils'
bundle 'gradleutils', ['gradleutils-plugin', 'gradleutils-binary']

// Git Version
library 'gitver', 'net.minecraftforge', 'gitversion' version '0.6.0-alpha.1'

// JSON Output
library 'gson', 'com.google.code.gson', 'gson' version '2.13.1'
}
}
Loading
Loading