Skip to content
CAI
Software that uses CAICheck a score

cesarferreira/dryrun

55.5

Adequate · 28 September 2026

597

lines of production code

Ruby

with JavaScript

2

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

Dryrun is a command-line tool designed to streamline the testing of Android libraries hosted on GitHub. It automates the process of cloning repositories, selecting connected devices, and executing builds or tests via Gradle. The system supports modern Android workflows, including Kotlin DSL, module selection, and robust handling of various Git URL formats.

Features

Introduction of the dryrun executable entry point

A new executable script named 'dryrun' has been added to the bin directory, allowing users to launch the application directly from the command line. This script initializes the Ruby environment using Bundler and invokes the main application class, providing a standard entry point for running the tool.

bin · high confidence

New dryrun CLI tool for running Android projects

Introduces the \dryrun\ command-line interface, allowing users to clone Android repositories, select connected devices, and build or test applications via command-line options such as branch, tag, module, and flavor selection.

lib · high confidence

Behavioural changes

Dryrun tool restructured with new Android project handling and Gradle support

The dryrun tool has been refactored to support modern Android development workflows, including explicit handling of Gradle Kotlin DSL (\.gradle.kts\) files and the ability to select specific modules and build flavors. The update introduces a new \AndroidProject\ class that manages project validation, manifest parsing (using the Oga XML library instead of Nokogiri), and module discovery. It also adds support for running connected Android tests and unit tests via the \GradleAdapter\, allows users to specify custom app paths and modules, and improves Windows compatibility by handling file permissions and ADB interactions more robustly. The tool now defaults to assembling the app if no device is connected, rather than attempting an install.

lib/dryrun · high confidence

Project rebranded from 'atry' to 'dryrun' with updated configuration and documentation

The tool has been rebranded from 'atry' to 'dryrun', reflected in the new gem name, updated README, and new facelift.json metadata. Configuration files have been added or updated to support this change, including a new .rspec file for test formatting, a .rubocop.yml enforcing Ruby 2.0+ and disabling specific metrics, a .travis.yml targeting Ruby 2.3.0, and a Rakefile for running tests. The .gitignore has been simplified to exclude standard Ruby build artifacts and IDE files.

(repo-wide) · high confidence

Test coverage

Added RSpec test suite for GitHub URL handling

Added new RSpec tests to verify the behavior of the GitHub URL parser, specifically validating that valid HTTPS and SSH URLs are correctly identified and that invalid URLs are rejected. The tests also confirm that the destination folder path is correctly derived from various URL formats, including those ending in .git or using SSH protocols, and that non-GitHub URLs result in a hash-based destination.

spec · high confidence

Dependencies

Initial release of the dryrun gem

The dryrun gem is introduced as a command-line tool for testing Android libraries hosted online. The package defines runtime dependencies on bundler, colorize, oga, highline, and rjb, while specifying development dependencies for rake, pry-byebug, and rspec to support testing and debugging workflows.

(dependencies) · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

Score

  • CAI 55 → 55 (+0.1)
  • Rubric changed (rubric-2026.09.8 → rubric-2026.09.16) — scores are not directly comparable.

Lenses

  • Code Health 100 → 100 (+0.0)
  • Architecture 69 → 69 (+0.0)
  • Maturity 49 → 49 (+0.0)
  • Readiness 44 → 44 (+0.0)
  • Security 97 → 98 (+0.8)

Resolved (1)

  • Documentation: no licence statement (README.md)

New (3)

  • Duplicate intent for manifest parsing. AndroidProject has two methods for manifest retrieval (parse vs get) with identical signatures, and a separate ManifestParser class exists that duplicates the logic of extracting package/activity info from a manifest file. It is unclear if AndroidProject methods delegate to ManifestParser or if they are redundant implementations.
  • Inconsistent naming for command execution. DryrunUtils has both execute and run, while AndroidProject has execute_command. The distinction between 'execute' and 'run' in DryrunUtils is unclear (one takes a command string, the other a path, but the semantic difference is subtle and naming is inconsistent with AndroidProject's execute_command).
  • Inconsistent validation method signatures. AndroidProject.valid? takes an argument, while Github.valid? takes none. This creates confusion about whether validation is self-contained or requires external context.

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

cesarferreira/dryrun was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 28 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 3cdd6e89b25b10bcc97394a2537bf4725a98780a — the exact code this score is about.
  • Scored under rubric-2026.09.16 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-2d9048c36d26.