Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

### Removed

- `apm marketplace publish` command and consumer-repo fan-out workflow; consumers should run `apm install --update` instead. (#1134)
- `apm marketplace doctor` subcommand alias (deprecated); use `apm doctor` instead. (#1134)

## [0.20.0] - 2026-06-11

### Added
Expand Down
35 changes: 1 addition & 34 deletions docs/src/content/docs/producer/publish-to-a-marketplace.md
Original file line number Diff line number Diff line change
Expand Up @@ -201,46 +201,13 @@ no `dependencies:` block produce only `marketplace.json`. See

```bash
apm marketplace check # every package's ref/range resolves
apm marketplace doctor # local environment diagnostics
apm doctor # local environment diagnostics
apm marketplace outdated # packages with newer matching tags
```

`check` is the gate to run in CI: a missing tag or unresolvable
range exits non-zero before you push the release commit.

## Publish updates to pinned consumers

`apm marketplace publish` is the optional fan-out: it opens PRs
against a list of consumer repos that pin the previous marketplace
version, bumping each one to the version you just released.

```yaml
# consumer-targets.yml
targets:
- repo: acme-org/service-a
branch: main
- repo: acme-org/service-b
branch: develop
path_in_repo: apm.yml # default
```

```bash
apm marketplace publish --dry-run # preview
apm marketplace publish --yes # push branches and open PRs
apm marketplace publish --no-pr # push branches, skip gh PR creation
```

It clones each target, edits its `apm.yml` to point at the new
marketplace ref, pushes a feature branch, and opens a PR via `gh`.
State is journaled to `.apm/publish-state.json`. Failures in one
target do not abort the others; the exit code is non-zero if any
target failed.

This flow assumes `gh` is authenticated and the runner has push
access to every target -- it is targeted at internal/org marketplaces
where you control both sides. Public marketplaces should rely on
consumers running `apm install --update` on their own cadence.

## Pitfalls

- **`packages:` not `plugins:`** in the `apm.yml` source. The
Expand Down
26 changes: 0 additions & 26 deletions docs/src/content/docs/reference/cli/marketplace.md
Original file line number Diff line number Diff line change
Expand Up @@ -220,11 +220,6 @@ apm marketplace audit my-marketplace
apm marketplace audit my-marketplace --strict
```

### `apm marketplace doctor`

Run environment diagnostics for marketplace publishing: git binary,
network reachability, auth (`gh`/PAT), and config sanity.

### `apm marketplace outdated`

Show packages in the authoring config that have newer upstream
Expand Down Expand Up @@ -252,27 +247,6 @@ layouts (`v{version}`, `{name}_v{version}`, `{name}--v{version}`, etc.)
automatically. Set `tag_pattern` explicitly when your producer uses a different
layout.

### `apm marketplace publish`

Push marketplace updates to one or more **consumer** repositories,
optionally opening pull requests.

```bash
apm marketplace publish --dry-run
apm marketplace publish --targets ./consumer-targets.yml --draft
```

| Flag | Description |
|---|---|
| `--targets FILE` | Path to consumer-targets YAML. Default: `./consumer-targets.yml`. |
| `--dry-run` | Preview without pushing or opening PRs. |
| `--no-pr` | Push branches but skip PR creation. |
| `--draft` | Open PRs as drafts. |
| `--allow-downgrade` | Permit version downgrades. |
| `--allow-ref-change` | Permit switching ref types (e.g. tag to SHA). |
| `--parallel N` | Maximum concurrent target updates. Default: `4`. |
| `--yes`, `-y` | Skip the confirmation prompt. |

### `apm marketplace package add SOURCE`

Add a package entry to the authoring config. `SOURCE` is a git repo
Expand Down
3 changes: 1 addition & 2 deletions packages/apm-guide/.apm/skills/apm-usage/commands.md
Original file line number Diff line number Diff line change
Expand Up @@ -147,8 +147,7 @@ Credentials resolve via `APM_REGISTRY_TOKEN_{NAME}` env var (or `apm config set
| `apm marketplace outdated` | Report upgradable plugins, range-aware; respects `tag_pattern` and common monorepo tag layouts | `--offline`, `--include-prerelease`, `-v` |
| `apm marketplace check` | Validate the `marketplace:` block and verify refs resolve | `--offline`, `-v` |
| `apm marketplace audit NAME` | Supply-chain audit: warn when plugin transitive deps bypass marketplace pinning | `--strict` (CI exit-1 on bypass), `-v` |
| `apm marketplace doctor` | Diagnose git, network, auth, marketplace config readiness, and (when a `marketplace:` block is present) **format coverage** -- which output profiles are configured vs. supported, so producers can spot easy reach wins (e.g. add `codex: {}` to also publish for Codex consumers). All marketplace-specific rows are informational and never affect exit code. | `-v` |
| `apm marketplace publish` | Open PRs on consumer repos from `consumer-targets.yml` | `--targets PATH`, `--dry-run`, `--no-pr`, `--draft`, `--allow-downgrade`, `--allow-ref-change`, `--parallel N`, `-y` |
| `apm doctor` | Diagnose git, network, auth, marketplace config readiness, and (when a `marketplace:` block is present) **format coverage** -- which output profiles are configured vs. supported, so producers can spot easy reach wins (e.g. add `codex: {}` to also publish for Codex consumers). All marketplace-specific rows are informational and never affect exit code. | `-v` |
| `apm marketplace package add <source>` | Add a plugin entry to `marketplace.plugins` (source accepts `owner/repo` or `./path`) | `--name`, `--version`, `--ref` (mutable refs auto-resolved to SHA), `-d`/`--description`, `-s`/`--subdir`, `--tag-pattern`, `--tags`, `--include-prerelease`, `--no-verify` |
| `apm marketplace package set <name>` | Update fields on an existing plugin entry | `--version`, `--ref` (mutable refs auto-resolved to SHA), `--description`, `--subdir`, `--tag-pattern`, `--tags`, `--include-prerelease` |
| `apm marketplace package remove <name>` | Remove a plugin entry from `marketplace.plugins` | `--yes` |
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -633,7 +633,7 @@ is a hard error -- run `migrate` to consolidate.

See [docs/guides/marketplace-authoring](../../../../../docs/src/content/docs/guides/marketplace-authoring.md)
for the complete maintainer workflow (quickstart, version ranges, `check`,
`doctor`, `outdated`, and `publish`).
`doctor`, and `outdated`).

## Org-wide packages

Expand Down
8 changes: 3 additions & 5 deletions src/apm_cli/commands/doctor.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
"""``apm doctor`` top-level command.

Thin Click wrapper around :func:`apm_cli.commands.marketplace.doctor.run_doctor`.
The diagnostics are owned by the marketplace doctor module today because that
is where the existing implementation lives; promoting the entry point to the
top level is a discoverability fix without scope expansion. Future PRs may
add additional domains (lockfile, cache, runtime, config) by extending
``run_doctor`` -- each behind its own scope justification.
Thin Click wrapper around the marketplace doctor module where the existing
implementation lives. Future PRs may add additional domains (lockfile,
cache, runtime, config) by extending ``run_doctor``.
"""

from __future__ import annotations
Expand Down
Loading
Loading