Implement Syncback to support converting Roblox files to a Rojo project (#937)

This is a very large commit.
Consider checking the linked PR for more information.
This commit is contained in:
Micah
2025-11-19 09:21:33 -08:00
committed by GitHub
parent 071b6e7e23
commit 9b5a07191b
239 changed files with 5325 additions and 225 deletions

View File

@@ -0,0 +1,12 @@
{
"name": "child_but_not",
"tree": {
"$className": "DataModel",
"ReplicatedStorage": {
"$path": "ReplicatedStorage",
"OnlyOneCopy": {
"$path": "OnlyOneCopy"
}
}
}
}

Binary file not shown.

View File

@@ -0,0 +1,6 @@
{
"name": "csv",
"tree": {
"$path": "src"
}
}

View File

@@ -0,0 +1,2 @@
Key,Source,Context,Example,en
,,,,
1 Key Source Context Example en
2

Binary file not shown.

View File

@@ -0,0 +1,13 @@
{
"className": "Folder",
"children": [
{
"name": "value_1",
"className": "ObjectValue"
},
{
"name": "value_2",
"className": "ObjectValue"
}
]
}

View File

@@ -0,0 +1,11 @@
{
"name": "duplicate_rojo_id",
"tree": {
"$className": "DataModel",
"ReplicatedStorage": {
"container": {
"$path": "container.model.json"
}
}
}
}

Binary file not shown.

View File

@@ -0,0 +1,11 @@
{
"name": "ignore_paths_adding",
"tree": {
"$path": "src"
},
"syncbackRules": {
"ignorePaths": [
"src/*.rbxm"
]
}
}

View File

@@ -0,0 +1,11 @@
{
"name": "ignore_paths_init",
"tree": {
"$path": "src"
},
"syncbackRules": {
"ignorePaths": [
"**/init-file/*.luau"
]
}
}

View File

@@ -0,0 +1 @@
-- This file SHOULD NOT be updated

View File

@@ -0,0 +1 @@
-- This module SHOULD be updated

Binary file not shown.

View File

@@ -0,0 +1,14 @@
{
"name": "ignore_paths_removing",
"tree": {
"$className": "DataModel",
"ReplicatedStorage": {
"$path": "src"
}
},
"syncbackRules": {
"ignorePaths": [
"*.luau"
]
}
}

View File

@@ -0,0 +1 @@
-- This script is not in the input place file.

View File

@@ -0,0 +1,14 @@
{
"name": "ignore_trees_adding",
"tree": {
"$className": "DataModel",
"ReplicatedStorage": {
"$path": "src"
}
},
"syncbackRules": {
"ignoreTrees": [
"ReplicatedStorage/IgnoreMe"
]
}
}

View File

@@ -0,0 +1,14 @@
{
"name": "ignore_trees_removing",
"tree": {
"$className": "DataModel",
"ReplicatedStorage": {
"$path": "src"
}
},
"syncbackRules": {
"ignoreTrees": [
"ReplicatedStorage/KeepMe"
]
}
}

View File

@@ -0,0 +1,6 @@
{
"name": "json_middleware",
"tree": {
"$path": "src"
}
}

View File

@@ -0,0 +1,3 @@
{
"className": "Configuration"
}

View File

@@ -0,0 +1,3 @@
{
"className": "StringValue"
}

View File

@@ -0,0 +1,6 @@
{
"name": "project_json",
"tree": {
"$className": "Color3Value"
}
}

Binary file not shown.

View File

@@ -0,0 +1,11 @@
{
"name": "nested_projects",
"tree": {
"$className": "DataModel",
"ReplicatedStorage": {
"Nested": {
"$path": "nested.project.json"
}
}
}
}

View File

@@ -0,0 +1,15 @@
{
"name": "Nested",
"tree": {
"$className": "Configuration",
"BoolValue": {
"$className": "BoolValue",
"$properties": {
"Value": true
}
},
"StringValue": {
"$path": "string_value.txt"
}
}
}

View File

@@ -0,0 +1 @@
effective cover predict pawn south

View File

@@ -0,0 +1,11 @@
{
"name": "nested_projects",
"tree": {
"$className": "DataModel",
"ReplicatedStorage": {
"Nested": {
"$path": "nested.project.json"
}
}
}
}

View File

@@ -0,0 +1,12 @@
{
"name": "Nested",
"tree": {
"$className": "Configuration",
"StringValue": {
"$path": "string_value.txt"
},
"BoolValue": {
"$className": "BoolValue"
}
}
}

Binary file not shown.

View File

@@ -0,0 +1,9 @@
{
"name": "client_only",
"tree": {
"$path": "src/modules"
},
"globIgnorePaths": [
"**Server**"
]
}

View File

@@ -0,0 +1,16 @@
{
"name": "nested_projects_but_weird",
"tree": {
"$className": "DataModel",
"ReplicatedStorage": {
"modules": {
"$path": "client-only.project.json"
}
},
"ServerStorage": {
"modules": {
"$path": "server-only.project.json"
}
}
}
}

View File

@@ -0,0 +1,9 @@
{
"name": "server_only",
"tree": {
"$path": "src/modules"
},
"globIgnorePaths": [
"**Client**"
]
}

View File

@@ -0,0 +1,11 @@
{
"name": "project_init",
"tree": {
"$className": "DataModel",
"ReplicatedStorage": {
"script": {
"$path": "src"
}
}
}
}

Binary file not shown.

View File

@@ -0,0 +1 @@
-- satellite beef psychology response supply

View File

@@ -0,0 +1,29 @@
{
"name": "project_reserialize",
"tree": {
"$className": "DataModel",
"Workspace": {
"attribute_mismatch": {
"$attributes": {
"foo": "bar"
},
"$path": "attribute_mismatch.luau"
},
"property_mismatch": {
"$path": "property_mismatch.project.json"
},
"$properties": {
"EditorLiveScripting": {
"Enum": 0
},
"SignalBehavior": "Deferred",
"StreamOutBehavior": "Opportunistic",
"StreamingEnabled": true,
"StreamingIntegrityMode": "PauseOutsideLoadedArea"
},
"$attributes": {
"Rojo_Target_CurrentCamera": "6d6ae1d713c82fae0620aa1300000375"
}
}
}
}

View File

@@ -0,0 +1,11 @@
{
"name": "property_mismatch",
"tree": {
"$className": "BrickColorValue",
"$properties": {
"Value": {
"BrickColor": 345
}
}
}
}

View File

@@ -0,0 +1,15 @@
{
"name": "project_reserialize",
"tree": {
"$className": "Folder",
"attribute_mismatch": {
"$attributes": {
"foo": "bar"
},
"$path": "attribute_mismatch.luau"
},
"property_mismatch": {
"$path": "property_mismatch.project.json"
}
}
}

View File

@@ -0,0 +1,6 @@
{
"name": "property_mismatch",
"tree": {
"$className": "BrickColorValue"
}
}

View File

@@ -0,0 +1,6 @@
{
"name": "rbxm_fallback",
"tree": {
"$path": "src"
}
}

Binary file not shown.

View File

@@ -0,0 +1,9 @@
{
"name": "ref_properties",
"tree": {
"$className": "DataModel",
"ReplicatedStorage": {
"$path": "src"
}
}
}

View File

@@ -0,0 +1,3 @@
{
"className": "ObjectValue"
}

View File

@@ -0,0 +1,3 @@
{
"className": "Folder"
}

Binary file not shown.

View File

@@ -0,0 +1,9 @@
{
"name": "ref_properties_blank",
"tree": {
"$className": "DataModel",
"ReplicatedStorage": {
"$path": "src"
}
}
}

View File

@@ -0,0 +1,9 @@
{
"name": "ref_properties_conflict",
"tree": {
"$className": "DataModel",
"ReplicatedStorage": {
"$path": "src"
}
}
}

View File

@@ -0,0 +1,6 @@
{
"className": "ObjectValue",
"attributes": {
"Rojo_Target_Value": "identical ID"
}
}

View File

@@ -0,0 +1,6 @@
{
"className": "ObjectValue",
"attributes": {
"Rojo_Target_Value": "identical ID"
}
}

View File

@@ -0,0 +1,6 @@
{
"className": "Folder",
"attributes": {
"Rojo_Id": "identical ID"
}
}

View File

@@ -0,0 +1,6 @@
{
"className": "Folder",
"attributes": {
"Rojo_Id": "identical ID"
}
}

View File

@@ -0,0 +1,6 @@
{
"name": "ref_properties_duplicate",
"tree": {
"$path": "src"
}
}

View File

@@ -0,0 +1,6 @@
{
"className": "ObjectValue",
"attributes": {
"Rojo_Target_Value": "an ID that should not change"
}
}

View File

@@ -0,0 +1,6 @@
{
"className": "ObjectValue",
"attributes": {
"Rojo_Target_Value": "an ID that should not change"
}
}

View File

@@ -0,0 +1,6 @@
{
"className": "Folder",
"attributes": {
"Rojo_Id": "an ID that should not change"
}
}

View File

@@ -0,0 +1,9 @@
{
"name": "respect_old_middleware",
"tree": {
"$path": "src",
"project_node": {
"$className": "BoolValue"
}
}
}

View File

@@ -0,0 +1,3 @@
{
"className": "StringValue"
}

View File

@@ -0,0 +1,15 @@
<roblox xmlns:xmime="http://www.w3.org/2005/05/xmlmime" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.roblox.com/roblox.xsd" version="4">
<Meta name="ExplicitAutoJoints">true</Meta>
<External>null</External>
<External>nil</External>
<Item class="Folder" referent="RBX3331BF9CAA2D48DCAD7E3A0C645FDC33">
<Properties>
<BinaryString name="AttributesSerialize"></BinaryString>
<SecurityCapabilities name="Capabilities">0</SecurityCapabilities>
<bool name="DefinesCapabilities">false</bool>
<string name="Name">rbxmx</string>
<int64 name="SourceAssetId">-1</int64>
<BinaryString name="Tags"></BinaryString>
</Properties>
</Item>
</roblox>

View File

@@ -0,0 +1,12 @@
{
"name": "string_value_project",
"tree": {
"$className": "Folder",
"on_file_system": {
"$path": "string_value.txt"
},
"inside_project_file": {
"$className": "StringValue"
}
}
}

View File

@@ -0,0 +1,16 @@
{
"name": "sync_rules",
"tree": {
"$path": "src"
},
"syncRules": [
{
"use": "text",
"pattern": "*.text"
},
{
"use": "moduleScript",
"pattern": "*.modulescript"
}
]
}

View File

@@ -0,0 +1 @@
-- This should be a in the file 'module.modulescript'. It should be updated to have a second line.

View File

@@ -0,0 +1 @@
-- This should be a in the file 'text.text'. It should be updated to have a second line.

Binary file not shown.

View File

@@ -0,0 +1,9 @@
{
"name": "unscriptable_properties",
"tree": {
"$className": "BinaryStringValue"
},
"syncbackRules": {
"syncUnscriptable": true
}
}