You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: services/nebius-cxcli/CHANGELOG.md
+7Lines changed: 7 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -6,6 +6,13 @@ All notable changes to this project are tracked here. This changelog follows
6
6
7
7
## [Unreleased]
8
8
9
+
## [nebius-cxcli-v0.1.6] - 2026-03-23
10
+
11
+
- Simplified `bootstrap-ci` so reruns automatically reconcile the CLI-managed customer workflow to the latest generated contract; `--auth-bootstrap` remains enabled by default and workflow-only runs are now the explicit opt-out via `--no-auth-bootstrap`.
12
+
- Added regression coverage that `bootstrap-ci --help` and the command surface keep `--auth-bootstrap` enabled by default.
13
+
- Fixed customer-side Terraform plan/apply flows for private repos by persisting rendered tfvars in the generated manifest and recreating ignored `generated/infra/terraform.auto.tfvars.json` from that manifest before Terraform runs, both in CLI-generated bundle commands and generated customer workflows.
14
+
- Clarified and tested that `deploy <generated-dir>` remains a local/customer-side bundle operation only and does not auto-run `bootstrap-ci` or mutate GitHub CI workflow/environment state.
15
+
9
16
## [nebius-cxcli-v0.1.5] - 2026-03-22
10
17
11
18
- Added PR-side coverage for `bootstrap-ci` workflow generation across both development (`main`) and stable tagged (`nebius-cxcli-v<version>`) default CLI refs.
Copy file name to clipboardExpand all lines: services/nebius-cxcli/README.md
+10-2Lines changed: 10 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -45,6 +45,7 @@ The current implementation is provider-driven and source-configured for Nebius e
45
45
-`render` writes deterministic Terraform, Flux, inventory, and `generated/nebius-cxcli-manifest.json`.
46
46
-`render` resets the generated bundle by recreating managed files from a clean layout, while preserving bootstrap-owned `generated/flux/flux-system` so rerendering does not tear down an existing Flux GitOps bootstrap.
47
47
-`render` warns before overwriting existing generated artifacts, so rerendering is an explicit reset back to the original `config.yaml` contract.
48
+
- Customer-side generated-bundle commands recreate ignored `generated/infra/terraform.auto.tfvars.json` from the committed manifest before Terraform runs, so deployable repos do not need to version that sensitive duplicate file.
48
49
-`deploy`, `terraform plan/apply/unlock`, `flux apply/bootstrap`, `inventory write`, and `email` all operate on an existing generated bundle instead of reading `config.yaml`.
49
50
-`terraform apply`, `flux apply`, and `deploy` are designed for sequential idempotent reruns against the same generated bundle.
50
51
-`bootstrap-ci` generates CI workflow and can bootstrap/sync CI environment secrets.
- Uses the generated bundle as the deploy contract; it does not need the original render machine's local module paths.
524
525
- `deploy <generated-dir>`
525
526
- Full local deploy from the generated bundle: Terraform apply first, then inventory refresh for both infra and apps artifacts, then Flux apply. If GitOps bootstrap is not configured yet, the CLI warns and prints the follow-up `flux bootstrap` command.
527
+
- `deploy`does not run `bootstrap-ci` automatically, even when the bundle lives inside a git repository. GitHub workflow/environment bootstrap stays an explicit generator-side step.
526
528
- `terraform apply <generated-dir>`
527
529
- Infra-only apply from the generated Terraform bundle. Safe to rerun sequentially for convergence, and does not depend on resolving the original source catalog's module paths.
- Scaffolds or reconciles the instance `config.yaml` and generated-folder skeleton.
548
550
- `bootstrap-ci <config.yaml>`
549
551
- Generates the customer GitHub Actions workflow and can optionally bootstrap/sync CI auth secrets. The generated workflow watches and deploys only `generated/**`.
552
+
- The workflow file is CLI-managed. Re-running `bootstrap-ci` automatically reconciles `.github/workflows/nebius-deployments.yml` to the latest generated contract and is idempotent when no drift exists.
550
553
- Generated workflows validate changed bundles with `nebius-cxcli validate-generated --portable` before Terraform plan/apply.
554
+
- Generated workflows restore ignored `generated/infra/terraform.auto.tfvars.json` from `generated/nebius-cxcli-manifest.json` before Terraform plan/apply.
551
555
- Generated workflows also keep the Python version in one env var and emit compact single-line discovery JSON into `GITHUB_OUTPUT` so matrix handoff stays deterministic.
552
556
- The target `config.yaml` must already live inside the customer git repository because the workflow is written at that repo root under `.github/workflows/`.
557
+
- `--auth-bootstrap`is already enabled by default. Re-running `bootstrap-ci` normally reconciles both the managed workflow and the GitHub Environment/Secrets contract; use `--no-auth-bootstrap` only when you intentionally want workflow-only reconciliation without touching GitHub secrets.
553
558
- With default `--auth-bootstrap`, the command auto-detects the target GitHub repo from that checkout's `origin` remote. Use `--github-repo <owner/repo>` only as an explicit override when the remote is missing, non-GitHub, or not the repo you want to manage.
554
559
- When `--cli-ref` is omitted, generated workflows default to `main` for development builds and to `nebius-cxcli-v<version>` for stable tagged releases.
555
560
- Use `--cli-ref <branch|tag|sha>` when the workflow should install a specific nebius-cxcli ref for PR or branch validation instead of the default release tag or `main`.
- GitHub environment name is `<client_name>-<project_id>`.
618
623
- Requires existing local runtime auth profile (create first if missing).
619
624
620
-
`bootstrap-ci <config.yaml>` remains the full CI workflow bootstrap command and can still perform complete CI auth bootstrap/sync for that config. The generated customer workflow is artifact-driven: it watches and deploys only `generated/**`. The command requires the target config to be inside the customer git repository, auto-detects the GitHub repo from that checkout when `--auth-bootstrap` is enabled, and uses `--github-repo` only as an explicit override.
625
+
`bootstrap-ci <config.yaml>` remains the full CI workflow bootstrap command and can still perform complete CI auth bootstrap/sync for that config. The generated customer workflow is artifact-driven: it watches and deploys only `generated/**`. Re-running the command automatically reconciles the CLI-managed workflow file to the latest template. The command requires the target config to be inside the customer git repository, auto-detects the GitHub repo from that checkout when `--auth-bootstrap` is enabled by default, and uses `--github-repo` only as an explicit override.
626
+
627
+
`deploy <generated-dir>`is intentionally separate from `bootstrap-ci <config.yaml>`. Local/customer-side deploy commands operate only on the committed generated bundle and runtime auth material; they do not create or update GitHub workflows, GitHub environments, or CI secrets automatically.
621
628
622
629
Generated workflow CLI ref:
623
630
@@ -749,5 +756,6 @@ Runtime plugin env knobs:
749
756
-`generated/` is the deploy contract and should also be versioned, except for ignored runtime/transient files.
750
757
- Managed deployments `.gitignore` keeps generated Terraform runtime files and generated tfvars out of git, but does not ignore `config.yaml` or deployable generated manifests.
751
758
- Keep `generated/infra/terraform.auto.tfvars.json` ignored even in a private repo: it is a generated, sensitive duplicate of values already present in `config.yaml`.
759
+
- Customer-side `validate-generated`, `terraform plan/apply`, and `deploy` recreate `generated/infra/terraform.auto.tfvars.json` from `generated/nebius-cxcli-manifest.json` before Terraform runs.
752
760
- GitHub sync requires a token with permission to write GitHub environment secrets.
753
761
- Key rotation is explicit with `auth --recreate` and automatic in deploy only when runtime auth bootstrap is needed.
- Does not run `bootstrap-ci` automatically, even when the generated bundle is inside a git repository; GitHub workflow/environment bootstrap stays an explicit generator-side action.
369
371
- `terraform apply <generated-dir>`
370
372
- Infra-only apply from the generated Terraform bundle.
@@ -381,7 +383,7 @@ The command boundary is intentional:
381
383
- `create <target_path>`
382
384
- Scaffolds or reconciles the instance `config.yaml` and generated skeleton.
383
385
- `bootstrap-ci <config.yaml>`
384
-
- Generates the customer workflow. The generated workflow watches and deploys only `generated/**`.
386
+
- Generates or reconciles the customer workflow. The generated workflow watches and deploys only `generated/**`.
385
387
- `discover <target_path>`
386
388
- Returns deployment-instance discovery payload for CI.
387
389
- `terraform plan <generated-dir>`
@@ -404,11 +406,12 @@ The command boundary is intentional:
404
406
- `validate`/`render`: deterministic and repeatable.
405
407
- `validate-generated`: deterministic for a given generated bundle.
406
408
- `deploy`: convergent behavior expected from apply/reconcile against a fixed generated bundle.
407
-
- `bootstrap-ci`: idempotent workflow file handling; `--force` only for overwrite.
409
+
- `bootstrap-ci`: idempotent reconcile; reruns auto-update the CLI-managed customer workflow and re-check GitHub environment secret presence.
408
410
- `auth --create`: idempotent create-if-missing.
409
411
- `auth --recreate`: explicit rotation path.
410
412
- `auth --validate-profile`: read-only profile validation; safe to re-run.
411
413
- `auth --bootstrap-ci`: idempotent environment-secret upsert from local cache.
414
+
- `deploy`and other customer-side generated-bundle commands do not mutate GitHub CI state as a side effect.
412
415
413
416
## 10. Validation Model
414
417
@@ -525,13 +528,16 @@ Flux render:
525
528
`bootstrap-ci`:
526
529
527
530
- Generates workflow file.
531
+
- Treats `.github/workflows/nebius-deployments.yml` as a CLI-managed file and automatically reconciles it to the latest generated contract on every rerun.
528
532
- Requires the target config path to be inside the customer git repository so the workflow can be written at the repo root.
529
533
- With auth bootstrap enabled, auto-detects the target GitHub repo from the checkout `origin` remote unless `--github-repo` overrides it.
530
534
- Fails before writing the workflow if full GitHub bootstrap prerequisites are missing.
531
535
- Derives GitHub environment name as `<client_name>-<project_id>`, ensures that environment exists, then checks/syncs missing environment secrets.
532
536
- Generated customer workflows validate with `nebius-cxcli validate-generated --portable` before Terraform plan/apply so non-portable local module paths are rejected in PRs and main-branch deploy runs.
537
+
- Generated customer workflows restore ignored `generated/infra/terraform.auto.tfvars.json` from `generated/nebius-cxcli-manifest.json` before Terraform plan/apply.
533
538
- Generated customer workflows also keep the Python runtime version in one env var and write compact single-line discovery JSON to `GITHUB_OUTPUT` for stable matrix handoff.
534
539
- Does not manage GitHub repo/org variables; `NEBIUS_CXCLI_REF` remains an optional manual override consumed by the generated workflow.
540
+
- `generated/infra/terraform.auto.tfvars.json`remains ignored in private deployment repos; customer-side generated-bundle commands recreate it from `generated/nebius-cxcli-manifest.json` before Terraform plan/apply so CI does not depend on a committed tfvars file.
0 commit comments