Skip to content

docs: Add stateless migration quickstart tutorial#569

Merged
msajidmansoori12 merged 9 commits into
migtools:mainfrom
msajidmansoori12:add-stateless-migration-doc
Jun 30, 2026
Merged

docs: Add stateless migration quickstart tutorial#569
msajidmansoori12 merged 9 commits into
migtools:mainfrom
msajidmansoori12:add-stateless-migration-doc

Conversation

@msajidmansoori12

@msajidmansoori12 msajidmansoori12 commented Jun 24, 2026

Copy link
Copy Markdown
Contributor

Summary by CodeRabbit

  • Documentation
    • Added a new quickstart guide for Crane “stateless migration” workflows.
    • Documents the end-to-end flow: export → transform → apply → optional validate.
    • Covers prerequisites, required environment variables, and optional instructions-file-driven transform behavior.
    • Includes expected directory/log output locations, validation report structure, manual deploy guidance, and troubleshooting for reruns and overwrite scenarios.

Signed-off-by: M Sajid Mansoori <mmansoor@redhat.com>
@msajidmansoori12 msajidmansoori12 requested a review from istein1 June 24, 2026 05:34
@msajidmansoori12 msajidmansoori12 self-assigned this Jun 24, 2026
@coderabbitai

coderabbitai Bot commented Jun 24, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 5398c946-7c41-466f-8038-4a272868c657

📥 Commits

Reviewing files that changed from the base of the PR and between ea7cc90 and b5e2799.

📒 Files selected for processing (1)
  • docs/stateless-migration-quickstart.md
🚧 Files skipped from review as they are similar to previous changes (1)
  • docs/stateless-migration-quickstart.md

📝 Walkthrough

Walkthrough

Adds a new quickstart doc for Crane stateless migration, covering setup, export, transform, apply, validate, instructions-file usage, and troubleshooting.

Changes

Stateless Migration Quickstart Documentation

Layer / File(s) Summary
Prerequisites, export, and default transform flow
docs/stateless-migration-quickstart.md
Introduces the quickstart, lists required environment variables, documents crane export, and explains default crane transform stage creation, ordering, and directory structure.
Custom stages, apply, and instructions file
docs/stateless-migration-quickstart.md
Covers optional custom transform stages, --force regeneration, crane apply output generation, --skip-cluster-scoped, the instructions-file flow, and the final manual kubectl apply step.
Validation and troubleshooting
docs/stateless-migration-quickstart.md
Covers crane validate, expected report output, and troubleshooting for overwrite handling, rerunning custom stages, and validation incompatibilities.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

Possibly related issues

Suggested reviewers

  • aufi
  • stillalearner

Poem

