blake-mealey / mantle

An infrastructure-as-code and deployment tool for Roblox.
https://mantledeploy.vercel.app/
MIT License
85 stars 11 forks source link

Can't upload secondary place #219

Closed MayGo closed 2 months ago

MayGo commented 2 months ago

In mantle.yml I have 2 places:

   places:
      start:
        file: GameLobby.rbxlx
        configuration:
          name: Monsters Nearby
          description: A game!
          maxPlayerCount: 20

      waiting:
        file: GameWaitingLobby.rbxlx
        configuration:
          name: Monsters Nearby Waiting Lobby

When running mantle deploy --environment development

I get error Failed: Roblox error (404 Not Found): 404 | Page Not found

I think it is because Roblox deprecated http://data.roblox.com/Data/Upload.ashx Used in

Blog post: https://devforum.roblox.com/t/official-list-of-deprecated-web-endpoints/62889/62

NB! This is an awesome project!

blake-mealey commented 2 months ago

Yup I agree with your assessment. The latest release of mantle includes support for open cloud APIs for publishing places. Check out the updated authentication docs here: https://mantledeploy.vercel.app/docs/authentication#roblox-open-cloud-api-key

Closing this issue but if this doesn't resolve it feel free to reopen.

MayGo commented 2 months ago

Thanks for responding so fast!

I have configured MANTLE_OPEN_CLOUD_API_KEY and everything works fine for project with 1 place.

When using more than one place, it gives error:

Screenshot 2024-07-08 at 17 07 05

My mantle version is blake-mealey__mantle-0.11.15-deploy.

Perhaps I am missing some part of the configuration for a project with more than 1 place. Any help is much appreciated!

MayGo commented 2 months ago

@blake-mealey btw, I don't have possibility to reopen this issue!

Etheroit commented 2 months ago

@blake-mealey This doesn't seem to be due to http://data.roblox.com/Data/Upload.ashx deprecation.

Roblox has entirely removed the https://www.roblox.com/ide/places/createV2 endpoint used in place creation API (https://github.com/blake-mealey/mantle/blob/861c56f2db3fc563e7187a68f255b3327582bf0c/mantle/rbx_api/src/places/mod.rs#L156C20-L156C62) .

In the creator hub they seem to use https://apis.roblox.com/universes/v1/universes/(UNIVERSE ID)/places/(PLACE ID)/add-place (no post data; bool in response) to link already-existing (from another universe) place to some universe.

There does not seem to be a better web alternative which would create a new blank place. (still looking for other undocumented apis)

UPDATE: Creating a blank place still appears to be visible using the Asset Manager inside studio - it seems they might have just changed the url. Unfortunately, I don't have swagger correctly set up to confirm that.

blake-mealey commented 2 months ago

Thanks for those details @Etheroit. I inspected the Roblox Studio traffic with wireshark and weirdly I am unable to capture the request that they are using to create the blank place in the Game Settings modal. I wonder if they switched to a non-http protocol? Seems pretty weird.

I think a workaround for this would be to:

  1. create a new experience
  2. remove the default start place from the experience
  3. archive the experience
  4. add the place to the desired experience (using the API you found that the creator hub is using)

This would be pretty hacky and would leave an archived experience in the creator's account.

blake-mealey commented 2 months ago

I started a thread in the dev forum since this removal was not documented in the official web endpoint deprecation thread and I believe it should have been: https://devforum.roblox.com/t/api-for-creating-a-place-for-an-experience-directly-has-been-removed-without-a-replacement/3062085

Etheroit commented 2 months ago

@blake-mealey Are you sure it's possible to remove the start place from the experience? I believe it should not be? You've also mentioned POST https://www.roblox.com/universes/removeplace API endpoint in your post which will for sure also be deprecated eventually as it's under www.roblox.com domain.

I've also tried looking for the API using fiddler but it doesnt seem to initiate any http request.

Etheroit commented 2 months ago

@blake-mealey Welp. That was fast. You've got a response already.

https://devforum.roblox.com/t/unable-to-create-places-within-an-experience-through-apis/3011837/3 seems to be the answer.

I would try to implement a fix but honestly I'm not sure how API responses are parsed in your code - sorry. :(

Etheroit commented 2 months ago

Welp. I've given it a shot. Please let me know if anything is wrong but looking at other endpoints the PR should be good.

blake-mealey commented 2 months ago

You're right, my workaround would not have worked since you can't remove the root place from an experience. Good thing there is a replacement API for it! Thanks for the PR, I'll take a look at it.

blake-mealey commented 2 months ago

This is fixed in the latest release: https://github.com/blake-mealey/mantle/releases/tag/v0.11.16

MayGo commented 2 months ago

Thanks guys! You are fast!

It created the places now. But it is still failing at one step for one file. It might be too large. Game.rbxlm is 126MB.

Error itself is:

