Function: gitlab-ci-mode

gitlab-ci-mode is an interactive and natively compiled function defined in gitlab-ci-mode.el.

Signature

(gitlab-ci-mode)

Documentation

Major mode for editing GitLab CI (‘.gitlab-ci.yml’) files.

GitLab CI uses a YAML-based file format to configure the jobs it will run in order to build, test, and deploy software. For more information about the GitLab CI file format, see URL
‘https://docs.gitlab.com/ce/ci/yaml/README.html’. For general
information about GitLab CI, see URL
‘https://docs.gitlab.com/ce/ci/README.html’ and URL
‘https://about.gitlab.com/features/gitlab-ci-cd/’.

This mode is capable of linting files but does not do so automatically out of security concerns. Use ‘gitlab-ci-lint’ to lint interactively on-demand, or ‘gitlab-ci-request-lint’ to integrate the linting process with other software.

Although this derives from ‘yaml-mode’, it does not truly parse YAML. Only idiomatic GitLab CI syntax will be handled correctly. In particular, it does not expect to encounter tags.

In addition to any hooks its parent mode might have run, this mode runs the hook gitlab-ci-mode-hook, as the final or penultimate step during initialization.

Key Bindings

This command is not in any keymaps.

Source Code

;; Defined in /nix/store/i3kilmgmg3bk0mkr28r6pk0h5mg4s0wd-emacs-packages-deps/share/emacs/site-lisp/elpa/gitlab-ci-mode-20191022.2017/gitlab-ci-mode.el
;;;###autoload
(define-derived-mode gitlab-ci-mode yaml-mode "GitLab CI"
  "Major mode for editing GitLab CI (‘.gitlab-ci.yml’) files.

GitLab CI uses a YAML-based file format to configure the jobs it
will run in order to build, test, and deploy software.  For more
information about the GitLab CI file format, see URL
‘https://docs.gitlab.com/ce/ci/yaml/README.html’.  For general
information about GitLab CI, see URL
‘https://docs.gitlab.com/ce/ci/README.html’ and URL
‘https://about.gitlab.com/features/gitlab-ci-cd/’.

This mode is capable of linting files but does not do so
automatically out of security concerns. Use ‘gitlab-ci-lint’ to
lint interactively on-demand, or ‘gitlab-ci-request-lint’ to
integrate the linting process with other software.

Although this derives from ‘yaml-mode’, it does not truly parse
YAML.  Only idiomatic GitLab CI syntax will be handled correctly.
In particular, it does not expect to encounter tags."
  :group 'gitlab-ci
  (font-lock-add-keywords
   nil
   `((,(format "^ *\\(%s\\) *:" (regexp-opt gitlab-ci-keywords))
      (1 'font-lock-keyword-face))
     (,(format "\\<\\${?\\(%s\\)\\>"
               (regexp-opt gitlab-ci-deprecated-variables))
      (1 'warning))
     (,(format "\\<\\${?\\(%s\\)\\>[^A-Za-z0-9_]"
               (regexp-opt gitlab-ci-variables))
      (1 'gitlab-ci-builtin-variable))
     ("\\<\\${?\\([A-Za-z0-9_]+\\)\\>"
      (1 'gitlab-ci-custom-variable))
     (,(format "[-:].+\\<\\(%s\\)\\>"
               (regexp-opt gitlab-ci-special-values))
      (1 'gitlab-ci-special-value))))

  (setq-local completion-at-point-functions
              '(gitlab-ci-complete-at-point)))