#6196 [Core feature] Pyflyte - Workflow Version Comparisons
Issue created by
UmerAhmad
### Motivation: Why do you think this is important?
Internally, we found a gap in native support for comparing workflow versions and intuitively understanding changes made to your workflow, and have created a comparison feature to do so, and wanted to discuss about potential interest on the OSS side.
This feature is a boon for a few reasons, users can quickly identify differences (DAG, config, inputs, outputs, metadata, interface, etc) between workflow versions and identify changes that may have introduced performance or issues or bugs to significantly reduce time spent on troubleshooting, track changes made between versions by other developers in collaboration, reproducibility, etc.
### Goal: What should the final outcome look like, ideally?
Currently this is supported via command line tooling to generate a full DAG, node by node comparison of workflow versions with a table generated side by side highlighted delta unified difference between workflow/task template/specs (with the option to output to an HTML file, attached are screenshots of an example of a simple workflow comparison to demonstrate how it looks at a very basic level - no differences, same DAG, only a separate version registered). Two versions can be supplemented to the command, in which case it fetches them from remote, where otherwise it will use the to be registered version and/or the latest version from remote depending on how many versions were supplemented. The DAG is created in memory for comparison by fully expanding the remote FlyteWorkflow until all subworkflows and their tasks are expanded into task literals.
This works well in the terminal, and can be extended/reworked for UI support, etc.
[Image](https://private-user-images.githubusercontent.com/48142234/407105413-a345f8ce-dee5-4c4d-8fc9-22dde0ef8ae0.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NjM3NzA0NzMsIm5iZiI6MTc2Mzc3MDE3MywicGF0aCI6Ii80ODE0MjIzNC80MDcxMDU0MTMtYTM0NWY4Y2UtZGVlNS00YzRkLThmYzktMjJkZGUwZWY4YWUwLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTExMjIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUxMTIyVDAwMDkzM1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTk4NTdkZTA3YzY4OTExYjhjOTAxMGVlY2Y5NmJjY2VhYjI4NDc5ZjhkMjBhMDYzYzg3MWNhNWRiMWQxMzI1OWMmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.oc0yC7WRnU1zHpEPSpmmxMGyNXb2SmUgHqbr_7N-rUM) [Image](https://private-user-images.githubusercontent.com/48142234/407105631-cf9beb18-5ec4-43ab-b702-7255f87a36ba.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NjM3NzA0NzMsIm5iZiI6MTc2Mzc3MDE3MywicGF0aCI6Ii80ODE0MjIzNC80MDcxMDU2MzEtY2Y5YmViMTgtNWVjNC00M2FiLWI3MDItNzI1NWY4N2EzNmJhLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTExMjIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUxMTIyVDAwMDkzM1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTllMjUwNjUwOTYzZWI2MGFlZjU0MmEwNDE3ZGVmMTU3ZDdjODk4YzY3OTk4YThkMDMxMmNlYTUxNjI0NGY4YTAmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.vcGuE9BDkLdOHHmrm0JUYxXLM7qO5g5Gk3OetN6ZlxE)
### Describe alternatives you've considered
N/A, alternatives were mainly internal technical decisions.
### Propose: Link/Inline OR Additional context
No response
### Are you sure this issue hasn't been raised already?
• Yes
### Have you read the Code of Conduct?
• Yes
flyteorg/flyte