Publish per-platform Maven CLI artifacts

Open
#1,434 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
5/5
Estimated time
Over a week
Newbie friendliness
42/100
Issue type
Feature
Clarity
Mostly clear
Activity status
Active
Tech stack
node.js, typescript

Research direction

Start by reviewing the current GitHub release assets and Craft’s existing Maven publishing support, then examine how the Android Gradle Plugin consumes the CLI. Done means per-platform Maven artifacts are published so consumers can resolve only the host-platform binary, with the plugin JAR remaining small; Gradle Module Metadata is preferred when practical.

Written by the indexing model from the issue text.

Description

The Android Gradle Plugin currently bundles every platform binary of the old sentry-cli into one ~46MB artifact. The new CLI’s compressed platform binaries are roughly 4× larger (e.g. linux-arm64 ~34.8MB vs sentry-cli ~8.8MB), so bundling all platforms would push SAGP toward ~180MB. That slows customer builds and would increase Maven Central egress on weekly plugin releases. sentry-fastlane-plugin has the same consumer pattern.

Current behavior

  • CLI ships per-platform GitHub release assets only (for example sentry-linux-arm64.gz at 0.42.2).
  • SAGP needs a trusted, dependency-cacheable binary path. Downloading arbitrary executables outside Maven bypasses Gradle dependency lock/verification and is a supply-chain concern (gradle/gradle#28530).
  • Hosting outside Maven Central is not viable for customers (checksums, signing, custom repo reliability).

Gap

There is no Maven Central package that lets consumers resolve only the host-platform binary, so integrators are stuck bundling every platform or downloading outside the dependency graph.

Proposal

Raised for SAGP / Android packaging:

  • Publish per-platform Maven artifacts (for example io.sentry:sentry:<version>:<os-arch>) so Gradle pulls only the host platform.
  • Keep the plugin JAR small (~1MB); fresh installs pay one platform binary (~35MB), and plugin bumps that do not change the CLI version would not re-download the binary.
  • Prefer Gradle Module Metadata when practical so consumers can declare a dependency without an explicit os/arch classifier; classifiers alone are enough as a first step.
  • Reuse Craft’s existing Maven publishing support if that fits the release pipeline.

Related idea: split Node runtime from the app

Also raised in the same discussion:

  • Split the shipped CLI into the Node.js runtime and the app payload instead of one fat binary.
  • Let Gradle depend on Node as its own Maven artifact, then layer the smaller CLI app on top of that runtime.
  • Weekly plugin upgrades would stay smaller when the Node version is unchanged and only the app part needs a bump.

Raised by the Android team during the CLI cutover size discussion.

Requested by bete.

--

View Junior Session [Sentry]

Dominant language
TypeScript
Stars
121
Forks
14
Avg merge
22h 3m
Merged PRs (30d)
94

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from getsentry/cli

All issues in getsentry/cli

Similar issues

More TypeScript issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.