-
Notifications
You must be signed in to change notification settings - Fork 74
Description
We might want to introduce a syntax that would allow binding commands to a given workspace event.
A few use cases
- Open a file in the IDE at workspace startup
- Run build after clone of the project
- Copy files before workspace startup
- Backup files at workspace shutdown
Lifecycle Bindings
The lifecycle binding could be provided by a new top-level construct that could look like the following:
events:
<lifecycleBinding>:
- <commandName>where can be one of the following:
- preStart
- postStart
- preStop
- postStop
Spec Details
lifecycleBindings are processed sequentially. For example preStart commands will be invoked after every postCreate command has completed.
postStart bindings should happen after all plugins and extensions have started, including project cloning. This means that those commands are not triggered until the user opens the IDE in his browser.
preStart commands may need execution of a workspace pod init container. That means that the component associated to the preStart command should not be part of the workspace pod. The same applies to postStop bindings.
lifecycleBinding should provide a mechanism to figure out when they have completed. That means that the command should be terminating or having a readiness probe.
lifecycleBinding are not guarantee to be executed sequentially or in any order. To run commands in a given order a user should use a composite.
Example
components:
- container: # <== This component is associated with a **preStart** event only.
name: "copier" # That means it won't be included in the workspace pod but
image: '' # will be run before it (as an initContainer for example).
env:
- name: ""
value: ""
volume: ....
- container:
name: "maven"
image: ''
env:
- name: ""
value: ""
volume: ....
- plugin:
id: theia
commands:
- exec:
name: "copyNeededFiles"
component: "copier"
commandLine: "cp somefile"
- exec:
name: "buildAll"
component: "maven"
commandLine: "mvn ..."
- vsCodeTask:
name: "openFile"
component: "theia"
inline: |
{
xxxx
}
events:
preStart:
- "copyNeededFiles" # <== Start of the workspace happens
# after this command is completed
postStart:
- "buildAll" # <== The Order of execution of the commands
- "openFile" # under a same binding is not guarantee Not included in this spec
- Custom
lifecycleBindingsof components