Home / Companies / RWX / Blog / May 2024

May 2024 Summaries

8 posts from RWX

Filter
Month: Year:
Post Summaries Back to Blog
RWX supports dynamic CI tasks, allowing engineers to generate task definitions at runtime rather than relying solely on static YAML configurations established when a run begins. This approach enables pipelines to adapt to commit contents, external data, and other programmatic logic, potentially improving flexibility and performance as projects grow more complex. While YAML remains the output format for task definitions, RWX lets developers use any programming language to construct task arrays and serialize them into YAML, avoiding difficult embedded expressions and making logic easier to develop and debug. Examples demonstrate generating tasks with Bash or Ruby, with Ruby scripts typically stored separately in a repository and executed within an RWX workflow, and additional documentation and a short demonstration video are available.
May 31, 2024 441 words in the original blog post.
RWX concurrency pools manage simultaneous CI/CD jobs by limiting runs for scenarios such as feature-branch builds and continuous deployments, preventing conflicting deployments while addressing potential backlogs. For rapid commits to a deployment branch, the `cancel-waiting` behavior skips queued older deployments and runs only the newest one; for feature branches, `cancel-running` stops an in-progress build when a newer commit arrives; and `queue` preserves every run by executing them sequentially. RWX also supports configurable pool capacities above one concurrent run, multiple pools per workflow, and conditional pool application, providing more tailored concurrency control for different engineering workflows.
May 30, 2024 473 words in the original blog post.
RWX addresses a common CI/CD debugging challenge: workflows often run in Linux-based remote environments that differ from developers’ local machines, making failures difficult to investigate through slow cycles of log statements and repeated pushes. Its remote debugger lets engineers place an `rwx-breakpoint` anywhere in a task or script, pausing execution at the desired point and enabling a local shell connection through the `rwx debug {debugId}` command. The implementation creates a uniquely named tmux session in the task container, signals the host through a pipe to launch an SSH server, and waits until the tmux debugging session ends before continuing. On the server side, SSH connections are attached to the container’s tmux session using Node packages including ssh2 and node-pty, while the open-source RWX CLI uses existing RWX authentication to obtain the necessary connection keys.
May 29, 2024 659 words in the original blog post.
Shell scripts are widely used in DevOps and CI/CD because they are ubiquitous, dependency-free, and effective for handling command input and output, but they lack a native map structure for storing key-value data. Common CI/CD platforms serialize values into a single delimiter-based file, using special EOF-style delimiters for multiline content, which increases generation and parsing complexity and can create injection risks unless random delimiters are used consistently. RWX instead represents maps through directories, storing each key as a filename and its corresponding value as file contents, an approach it applies to both output values and environment variables. This file-based design simplifies multiline values, avoids delimiter-related injection concerns, and makes shell usage more straightforward, though serializing very large numbers of values may have a minor performance cost.
May 28, 2024 550 words in the original blog post.
Engineering teams should pin identical major, minor, and patch versions of tools and runtimes across development, staging, and production to avoid subtle compatibility failures. RWX encountered such an issue when code relying on default arguments in Node.js 20.12.2 ran on 20.11.1, where those defaults were unavailable; acceptance tests caught the resulting error in staging, but version checks could have prevented it earlier. The recommended approach is to maintain a single version source of truth, such as an asdf `.tool-versions` file, and enforce consistency through CI. RWX extracts Node.js, Go, and pnpm versions from this file, supplies them to installation tasks, and uses checks against provisioning scripts, package metadata, and dependency-installation scripts to ensure every reference matches. File filters allow the validation task to run efficiently by using cached results when relevant version files have not changed.
May 23, 2024 702 words in the original blog post.
Software supply chains pose significant security and reliability risks, particularly in CI/CD environments where third-party packages may be maintained by limited contributors and pipelines can access sensitive source code and production credentials. The discussion argues that package managers should pin dependencies to exact versions to prevent unreviewed or malicious updates from propagating automatically and to ensure failures occur only during intentional lockfile updates that can be tested in CI. Because locked dependencies can become outdated and miss security fixes or create maintenance difficulties, package managers should also make controlled upgrades straightforward. Semantic versioning can further reduce upgrade risk by signaling compatibility expectations, and newer tools may validate package interfaces to enforce backward compatibility unless a major version changes. These practices cannot eliminate supply-chain threats, but they provide opportunities to detect and mitigate harmful updates. RWX applies this approach by pinning third-party packages, offering a command to update dependencies, and validating that updates are backward compatible or accompanied by an appropriate major-version bump.
May 22, 2024 606 words in the original blog post.
Traditional CI/CD systems generally tie workflow execution to version-control events such as commits and pull request updates, forcing developers to push changes repeatedly to test new pipelines. RWX proposes decoupling task definitions from these events through init parameters, allowing required metadata such as commit SHAs and branch names to be supplied either by GitHub events or directly through a local CLI command. This approach supports local testing while retaining features such as branch-based concurrency controls, with runs on the same branch able to cancel earlier in-progress runs. For workflows using protected secrets, RWX bases vault access on the identity of the user initiating a run rather than trusting user-supplied branch parameters, enabling authorized developers to test protected workflows locally. The platform also recommends replacing branch-dependent logic with explicit boolean parameters, making workflow behavior more flexible and easier to test without pretending a local run originates from a particular branch.
May 21, 2024 854 words in the original blog post.
RWX CI/CD argues that conventional CI/CD platforms, which execute script-based jobs on ephemeral virtual machines, duplicate setup work, limit resource customization, complicate parallelism, and require full-job retries after failures. Its alternative defines workflows as directed acyclic graphs of reusable, atomic tasks, allowing shared setup steps to run once and provide outputs to multiple downstream jobs. RWX states that this task-level model improves performance through reduced duplication and semi-persistent infrastructure, enables CPU allocation tailored to individual tasks, supports clearer workflow composition, and permits parallel task execution without the logging and debugging challenges of background scripting. The platform also offers granular retries that automatically rerun affected downstream tasks and automatic content-based caching based on commands and source files, which it presents as a simpler way to gain capabilities comparable to Bazel while retaining an accessible CI/CD workflow.
May 20, 2024 957 words in the original blog post.