🐇 I hopped through export, neat and bright,
Then transform stages lined up just right.
Apply, validate, and off we go,
With quickstart steps in tidy row.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the new documentation page for a stateless migration quickstart tutorial.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/stateless-migration-quickstart.md`:
- Around line 185-195: The validation summary example is inconsistent with the
JSON report example, since the console snippet says 4 scanned while the report
shows 3 results and totalScanned: 3. Update the example output and any related
validation summary text in the stateless migration quickstart so the
scanned/compatible/incompatible counts match the report example consistently,
including the “Summary” and “Result” snippets tied to the validation flow.
- Around line 189-190: The quickstart sample output uses a different target
context label than the command example, so update the expected output in the
migration doc to use the same `${TARGET_CONTEXT}` value consistently. Locate the
sample log lines that show the live validation context and change the displayed
context name to match the target context used elsewhere in the doc, keeping the
naming aligned in the quickstart flow.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 585b7db4-7898-4132-93cb-ada07330d7d6

📥 Commits

Reviewing files that changed from the base of the PR and between 9fdeaae and 38fa275.

📒 Files selected for processing (1)
  • docs/stateless-migration-quickstart.md

Comment thread docs/stateless-migration-quickstart.md
Comment thread docs/stateless-migration-quickstart.md Outdated
@github-actions

Copy link
Copy Markdown

Test Coverage Report

Total: 46.9%

Per-package coverage

  • github.com/konveyor/crane — 0.0%
  • github.com/konveyor/crane/cmd/apply — 52.7%
  • github.com/konveyor/crane/cmd/convert — 0.0%
  • github.com/konveyor/crane/cmd/export — 92.9%
  • github.com/konveyor/crane/cmd/plugin-manager — 0.0%
  • github.com/konveyor/crane/cmd/plugin-manager/add — 0.0%
  • github.com/konveyor/crane/cmd/plugin-manager/list — 0.0%
  • github.com/konveyor/crane/cmd/plugin-manager/remove — 0.0%
  • github.com/konveyor/crane/cmd/skopeo-sync-gen — 0.0%
  • github.com/konveyor/crane/cmd/transfer-pvc — 9.2%
  • github.com/konveyor/crane/cmd/transform — 59.7%
  • github.com/konveyor/crane/cmd/transform/listplugins — 23.0%
  • github.com/konveyor/crane/cmd/transform/optionals — 0.0%
  • github.com/konveyor/crane/cmd/tunnel-api — 0.0%
  • github.com/konveyor/crane/cmd/validate — 62.7%
  • github.com/konveyor/crane/cmd/version — 20.0%
  • github.com/konveyor/crane/internal/apply — 33.8%
  • github.com/konveyor/crane/internal/buildinfo — 100.0%
  • github.com/konveyor/crane/internal/file — 79.0%
  • github.com/konveyor/crane/internal/flags — 0.0%
  • github.com/konveyor/crane/internal/kustomize — 85.7%
  • github.com/konveyor/crane/internal/plugin — 32.9%
  • github.com/konveyor/crane/internal/transform — 80.9%
  • github.com/konveyor/crane/internal/validate — 58.6%
Full function-level details
github.com/konveyor/crane/cmd/apply/apply.go:44:			Complete					100.0%
github.com/konveyor/crane/cmd/apply/apply.go:50:			Validate					87.5%
github.com/konveyor/crane/cmd/apply/apply.go:64:			Run						0.0%
github.com/konveyor/crane/cmd/apply/apply.go:68:			NewApplyCommand					0.0%
github.com/konveyor/crane/cmd/apply/apply.go:109:			getStageNames					100.0%
github.com/konveyor/crane/cmd/apply/apply.go:117:			addFlagsForOptions				0.0%
github.com/konveyor/crane/cmd/apply/apply.go:133:			run						81.4%
github.com/konveyor/crane/cmd/convert/convert.go:30:			NewConvertOptions				0.0%
github.com/konveyor/crane/cmd/convert/convert.go:63:			addFlagsForConvertOptions			0.0%
github.com/konveyor/crane/cmd/convert/convert.go:74:			Complete					0.0%
github.com/konveyor/crane/cmd/convert/convert.go:83:			Run						0.0%
github.com/konveyor/crane/cmd/convert/convert.go:87:			run						0.0%
github.com/konveyor/crane/cmd/convert/convert.go:112:			getClientFromContext				0.0%
github.com/konveyor/crane/cmd/convert/convert.go:134:			getRestConfigFromContext			0.0%
github.com/konveyor/crane/cmd/export/cluster.go:29:			NewClusterScopeHandler				100.0%
github.com/konveyor/crane/cmd/export/cluster.go:35:			isClusterScopedResource				100.0%
github.com/konveyor/crane/cmd/export/cluster.go:44:			filterRbacResources				100.0%
github.com/konveyor/crane/cmd/export/cluster.go:102:			NewClusterScopedRbacHandler			100.0%
github.com/konveyor/crane/cmd/export/cluster.go:113:			exportedSANamespaces				100.0%
github.com/konveyor/crane/cmd/export/cluster.go:126:			groupMatchesExportedSANamespaces		100.0%
github.com/konveyor/crane/cmd/export/cluster.go:143:			parseServiceAccountUserSubject			100.0%
github.com/konveyor/crane/cmd/export/cluster.go:154:			prepareForFiltering				100.0%
github.com/konveyor/crane/cmd/export/cluster.go:187:			filteredResourcesOfKind				100.0%
github.com/konveyor/crane/cmd/export/cluster.go:213:			accept						100.0%
github.com/konveyor/crane/cmd/export/cluster.go:223:			acceptClusterRoleBinding			100.0%
github.com/konveyor/crane/cmd/export/cluster.go:260:			acceptClusterRole				100.0%
github.com/konveyor/crane/cmd/export/cluster.go:284:			acceptSecurityContextConstraints		100.0%
github.com/konveyor/crane/cmd/export/cluster.go:336:			anyServiceAccountInNamespace			100.0%
github.com/konveyor/crane/cmd/export/crd.go:17:				normalizeGroupSet				85.7%
github.com/konveyor/crane/cmd/export/crd.go:29:				shouldSkipCRDGroup				100.0%
github.com/konveyor/crane/cmd/export/crd.go:50:				crdFailureAPIResourceName			100.0%
github.com/konveyor/crane/cmd/export/crd.go:56:				getOperatorManager				92.9%
github.com/konveyor/crane/cmd/export/crd.go:88:				collectRelatedCRDs				90.6%
github.com/konveyor/crane/cmd/export/discover.go:40:			hasClusterScopedManifests			100.0%
github.com/konveyor/crane/cmd/export/discover.go:58:			prepareClusterResourceDir			100.0%
github.com/konveyor/crane/cmd/export/discover.go:74:			prepareFailuresDir				100.0%
github.com/konveyor/crane/cmd/export/discover.go:86:			writeResources					85.7%
github.com/konveyor/crane/cmd/export/discover.go:134:			writeErrors					83.3%
github.com/konveyor/crane/cmd/export/discover.go:176:			getFilePath					95.2%
github.com/konveyor/crane/cmd/export/discover.go:214:			discoverPreferredResources			100.0%
github.com/konveyor/crane/cmd/export/discover.go:243:			resourceToExtract				100.0%
github.com/konveyor/crane/cmd/export/discover.go:312:			isAdmittedResource				100.0%
github.com/konveyor/crane/cmd/export/discover.go:321:			getObjects					100.0%
github.com/konveyor/crane/cmd/export/discover.go:355:			iterateItemsByGet				93.8%
github.com/konveyor/crane/cmd/export/discover.go:381:			iterateItemsInList				92.3%
github.com/konveyor/crane/cmd/export/export.go:53:			Complete					90.0%
github.com/konveyor/crane/cmd/export/export.go:92:			Validate					100.0%
github.com/konveyor/crane/cmd/export/export.go:133:			validateExportNamespace				87.5%
github.com/konveyor/crane/cmd/export/export.go:150:			allResourceListsForbidden			87.5%
github.com/konveyor/crane/cmd/export/export.go:168:			Run						0.0%
github.com/konveyor/crane/cmd/export/export.go:281:			NewExportCommand				54.2%
github.com/konveyor/crane/cmd/plugin-manager/add/add.go:43:		Complete					0.0%
github.com/konveyor/crane/cmd/plugin-manager/add/add.go:48:		Validate					0.0%
github.com/konveyor/crane/cmd/plugin-manager/add/add.go:91:		Run						0.0%
github.com/konveyor/crane/cmd/plugin-manager/add/add.go:95:		NewAddCommand					0.0%
github.com/konveyor/crane/cmd/plugin-manager/add/add.go:127:		addFlagsForOptions				0.0%
github.com/konveyor/crane/cmd/plugin-manager/add/add.go:132:		run						0.0%
github.com/konveyor/crane/cmd/plugin-manager/add/add.go:204:		downloadBinary					0.0%
github.com/konveyor/crane/cmd/plugin-manager/add/add.go:253:		binaryURIForPlatform				0.0%
github.com/konveyor/crane/cmd/plugin-manager/list/list.go:46:		Complete					0.0%
github.com/konveyor/crane/cmd/plugin-manager/list/list.go:51:		Validate					0.0%
github.com/konveyor/crane/cmd/plugin-manager/list/list.go:56:		Run						0.0%
github.com/konveyor/crane/cmd/plugin-manager/list/list.go:60:		NewListCommand					0.0%
github.com/konveyor/crane/cmd/plugin-manager/list/list.go:90:		addFlagsForOptions				0.0%
github.com/konveyor/crane/cmd/plugin-manager/list/list.go:98:		run						0.0%
github.com/konveyor/crane/cmd/plugin-manager/list/list.go:167:		printInstalledInformation			0.0%
github.com/konveyor/crane/cmd/plugin-manager/list/list.go:177:		groupInformationForPlugins			0.0%
github.com/konveyor/crane/cmd/plugin-manager/list/list.go:196:		printInformation				0.0%
github.com/konveyor/crane/cmd/plugin-manager/list/list.go:208:		printParamsInformation				0.0%
github.com/konveyor/crane/cmd/plugin-manager/list/list.go:222:		getOptionalFields				0.0%
github.com/konveyor/crane/cmd/plugin-manager/list/list.go:247:		printTable					0.0%
github.com/konveyor/crane/cmd/plugin-manager/plugin-manager.go:33:	Complete					0.0%
github.com/konveyor/crane/cmd/plugin-manager/plugin-manager.go:38:	Validate					0.0%
github.com/konveyor/crane/cmd/plugin-manager/plugin-manager.go:43:	Run						0.0%
github.com/konveyor/crane/cmd/plugin-manager/plugin-manager.go:47:	NewPluginManagerCommand				0.0%
github.com/konveyor/crane/cmd/plugin-manager/plugin-manager.go:78:	addFlagsForOptions				0.0%
github.com/konveyor/crane/cmd/plugin-manager/plugin-manager.go:86:	run						0.0%
github.com/konveyor/crane/cmd/plugin-manager/remove/remove.go:33:	Complete					0.0%
github.com/konveyor/crane/cmd/plugin-manager/remove/remove.go:38:	Validate					0.0%
github.com/konveyor/crane/cmd/plugin-manager/remove/remove.go:43:	Run						0.0%
github.com/konveyor/crane/cmd/plugin-manager/remove/remove.go:47:	NewRemoveCommand				0.0%
github.com/konveyor/crane/cmd/plugin-manager/remove/remove.go:77:	run						0.0%
github.com/konveyor/crane/cmd/skopeo-sync-gen/skopeo-sync-gen.go:61:	Complete					0.0%
github.com/konveyor/crane/cmd/skopeo-sync-gen/skopeo-sync-gen.go:65:	Validate					0.0%
github.com/konveyor/crane/cmd/skopeo-sync-gen/skopeo-sync-gen.go:69:	NewSkopeoSyncGenCommand				0.0%
github.com/konveyor/crane/cmd/skopeo-sync-gen/skopeo-sync-gen.go:103:	shouldAddImageStream				0.0%
github.com/konveyor/crane/cmd/skopeo-sync-gen/skopeo-sync-gen.go:114:	Run						0.0%
github.com/konveyor/crane/cmd/transfer-pvc/progress.go:37:		NewRsyncLogStream				0.0%
github.com/konveyor/crane/cmd/transfer-pvc/progress.go:50:		Init						0.0%
github.com/konveyor/crane/cmd/transfer-pvc/progress.go:138:		writeProgressToFile				0.0%
github.com/konveyor/crane/cmd/transfer-pvc/progress.go:148:		Close						0.0%
github.com/konveyor/crane/cmd/transfer-pvc/progress.go:154:		Streams						0.0%
github.com/konveyor/crane/cmd/transfer-pvc/progress.go:190:		addDataSize					0.0%
github.com/konveyor/crane/cmd/transfer-pvc/progress.go:215:		String						100.0%
github.com/konveyor/crane/cmd/transfer-pvc/progress.go:219:		MarshalJSON					0.0%
github.com/konveyor/crane/cmd/transfer-pvc/progress.go:223:		AsString					0.0%
github.com/konveyor/crane/cmd/transfer-pvc/progress.go:271:		NewProgress					100.0%
github.com/konveyor/crane/cmd/transfer-pvc/progress.go:291:		Completed					0.0%
github.com/konveyor/crane/cmd/transfer-pvc/progress.go:296:		Status						38.5%
github.com/konveyor/crane/cmd/transfer-pvc/progress.go:321:		Merge						0.0%
github.com/konveyor/crane/cmd/transfer-pvc/progress.go:376:		newDataSize					72.7%
github.com/konveyor/crane/cmd/transfer-pvc/progress.go:399:		parseRsyncLogs					76.1%
github.com/konveyor/crane/cmd/transfer-pvc/progress.go:479:		waitForPodRunning				0.0%
github.com/konveyor/crane/cmd/transfer-pvc/progress.go:513:		getFinalPodStatus				0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:89:		Validate					0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:117:		Validate					0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:133:		NewTransferPVCCommand				0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:169:		addFlagsToTransferPVCCommand			0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:189:		Complete					0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:220:		Validate					0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:246:		Run						0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:250:		getClientFromContext				0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:271:		getRestConfigFromContext			0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:278:		run						0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:485:		getValidatedResourceName			0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:495:		getNodeNameForPVC				0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:515:		getIDsForNamespace				0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:541:		getRsyncClientPodSecurityContext		0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:553:		getRsyncServerPodSecurityContext		0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:565:		garbageCollect					0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:602:		deleteResourcesIteratively			0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:628:		deleteResourcesForGVK				0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:649:		followClientLogs				0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:678:		waitForEndpoint					0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:690:		createEndpoint					0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:735:		getRouteHostName				0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:752:		buildDestinationPVC				0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:773:		ApplyTo						0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:793:		ApplyTo						0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:805:		ApplyTo						0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:821:		String						0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:825:		Set						0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:835:		Type						0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:841:		parseSourceDestinationMapping			100.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:863:		String						0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:867:		Set						0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:876:		Type						0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:880:		String						0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:884:		Set						0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:894:		Type						0.0%
github.com/konveyor/crane/cmd/transform/listplugins/listplugins.go:33:	Complete					0.0%
github.com/konveyor/crane/cmd/transform/listplugins/listplugins.go:38:	Validate					0.0%
github.com/konveyor/crane/cmd/transform/listplugins/listplugins.go:43:	Run						0.0%
github.com/konveyor/crane/cmd/transform/listplugins/listplugins.go:47:	NewListPluginsCommand				0.0%
github.com/konveyor/crane/cmd/transform/listplugins/listplugins.go:80:	GetPluginNames					85.7%
github.com/konveyor/crane/cmd/transform/listplugins/listplugins.go:95:	getFilteredPlugins				75.0%
github.com/konveyor/crane/cmd/transform/listplugins/listplugins.go:104:	run						0.0%
github.com/konveyor/crane/cmd/transform/optionals/optionals.go:31:	Complete					0.0%
github.com/konveyor/crane/cmd/transform/optionals/optionals.go:36:	Validate					0.0%
github.com/konveyor/crane/cmd/transform/optionals/optionals.go:41:	Run						0.0%
github.com/konveyor/crane/cmd/transform/optionals/optionals.go:45:	NewOptionalsCommand				0.0%
github.com/konveyor/crane/cmd/transform/optionals/optionals.go:78:	run						0.0%
github.com/konveyor/crane/cmd/transform/transform.go:56:		Complete					0.0%
github.com/konveyor/crane/cmd/transform/transform.go:62:		Validate					83.3%
github.com/konveyor/crane/cmd/transform/transform.go:81:		Run						0.0%
github.com/konveyor/crane/cmd/transform/transform.go:86:		getPluginCompletions				100.0%
github.com/konveyor/crane/cmd/transform/transform.go:111:		NewTransformCommand				0.0%
github.com/konveyor/crane/cmd/transform/transform.go:154:		addFlagsForOptions				0.0%
github.com/konveyor/crane/cmd/transform/transform.go:176:		run						11.8%
github.com/konveyor/crane/cmd/transform/transform.go:327:		optionalFlagsToLower				100.0%
github.com/konveyor/crane/cmd/transform/transform.go:337:		runStageWithCleanup				0.0%
github.com/konveyor/crane/cmd/transform/transform.go:353:		reconcileInstructionStages			81.0%
github.com/konveyor/crane/cmd/transform/transform.go:396:		ensurePreviousStagesRun				83.3%
github.com/konveyor/crane/cmd/transform/transform.go:413:		ensureStagesHaveOutput				92.9%
github.com/konveyor/crane/cmd/transform/transform.go:452:		createDefaultStagesForAllPlugins		94.7%
github.com/konveyor/crane/cmd/transform/transform.go:504:		validateStageNameToken				100.0%
github.com/konveyor/crane/cmd/transform/transform.go:519:		findStageByDirName				100.0%
github.com/konveyor/crane/cmd/transform/transform.go:531:		findStagesByName				100.0%
github.com/konveyor/crane/cmd/transform/transform.go:543:		createStageDirectory				77.8%
github.com/konveyor/crane/cmd/transform/transform.go:564:		createCustomStageWithExplicitName		100.0%
github.com/konveyor/crane/cmd/transform/transform.go:580:		createCustomStageWithAutoPriority		71.4%
github.com/konveyor/crane/cmd/transform/transform.go:602:		createPluginStage				0.0%
github.com/konveyor/crane/cmd/transform/transform.go:635:		resolveAndValidateStages			58.5%
github.com/konveyor/crane/cmd/tunnel-api/tunnel-api.go:35:		NewTunnelAPIOptions				0.0%
github.com/konveyor/crane/cmd/tunnel-api/tunnel-api.go:65:		addFlagsForTunnelAPIOptions			0.0%
github.com/konveyor/crane/cmd/tunnel-api/tunnel-api.go:77:		Complete					0.0%
github.com/konveyor/crane/cmd/tunnel-api/tunnel-api.go:100:		Validate					0.0%
github.com/konveyor/crane/cmd/tunnel-api/tunnel-api.go:116:		Run						0.0%
github.com/konveyor/crane/cmd/tunnel-api/tunnel-api.go:120:		getClientFromContext				0.0%
github.com/konveyor/crane/cmd/tunnel-api/tunnel-api.go:129:		getRestConfigFromContext			0.0%
github.com/konveyor/crane/cmd/tunnel-api/tunnel-api.go:136:		run						0.0%
github.com/konveyor/crane/cmd/validate/validate.go:37:			Complete					83.3%
github.com/konveyor/crane/cmd/validate/validate.go:49:			Validate					100.0%
github.com/konveyor/crane/cmd/validate/validate.go:91:			Run						17.5%
github.com/konveyor/crane/cmd/validate/validate.go:194:			NewValidateCommand				50.0%
github.com/konveyor/crane/cmd/version/version.go:20:			Complete					0.0%
github.com/konveyor/crane/cmd/version/version.go:25:			Validate					0.0%
github.com/konveyor/crane/cmd/version/version.go:30:			Run						0.0%
github.com/konveyor/crane/cmd/version/version.go:34:			NewVersionCommand				0.0%
github.com/konveyor/crane/cmd/version/version.go:60:			run						100.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:21:			CreateTempDir					100.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:28:			ListFilesRecursively				91.7%
github.com/konveyor/crane/e2e-tests/utils/utils.go:51:			ListFilesRecursivelyAsList			80.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:75:			HasFilesRecursively				80.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:86:			ReadTestdataFile				88.9%
github.com/konveyor/crane/e2e-tests/utils/utils.go:105:			TestdataFilePath				0.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:125:			GoldenManifestsDir				90.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:144:			CompareDirectoryFileSets			78.9%
github.com/konveyor/crane/e2e-tests/utils/utils.go:179:			CompareDirectoryYAMLSemantics			82.4%
github.com/konveyor/crane/e2e-tests/utils/utils.go:213:			CompareDirectoryYAMLSemanticsExport		89.3%
github.com/konveyor/crane/e2e-tests/utils/utils.go:265:			buildNormalizedExportIndex			81.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:305:			canonicalizeDocs				87.5%
github.com/konveyor/crane/e2e-tests/utils/utils.go:319:			extractResourceIdentity				77.8%
github.com/konveyor/crane/e2e-tests/utils/utils.go:382:			parseYAMLDocuments				100.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:401:			compareYAMLFileBytes				100.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:421:			AssertNoKindsInOutput				0.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:477:			AssertKindsInOutput				0.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:529:			LooksLikeYAMLFile				100.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:543:			normalizeUnstableFields				100.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:580:			normalizePodServiceAccountVolumeNames		90.9%
github.com/konveyor/crane/e2e-tests/utils/utils.go:639:			normalizeWithPath				92.9%
github.com/konveyor/crane/e2e-tests/utils/utils.go:669:			shouldDropField					100.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:720:			AssertWhiteoutResourceFilesExist		0.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:760:			AssertWhiteoutResourceFileCount			0.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:792:			AssertWhiteoutCommentsInKustomization		0.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:847:			AssertKindsNotInActiveKustomizeResources	0.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:889:			CaptureAPISurfaceScriptPath			75.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:908:			ToInt64						0.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:925:			ExtractCPUAverageUtilization			0.0%
github.com/konveyor/crane/internal/apply/kustomize.go:31:		ApplySingleStage				0.0%
github.com/konveyor/crane/internal/apply/kustomize.go:80:		ApplyMultiStage					0.0%
github.com/konveyor/crane/internal/apply/kustomize.go:134:		runKustomizeBuild				0.0%
github.com/konveyor/crane/internal/apply/kustomize.go:143:		filterClusterScopedResources			82.4%
github.com/konveyor/crane/internal/apply/kustomize.go:199:		splitMultiDocYAMLToFiles			86.7%
github.com/konveyor/crane/internal/buildinfo/buildinfo.go:25:		readKustomizeVersion				100.0%
github.com/konveyor/crane/internal/file/file_helper.go:22:		ReadFiles					100.0%
github.com/konveyor/crane/internal/file/file_helper.go:32:		readFiles					84.0%
github.com/konveyor/crane/internal/file/file_helper.go:91:		GetWhiteOutFilePath				100.0%
github.com/konveyor/crane/internal/file/file_helper.go:95:		GetTransformPath				100.0%
github.com/konveyor/crane/internal/file/file_helper.go:99:		GetIgnoredPatchesPath				0.0%
github.com/konveyor/crane/internal/file/file_helper.go:103:		updateTransformDirPath				100.0%
github.com/konveyor/crane/internal/file/file_helper.go:107:		updateIgnoredPatchesDirPath			0.0%
github.com/konveyor/crane/internal/file/file_helper.go:114:		updatePath					100.0%
github.com/konveyor/crane/internal/file/file_helper.go:121:		GetOutputFilePath				100.0%
github.com/konveyor/crane/internal/file/file_helper.go:131:		GetStageDir					100.0%
github.com/konveyor/crane/internal/file/file_helper.go:137:		GetInputDir					100.0%
github.com/konveyor/crane/internal/file/file_helper.go:143:		GetPatchesDir					100.0%
github.com/konveyor/crane/internal/file/file_helper.go:149:		GetKustomizationPath				100.0%
github.com/konveyor/crane/internal/file/file_helper.go:155:		GetMetadataPath					100.0%
github.com/konveyor/crane/internal/file/file_helper.go:161:		GetResourceTypeFilePath				100.0%
github.com/konveyor/crane/internal/file/file_helper.go:167:		GetPatchFilePath				100.0%
github.com/konveyor/crane/internal/file/file_helper.go:174:		GetStageTransformDir				0.0%
github.com/konveyor/crane/internal/file/file_helper.go:180:		GetStageOutputDir				0.0%
github.com/konveyor/crane/internal/file/file_helper.go:187:		GetResourceFilename				75.0%
github.com/konveyor/crane/internal/file/ordering.go:82:			GetResourceOrder				100.0%
github.com/konveyor/crane/internal/file/ordering.go:92:			GetOrderedResourceFilename			100.0%
github.com/konveyor/crane/internal/flags/global_flags.go:14:		ApplyFlags					0.0%
github.com/konveyor/crane/internal/flags/global_flags.go:21:		GetLogger					0.0%
github.com/konveyor/crane/internal/flags/global_flags.go:29:		initConfig					0.0%
github.com/konveyor/crane/internal/flags/help_groups.go:12:		KubernetesClientInheritedFlagNames		0.0%
github.com/konveyor/crane/internal/flags/help_groups.go:40:		SetGroupedHelp					0.0%
github.com/konveyor/crane/internal/kustomize/args.go:20:		ParseAndValidateArgs				100.0%
github.com/konveyor/crane/internal/kustomize/args.go:92:		splitArgs					100.0%
github.com/konveyor/crane/internal/kustomize/runner.go:21:		Build						82.4%
github.com/konveyor/crane/internal/kustomize/runner.go:55:		buildOptions					100.0%
github.com/konveyor/crane/internal/kustomize/runner.go:105:		setEnvVars					46.2%
github.com/konveyor/crane/internal/plugin/plugin_helper.go:21:		GetPlugins					0.0%
github.com/konveyor/crane/internal/plugin/plugin_helper.go:38:		getBinaryPlugins				0.0%
github.com/konveyor/crane/internal/plugin/plugin_helper.go:63:		IsExecAny					0.0%
github.com/konveyor/crane/internal/plugin/plugin_helper.go:67:		GetFilteredPlugins				0.0%
github.com/konveyor/crane/internal/plugin/plugin_helper.go:109:		isPluginInList					0.0%
github.com/konveyor/crane/internal/plugin/plugin_manager_helper.go:24:	BuildManifestMap				0.0%
github.com/konveyor/crane/internal/plugin/plugin_manager_helper.go:68:	GetYamlFromUrl					75.0%
github.com/konveyor/crane/internal/plugin/plugin_manager_helper.go:82:	YamlToManifest					72.7%
github.com/konveyor/crane/internal/plugin/plugin_manager_helper.go:104:	FilterPluginForOsArch				100.0%
github.com/konveyor/crane/internal/plugin/plugin_manager_helper.go:119:	GetDefaultSource				0.0%
github.com/konveyor/crane/internal/plugin/plugin_manager_helper.go:128:	LocateBinaryInPluginDir				0.0%
github.com/konveyor/crane/internal/plugin/plugin_manager_helper.go:140:	IsUrl						100.0%
github.com/konveyor/crane/internal/plugin/plugin_manager_helper.go:146:	getData						80.0%
github.com/konveyor/crane/internal/transform/instructions.go:31:	LoadInstructions				61.1%
github.com/konveyor/crane/internal/transform/instructions.go:63:	friendlyInstructionsDecodeError			87.5%
github.com/konveyor/crane/internal/transform/instructions.go:78:	ValidateInstructions				100.0%
github.com/konveyor/crane/internal/transform/instructions.go:112:	GenerateStageDirNames				100.0%
github.com/konveyor/crane/internal/transform/orchestrator.go:41:	RunMultiStage					75.6%
github.com/konveyor/crane/internal/transform/orchestrator.go:142:	executeStage					72.7%
github.com/konveyor/crane/internal/transform/orchestrator.go:194:	transformResources				68.4%
github.com/konveyor/crane/internal/transform/orchestrator.go:245:	formatResourceID				0.0%
github.com/konveyor/crane/internal/transform/orchestrator.go:252:	getPluginForStage				90.9%
github.com/konveyor/crane/internal/transform/orchestrator.go:279:	getAvailablePluginNames				0.0%
github.com/konveyor/crane/internal/transform/orchestrator.go:292:	applyStageTransforms				82.1%
github.com/konveyor/crane/internal/transform/orchestrator.go:359:	loadResourcesFromDirectory			85.7%
github.com/konveyor/crane/internal/transform/orchestrator.go:374:	writeResourcesToDirectory			73.1%
github.com/konveyor/crane/internal/transform/stages.go:22:		DiscoverStages					90.5%
github.com/konveyor/crane/internal/transform/stages.go:83:		FilterStages					100.0%
github.com/konveyor/crane/internal/transform/stages.go:112:		GetFirstStage					100.0%
github.com/konveyor/crane/internal/transform/stages.go:122:		GetLastStage					66.7%
github.com/konveyor/crane/internal/transform/stages.go:132:		GetPreviousStage				100.0%
github.com/konveyor/crane/internal/transform/stages.go:142:		GetNextStage					100.0%
github.com/konveyor/crane/internal/transform/stages.go:152:		ValidateStageName				100.0%
github.com/konveyor/crane/internal/transform/stages.go:161:		GenerateStageName				100.0%
github.com/konveyor/crane/internal/transform/test_helpers.go:8:		hasKustomizeCommand				100.0%
github.com/konveyor/crane/internal/transform/test_helpers.go:14:	contains					100.0%
github.com/konveyor/crane/internal/transform/test_helpers.go:23:	findInString					100.0%
github.com/konveyor/crane/internal/transform/writer.go:28:		NewKustomizeWriter				100.0%
github.com/konveyor/crane/internal/transform/writer.go:37:		WriteStage					68.4%
github.com/konveyor/crane/internal/transform/writer.go:218:		getResourceID					100.0%
github.com/konveyor/crane/internal/transform/writer.go:231:		filterValidRemoveOps				76.2%
github.com/konveyor/crane/internal/transform/writer.go:275:		pathExists					93.5%
github.com/konveyor/crane/internal/transform/writer.go:352:		generateKustomizationWithComments		93.8%
github.com/konveyor/crane/internal/transform/writer.go:383:		checkStageDirectory				23.1%
github.com/konveyor/crane/internal/validate/api_resources.go:24:	ParseAPIResourcesJSON				89.7%
github.com/konveyor/crane/internal/validate/matcher.go:25:		MatchResults					75.0%
github.com/konveyor/crane/internal/validate/matcher.go:36:		MatchResultsFromIndex				100.0%
github.com/konveyor/crane/internal/validate/matcher.go:76:		buildDiscoveryIndex				71.4%
github.com/konveyor/crane/internal/validate/matcher.go:110:		matchEntry					100.0%
github.com/konveyor/crane/internal/validate/matcher.go:139:		buildKindIndex					100.0%
github.com/konveyor/crane/internal/validate/matcher.go:151:		addSuggestion					92.3%
github.com/konveyor/crane/internal/validate/report.go:17:		FormatTable					91.3%
github.com/konveyor/crane/internal/validate/report.go:60:		FormatJSON					100.0%
github.com/konveyor/crane/internal/validate/report.go:67:		FormatYAML					0.0%
github.com/konveyor/crane/internal/validate/report.go:79:		WriteFailures					0.0%
github.com/konveyor/crane/internal/validate/report.go:115:		failureFileName					0.0%
github.com/konveyor/crane/internal/validate/report.go:129:		safeFilePart					0.0%
github.com/konveyor/crane/internal/validate/report.go:145:		parseAPIVersion					0.0%
github.com/konveyor/crane/internal/validate/scanner.go:34:		ScanManifests					76.5%
github.com/konveyor/crane/internal/validate/types.go:46:		HasIncompatible					100.0%
github.com/konveyor/crane/internal/validate/types.go:49:		IncompatibleResults				0.0%
github.com/konveyor/crane/main.go:21:					main						0.0%
total:									(statements)					46.9%

Posted by CI

@msajidmansoori12 msajidmansoori12 changed the title Add stateless migration quickstart tutorial docs: Add stateless migration quickstart tutorial Jun 24, 2026
@msajidmansoori12 msajidmansoori12 force-pushed the add-stateless-migration-doc branch from b6b8f09 to f5d5124 Compare June 24, 2026 05:39

@midays midays left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, left one comment

Comment thread docs/stateless-migration-quickstart.md Outdated
Comment thread docs/stateless-migration-quickstart.md
Comment thread docs/stateless-migration-quickstart.md Outdated

In most pipelines, your custom stage is the last stage under `transform/`, so rendering that directory should show the manifests that will feed into the final apply output.

For a deeper explanation of stage ordering, stage structure, and multi-stage behavior, see [Multi-Stage Kustomize Transform Pipeline](./kustomize-multistage.md).

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

When crane PR #423 will be merged soon the filename will be multistage-pipeline.md

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

thanks @istein1 , i updated the link

Comment thread docs/stateless-migration-quickstart.md
Comment thread docs/stateless-migration-quickstart.md Outdated

For a deeper explanation of stage ordering, stage structure, and multi-stage behavior, see [Multi-Stage Kustomize Transform Pipeline](./kustomize-multistage.md).

If a custom stage already contains edits, rerun with `--force` to regenerate:

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

regenerate what?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed with more clear info

Comment thread docs/stateless-migration-quickstart.md
Signed-off-by: M Sajid Mansoori <mmansoor@redhat.com>
@msajidmansoori12 msajidmansoori12 requested a review from midays June 24, 2026 07:48
Signed-off-by: M Sajid Mansoori <mmansoor@redhat.com>
Signed-off-by: M Sajid Mansoori <mmansoor@redhat.com>
Signed-off-by: M Sajid Mansoori <mmansoor@redhat.com>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

♻️ Duplicate comments (1)
docs/stateless-migration-quickstart.md (1)

207-208: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Keep target context naming consistent in validation examples.

Line 207-208 uses tgt, but the command and JSON example use ${TARGET_CONTEXT}/tgt-cluster. Please align these to one value throughout the section.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/stateless-migration-quickstart.md` around lines 207 - 208, The
validation example uses inconsistent target context names, mixing “tgt” with
“${TARGET_CONTEXT}” and “tgt-cluster” across the section. Update the affected
example in the migration quickstart so the command output, JSON example, and any
referenced context value all use the same target context name consistently. Use
the surrounding validation example text and the “Mode: live (context: …)” output
as the anchors when making the edit.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Duplicate comments:
In `@docs/stateless-migration-quickstart.md`:
- Around line 207-208: The validation example uses inconsistent target context
names, mixing “tgt” with “${TARGET_CONTEXT}” and “tgt-cluster” across the
section. Update the affected example in the migration quickstart so the command
output, JSON example, and any referenced context value all use the same target
context name consistently. Use the surrounding validation example text and the
“Mode: live (context: …)” output as the anchors when making the edit.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 9b44a759-5c88-4ff8-8082-e2e07ab11566

📥 Commits

Reviewing files that changed from the base of the PR and between 38fa275 and ea7cc90.

📒 Files selected for processing (1)
  • docs/stateless-migration-quickstart.md

Signed-off-by: M Sajid Mansoori <mmansoor@redhat.com>
Signed-off-by: M Sajid Mansoori <mmansoor@redhat.com>
@msajidmansoori12 msajidmansoori12 requested a review from istein1 June 24, 2026 11:22
@msajidmansoori12

Copy link
Copy Markdown
Contributor Author

/rfr

@midays midays left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

Comment thread docs/stateless-migration-quickstart.md Outdated
Signed-off-by: M Sajid Mansoori <mmansoor@redhat.com>
@msajidmansoori12 msajidmansoori12 merged commit e6876d7 into migtools:main Jun 30, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add a basic *stateless* migration scenario of a single well known application

4 participants