`default:` keyword for gitlab-ci.yml
Problem to Solve
Top level configuration is messy, with several keywords in place that serve as global defaults for jobs but as a new user of pipelines this isn't necessarily clear. Also, these settings are mixed in with other actual top-level context that serves different purposes (for example, stages:) which makes things even less clear.
Proposal
Move all existing top-level configuration options into default: to clearly indicate their purpose, which
is to define default configuration options for all other jobs.
The configuration options to be moved:
-
before_script, -
after_script, -
image, -
services, -
variables, cache
Keep stages/types to be part of top-level context.
This will be made fully backward compatible, including support jobs that can be named default:, by checking for the existence of a script: section. Configuration options defined out of the default context will still be honored.
- This allows to properly discover the:
# a default that is CI job
default:
script: My CI job
- And to discover the:
# a default configuration, as it is missing script:
default:
variables:
KEY: VALUE1
- And to properly translate (for backward compatiblity):
variables:
KEY: VALUE1
- And handle the case as such:
variables:
KEY: VALUE1
default:
variables: # This variables: take precedence, making the KEY2:VALUE2 the only value
KEY2: VALUE2