Tool Required: Flytectl (In sandbox he doesn't need pyflyte/jflyte because we are running command in sandbox. You only need pyflyte/jflyte on production) **Workflow defination file for automating the ci tooling** ```yaml # workflows.yaml, It will exist in root directory of flytesnacks - workflows: - id: core name: core path: cookbook/core name_template: {{ .name }}-{{ .version }}-python-core.tar.gz proto_path: "__proto" compress: true - id: hive-plugin name: hive plugin path: cookbook/integration/hive proto_path: "__proto" name_template: {{ .name }}-{{ .version }}-python-integration.tar.gz compres: true - id: javakit-core name: Javakit for example path: cookbook/javakit/core proto_path: "__proto" name_template: {{ .name }}-{{ .version }}-java-core.tar.gz compress: false ``` FLytectl commands Note **--sandbox** - It will enable a feature where we will run all these command inside a container but for production you don't need sandbox because ci pipeline always has all the basic tooling in place and pip install will work fine. ```bash $ flytectl run -f workflows.yaml -p flytesnacks -d development --command="pip install -r requirment.txt && make serialize" --worker=5 --version=v1.10 --sandbox $ flytectl register files -f workflows.yaml -p flytesnacks -d development --worker=5 --version=v1.10 --sandbox $ flytectl run -f workflows.yaml -p flytesnacks -d development --worker=5 --command="make release" --version=v1.10 --sandbox (Inside makefile of the workflow we can add new command release which will publish workflow tar in anywhere s3/gcp) $ flytectl run core -f workflows.yaml -p flytesnacks -d development --command="pip install -r requirment.txt && make serialize" $ flytectl register files core -f workflows.yaml -p flytesnacks -d development --worker=5 $ flytectl run core -f workflows.yaml -p flytesnacks -d development --worker=5 --command="make release" ``` After this change people only see one standard makefile. it will exist in our python-flyte-template(we will also add one for javakit). People can modify it as per there requirement New flytesnacks flow: ```bash $ brew install flytectl $ flytectl sandbox start --flytesnack=$(pwd) $ flytectl run core -f workflows.yaml -p flytesnacks -d development --command="pip install -r requirment.txt && make serialize" --sandbox $ flytectl register files core -f workflows.yaml -p flytesnacks -d development --sandbox $ flytectl fast_register files core -f workflows.yaml -p flytesnacks -d development --sandbox # Serialize all example $ flytectl run -f workflows.yaml -p flytesnacks -d development --command="pip install -r requirment.txt && make serialize" --worker=5 --version=v1.10 --sandbox $ flytectl register files -f workflows.yaml -p flytesnacks -d development --worker=5 --version=v1.10 --sandbox $ flytectl fast_register files -f workflows.yaml -p flytesnacks -d development --sandbox ``` New flytesnack Release ```bash $ brew install flytectl $ flytectl sandbox start --flytesnack=$(pwd) $ flytectl run -f workflows.yaml -p flytesnacks -d development --command="pip install -r requirment.txt && make serialize" --worker=5 $ flytectl register files -f workflows.yaml -p flytesnacks -d development --worker=5 --version=v1.10 $ flytectl run -f workflows.yaml -p flytesnacks -d development --command="make test" --worker=5 (Basic pytest for now) $ flytectl run core -f workflows.yaml -p flytesnacks -d development --worker=5 --command="make release" (In our case we will copy the tar in a specific dir, we do not want s3/gcs. Goreleaser will publish all files in github release) ```