Skip to content

actors info --input/--readme should follow the Actor's default build, not the latest tag #1454

Description

@chocholous

apify actors info <actor> --input and --readme resolve the build through taggedBuilds.latest. That tag is a convention — a per-version default that an Actor author can rename or drop. What the platform actually runs is a configuration: the Actor's defaultRunOptions.build. When the two disagree, the CLI reports on a build that nobody runs, or reports nothing at all.

Version 1.10.0, both installs (npm/node and the bundled build).

Problem 1 — an Actor without a latest tag looks like it has no schema

$ apify actors info apify/cheerio-scraper --input
Error: No input schema found for this Actor.
$ echo $?
0

Same for --readme. But the schema is there — apify/cheerio-scraper tags its builds beta, development, version-1, version-2, version-3, and its default build (version-3) is 3.0.22, with a 30-field input schema and a 32,059-character README:

$ curl -s https://api.apify.com/v2/acts/apify~cheerio-scraper/builds/default \
    | jq '.data.actorDefinition.input.properties | length'
30

Two things make this awkward to notice: the message goes to stdout, and the exit code is 0 — so a pipeline can't tell it from a successful run.

Problem 2 — when both exist but differ, the output is silently wrong

apify/rag-web-browser has latest0.0.32 while its default build is version-11.0.28. Both schemas have 15 properties, so nothing looks off, but six of them differ:

only in latest (0.0.32) only in default (1.0.28)
initialConcurrency, maxConcurrency, minConcurrency, maxRequestRetriesSearch, proxyGroupSearch, requestTimeoutContentCrawlSecs desiredConcurrency, htmlTransformer, removeElementsCssSelector, scrapingTool, serpMaxRetries, serpProxyGroup

data_xplorer/google-news-scraper-fast is worse: latest0.0.29 exposes 5 properties and calls the search field keyword, while the default build stable2.8.12 exposes 10 and calls it keywords. An input built from actors info --input fails against the Actor that actually runs.

This is the case that motivated the report — Problem 1 is at least loud.

Where it comes from

src/commands/actors/info.ts#L124 (v1.10.0):

const latest = actorInfo.taggedBuilds?.latest;

--readme and --input both bail out on !latest. The hydration loop just above (L108–117) already fetches every tagged build, and actorInfo.defaultRunOptions.build is part of the same response — so picking the right one needs no extra request:

const defaultTag = actorInfo.defaultRunOptions?.build ?? 'latest';
const target = actorInfo.taggedBuilds?.[defaultTag] ?? actorInfo.taggedBuilds?.latest;

Definitions I worked from

What I checked

20 Actors — 9 first-party apify/*, 11 community — each compared three ways: actors info --input, actors info --input --json + jq, and builds/default.

  • 5 have no latest tag and fail Problem 1, all of them first-party crawlers: cheerio-scraper, web-scraper, playwright-scraper, puppeteer-scraper, website-content-crawler. The other 4 first-party Actors sampled do have latest, as did all 11 community ones — so this isn't a first-party/community split, it's a house style among the crawlers.
  • 2 of the remaining 15 hit Problem 2 (the two above).
  • builds/default matched taggedBuilds[defaultRunOptions.build] in 20/20 — which is why the suggested fix uses the data already in the response rather than a new endpoint.

Workaround in the meantime is builds/default over plain HTTP, which is a shame for a CLI that otherwise covers this.

Is following defaultRunOptions.build (with latest as fallback) the behaviour you'd want here, or is the latest coupling deliberate? Happy to open a PR either way.


Found while validating Actor-tooling docs in apify/awesome-skills — several skills tell agents to fetch input schemas with apify actors info --input.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    t-buildersIssues owned by the Builders team.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions