Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/firstdarkdev/modpublisher
A dual publishing Gradle Plugin to publish mods to Modrinth, Curseforge and GitHub in one go
https://github.com/firstdarkdev/modpublisher
curseforge curseforge-api github modrinth modrinth-api
Last synced: 6 days ago
JSON representation
A dual publishing Gradle Plugin to publish mods to Modrinth, Curseforge and GitHub in one go
- Host: GitHub
- URL: https://github.com/firstdarkdev/modpublisher
- Owner: firstdarkdev
- License: mit
- Created: 2023-03-15T21:09:44.000Z (over 1 year ago)
- Default Branch: dev
- Last Pushed: 2024-07-09T20:51:19.000Z (4 months ago)
- Last Synced: 2024-08-02T11:18:59.643Z (3 months ago)
- Topics: curseforge, curseforge-api, github, modrinth, modrinth-api
- Language: Java
- Homepage:
- Size: 283 KB
- Stars: 17
- Watchers: 1
- Forks: 3
- Open Issues: 6
-
Metadata Files:
- Readme: readme.md
- Changelog: changelog.md
- License: license.txt
Awesome Lists containing this project
- awesome - firstdarkdev/modpublisher - A Gradle plugin to upload mods to Modrinth, CurseForge and GitHub (Project/version management tools / In-game)
README
## ModPublisher
ModPublisher is a Gradle Plugin that allows modders to publish their mods to Modrinth, Curseforge and GitHub in one go.
No need for separate plugins, just one!
---
### Setup
For full documentation, checkout [ModPublisher Docs](https://modpublisher.fdd-docs.com/)
Groovy DSL
To use this plugin inside your project, first you have to add our maven.
To do this, open up `settings.gradle` and add the following:
```groovy
pluginManagement {
repositories {
gradlePluginPortal()
maven {
url "https://maven.firstdark.dev/releases"
}
/*
For unreleased versions
maven {
url "https://maven.firstdark.dev/snapshots"
}
*/
}
}
```Next, in your `build.gradle` add:
![badge](https://maven.firstdarkdev.xyz/api/badge/latest/releases/com/hypherionmc/modutils/modpublisher?color=40c14a&name=modpublisher)
![badge](https://maven.firstdarkdev.xyz/api/badge/latest/snapshots/com/hypherionmc/modutils/modpublisher?color=40c14a&name=modpublisher-snapshot)```groovy
plugins {
id "com.hypherionmc.modutils.modpublisher" version "VERSION"
}
```Replace VERSION with the version above.
Finally, add the following to `build.gradle` file:
```groovy
publisher {
// Setup the required API keys. You only need to define the keys for
// the platforms you plan on uploading to
apiKeys {
// Modrinth Token
modrinth System.getenv("MODRINTH_TOKEN")
// Curseforge Token
curseforge System.getenv("CURSE_TOKEN")
// GitHub Token
github System.getenv("GITHUB_TOKEN")
}// Enable Debug mode. When enabled, no files will actually be uploaded
setDebug(true)
// Curseforge Project ID
setCurseID("1234")
// Modrinth Project ID
setModrinthID("dsgfhs79789")
// Type of release. beta, alpha or release
// You can also use VersionType.BETA, VersionType.ALPHA or VersionType.RELEASE
setVersionType("beta")
// Changelog. This can be a file, string, OR, gist/github url
// For example: markdown.md, or "This is my changelog"
// Or: https://raw.githubusercontent.com/hypherionmc/changelogs/changelog.md
// Or https://gist.githubusercontent.com/hypherionmc/92f825d3c9337964cc77c9c8c9bf65e6/raw/ceeaaee5b98c688a23398864fe480b84796a1651/test_gist.md
setChangelog("changelog.md")
// Required for Modrinth/GitHub
setProjectVersion("1.20.2-${project.version}")
// Fancy display name for the upload.
// Will default to the project version if not set
setDisplayName("[1.20.x] Simple Discord Link - ${project.version}")
// The supported game versions
setGameVersions("1.20", "1.20.1", "1.20.2")
// The modloaders your upload supports.
// This can also be an Enum from ModLoader,
// like setLoaders(ModLoader.FABRIC, ModLoader.FORGE)
setLoaders("forge", "fabric")
// The new Curseforge Environment tag. Optional
// Valid values are "server", "client" or "both"
// You can also use CurseEnvironment.BOTH, or CurseEnvironment.SERVER or CurseEnvironment.CLIENT
setCurseEnvironment("both")
// Upload the release, but keep it "private" until you are ready
// Unreleased feature on CurseForge, working on Modrinth
setIsManualRelease(true)
// The file to be uploaded. This can be a file, task, or string.
// setArtifact("build/libs/mymod.jar")
// setArtifact(jar.getArchiveFile().get())
// If this is a task, the task specified will be executed before publishing
setArtifact(jar)
// Override the artifact uploaded to modrinth
// setPlatformArtifact(Platform.Modrinth, "build/libs/mymod.jar")
// setPlatformArtifact(Platform.Modrinth, jar.getArchiveFile().get())
// If this is a task, the task specified will be executed before publishing
// Valid platforms are modrinth, curseforge and github
setPlatformArtifact("modrinth", modrinthJar)// Disable the built in Fractureizer scanner
setDisableMalwareScanner(true)
// Add supported java versions. Currently only used by CurseForge
// Supports anything that can be parsed using JavaVersion.toVersion()
setJavaVersions(JavaVersion.VERSION_1_8, 11)
// Safety check to check if the artifact contains a valid mod metadata entry,
// which could possibly mean that the jar is empty
setDisableEmptyJarCheck(true)
// Additional files to upload. Same as artifact, this can be a task, file or string
addAdditionalFile(jar, secondJar)// Additional files to upload with a custom display name and changelog.
// Currently only supported on Curseforge
addAdditionalFile {
// File, Task or String
artifact jar
displayName "Some Name"
changelog "Hello Changelog"
}
}
```Additional values that can be added to the above:
```groovy
// GitHub options
github {
// GitHub repo to publish to. Overrides githubRepo
repo = "OWNER/REPO"// Tag to use for GitHub release. Defaults to version
tag = "v${project.version}"// Whether to create a tag for the GitHub release, if one doesn't exist yet. Defaults to true
createTag = true// Whether to create the GitHub release if it doesn't exist yet. Defaults to true
createRelease = true// Whether to update the GitHub release if it already exists. Defaults to true
updateRelease = true// Whether the release should be left as an unpublished draft.
//
// If enabled, newly created releases and existing drafts will not be published.
// Instead, a draft release is used.
//
// If disabled, the release will be published.
// This option does not allow converting a published release to a draft.
//
// Defaults to false
draft = false// The commitish ref the tag should target (ignored when tag already exists)
target = "main"
}// Modrinth Dependencies.
// Accepts a slug or id
modrinthDepends {
// Multiple required dependencies
required "fabric-api", "craterlib"
// Single dependency
required "fabric-api"
// Optional dependency
optional 'optional-dep'
// Your mod is not compatible with this mod
incompatible 'breaks-with'
// Your mod embeds this dependency
embedded 'fabric-api'
}// Curse Dependencies
curseDepends {
// Multiple required dependencies
required "fabric-api", "craterlib"// Single dependency
required "fabric-api"// Optional dependency
optional 'optional-dep'// Your mod is not compatible with this mod
incompatible 'breaks-with'// Your mod embeds this dependency
embedded 'fabric-api'
}
```Kotlin DSL
To use this plugin inside your project, first you have to add our maven.
To do this, open up `settings.gradle.kts` and add the following:
```kotlin
pluginManagement {
repositories {
gradlePluginPortal()
maven {
url = uri("https://maven.firstdark.dev/releases")
}
/*
For Unreleased Versions
maven {
url = uri("https://maven.firstdark.dev/snapshots")
}*/
}
}
```Next, in your `build.gradle.kts` add:
![badge](https://maven.firstdarkdev.xyz/api/badge/latest/releases/com/hypherionmc/modutils/modpublisher?color=40c14a&name=modpublisher)
![badge](https://maven.firstdarkdev.xyz/api/badge/latest/snapshots/com/hypherionmc/modutils/modpublisher?color=40c14a&name=modpublisher-snapshot)```kotlin
plugins {
id("com.hypherionmc.modutils.modpublisher") version "VERSION"
}
```Replace VERSION with the version above.
Finally, add the following to `build.gradle.kts` file:
```kotlin
publisher {
// Setup the required API keys. You only need to define the keys for
// the platforms you plan on uploading to
apiKeys {
// Modrinth Token
modrinth(System.getenv("MODRINTH_TOKEN"))
// Curseforge Token
curseforge(System.getenv("CURSE_TOKEN"))
// GitHub Token
github(System.getenv("GITHUB_TOKEN"))
}// Enable Debug mode. When enabled, no files will actually be uploaded
debug.set(true)
// Curseforge Project ID
curseID.set("12345")
// Modrinth Project ID
modrinthID.set("sdjkg8867")
// GitHub repo to publish to. Only required for GitHub
githubRepo.set("OWNER/REPO")
// Type of release. beta, alpha or release
// You can also use VersionType.BETA, VersionType.ALPHA or VersionType.RELEASE
versionType.set("release")
// Changelog. This can be a file, string, OR, gist/github url
// For example: markdown.md, or "This is my changelog"
// Or: https://raw.githubusercontent.com/hypherionmc/changelogs/changelog.md
// Or https://gist.githubusercontent.com/hypherionmc/92f825d3c9337964cc77c9c8c9bf65e6/raw/ceeaaee5b98c688a23398864fe480b84796a1651/test_gist.md
changelog.set("Coming Soon")
// Required for Modrinth/GitHub
projectVersion.set("1.3.0")
// Fancy display name for the upload.
// Will default to the project version if not set
displayName.set("MyAwesomeMod - Version")
// The supported game versions
// setGameVersions("1.20", "1.20.1", "1.20.2")
gameVersions.set(listOf("1.19.3", "1.19.4"))
// The modloaders your upload supports.
// This can also be an Enum from ModLoader,
// like setLoaders(ModLoader.FORGE, ModLoader.FABRIC)
loaders.set(listOf("forge", "fabric"))
// The new Curseforge Environment tag. Optional
// Valid values are "server", "client" or "both"
// You can also use CurseEnvironment.BOTH, or CurseEnvironment.SERVER or CurseEnvironment.CLIENT
// setCurseEnvironment(CurseEnvironment.CLIENT)
curseEnvironment.set("both")// Upload the release, but keep it "private" until you are ready
// Unreleased feature on CurseForge, working on Modrinth
isManualRelease.set(true)
// The file to be uploaded. This can be a file, task, or string.
// setArtifact("build/libs/mymod.jar")
// setArtifact(jar.getArchiveFile().get())
// If this is a task, the task specified will be executed before publishing
artifact.set(tasks.jar)// Override the artifact uploaded to modrinth
// setPlatformArtifact(Platform.Modrinth, "build/libs/mymod.jar")
// setPlatformArtifact(Platform.Modrinth, jar.getArchiveFile().get())
// If this is a task, the task specified will be executed before publishing
// Valid platforms are modrinth, curseforge and github
setPlatformArtifact("modrinth", modrinthJar)// Disable the built in Fractureizer scanner
disableMalwareScanner.set(true)
// Safety check to check if the artifact contains a valid mod metadata entry,
// which could possibly mean that the jar is empty
disableEmptyJarCheck.set(true)// Add supported java versions. Currently only used by CurseForge
// Supports anything that can be parsed using JavaVersion.toVersion()
setJavaVersions(JavaVersion.VERSION_1_8, 11)
// Additional files to upload. Same as artifact, this can be a task, file or string
additionalFiles.set(listOf(tasks.jar))// Additional files to upload with a custom display name and changelog.
// Currently, supports CurseForge only
addAdditionalFile {
// File, Task or String
artifact(tasks.jar)
displayName("Test Name")
changelog("Some Changelog")
}
}
```Additional values that can be added to the above:
```kotlin
// GitHub options
github {
// GitHub repo to publish to. Overrides githubRepo
repo = "OWNER/REPO"
// Tag to use for GitHub release. Defaults to version
tag = "v${project.version}"// Whether to create a tag for the GitHub release, if one doesn't exist yet. Defaults to true
createTag = true// Whether to create the GitHub release if it doesn't exist yet. Defaults to true
createRelease = true// Whether to update the GitHub release if it already exists. Defaults to true
updateRelease = true// Whether the release should be left as an unpublished draft.
//
// If enabled, newly created releases and existing drafts will not be published.
// Instead, a draft release is used.
//
// If disabled, the release will be published.
// This option does not allow converting a published release to a draft.
//
// Defaults to false
draft = false// The commitish ref the tag should target (ignored when tag already exists)
target = "main"
}// Modrinth Dependencies.
// Accepts a slug or id
modrinthDepends {
// Multiple required dependencies
required("fabric-api", "craterlib")
// Single dependency
required("fabric-api")
// Optional dependency
optional("optional-mod")
// Your mod is not compatible with this mod
incompatible("breaks-with")
// Your mod embeds this dependency
embedded("rift")
}// Curse Dependencies
curseDepends {
// Multiple required dependencies
required("fabric-api", "craterlib")// Single dependency
required("fabric-api")// Optional dependency
optional("optional-mod", "another-mod")// Your mod is not compatible with this mod
incompatible("breaks-with")// Your mod embeds this dependency
embedded("rift")
}
```