Overview

This month we fixed that pesky EXIST: file already exists, mkdir... error that was crashing debug sessions, added node.js v19 compatibility for roku-deploy, several quality of life fixes for various RokuCommunity projects, and more.

We’ve also added a new section to this writeup, called Issue of the month. Check it out!

We need your help

The RokuCommunity projects are maintained by a relatively small group of developers (mostly volunteers), and we have a growing list of of unresolved issues. We need your help! There are many different ways you can contribute. Whether it’s addressing bugs, improving documentation, introducing new features, or simply helping us manage our expanding list of GitHub issues, your involvement would be greatly appreciated. We are more than happy to guide you in finding the most suitable contribution method that aligns with your interests. To learn more about how you can contribute, feel free to reach out to us on Slack, or explore the existing GitHub issues:

Issue of the month

In this section, we highlight a specific issue where we could benefit from the community’s assistance in finding a solution. These problems are generally straightforward to address, and serve as an excellent opportunity to become acquainted with the RokuCommunity codebases.

This month, we’d like to draw attention to vscode-brightscript-language#437: Add button to copy device IP.

The Devices panel shows many different fields from the device-info ECP request. Clicking on any of these items will automatically copy the value to your clipboard, which is super helpful. However, one exception is the IP address entry, which when clicked will open the Roku developer upload form instead of copying the IP address to your clipboard. We’d like to update that functionality so that clicking the IP address copies the value to your clipboard, and there would be a secondary link or button that opens the developer portal.

image

If you’re interested in working on this feature, please comment on the pull request or reach out to us on Slack

Editor

Better syntax highlighting in BrightScript files for < and >

We fixed a syntax highlighting issue in BrightScript/BrighterScript files where the < and > symbols were red, due to being marked as “unclosed brackets”. We’ve removed them from the bracket matching logic so they should now be highlighted the same as other logical operators.

Before:

image

After:

image

Debugging

Fix file already exists crash when starting debug sessions

We fixed a critical debugger issue that would show an error EXIST: file already exists, mkdir... anytime you ran a debug session, requiring require a full system restart or force-quitting many of the vscode processes. The problem was introduced in v0.18.7 when we improved the error messaging around certain types of debug session failures (ironic, right?).

The actual problem is that the .shutdown() call in the debug session fell into an infinite async loop, causing the stagingDir to be regularly locked by the OS as we repeatedly tried to empty its contents. To solve this, we now guard the .shutdown() call in a promise semaphore so we can only run shutdown once, the first time called. See #152 for more information.

Rendezvous Panel hitCount math fix

We fixed a math error in the hitCount counter in the top-level groups of the Rendezvous panel of the vscode extension. That number should now properly match the sum of all the child hit counts!

image

Fixed infinite recursion possibility in the SceneGraph Inspector

We’ve fixed a bug that could sometimes cause infinite recursion when using the Scenegraph Inspector. See vscode-brightscript-language#480 for more details. There’s not really anything to show, so here’s a photo of the SceneGraph Inspector just for fun.

image

Augment hex error codes with text descriptions

Whenever you encounter a runtime crash during a debug session, the device often will include a hexadecimal error code (such as &h08). These error codes are not overly helpful at a glance unless you’ve memorized all of Roku’s error codes. To improve readability of these crashlogs, the BrightScript Language extension for vscode now augments those hex codes with more useful error information.

Before:

Syntax Error. (compile error &h02) in pkg:/source/main.brs(3)

After:

Syntax Error. (compile error &h02 (ERR_SYNTAX): syntax error ) in pkg:/source/main.brs(3)

Added missing Roku Commands options

Many new commands have been added to the Roku Commands panel in the vscode extension. We won’t get into listing them all here, but if you’re a regular user of this feature then you’ll appreciate these new commands! Here’s a screenshot of that Roku Commands panel in vscode. image

BrighterScript

Plugin API: Fixes for findChild and findAncestor

We have improved the AstNode methods findChild and findAncestor methods to support:

  • externally cancelling the walk. If possible, you should consider cancelling the walk once you find the node you’re looking for, as this will improve performance by skipping wasted walking

  • enabling findAncestor to return a different node than matched, if the matcher returns the node

Misc

roku-deploy support for Node.js v19

You can now use roku-deploy on Node.js v19 and above! The core issue was caused by Node.js 19 changing the default keepalive settings on its internal http library. As such, roku-deploy on node 19 would fail with an ECONNRESET error. The fix was to pass in an additional argument to the postman-request agentOptions.

For Contributors

Goodbye request, hello postman-request

For several years the RokuCommunity tools like roku-deploy and roku-debug have been using the request library for our http request needs. However, the request package was deprecated in 2019 and has started triggering all sorts of npm audit issues. Since the request package still perfectly suits our needs, we’ve migrated to a fork of the project called postman-request which is actively maintained.

On a related note, a few recent pull requests had added a dependency on axios. In order to keep our projects smaller, we’ve removed that dependency in favor of leveraging postman-request in those situations as well.

None of these changes should have any impact on your direct use of the tools, but if you have Node.js scripts or BrighterScript plugins that utilize request as a transient dependency from our tools, you’ll now need to install request directly or change to importing postman-request instead, as request will no longer be present in node_modules.

Fixed roku-deploy device tests

If you’ve contributed to roku-deploy in the past, you might have noticed that some of the device tests were failing. This was because we had accidentally replaced our signingPackage.pkg with an empty file (oops!). Turns out one of our unit tests was using the wrong directory and was replacing the file on every test suite run. That’s been fixed and the correct signingPackage.pkg file has been restored, so those device tests should now work properly moving forward.

Thank you

Last but certainly not least, a big Thank You to the following people who contributed this month:

Contributions to vscode-brightscript-language:

Contributions to brighterscript:

Contributions to roku-deploy:

Contributions to logger:

Contributions to roku-debug:

Home What's new Slack channel Newsletter Edit this website on Github

Legal notice

The views and opinions expressed in this website and all of its pages are those from within our open source community and do not represent the views or positions of Roku, Inc. or any entities they represent.

Designed with favorite by @arturocuya, powered by Astro