Skip to content
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
4 changes: 2 additions & 2 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ jobs:
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: 17 # Use Java 17 here because the Loom test env needs it
java-version: 21 # Use Java 21 here because the Loom test env needs it
distribution: temurin

- name: Cache Gradle files
Expand All @@ -37,7 +37,7 @@ jobs:

- name: Test with Gradle
run: |
./gradlew -p fg modrinth
# ./gradlew -p fg modrinth
./gradlew -p loom modrinth
if: ${{ !contains(github.event.head_commit.message, 'skip test') }}
env:
Expand Down
3 changes: 2 additions & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ plugins {
id 'com.gradle.plugin-publish' version '1.2.0'
}

version = '2.8.10'
version = '2.9.0'
group = 'com.modrinth.minotaur'
base.archivesName = 'Minotaur'
description = 'Modrinth plugin for publishing builds to the website!'
Expand All @@ -19,6 +19,7 @@ dependencies {
compileOnly group: 'org.jetbrains', name: 'annotations', version: '+'
api group: 'dev.masecla', name: 'Modrinth4J', version: '2.2.0'
compileOnly group: 'io.papermc.paperweight', name: 'paperweight-userdev', version: '1.5.2'
compileOnly annotationProcessor(group: 'org.projectlombok', name: 'lombok', version: '1.18.30')
}

