Giter Site home page Giter Site logo

blake-mealey / mantle Goto Github PK

View Code? Open in Web Editor NEW
85.0 85.0 11.0 6.78 MB

An infrastructure-as-code and deployment tool for Roblox.

Home Page: https://mantledeploy.vercel.app/

License: MIT License

Rust 100.00%
ci deployment infra-as-code roblox

mantle's Introduction

mantle's People

Contributors

blake-mealey avatar etheroit avatar filiptibell avatar memorycode avatar treehousefalcon avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

mantle's Issues

add best practices tips for resources

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)

support experience social links

Propose config API:

templates:
  experience:
    socialLinks:
      - title: Discord Server
        url: https://discord.gg/code

Determine "type" based on URL domain name.

consider shared resources (across deployments in the state file) for assets

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.

make deployments.*.branches optional and add a cli option to specify the deployment name

Currently the only way Rocat can choose a deployment is via the deployments.*.branches configuration field, which is slightly problematic:

  • Some users may not even use Git
  • Some users may only work off of one branch but still want to deploy to a staging environment

Proposal:

  • Make deployments.*.branches optional
  • Add a --deployment option to the deploy and outputs commands
  • Rocat should use the value from --deployment rather than deployments.*.branches if both are specified

add full infra-as-code support for all experience assets

(DRAFT)

Experience icon:

Experience thumbnails:

Experience developer products:

Experience badges: added in #59

Experience game passes: added in #45

Experiences:

Places:

Assets (images, audio, etc):

  • See comment below

handle roblox text moderation

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.

add support for a dry run mode for mantle deploy

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.

add glob support for game thumbnails

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.

re-add support for .rbxl files

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.

add easy links to deploy output

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.

Load files relative to config file

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.

add automated tests

I really should have done this from the start... ๐Ÿ˜

I'm thinking unit tests + integration tests are probably a good idea.

error messages are weird for requests that return 200 but indicate failure with a success field

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.

look into remote state file locking

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.

update outputs command to be directly usable by Rojo projects

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.

Getting 413 Payload Too Large

I am getting 413 Payload Too Large errors when running mantle deploy.
image

The place I'm trying to upload is ~650 MB.
If this is me hitting the endpoint's limits, are there any alternatives I can use?

consider file conversions

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.

mantle destroy does not handle failures correctly

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.

support group-owned experiences

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>

improve safety of the internal resources API

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.

add support for localization

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 :)

import existing resources for already created experiences and places

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.

serverFill.reservedSlots does not work

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:
image

Values in .mantle-state.yml seem to be correct:

maxPlayerCount: 16
...
socialSlotType: Custom
customSocialSlotCount: 4

add outputs command to read outputs

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.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.