Skip to content
CAI
Software that uses CAICheck a score

PGYER/fir-cli

54.1

Adequate · 20 September 2026

2.2k

lines of production code

Ruby

primary language

1

measurement over time

CAI band scale
CAI lens gauges

What this system is

fir-cli is a command-line interface for managing iOS and Android application distribution on the fir.im platform. It facilitates the uploading of app binaries, symbol maps, and metadata while supporting modern formats like Android App Bundles and integrating with cloud storage providers. The system also handles post-upload notifications to various messaging services and provides infrastructure for containerized execution and continuous integration.

Features

Initial release of fir-cli with Docker support and CI integration

This entry marks the initial release of the fir-cli tool, providing a command-line interface for managing iOS and Android applications on fir.im. The release introduces a Dockerfile based on ruby:3.2-slim and a helper shell script (fir.sh) to run the CLI within a containerized environment, ensuring consistent execution without local Ruby dependencies. It also includes configuration files for Travis CI (.travis.yml) and Code Climate (.codeclimate.yml), along with a Rakefile for testing and an install.sh script for bootstrapping the Ruby environment. The product functionality covers publishing apps, building IPA/APK files, and uploading symbol maps, as detailed in the included CHANGELOG and README.

(repo-wide) · high confidence

Removals

Removal of CLI command modules

The CLI command implementations for config, info, login, publish, resign, and update have been removed from the codebase. This eliminates the ability to configure global settings, retrieve application information, manage authentication tokens, publish or resign IPA files, and update application metadata via the command line interface.

lib/fir-cli-commands · high confidence

Behavioural changes

Introduces Ruby core library patches for compatibility and convenience

The \lib/fir/patches\ directory now includes a suite of new Ruby patches that bring ActiveSupport-style methods to core classes and fix library compatibility issues. These patches add \blank?\, \present?\, \presence\, and \try\ methods to Object, NilClass, and other core types, alongside Hash methods like \compact\, \symbolize\_keys\, and \deep\_symbolize\_keys\. It also introduces \ActiveSupport::Concern\ for cleaner module composition, OS detection helpers in the \OS\ module, and file inspection utilities (\File.dsym?\, \File.text?\). Additionally, it patches \RestClient\ to handle response code extraction safely on Ruby 2.6/2.7 and adds upload progress tracking for HTTP requests.

lib/fir/patches · high confidence

Refactored CLI entry points and added development console

The bin/fir executable now loads the library directly via require\_relative instead of the fir-cli gem, adds UTF-8 encoding, and implements explicit locale setting and error handling that prints stack traces on failure. Additionally, new bin/console and bin/setup scripts were added to provide an interactive Pry console for development and an automated setup script for installing dependencies.

bin · high confidence

Replaced legacy upload and build logic with modular uploader classes and deprecated IPA build

The \lib/fir/util\ directory has been restructured to support a new upload architecture and deprecate legacy build features. The \publish\ command now delegates binary and icon uploads to specific storage providers via new \AppUploader\ base class and its subclasses \AliUploader\ (Alibaba Cloud OSS) and \QiniuUploader\ (Qiniu Cloud), replacing the previous monolithic upload logic. Additionally, the \build\_ipa\ command is now deprecated and returns an error recommending users migrate to external tools like fastlane gym, while the \build\_apk\ command remains but warns that it is also nearing expiration. New helper modules for DingTalk, Feishu, and WeChat Work notifications have been added to the publish flow, and configuration paths are centralized in a new \Config\ module.

lib/fir/util · high confidence

Reworked library structure and removed legacy IPA parsing extensions

The library's entry points have been reorganized: \lib/fir.rb\ is now the primary entry point, while \lib/fir-cli.rb\ and \lib/fir\_cli.rb\ are retained solely for backward compatibility. The legacy \lib/fir-cli.ext.rb\ file, which contained the core CLI logic and IPA/APK parsing implementations, has been removed. Additionally, the \lib/lagunitas.ext.rb\ and \lib/lagunitas.patch.rb\ files, which provided custom extensions for the \lagunitas\ gem to handle IPA metadata and icons, have been deleted, indicating a shift in how IPA files are processed or a reliance on updated upstream libraries.

