Open ShadowOTE opened 4 years ago
A Gradle plugin, like CurseGradle, would work quite well I think. This will allow you to keep all the metadata in the same place - Gradle versions are already used for dependency resolution/artifact naming and can be substituted in mod code using ${version}
placeholders, and much of the existing metadata such as dependencies can be reused when submitting. This should also work quite well with the existing tooling for mods, such as Loom and ForgeGradle, and there are plenty of other publishing methods that integrate with Gradle (e.g. Maven repositories, Github Releases).
In terms of the existing listed types of metadata, project metadata can be read from existing Gradle metadata as well as fabric.mod.json/mods.toml files, and any extra needed information can be specified in the build.gradle
file. Version metadata can easily be obtained from Gradle, and download paths/CDN info can be generated during the upload process.
This plugin could handle downloading dependencies as well, however it would be easier to implement the maven repository structure on the server hosting the mod files - it's fairly simple, and already used by existing tooling. The actual publishing process shouldn't be too complicated - just make a Gradle task that does the upload, with an API key stored in a file external to the repository.
A Gradle plugin only works for mods, but it wouldn't be hard to implement your own CLI or GUI tool to upload modpacks, and I would be happy to implement a publishing process for modpacks in packwiz. One thing I am not so sure on is how the actual submission process would work in terms of an API, and it likely depends on how the files and metadata themselves are hosted.
I've had a cursory glance over issue 1 as well, I'll have a more thorough read through it shortly.
One thing I am not so sure on is how the actual submission process would work in terms of an API, and it likely depends on how the files and metadata themselves are hosted.
This is one of the largest problems in terms of the index. Keeping everything on GitHub is possible. I've been looking through the GitHub API and it's possible to create Pull Requests with little input from the user.
But I'm not sure how feasible storing everything on GitHub is. Tens of thousands of Pull Requests could get unorganized. Perhaps metadata/manifests could be stored in a Git repository, and submissions handled externally. This leads into the question of where submissions should be stored. Who would fund servers, how do we prevent spam, who will write the server code, etc. Organizing a large amount of submissions and updates is hard to do.
This is one of the most important issues to this index project and I'm not sure on the solution. The end goal should be that submitting to the Index is as easy as CurseForge for developers, and that the Index is easily organized for moderators to review. We're clearly not at that point yet and have a long way to go.
It was mentioned on the discord that there is always the temptation for deletion of rival/competitor mods from the index. One potential solution would be to store updates in a block chain. I'm not normally a fan of this approach (all too often it's just used to create a stir) but this is actually a scenario where it would be a legitimate solution:
-multitenant by nature -public, transparent, write only database -resulys in a single, shared database (no need for multiple copies hosted by rivals - everyone can work off the same set of data) -easily verifiable -publication and acceptance follow a known pattern where publish is easy (just submit onto the chain, ala ethereum) and everyone is incentivized to cross-check and validate
@ShadowOTE that should be an entirely separate issue. And Ethereum is much more complicated than you think.
Agreed - i think for now the focus should be on identifying the core tooling requirements for minimum viable product.
Surely the minimum viable product includes zero tooling, and just aggregates mods that modders have already uploaded elsewhere? (e.g. CurseForge)
This issue is to discuss potential tooling for the spec. This is not a discussion on detailed implementation, but rather to gather the types of tooling needed upfront as well as desirable in the longer term in order to facilitate spec build out and drive adoption.
Recap of discussion from Issue #1
Initial comment from @Wtoll:
Reply @ShadowOTE:
Reply @Stairman06
Reply @Minenash
Reply @ShadowOTE