diff --git a/build.gradle b/build.gradle index 220d900..99bda00 100644 --- a/build.gradle +++ b/build.gradle @@ -1,10 +1,17 @@ plugins { id 'fabric-loom' version '0.5-SNAPSHOT' id 'maven-publish' + id 'com.matthewprenger.cursegradle' version '1.4.0' + id 'org.ajoberstar.grgit' version '3.1.1' + id 'com.github.breadmoirai.github-release' version '2.2.9' + id 'com.wynprice.cursemaven' version '1.2.3' } sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 +// Adds a few utility methods like getProjectProperty +apply from: 'https://raw.githubusercontent.com/NerdHubMC/Gradle-Scripts/master/scripts/utilities.gradle' +apply from: 'https://raw.githubusercontent.com/NerdHubMC/Gradle-Scripts/master/scripts/fabric/publish/changelog.gradle' archivesBaseName = project.archives_base_name version = project.mod_version @@ -70,3 +77,139 @@ publishing { // mavenLocal() } } + +// configure the maven publication +publishing { + publications { + mavenJava(MavenPublication) { + // add all the jars that should be included when publishing to maven + artifact(remapJar) { + builtBy remapJar + } + artifact(sourcesJar) { + builtBy remapSourcesJar + } + } + } + + // select the repositories you want to publish to + repositories { + // uncomment to publish to the local maven + // mavenLocal() + } +} + + +task checkGitStatus() { + group = 'publishing' + description = 'Checks that the git repository is in a state suitable for release' + doLast { + if (grgit == null) throw new RuntimeException('No git repository') + if (!grgit.status().isClean()) { + throw new RuntimeException("Git repository not ready for release (${grgit.status()})") + } + def currentBranch = grgit.branch.current().getName() + grgit.fetch() + if (grgit.tag.list().any { it.name == project.version }) { + throw new RuntimeException("A tag already exists for ${project.version}") + } + def status = grgit.branch.status(name: currentBranch) + if (status.aheadCount != 0) { + throw new RuntimeException('Some commits have not been pushed') + } + if (status.behindCount != 0) { + throw new RuntimeException('Some commits have not been pulled') + } + } +} + +githubRelease { + repo "Spawn-Lanterns" + token "${getProjectProperty('github_releases_token')}" + // default owner: last component of maven group + // default repo: name of the project + tagName = project.version + targetCommitish = { grgit.branch.current().name } + body = { project.getChangelogText() } + + FilenameFilter filter = { dir, filename -> filename.contains(project.version) && !filename.contains('-dev.jar') } + releaseAssets = { jar.destinationDirectory.asFile.get().listFiles filter } +} +tasks.githubRelease.dependsOn(checkGitStatus) + +curseforge { + + if (project.getProjectProperty('curse_key') != null) { + apiKey = project.getProjectProperty('curse_key') + } + + if (project.hasProperty('curseforge_id')) { + project { + id = findProperty('curseforge_id') + + releaseType = project.release_type + + //usually automatically determined by the CurseGradle plugin, but won't work with fabric + "${project.curseforge_versions}".split('; ').each { + addGameVersion it + } + addGameVersion 'Fabric' + + mainArtifact(remapJar) { + displayName = "${project.name}-${project.version}.jar" + + if (project.hasProperty('cf_requirements') || project.hasProperty('cf_optionals') || project.hasProperty('cf_embeddeds') || project.hasProperty('cf_tools') || project.hasProperty('cf_incompatibles') || project.hasProperty('cf_includes')) { + relations { + if (project.hasProperty('cf_requirements')) { + "${project.cf_requirements}".split('; ').each { + requiredDependency "${it}" + } + } + if (project.hasProperty('cf_optionals')) { + "${project.cf_optionals}".split('; ').each { + optionalDependency "${it}" + } + } + if (project.hasProperty('cf_embeddeds')) { + "${project.cf_embeddeds}".split('; ').each { + embeddedLibrary "${it}" + } + } + if (project.hasProperty('cf_tools')) { + "${project.cf_tools}".split('; ').each { + tool "${it}" + } + } + if (project.hasProperty('cf_incompatibles')) { + "${project.cf_incompatibles}".split('; ').each { + incompatible "${it}" + } + } + if (project.hasProperty('cf_includes')) { + "${project.cf_includes}".split('; ').each { + include "${it}" + } + } + } + } + } + + changelogType = 'markdown' + changelog = project.getChangelogText() + + afterEvaluate { + uploadTask.dependsOn remapSourcesJar + } + } + options { + forgeGradleIntegration = false + } + } +} + +tasks.curseforge.dependsOn(checkGitStatus) + +task release(dependsOn: [tasks.githubRelease, tasks.curseforge]) { + group = 'publishing' + description = 'Releases a new version to Github and Curseforge' +} \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index b6636e5..862f853 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,15 +3,23 @@ org.gradle.jvmargs=-Xmx1G # Fabric Properties # check these on https://fabricmc.net/use -minecraft_version=1.16.3 -yarn_mappings=1.16.3+build.17 -loader_version=0.10.0+build.208 +minecraft_version=1.16.4 +yarn_mappings=1.16.4+build.6 +loader_version=0.10.6+build.214 + +#Fabric api +fabric_version=0.25.1+build.416-1.16 # Mod Properties mod_version = 1.0 maven_group = ladysnake archives_base_name = spawnlanterns -# Dependencies -# currently not on the main fabric site, check on the maven: https://maven.fabricmc.net/net/fabricmc/fabric-api/fabric-api -fabric_version=0.22.0+build.408-1.16 +#Publishing +owners = Ladysnake +license_header = CC-BY-NC-SA+4.0 +curseforge_id = 418565 +curseforge_versions = 1.16.4 +cf_requirements = fabric-api +release_type = release +changelog_url = https://github.com/Ladysnake/Spawn-Lanterns/blob/main/CHANGELOG.md \ No newline at end of file