Yellow-Dog-Man / Resonite-Issues

Issue repository for Resonite.
https://resonite.com
121 stars 2 forks source link

Molecule: Generalized versioning, change tracking, build & update system #1212

Open Frooxius opened 5 months ago

Frooxius commented 5 months ago

Is your feature request related to a problem? Please describe.

There is currently a number of problems on Resonite that share the same common set of problems:

Describe the solution you'd like

We have plans for a generalized system for handling versioning, change tracking and updating, dubbed "Molecule". This system will solve these problems in a general way, with specializations for different usecases.

The system has several concepts:

With these concepts, the system can be used and queried in a number of ways, with specific use-cases built on top.

This system will also integrate with other tooling - e.g. snapshots for Resonite itself and its libraries will be generated from conventional commits. This will simplify writing changelog and contributor references and credits for reporters - they will be auto-generated and formatted for different media (Discord, Steam, Reddit...).

Describe alternatives you've considered

We've considered utilizing some existing tooling and update systems, but these would not provide the same generalized level of support and integration that our own system would be able to handle.

Additional Context

This is pretty important system to prioritize on our end, as it will allow to save a lot of repetitive work with producing builds and updates.

It would also resolve certain problems with updates (e.g. https://github.com/Yellow-Dog-Man/Resonite-Issues/issues/1139) - those would no longer be done manually, but fed into the system and processed and tested before they are merged in.

charlie-sans commented 5 months ago

hmm, if i made a script to generate patchnotes from git diffs, would you check it out? i've been meaning to do this for a bit now but it could be handy?

charlie-sans commented 5 months ago

what about dynamic module loading? being able to update stuff live so people don't have to restart stuff for minor changes?

ether I'm reading it wrong or just blind lol

Frooxius commented 4 months ago

@charlie-sans This would help you fetch new modules easily, but it doesn't do anything with dynamic loading - that's a completely separate issue. The responsibility of this system is purely to distribute updated versions, what is done with those is external.

Frooxius commented 4 months ago

I'm also noting another use-case. Currently we are using hardcoded inventory locations for templates for certain items - default video players, audio players, color dialogs and so on.

This makes testing and updating more difficult, because we can only replace one copy globally and we cannot do gradual rollout or testing on beta branches.

Once this system is in place, we will be able to utilize it for the default item templates as well and utilize its versioning ability to ensure that the correct version can get fetched.

charlie-sans commented 3 months ago

nice! ive got some more ideas but i can't remember them. ill let you know if i remember!

JackTheFoxOtter commented 3 months ago

As it was brought up in #1619, I'm curious what the scope of Molecule is in regards to change tracking / merging. Would the use-case of having, to take an example from that ticket, a facet maintained by the content team, forking it into a private branch and modifying it, then once a new version of the base branch is released by the content team comparing changes and potentially merging them into the personal fork / potentially resolving merge conflics be covered by this?

Frooxius commented 3 months ago

Change tracking is one of the primary functions of Molecule. But merging isn't its responsibility - that is something that will have to be built on top of it.

Meaning there will need to be a system that when Molecule says "There's a new version of XYZ", it is able to update that version and re-apply the customizations. This would be handled by the prefab system.

shininghero commented 1 month ago

Will this also allow queuing updates for release on specific days? A 'Patch Tuesday' release schedule would be beneficial in the long run, especially as the platform gets more popular and starts drawing in big events.

Stellanora64 commented 4 weeks ago

@shininghero he said "It would also resolve certain problems with updates (e.g. https://github.com/Yellow-Dog-Man/Resonite-Issues/issues/1139)" which is an issue related to what you are describing. So from my understanding yes.

Frooxius commented 4 weeks ago

@shininghero It'll make it easier to switch to a process like that in a few ways:

However there's one aspect that's more social, that's a bit problematic, given the size of the community we have, that might still be harder to resolve.

If new features are ready to use and potentially already available in the testing builds - will people want to wait a while before they can use them on the main branch? Say we get something done on Tuesday, but it doesn't make it in - you now have to wait a week for that fix or new feature to get in the main build.

Alternatively you can use the "prerelease" branch, but then you're fragmented from the rest of the community. With the community being small, this can become a problem.

For that, I'm not sure if we'll specifically do something like patch Tuesday or something like that, because it trades off some of the agility for things. The structure we find might still have more frequent updates. But the main thing, this tooling will give us the flexibility to explore those.