[IDE] deploy runs invalid setup lookup and --dry-run still updates actions

Open
#214 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
58/100
Issue type
Bug
Clarity
Clearly specified
Activity status
Quiet
Tech stack
awk, javascript, shell
Domain
cli, devops

Research direction

Start with ide/opsfile.yml lines 102-110 and 240-275 for setup discovery and post-deploy behavior, then read ide/deploy/deploy.js lines 27-31 and 122-139 for dry-run state and action updates. Add or extend tests for missing setup, namespace selection, pipeline failures, and dry-run mutations. Done means absent setup is silent, failures propagate, dry-run performs no remote mutations, and normal deploy remains unchanged.

Written by the indexing model from the issue text.

Description

bug
  • I have searched the issues and believe this is not a duplicate.
Issue description

`ops ide deploy` has two related problems in the IDE deploy workflow:

  1. The post-deploy `setup` hook always runs `ops action list setup`, even when the project has no `setup` package. The positional argument is not interpreted as “list actions in the current namespace's setup package”, and the command reports an error for namespace `default`.
  2. `ops ide deploy --dry-run` still executes `ops package update` and `ops action update`. The flag is parsed and stored, but the deploy implementation never checks it before running mutating commands.

The behavior is present in both:

Observed behavior

With a valid login and a project that has no local or remote `setup` package:

```sh
ops ide deploy --dry-run
```

The command performs real package/action updates and ends with:

```text
ops action list setup
error: Unable to obtain the list of actions for namespace 'default':
The requested resource does not exist.
```

The overall deploy still exits with code 0 because the failing command is the first stage of a pipeline whose final `while` loop succeeds.

Expected behavior
  • `--dry-run` must not update packages, actions, projects, or invoke post-deploy setup actions.
  • A project without a `setup` package must finish silently without a false error.
  • If listing actions genuinely fails, the task should propagate the failure instead of hiding it behind the pipeline.
  • Setup actions, when present, should be selected from the authenticated namespace rather than by passing `setup` as a namespace argument.
Minimal reproduction
  1. Log in to a valid namespace.
  2. Use any OPS project with `packages/` but without `packages/setup/`.
  3. Run:
    ```sh
    ops ide deploy --dry-run
    ```
  4. Observe real `package update` / `action update` commands followed by the namespace `default` setup error.
Proposed fix
Setup discovery

List actions in the current authenticated namespace and filter fully qualified names for the `setup` package, instead of calling `ops action list setup`. For example:

```sh
setup_prefix="/${OPSDEV_USERNAME}/setup/"
ops action list |
awk -v prefix="$setup_prefix" 'NR > 1 && index($1, prefix) == 1 { print $1 }'
```

Capture the list first so a genuine `ops action list` failure is propagated. An empty result should be a successful no-op.

Dry-run behavior
  • Do not execute the `setup` task when `{{.__dry_run}}` is true.
  • In `ide/deploy/deploy.js`, make the execution boundary aware of whether a command is mutating.
  • When `dryRun` is true, print but do not spawn:
    • `ops package update`
    • `ops action update`
    • `ops -wsk project deploy`
  • Local scanning/packaging may continue if desired, but no remote operation should run.
Tests

Add coverage that verifies:

  • a missing setup package is a silent success;
  • setup actions are selected only from the authenticated namespace;
  • a listing failure is not masked by a pipeline;
  • `--dry-run` spawns no remote mutation and skips setup invocation;
  • normal deploy behavior remains unchanged.
Environment
  • OPS CLI: `0.9.1-2607121109.dev`
  • Tested task branches: `nuvolaris/bestia:bestia` and `apache/openserverless-task:0.9.1`
  • OS/architecture: Linux amd64
Dominant language
Python
Stars
576
Forks
29
Avg merge
51m
Merged PRs (30d)
13

Contributor guide

Open the contributing guide

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 apache/openserverless

All issues in apache/openserverless

Similar issues

More Python issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.