lib · medium confidence

fir-cli v2.0.25: New CLI structure and API configuration

The fir-cli tool has been updated to version 2.0.25, introducing a restructured codebase with a new \api.yml\ configuration file that defines API endpoints (e.g., \http://api.appmeta.cn\) and a refactored CLI interface (\cli.rb\) built on Thor. This update adds several new commands and options, including \fir me\ for user info, \fir mapping\ for uploading mapping files, and support for Android App Bundles (AAB) with \bundletool\ integration. It also enhances notification capabilities by adding webhook support for Feishu v2, DingTalk, and WeChat Work (WxWork), alongside options to save upload info locally and specify custom app display names.

lib/fir · high confidence

Fixes

New Android AAB parser and fixes for APK and IPA parsing

Added a new AAB (Android App Bundle) parser that uses Google's bundletool to extract manifest information, enabling support for AAB files. Fixed APK parsing to handle illegal XML control characters in strings by sanitizing them during AXML parsing, and corrected the Android manifest read logic. Updated the IPA parser to support rubyzip 3.x by detecting the new extract API signature and adjusting extraction arguments accordingly, ensuring compatibility with newer versions of the library.

lib/fir/util/parser · high confidence

Test coverage

Added test case for APK text handling; Added test suite for FIR CLI core features.

Dependencies

fir-cli dependency overhaul and Ruby 3 compatibility

The gem dependencies have been significantly updated to improve compatibility and functionality. The gem now requires Ruby 3.2.2+ compatible versions of libraries, specifically pinning mime-types to \>= 3.3.0 to resolve reserved parameter name conflicts. Key dependencies have been upgraded or replaced: rest-client is updated to \~\> 2.0, thor to \~\> 1.2.1, and ruby\_android\_apk to \~\> 0.7.7.1 (replacing the older ruby\_apk). New dependencies include admqr\_knife (\~\> 0.2.0), rqrcode (\~\> 0.7), rexml, and api\_tools (\~\> 0.1.1). Additionally, rubyzip is explicitly pinned to \< 4 to prevent breaking changes from future major version bumps. Development dependencies now include minitest (\~\> 5.7) and pry (\~\> 0.10), while byebug has been removed.

(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

Baseline

  • First survey — no prior run to compare against. CAI 54.

Lenses

  • Code Health 100
  • Architecture 99
  • Maturity 37
  • Readiness 56
  • Security 69

Changes since last survey

  • 300 commits — 252 feature/other, 48 fixes

By area

  • (root) — 148 commits
  • lib/fir — 70 commits
  • (repo) — 48 commits
  • .github/workflows — 15 commits
  • doc/install.md — 5 commits
  • doc/build_ipa.md — 4 commits
  • doc/help.md — 2 commits
  • doc/publish.md — 2 commits
  • test/test_helper.rb — 2 commits
  • doc/build_apk.md — 1 commit
  • doc/info.md — 1 commit
  • doc/mapping.md — 1 commit
  • doc/upgrade.md — 1 commit

Notable commits

  • fix: bug fix on finding xcodeproject path
  • fix: fix
  • fix: fix
  • fix: fix
  • fix: fix
  • fix: fix
  • fix: fix
  • fix: fix
  • fix: fix
  • fix: fix
  • fix: fix
  • fix: fix
  • fix: fix
  • fix: fix
  • fix: fix
  • fix: fix
  • fix: fix #65
  • fix: fix #66
  • fix: fix #67
  • fix: fix #68
  • …and 280 more

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

Survey your own repository

PGYER/fir-cli 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 20 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 b43f922f1f15825951fdbde1e732a7c344d81859 — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-b51f968c9b10.