gradlePlugin {
Expand Down
22 changes: 18 additions & 4 deletions loom/build.gradle
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
plugins {
id "fabric-loom" version "1.3.+"
id "fabric-loom" version "1.12.+"
id "com.modrinth.minotaur" version "2.+"
}

Expand All @@ -13,15 +13,21 @@ dependencies {
}

java.withSourcesJar()
java.withJavadocJar()

import com.modrinth.minotaur.dependencies.DependencyType
import com.modrinth.minotaur.dependencies.ModDependency
import com.modrinth.minotaur.dependencies.VersionDependency

modrinth {
projectId = "mudmod"
projectId = "allergies"
uploadFile = remapJar
additionalFiles = [project.file("build/libs/loom-$version-sources.jar")]
additionalFiles = [project.file("build/devlibs/loom-$version-dev.jar")]
additionalFiles {
sourcesJar sourcesJar
javadocJar javadocJar
other 'build/loom-cache/remapped_working/remapped.net.fabricmc-fabric-loader-2b40239f-0.12.12.jar'
}
versionType = "alpha"
dependencies = [
new ModDependency("test-project", "optional"),
Expand All @@ -30,9 +36,17 @@ modrinth {
dependencies {
required.project "corrupted"
optional.version "9MsDOrJE"
incompatible.version "mOgUt4GM", "13.0.0"
incompatible.version "AANobbMI", "mc1.21.11-0.8.2-fabric"
embedded.project "uiW75cBG"
required.version "modmenu", "11.0.2"
}
debugMode = true
}

tasks.withType(Jar) {
manifest {
attributes([
'Timestamp': System.currentTimeMillis(),
])
}
}
12 changes: 12 additions & 0 deletions src/main/java/com/modrinth/minotaur/ModrinthExtension.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
package com.modrinth.minotaur;

import com.modrinth.minotaur.additionalfiles.AdditionalFileDSL;
import com.modrinth.minotaur.dependencies.Dependency;
import com.modrinth.minotaur.dependencies.container.DependencyDSL;
import masecla.modrinth4j.model.version.ProjectVersion.VersionType;
import org.gradle.api.Action;
import org.gradle.api.Project;
import org.gradle.api.file.RegularFileProperty;
import org.gradle.api.provider.ListProperty;
Expand All @@ -13,6 +15,7 @@
* {...}} block in the buildscript.
*/
public class ModrinthExtension extends DependencyDSL {
private final AdditionalFileDSL additionalFileDsl;
private final Property<String> apiUrl, token, projectId, versionNumber, versionName, changelog, versionType, syncBodyFrom;
private final Property<Object> legacyUploadFile;
private final RegularFileProperty file;
Expand Down Expand Up @@ -48,6 +51,7 @@ public class ModrinthExtension extends DependencyDSL {
*/
public ModrinthExtension(Project project) {
super(project.getObjects());
additionalFileDsl = project.getObjects().newInstance(AdditionalFileDSL.class);
apiUrl = project.getObjects().property(String.class).convention(DEFAULT_API_URL);
token = project.getObjects().property(String.class).convention(project.getProviders().environmentVariable("MODRINTH_TOKEN"));
projectId = project.getObjects().property(String.class);
Expand All @@ -68,6 +72,14 @@ public ModrinthExtension(Project project) {
autoAddDependsOn = project.getObjects().property(Boolean.class).convention(true);
}

public void additionalFiles(Action<? super AdditionalFileDSL> action) {
action.execute(additionalFileDsl);
}

public AdditionalFileDSL getAdditionalFileDsl() {
return additionalFileDsl;
}

/**
* This should not be changed unless you know what you're doing. Its main use case is for debug, development, or
* advanced user configurations.
Expand Down
31 changes: 25 additions & 6 deletions src/main/java/com/modrinth/minotaur/TaskModrinthUpload.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@
import com.modrinth.minotaur.dependencies.Dependency;
import com.modrinth.minotaur.responses.ResponseUpload;
import io.papermc.paperweight.userdev.PaperweightUserExtension;
import masecla.modrinth4j.endpoints.version.CreateVersion.CreateVersionRequest;
import com.modrinth.minotaur.masecla.modrinth4j.endpoints.version.TemporaryCreateVersion;
import com.modrinth.minotaur.masecla.modrinth4j.endpoints.version.TemporaryCreateVersion.TemporaryCreateVersionRequest;
import masecla.modrinth4j.main.ModrinthAPI;
import masecla.modrinth4j.model.version.ProjectVersion;
import masecla.modrinth4j.model.version.ProjectVersion.ProjectDependency;
Expand Down Expand Up @@ -199,8 +200,8 @@ && getProject().getExtensions().findByName("loom") != null) {
protoDependencies.stream().map(dependency -> dependency.toNew(api)).forEach(dependencies::add);

// Get each of the files, starting with the primary file
List<File> files = new ArrayList<>();
files.add(ext.getFile().get().getAsFile());
Map<File, String> files = new LinkedHashMap<>();
files.put(ext.getFile().get().getAsFile(), "primary");

// Convert each of the Object files from the extension to a proper File
ext.getAdditionalFiles().get().forEach(file -> {
Expand All @@ -211,11 +212,28 @@ && getProject().getExtensions().findByName("loom") != null) {
throw new GradleException("The upload file is missing or null. " + file);
}

files.add(resolvedFile);
String fileName = resolvedFile.getName();
String fileType = null;

// No switches in Java 8 :(
if (fileName.contains("-dev.jar")) {
fileType = "dev-jar";
} else if (fileName.contains("-sources.jar")) {
fileType = "sources-jar";
} else if (fileName.contains("-javadoc.jar")) {
fileType = "javadoc-jar";
} else if (fileName.contains("asc") || fileName.contains("gpg") || fileName.contains("sig")) {
fileType = "signature";
}

files.put(resolvedFile, fileType);
});

ext.getAdditionalFileDsl().getNamedAdditionalFilesAsList().forEach(file ->
files.put(file.getFile().getAsFile(), file.getAdditionalFileType().toString()));

// Start construction of the actual request!
CreateVersionRequest data = CreateVersionRequest.builder()
TemporaryCreateVersionRequest data = TemporaryCreateVersionRequest.builder()
.projectId(id)
.versionNumber(versionNumber)
.name(ext.getVersionName().get())
Expand All @@ -236,7 +254,8 @@ && getProject().getExtensions().findByName("loom") != null) {
}

// Execute the request
ProjectVersion version = api.versions().createProjectVersion(data).join();
ProjectVersion version = new TemporaryCreateVersion(getProject()).sendRequest(data).join();
//ProjectVersion version = api.versions().createProjectVersion(data).join();
newVersion = version;
//noinspection deprecation
uploadInfo = new ResponseUpload(version);
Expand Down
8 changes: 4 additions & 4 deletions src/main/java/com/modrinth/minotaur/Util.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
* Internal utility methods to make things easier and deduplicated
*/
@ApiStatus.Internal
class Util {
public class Util {
/**
* @param project Gradle project for getting various info from
* @return A valid {@link ModrinthAPI} instance
Expand Down Expand Up @@ -49,7 +49,7 @@ static ModrinthAPI api(Project project) {
* @param project Gradle project for getting various info from
* @return The {@link ModrinthExtension} for the project
*/
static ModrinthExtension ext(Project project) {
public static ModrinthExtension ext(Project project) {
return project.getExtensions().getByType(ModrinthExtension.class);
}

Expand All @@ -59,7 +59,7 @@ static ModrinthExtension ext(Project project) {
* @param project The Gradle project to resolve the extension and version from
* @return The extension version number if set; otherwise, the Gradle project version.
*/
static String resolveVersionNumber(Project project) {
public static String resolveVersionNumber(Project project) {
ModrinthExtension ext = ext(project);
if (ext.getVersionNumber().getOrNull() == null) {
ext.getVersionNumber().set(project.getVersion().toString());
Expand Down Expand Up @@ -100,7 +100,7 @@ static File resolveFile(Project project, Object in) {
return project.file(in);
}

static Provider<RegularFile> resolveFileProperty(Project project, Object in) {
public static Provider<RegularFile> resolveFileProperty(Project project, Object in) {
if (in == null) {
// If input is null we can't really do anything...
return project.getObjects().fileProperty();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
package com.modrinth.minotaur.additionalfiles;

import com.modrinth.minotaur.Util;
import org.gradle.api.NamedDomainObjectContainer;
import org.gradle.api.Project;

import javax.inject.Inject;
import java.util.ArrayList;
import java.util.List;

/**
* the Nested AdditionalFiles configuration
*/
public class AdditionalFileDSL {
private final Project project;
private final NamedDomainObjectContainer<NamedAdditionalFile> additionalFiles;

/**
* Instantiates a new additionalFiles configuration.
*
* @param project Project
*/
@Inject
public AdditionalFileDSL(final Project project) {
this.project = project;
this.additionalFiles = project.getObjects().domainObjectContainer(NamedAdditionalFile.class);
}

/**
* Returns the complete NamedAdditionalFile container set mapped and collected as a {@literal List<AdditionalFile>}
*
* @return {@literal List<AdditionalFile>}
*/
public List<NamedAdditionalFile> getNamedAdditionalFilesAsList() {
return new ArrayList<>(this.additionalFiles);
}

/**
* Creates a required resource pack AdditionalFile Container
*
* @param file the file
*/
public void requiredResourcePack(final Object file) {
this.additionalFiles.add(new NamedAdditionalFile(AdditionalFileType.REQUIRED_RESOURCE_PACK, Util.resolveFileProperty(project, file).get()));
}

/**
* Creates an optional resource pack AdditionalFile Container
*
* @param file the file
*/
public void optionalResourcePack(final Object file) {
this.additionalFiles.add(new NamedAdditionalFile(AdditionalFileType.OPTIONAL_RESOURCE_PACK, Util.resolveFileProperty(project, file).get()));
}

/**
* Creates a sources JAR AdditionalFile Container
*
* @param file the file
*/
public void sourcesJar(final Object file) {
this.additionalFiles.add(new NamedAdditionalFile(AdditionalFileType.SOURCES_JAR, Util.resolveFileProperty(project, file).get()));
}

/**
* Creates a dev JAR AdditionalFile Container
*
* @param file the file
*/
public void devJar(final Object file) {
this.additionalFiles.add(new NamedAdditionalFile(AdditionalFileType.DEV_JAR, Util.resolveFileProperty(project, file).get()));
}

/**
* Creates a Javadoc JAR AdditionalFile Container
*
* @param file the file
*/
public void javadocJar(final Object file) {
this.additionalFiles.add(new NamedAdditionalFile(AdditionalFileType.JAVADOC_JAR, Util.resolveFileProperty(project, file).get()));
}

/**
* Creates a signature AdditionalFile Container
*
* @param file the file
*/
public void signature(final Object file) {
this.additionalFiles.add(new NamedAdditionalFile(AdditionalFileType.SIGNATURE, Util.resolveFileProperty(project, file).get()));
}

/**
* Creates another AdditionalFile Container
*
* @param file the file
*/
public void other(final Object file) {
this.additionalFiles.add(new NamedAdditionalFile(AdditionalFileType.OTHER, Util.resolveFileProperty(project, file).get()));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
package com.modrinth.minotaur.additionalfiles;

import com.google.gson.annotations.SerializedName;

import java.util.Locale;

/**
* The enum representing the additional file types supported by Modrinth.
*/
public enum AdditionalFileType {
/**
* The file is a resource pack file that must be used alongside the file. Primarily meant for data
* pack projects.
*/
@SerializedName("required-resource-pack")
REQUIRED_RESOURCE_PACK,

/**
* The file is a resource pack file that can be used alongside the file. Primarily meant for data
* pack projects.
*/
@SerializedName("optional-resource-pack")
OPTIONAL_RESOURCE_PACK,

/**
* The file is a JAR containing source code.
*/
@SerializedName("sources-jar")
SOURCES_JAR,

/**
* The file is a JAR containing unmapped or development code.
*/
@SerializedName("dev-jar")
DEV_JAR,

/**
* The file is a JAR containing Javadoc documentation.
*/
@SerializedName("javadoc-jar")
JAVADOC_JAR,

/**
* The file is a signature file (asc, gpg, or sig).
*/
@SerializedName("signature")
SIGNATURE,

/**
* The file is a different type of additional file.
*/
@SerializedName("")
OTHER;

public String toString() {
if (this == OTHER) {
return null;
} else {
return this.name().toLowerCase(Locale.ROOT).replace('_', '-');
}
}

}
Loading