Compare commits

...

17 Commits

Author SHA1 Message Date
Lucien Greathouse
1a78e9178a Release 0.5.3 2019-10-15 18:16:21 -07:00
Lucien Greathouse
1659cf7a01 Plugin: Upgrade to latest rbx_dom_lua 2019-10-15 18:05:43 -07:00
Lucien Greathouse
78d97e162c Release v0.5.2 2019-10-14 17:33:43 -07:00
Lucien Greathouse
5d0aa1193f Fix LocalizationTable output order by switching to a BTreeMap.
ACTUALLY closes #173.
2019-10-14 17:29:34 -07:00
Lucien Greathouse
126040a87b Add build tests for init.meta.json 2019-10-12 23:59:54 -07:00
Lucien Greathouse
2c408f4047 Fix errors in 'Sync Details' page 2019-10-08 16:17:13 -07:00
Lucien Greathouse
b53cda787a Add end-to-end build test for Script.Disabled via .meta.json 2019-10-08 16:09:27 -07:00
Lucien Greathouse
7b4455ed51 Release v0.5.1 2019-10-04 12:51:14 -07:00
Lucien Greathouse
5b57025b0b plugin: Only move message cursor in response to retrieveMessages 2019-10-04 11:13:10 -07:00
Lucien Greathouse
ece454e6dd Update dependencies 2019-10-04 10:54:53 -07:00
boyned//Kampfkarren
afa480b07d Fix broken link to sync details (#248) 2019-09-22 17:38:40 -07:00
Lucien Greathouse
c9b695d533 Fix guide to point to release versions instead of alphas 2019-09-20 11:06:01 -07:00
Lucien Greathouse
71c77a09a6 Update docs link to rojo.space 2019-09-19 14:02:26 -07:00
Lucien Greathouse
d309a1359c Update changelog 2019-09-13 17:16:05 -07:00
Lucien Greathouse
b0bb486d9a Improve diagnostics for failed instance creation 2019-09-13 16:00:08 -07:00
Lucien Greathouse
2c7c3348cf Add help page to direct people to Discord, GitHub, and Twitter 2019-09-11 11:36:02 -07:00
Lucien Greathouse
4caac5e6cb Update docs home for 0.5.x 2019-08-27 14:37:26 -07:00
27 changed files with 590 additions and 465 deletions

View File

@@ -2,6 +2,18 @@
## Unreleased Changes
## [0.5.3](https://github.com/rojo-rbx/rojo/releases/tag/v0.5.3) (October 15, 2019)
* Fixed an issue where Rojo would throw an error when encountering recently-added instance classes.
## [0.5.2](https://github.com/rojo-rbx/rojo/releases/tag/v0.5.2) (October 14, 2019)
* Fixed an issue where `LocalizationTable` instances would have their column order randomized. ([#173](https://github.com/rojo-rbx/rojo/issues/173))
## [0.5.1](https://github.com/rojo-rbx/rojo/releases/tag/v0.5.1) (October 4, 2019)
* Fixed an issue where Rojo would drop changes if they happened too quickly ([#252](https://github.com/rojo-rbx/rojo/issues/252))
* Improved diagnostics for when the Rojo plugin cannot create an instance.
* Updated dependencies
* This brings Rojo's reflection database from client release 395 to client release 404.
## [0.5.0](https://github.com/rojo-rbx/rojo/releases/tag/v0.5.0) (August 27, 2019)
* Changed `.model.json` naming, which may require projects to migrate ambiguous cases:
* The file name now takes precedence over the `Name` field in the model, like Rojo 0.4.x.

871
Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -26,12 +26,14 @@ The Rojo CLI must be run from the command line, like Terminal.app on MacOS or `c
### Installing from Cargo
If you have Rust installed, the easiest way to get Rojo is with Cargo!
To install the latest 0.5.0 alpha, use:
To install the latest 0.5.x release, use:
```sh
cargo install rojo --version 0.5.0-alpha.13
cargo install rojo
```
If you're upgrading from a previous version of Rojo, you may need to pass `--force` to tell Cargo to overwrite your existing version.
## Installing the Plugin
### Installing from GitHub
@@ -43,4 +45,4 @@ Download the attached `rbxm` file and put it into your Roblox Studio plugins fol
{: align="center" }
### Installing from Roblox.com
Visit [Rojo's Roblox.com Plugin page](https://www.roblox.com/library/1997686364/Rojo-0-5-0-alpha-3) in Roblox Studio and press **Install**.
Visit [Rojo's Roblox.com Plugin page](https://www.roblox.com/library/1997686364) in Roblox Studio and press **Install**.

View File

@@ -60,4 +60,4 @@ Unknown files are now ignored in Rojo instead of being converted to `StringValue
## Migrating `init.model.json` files
In Rojo 0.4.x, it's possible to create a file named `init.model.json` that lets you describe a model that becomes the container for all of the other files in the folder, just like `init.lua`.
In Rojo 0.5.x, this feature has been replaced with `init.meta.json` files. See [Sync Details](../reference/sync-details) for more information about these new files.
In Rojo 0.5.x, this feature has been replaced with `init.meta.json` files. See [Sync Details](../../reference/sync-details) for more information about these new files.

7
docs/help.md Normal file
View File

@@ -0,0 +1,7 @@
Rojo is a fairly complex tool to adopt, but there's a community willing to help!
The [Roblox Open Source Community Discord](https://discord.gg/wH5ncNS) currently hosts a Rojo support channel, **#rojo**, that is a great place to get help as problems come up.
If you find anything that looks like a bug or have ideas for how to improve Rojo, feel free to file an issue on [Rojo's GitHub issue tracker](https://github.com/rojo-rbx/rojo/issues).
Rojo's primary maintainer is also available on Twitter, [@LPGhatguy](https://twitter.com/LPGhatguy).

View File

@@ -1,11 +1,11 @@
This is the documentation home for Rojo 0.5.x.
This is the documentation home for **Rojo 0.5.x**.
Available versions of these docs:
* [Latest version (currently 0.5.x)](https://rojo.space/docs/latest)
* [Latest version from `master` branch](https://rojo.space/docs/latest)
* [0.5.x](https://rojo.space/docs/0.5.x)
* [0.4.x](https://rojo.space/docs/0.4.x)
**Rojo** is a flexible multi-tool designed for creating robust Roblox projects.
**Rojo** is a tool designed to enable Roblox developers to use professional-grade software engineering tools.
This documentation is a continual work in progress. If you find any issues, please file an issue on [Rojo's issue tracker](https://github.com/rojo-rbx/rojo/issues)!

View File

@@ -116,10 +116,18 @@ Meta files can contain:
### Meta Files to set Rojo metadata
Sometimes it's useful to apply properties like `ignoreUnknownInstances` on instances that are defined on the filesystem instead of within the project itself.
If your project has `hello.txt` and there are instances underneath it that you want Rojo to ignore when live-syncing, you could create `hello.meta.json` with:
```json
{
"ignoreUnknownInstances": true
}
```
### Meta Files for Disabled Scripts
Meta files can be used to set properties on `Script` instances, like `Disabled`.
If your project had `foo.server.lua` and you wanted to make sure it would be disabled, you could create a `foo.meta.json` next to it with:
If your project has `foo.server.lua` and you want to make sure it would be disabled, you could create a `foo.meta.json` next to it with:
```json
{
@@ -140,7 +148,7 @@ If you wanted to represent a tool containing a script and a model for its handle
0, 0, 0,
1, 0, 0,
0, 1, 0,
0, 0, 1,
0, 0, 1
]
}
}

View File

@@ -11,6 +11,7 @@ theme:
nav:
- Home: index.md
- Why Rojo?: why-rojo.md
- Get Help with Rojo: help.md
- Guide:
- Installation: guide/installation.md
- Creating a Game with Rojo: guide/new-game.md

View File

@@ -131,13 +131,15 @@ function ApiContext:read(ids)
return Promise.reject("Server changed ID")
end
self.messageCursor = body.messageCursor
return body
end)
end
function ApiContext:retrieveMessages()
function ApiContext:retrieveMessages(initialCursor)
if initialCursor ~= nil then
self.messageCursor = initialCursor
end
local url = ("%s/api/subscribe/%s"):format(self.baseUrl, self.messageCursor)
local function sendRequest()

View File

@@ -1,6 +1,6 @@
return {
codename = "Epiphany",
version = {0, 5, 0},
version = {0, 5, 3},
expectedServerVersionString = "0.5.0 or newer",
protocolVersion = 2,
defaultHost = "localhost",

View File

@@ -50,6 +50,8 @@ function Reconciler:reconcile(virtualInstancesById, id, instance)
-- If an instance changes ClassName, we assume it's very different. That's
-- not always the case!
if virtualInstance.ClassName ~= instance.ClassName then
Logging.trace("Switching to reify for %s because ClassName is different", instance:GetFullName())
-- TODO: Preserve existing children instead?
local parent = instance.Parent
self.instanceMap:destroyId(id)
@@ -93,6 +95,12 @@ function Reconciler:reconcile(virtualInstancesById, id, instance)
unvisitedExistingChildren[existingChildInstance] = nil
self:reconcile(virtualInstancesById, childId, existingChildInstance)
else
Logging.trace(
"Switching to reify for %s.%s because it does not exist",
instance:GetFullName(),
virtualInstancesById[childId].Name
)
self:__reify(virtualInstancesById, childId, instance)
end
end
@@ -148,7 +156,13 @@ function Reconciler:__reify(virtualInstancesById, id, parent)
local virtualInstance = virtualInstancesById[id]
local instance = Instance.new(virtualInstance.ClassName)
local ok, instance = pcall(function()
return Instance.new(virtualInstance.ClassName)
end)
if not ok then
error(("Couldn't create an Instance of type %q, a child of %s"):format(virtualInstance.ClassName, parent:GetFullName()))
end
for key, value in pairs(virtualInstance.Properties) do
setCanonicalProperty(instance, key, rojoValueToRobloxValue(value))

View File

@@ -33,7 +33,7 @@ function Session.new(config)
end
self.reconciler:reconcile(response.instances, api.rootInstanceId, game)
return self:__processMessages()
return self:__processMessages(response.messageCursor)
end)
:catch(function(message)
self.disconnected = true
@@ -43,12 +43,12 @@ function Session.new(config)
return not self.disconnected, setmetatable(self, Session)
end
function Session:__processMessages()
function Session:__processMessages(initialCursor)
if self.disconnected then
return Promise.resolve()
end
return self.api:retrieveMessages()
return self.api:retrieveMessages(initialCursor)
:andThen(function(messages)
local promise = Promise.resolve(nil)

View File

@@ -0,0 +1,6 @@
{
"name": "init_meta_class_name",
"tree": {
"$path": "should-be-a-model"
}
}

View File

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

View File

@@ -0,0 +1,6 @@
{
"className": "Lighting",
"properties": {
"Technology": "Voxel"
}
}

View File

@@ -0,0 +1,6 @@
{
"name": "init_meta_properties",
"tree": {
"$path": "Lighting"
}
}

View File

@@ -0,0 +1,6 @@
{
"name": "script_meta_disabled",
"tree": {
"$path": "folder"
}
}

View File

@@ -0,0 +1,5 @@
{
"properties": {
"Disabled": true
}
}

View File

@@ -0,0 +1 @@
-- This script should be marked 'Disabled'

View File

@@ -1,8 +1,4 @@
use std::{
fs,
path::Path,
process::Command,
};
use std::{fs, path::Path, process::Command};
use insta::assert_snapshot_matches;
use tempfile::tempdir;
@@ -27,12 +23,15 @@ gen_build_tests! {
csv_bug_147,
csv_in_folder,
gitkeep,
init_meta_class_name,
init_meta_properties,
json_model_in_folder,
json_model_legacy_name,
module_in_folder,
module_init,
rbxm_in_folder,
rbxmx_in_folder,
script_meta_disabled,
server_in_folder,
server_init,
txt_in_folder,
@@ -55,7 +54,10 @@ fn run_build_test(test_name: &str) {
let status = Command::new(exe_path)
.args(&[
"build", input_path.to_str().unwrap(), "-o", output_path.to_str().unwrap(),
"build",
input_path.to_str().unwrap(),
"-o",
output_path.to_str().unwrap(),
])
.env("RUST_LOG", "error")
.current_dir(working_dir)
@@ -64,8 +66,7 @@ fn run_build_test(test_name: &str) {
assert!(status.success(), "Rojo did not exit successfully");
let contents = fs::read_to_string(&output_path)
.expect("Couldn't read output file");
let contents = fs::read_to_string(&output_path).expect("Couldn't read output file");
assert_snapshot_matches!(test_name, contents);
}
}

View File

@@ -0,0 +1,11 @@
---
source: rojo-test/src/build_test.rs
expression: contents
---
<roblox version="4">
<Item class="Model" referent="0">
<Properties>
<string name="Name">init_meta_class_name</string>
</Properties>
</Item>
</roblox>

View File

@@ -0,0 +1,12 @@
---
source: rojo-test/src/build_test.rs
expression: contents
---
<roblox version="4">
<Item class="Lighting" referent="0">
<Properties>
<string name="Name">init_meta_properties</string>
<token name="Technology">1</token>
</Properties>
</Item>
</roblox>

View File

@@ -0,0 +1,18 @@
---
source: rojo-test/src/build_test.rs
expression: contents
---
<roblox version="4">
<Item class="Folder" referent="0">
<Properties>
<string name="Name">script_meta_disabled</string>
</Properties>
<Item class="Script" referent="1">
<Properties>
<string name="Name">hello</string>
<bool name="Disabled">true</bool>
<string name="Source">-- This script should be marked 'Disabled'</string>
</Properties>
</Item>
</Item>
</roblox>

View File

@@ -1,6 +1,6 @@
[package]
name = "rojo"
version = "0.5.0"
version = "0.5.3"
authors = ["Lucien Greathouse <me@lpghatguy.com>"]
description = "Enables professional-grade development tools for Roblox developers"
license = "MIT"

View File

@@ -3,7 +3,7 @@
use std::{
borrow::Cow,
collections::HashMap,
collections::{BTreeMap, HashMap},
fmt,
path::{Path, PathBuf},
str,
@@ -631,7 +631,8 @@ fn snapshot_csv_file<'source>(
#[serde(skip_serializing_if = "Option::is_none")]
source: Option<&'a str>,
values: HashMap<&'a str, &'a str>,
// We use a BTreeMap here to get deterministic output order.
values: BTreeMap<&'a str, &'a str>,
}
let instance_name = file.path

View File

@@ -73,7 +73,7 @@ impl InterfaceService {
<h2 class="subtitle">
"Version " { self.server_version }
</h2>
<a class="docs" href="https://lpghatguy.github.io/rojo">
<a class="docs" href="https://rojo.space/docs">
"Rojo Documentation"
</a>
</div>