Failed: http 500: {"type":"https://tools.ietf.org/html/rfc7231#section-6.6.1","title":"An error occurred while processing your request.","status":500,"traceId":"00-1bf8a17cfeef6af3d10acb4e989e2a69-742916ef57c1deef-00"}

Will give full output:

Deploying resources:
╷
│  + Creating: place_waiting
│    ╷
│    │  Dependencies:
│    │      - experience:
│    │          assetId: 6234782983
│    │          startPlaceId: 18392076537
│    │  Inputs:
│    │    + place:
│    │    +   isStart: false
│    │

│    ╰─ Succeeded with outputs:
│         + place:
│         +   assetId: 18429658746
│

│  + Creating: placeFile_waiting
│    ╷
│    │  Dependencies:
│    │      - place:
│    │          assetId: 18429658746
│    │      - experience:
│    │          assetId: 6234782983
│    │          startPlaceId: 18392076537
│    │  Inputs:
│    │    + placeFile:
│    │    +   filePath: GameWaitingLobby.rbxlx
│    │    +   fileHash: 5442c6c6cc0ee72607d9b420643cddef14057c0bf329fa43b3f90ece544a085f
│    │

│    ╰─ Succeeded with outputs:
│         + placeFile:
│         +   version: 2
│

│  + Creating: placeConfiguration_waiting
│    ╷
│    │  Dependencies:
│    │      - place:
│    │          assetId: 18429658746
│    │  Inputs:
│    │    + placeConfiguration:
│    │    +   name: "[DEVELOPMENT] Monsters Nearby Waiting Lobby"
│    │    +   description: Created with Mantle
│    │    +   maxPlayerCount: 50
│    │    +   allowCopying: false
│    │    +   socialSlotType: Automatic
│    │    +   customSocialSlotsCount: ~
│    │

│    ╰─ Succeeded with outputs:
│         + placeConfiguration
│

│  + Creating: place_game
│    ╷
│    │  Dependencies:
│    │      - experience:
│    │          assetId: 6234782983
│    │          startPlaceId: 18392076537
│    │  Inputs:
│    │    + place:
│    │    +   isStart: false
│    │

│    ╰─ Succeeded with outputs:
│         + place:
│         +   assetId: 18429659424
│

│  + Creating: placeFile_game
│    ╷
│    │  Dependencies:
│    │      - place:
│    │          assetId: 18429659424
│    │      - experience:
│    │          assetId: 6234782983
│    │          startPlaceId: 18392076537
│    │  Inputs:
│    │    + placeFile:
│    │    +   filePath: Game.rbxlx
│    │    +   fileHash: 615ff55037c81f61bc925adb31850d8445bb63c7bd5085f8c326ea9c8e3082e8
│    │

│    ╰─ Failed: http 500: {"type":"[[https://tools.ietf.org/html/rfc7231#section-6.6.1","title":"An](https://tools.ietf.org/html/rfc7231#section-6.6.1%22,%22title%22:%22An)](https://tools.ietf.org/html/rfc7231#section-6.6.1%22,%22title%22:%22An) error occurred while processing your request.","status":500,"traceId":"00-1bf8a17cfeef6af3d10acb4e989e2a69-742916ef57c1deef-00"}
│

│  + Creating: placeConfiguration_game
│    ╷
│    │  Dependencies:
│    │      - place:
│    │          assetId: 18429659424
│    │  Inputs:
│    │    + placeConfiguration:
│    │    +   name: "[DEVELOPMENT] Monsters Nearby Waiting Game"
│    │    +   description: Created with Mantle
│    │    +   maxPlayerCount: 50
│    │    +   allowCopying: false
│    │    +   socialSlotType: Automatic
│    │    +   customSocialSlotsCount: ~
│    │

│    ╰─ Succeeded with outputs:
│         + placeConfiguration
│

│

╰─ Failed 1 changes(s) while evaluating the resource graph. See above for more details.

Perhaps I should make another ticket as this problem is fixed. And this problem does not seem like a problem with mantle, but Roblox API itself. What are your recommendations? Should I create a bug report to Roblox devforum. Or should I use a different file format that is not so large. rbxlx file was created with rojo, not sure how to make it to rbxl (that should be 50% smaller)

Etheroit commented 2 months ago

@MayGo You're right - file size appears to be the issue. 100mb seems to be the most recent file limit. https://devforum.roblox.com/t/open-cloud-publishing-your-places-with-api-keys-is-now-live/1485135/122?u=etheroit

As for generating .rbxl file instead of .rbxlx, just modify the extension in rojo's build cmd. rojo build -o build.rbxl instead of build.rbxlx. Mantle seems to support .rbxl according to docs. Please let me know if this fix works for you!

MayGo commented 2 months ago

Underestimated the file size shrinkage, actual was 126MB=>3.5MB, so now everything succeeds. Thanks for pointing to that devforum post.

Super thankful for fixing this @Etheroit @blake-mealey My whole motivation for working on Roblox projects again was riding on automating everything in Github Actions. 😊