Repository navigation
Conversation
…as the Docker context
…to feat/push-select-actors
…to feat/push-select-actors
…to feat/push-select-actors
…nor the selection flags there
…r push The loop-level listener kept a signal from terminating the CLI anywhere in the selection, so a Ctrl+C during an upload let the current push run on. Outside a build wait the listener now names the Actors not pushed (and, with --json, prints the results so far), removes itself and raises the signal again, so Node's default action ends the process as it does for a single Actor. During a build wait the build is still aborted and the loop stops after it.
Ctrl+C at the Git-source question rejects the prompt, which ends a single push. In the loop the error was caught and the next Actor was pushed; the loop now stops and names the Actors not pushed.
apify-factory
left a comment
Contributor
There was a problem hiding this comment.
Looks good, nothing blocking.
🏭 Factory review — ℹ️ not auto-approved
This change was reviewed but cannot be auto-approved: a gate failed, so the review cannot end in an approval.
| check | result |
|---|---|
| Static gates | ❌ 13/16 — base-branch, max-files, max-lines |
| Review findings | ✅ none |
| Reviewer escalation | ❌ Adds new public CLI flags and a new --json output shape for apify push, changes the shared flag parser, and re-raises interrupt signals to end the process, so a person should confirm the contract and process-lifecycle changes. |
Juror 1 — claude-sonnet-5-5, adversarial |
⏭️ skipped — a gate failed |
Why it was not auto-approved
Failed gates:
base-branch: base is feat/push-monorepo-preflight, required mastermax-files: 16 changed files, limit 10max-lines: 1508 changed lines (+1467/-41), limit 200
The comments above are the review itself; this section only explains the approval decision. Push a change and request @apify-factory again to re-run it, or ask a human to review.
Reviewed 824615776 · workflow run
apify-factory
left a comment
Contributor
There was a problem hiding this comment.
Looks good, nothing blocking.
…to feat/push-select-actors
…to feat/push-select-actors
7 tasks
…tors # Conflicts: # src/commands/actors/push.ts # src/lib/hooks/telemetry/trackEvent.ts
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
apify pushat the root of a repository with Actors in subfolders stopped with exit 4, so pushing several Actors meant one invocation per folder. Now, when the directory has no config file of its own but directories below it hold Actors, the command lists them and pushes the chosen ones, one ordinary push per Actor, in sequence. A directory with its own config is pushed as before.Closes #1499. Part of apify/apify-core#28685. Stacked on #1502 (
feat/push-monorepo-preflight).Changes
.actor/actor.json,actor.json, orapify.jsonis in the directory itself; a root.actorignoreor a.actor/folder with only shared files does not count.--allpushes every Actor found below the root; a repeatable--actor-dir <path>(relative to the root, exclusive with--all) pushes the named ones. Both are pushed in path order. Without a flag, a multi-select prompt opens on a TTY outside CI; otherwise the listing goes to stderr with a hint and the command exits 4 before the login check.--allor--actor-dirin a directory that is an Actor itself exits 5.--actor-diralso works when discovery finds nothing (a symlinked Actor, one inside an ignored folder).getActorLocalFilePathsalways ignores at every depth, does not follow symlinks or descend below a found Actor, and skips directories it cannot read.{dir, ok: false, skipped: true}with no exit code and does not fail the run.--jsonprints one document{ok, operation: "push", results: [{dir, ...single push result}], exitCode?}once a selection was made, also an empty one;okis true when every entry is ok or skipped. On the exit-4 and exit-5 paths before a selection nothing is printed on stdout. The positionalactorIdapplies to a single selected Actor only (exit 5 otherwise).pushSelection: {selected, failed}.Flags.string({ multiple: true })keeps every value asstring[], strips the short-form=from each, and validates each againstchoices.@inquirer/checkbox. Install size: the package adds 36 KB on disk (about 22 KB unpacked); its dependencies (@inquirer/core,ansi,figures, andtype) are already installed for the select prompt.Tests
--actor-dir, path order, failures mid-loop, the skipped entry, a signal during and outside a build wait, Ctrl+C at a prompt, the--jsoncontract, discovery with an unreadable subdirectory and a missing root, the=strip and choices ofmultipleflags.--actor-dirrejections,--allwith--actor-dir.[api]: two single-folder Actors with--all --jsonyield twoSUCCEEDEDentries (runs in CI).Notes for reviewers
@inquirer/checkbox; the push tests mock it, and a pseudo-terminal run confirmed the listing, the toggle, and an empty selection exiting 0.--json,{ok: false, operation: "push", results}with the pushes so far) synchronously, removes itself and raises the signal again, so Node's default action ends the process with the same status as today.🤖 Generated with Claude Code