// Module included in the following assemblies:
//
// * cli_reference/developer_cli_odo/odo-architecture.adoc

[id="odo-push-workflow_{context}"]

= `{odo-title} push` workflow
This section describes `{odo-title} push` workflow. {odo-title} push deploys user code on an {product-title} cluster with all the necessary {product-title} resources.

. Creating resources
+
If not already created, `{odo-title} push` creates the following {product-title} resources:
+
* Deployment config (DC):
** Two init containers are executed: `copy-supervisord` and `copy-files-to-volume`. The init containers copy files onto the `emptyDir` and the `PersistentVolume` type of volumes respectively.
** The application container starts. The first process in the application container is the `go-init` process with PID=1.
** `go-init` process starts the SupervisorD daemon.
+
[NOTE]
====
The user application code has not been copied into the application container yet, so the `SupervisorD` daemon does not execute the `run` script. 
====
+
* Service
* Secrets
* `PersistentVolumeClaim`


. Indexing files
+
* A file indexer indexes the files in the source code directory. The indexer traverses through the source code directories recursively and finds files which have been created, deleted, or renamed.
* A file indexer maintains the indexed information in an {odo-title} index file inside the `.odo` directory.
* If the {odo-title} index file is not present, it means that the file indexer is being executed for the first time, and creates a new {odo-title} index JSON file. 
The {odo-title} index JSON file contains a file map - the relative file paths of the traversed files and the absolute paths of the changed and deleted files.

. Pushing code
+
Local code is copied into the application container, usually under `/tmp/src`.

. Executing `assemble-and-restart`
+
On a successful copy of the source code, the `assemble-and-restart` script is executed inside the running application container.