I'm a developer from Canada ๐ working at Vercel โฒ
- ๐ป Website: chimerical.ca
- ๐ผ Resume: read.cv/blakemealey
An infrastructure-as-code and deployment tool for Roblox.
Home Page: https://mantledeploy.vercel.app/
License: MIT License
I'm a developer from Canada ๐ working at Vercel โฒ
It would be really cool if we could pre-seed data stores with test data post-deploy.
Mantle could print out warnings if it detects bad practices in the resources it creates. For example, it can recommend the best dimensions for the various image assets (thumbnails, icons)
this is a prereq to enabling preview deployments
Propose config API:
templates:
experience:
socialLinks:
- title: Discord Server
url: https://discord.gg/code
Determine "type" based on URL domain name.
Add a panic catch-all error message indicating that it is probably a Mantle bug and should be reported here.
Areas to consider:
To avoid duplicate uploads (especially to reduce costs for audio uploads) for the same assets across experiences, asset resources could be saved in a parallel shared graph in the state file. Then the aliases would be dependent on that graph and the experience in the per-deployment graphs, and would be saved per deployment.
I think the term "environments" makes more sense for what the deployments
field defines.
git tagging support was unintentionally removed by #12
Currently the only way Rocat can choose a deployment is via the deployments.*.branches
configuration field, which is slightly problematic:
Proposal:
deployments.*.branches
optional--deployment
option to the deploy
and outputs
commands--deployment
rather than deployments.*.branches
if both are specifiedSince this is my first Rust project, I didn't really know what types to make my errors, so I made them all strings. I would like to research a better method and then refactor the project to comply.
(DRAFT)
Experience icon:
Experience thumbnails:
Experience developer products:
Experience badges: added in #59
Experience game passes: added in #45
Experiences:
isArchived: true
Places:
Assets (images, audio, etc):
Refactor resource evaluation logging into a reusable Logger struct and use it throughout the tool.
This was a miss from the v0.10.0 release. The option should have been renamed and I am considering this a bug (fixing it will be a patch release).
It can be quite easy to accidentally trigger Roblox's text moderation and end up with many ##### in your asset names or descriptions. It would be nice for Mantle to handle this somehow, either as an error or a warning.
Currently you cannot preview what would change without actually running a deployment. Sometimes a deployment may do things you don't expect (for example deleting a resource) so it would be nice to have a dry-run feature.
This is currently not possible due to the way we are checking if a resource has changed. I need to think about how we can achieve this.
Potential config API:
environments:
- name: production
restartServers: true
Currently some errors will override the error handling and short-circuit the whole program. All errors that take place within evaluation should still respect partial completion and update the state file accordingly.
It would be nice to support globs for game thumbnails:
target:
experience:
configuration:
thumbnails:
- marketing/thumbnails/*
The files should be sorted alphabetically so that ordering is consistent between deploys, and to enable developers to arrange their thumbnails in order.
Unfortunately after switching away from the Open Cloud API, we no longer support .rbxl files (only .rbxlx). We can re-add support using the rbx_binary/rbx_xml crates.
In old versions we had links to the place/experience in the output which got removed once we transitioned to the infra-as-code focus. We should update the deploy command to parse the output state and print useful links.
This would be especially useful now since Mantle often creates new experiences and places.
It should log the number of resources created, updated, deleted, and unchanged.
I would like place files to be found on the FS relative to the config file, however this doesn't make much sense with the current cli args. I would like to modify the CLI args to the following:
Remove the --config
option and add a positional PROJECT
arg which can be either a directory or a config file. The default value will still be rocat.yml
.
I really should have done this from the start... ๐
I'm thinking unit tests + integration tests are probably a good idea.
Some Roblox API requests return 200 even when they fail, and include a success: false
field to indicate failures. Currently these result in failed attempts to deserialize the model and log confusing error messages to the user.
Additionally, they may include a message property in the response as well, but that message will not be printed even if an error is correctly detected.
Terraform locks the state file (at least when using Azure as a backend provider) to avoid simultaneous applys messing with each other. We should look into this as well.
The outputs command currently dumps to a JSON file which is not directly usable by anything. The primary use case I see for the outputs file is for automated consumption by Rojo projects. Therefore, there should be a way to produce a file that is Rojo-supported.
Additionally, we may need to consider splitting place file uploads from the rest of the deployment phase (e.g. mantle prepare
and mantle publish
) so that we can avoid the chicken-and-egg problem here.
When a game icon is deleted from an experience it is not actually removed from it
use case examples:
playability
to private
on staging deployments and public
on production deployments.Once assets are supported, there may be some helpful usecases for Mantle to do file conversions/transformations. For example, Mantle could automatically convert audio file formats like .wav which Roblox does not support before uploading them.
Since #16, Tokio has been added for making asynchronous requests to AWS. We can use this to improve the performance of deploys by parallelizing Roblox API requests. We will have to run the requests in batches and only run the next N requests which are not dependent on each other.
Currently if mantle destroy
encouters delete failures, it considers them a success and overwrites the graph in the state file anyways. If it encounters failures, it should not remove the failed deletes from the graph in the state file.
Currently we only support personal experiences. In the future if we can use only Open Cloud APIs we may not need to specifically specify a group ID since API tokens will be created for the group, but for now we will need to specify a group ID to most endpoints to specify where resources should be created.
Potential configuration API:
# default:
owner: personal
# group:
owner:
group: <id>
I've never used the Roblox ads feature, so I don't know if this makes any sense or not, but it's worth looking into.
Even though structurally everything comes from experience I think the config file should have a more flat structure
It would be nice to improve the safety of the internal resources API so that we are not relying so much on YAML (de)serialization. Perhaps this could be achieved by making the ResourceManager API generic with an enum of the expected resource types.
I have not yet used any of Roblox's localization features and it looks quite complex. I'm sure that Mantle could be useful for managing this too but I need some time to look into doing it properly.
If anyone has experience with this feature I'd be happy for help :)
When using the partial-managed mode (supplying existing experience and place IDs), Rocat may create new resources that exist already (e.g. game thumbnails). We can add an import feature to resolve this. The simplest way would be to add a new rocat import
command which will populate the state file based on existing resources.
Hi! Cool project and I love seeing where this is going.
I have stumbled across a small bug, when I set serverFill.reservedSlots like:
maxPlayerCount: 16
serverFill:
reservedSlots: 4
the actually set value is incorrect:
Values in .mantle-state.yml
seem to be correct:
maxPlayerCount: 16
...
socialSlotType: Custom
customSocialSlotCount: 4
I just realized they contain the folder structure:
target/
release/
mantle.exe
deps
mantle.exe
so they are zipping the full target directory instead of just the binary
Use case: I want to know the IDs of my developer products/assets/etc for use in game.
Add a rocat outputs [--query <json-query>] [--output <file-path>]
to print out a JSON object of the state file's outputs.
Additional use case: I want to automatically digest the IDs in my game with Rojo. Solution: output the data to a JSON file which can be imported into Roblox with Rojo. Need to think about the nicest way to accomplish this with Rojo's current importing methods.
Need help with this one
Candidate name: mantle
You should be able to manage and deploy plugins with Mantle.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.