Simplify `.gitlab-ci.yml` syntax for stopping review apps
Description
To declare how to stop a review app, we currently need something like:
review:
environment:
name: review/$app
on_stop: stop_review
stop_review:
script: echo Delete My App
when: manual
environment:
name: review/$app
action: stop
but the on_stop
and action: stop
are redundant; we should be able to get rid of one of them. At one point, we thought we'd only have the on_stop
part as a forward reference to which job stops the environment, but now that we have action: stop
it seems like that is actually more of a consistent way to declare what the job does. i.e. declare what the job does in the job definition itself.
Proposal
review:
environment:
name: review/$app
stop_review:
script: echo Delete My App
when: manual
environment:
name: review/$app
action: stop
Notes
This opens up the possibly to expand action
. We can say that the default action is start
or update
, and that's used to create or update a review app, but maybe we can differentiate between create
and update
? Our templates currently have all this logic to create the app if necessary on every update, but no only is it a waste of compute, it might not even be the best way to do it. For example, if you deploy to Openshift by creating an app and pushing a Docker image to it, updating the app later should just be a matter of telling it to pull the latest image. Or in fact, it should pull it automatically if it can detect the update, and so updating a review app should just be a matter of tagging a new Docker image. That's very different than what's needed for creation the first time.
Alternate Proposal
An alternate propsal might involve modying the when
condition instead. Perhaps with:
stop_review:
script: echo Delete My App
when:
- manual
- branch_delete
environment:
name: review/$app
This has an advantage of being explicit about running on branch deletion, and means you could even drop the manual
part so it doesn't show up in the interface as an action, if you didn't want it. But then it loses the special nature of stop
, which adds the stop icon in the web UI rather than the play icon.