diff --git a/Gitlab CICD.sublime-syntax b/Gitlab CICD.sublime-syntax index 2a59a4d..c074c67 100644 --- a/Gitlab CICD.sublime-syntax +++ b/Gitlab CICD.sublime-syntax @@ -63,3 +63,45 @@ contexts: - meta_include_prototype: false - meta_scope: source.shell.bash.embedded - include: scope:source.shell.bash.folded + + property: + - meta_prepend: true + - match: (!reference)\s*(\[) + captures: + 1: meta.property.yaml storage.type.tag-handle.yaml + 2: meta.sequence.flow.yaml punctuation.definition.sequence.begin.yaml + push: gitlab-reference-flow-sequence-body + + gitlab-reference-flow-sequence-body: + - meta_content_scope: meta.sequence.flow.yaml + - match: \] + scope: meta.sequence.flow.yaml punctuation.definition.sequence.end.yaml + pop: 1 + - match: ',' + scope: punctuation.separator.sequence.yaml + push: gitlab-after-reference + - match: '[-\w.]+' + scope: constant.other.label.gitlab + - include: flow-pair-no-clear + - include: flow-node-11 + + gitlab-after-reference: + - match: \w+ + scope: keyword.other.gitlab + - match: ',' + scope: punctuation.separator.sequence.yaml + set: gitlab-after-reference-type + - include: flow-pair-no-clear + - include: flow-node-11 + - match: (?=\]) + pop: 1 + + gitlab-after-reference-type: + - match: \w+ + scope: variable.other.constant.gitlab + - match: ',' + scope: punctuation.separator.sequence.yaml + - include: flow-pair-no-clear + - include: flow-node-11 + - match: (?=\S) + pop: 1 diff --git a/tests/syntax_test_gitlab_cicd.yml b/tests/syntax_test_gitlab_cicd.yml index 3aa4088..ed0b0e8 100644 --- a/tests/syntax_test_gitlab_cicd.yml +++ b/tests/syntax_test_gitlab_cicd.yml @@ -153,3 +153,72 @@ release-finish: # ^^^^^^^^^^^^^^^^ meta.string # ^^^^^^^^^^^ meta.interpolation.parameter variable.other.readwrite -DskipTestProject=true + +include: + - local: setup.yml + +.teardown: + after_script: + - echo deleting environment + +test: + script: + - !reference [.setup, script] +# ^ punctuation.definition.block.sequence.item +# ^^^^^^^^^^ meta.property storage.type.tag-handle +# ^^^^^^^^^^^^^^^^ meta.sequence.flow +# ^ punctuation.definition.sequence.begin +# ^^^^^^ constant.other.label +# ^ punctuation.separator.sequence +# ^^^^^^ keyword.other +# ^ punctuation.definition.sequence.end +# ^ - meta.sequence + - echo running my own command +# ^ meta.block.script punctuation.definition.block.sequence.item +# ^^^^ source.shell.bash meta.function-call.identifier support.function.echo + after_script: + - !reference [.teardown, after_script] + +.vars: + variables: + URL: "http://my-url.internal" + IMPORTANT_VAR: "the details" + +test-vars-1: + variables: !reference [.vars, variables] + script: + - printenv + +test-vars-2: + variables: + MY_VAR: !reference [.vars, variables, IMPORTANT_VAR] + # ^^^^^^^^^^ meta.property storage.type.tag-handle + # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.sequence.flow + # ^ punctuation.definition.sequence.begin + # ^^^^^ constant.other.label + # ^ punctuation.separator.sequence + # ^^^^^^^^^ keyword.other + # ^ punctuation.separator.sequence + # ^^^^^^^^^^^^^ variable.other.constant + script: + - printenv + +job1: + artifacts: + paths: + - binaries/ + - .config + +job2: + artifacts: + paths: !reference [job1, artifacts, paths, further_nesting] +# ^^^^^^^^^^ meta.property storage.type.tag-handle +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.sequence.flow +# ^^^^ constant.other.label +# ^ punctuation.separator.sequence +# ^^^^^^^^^ keyword.other +# ^ punctuation.separator.sequence +# ^^^^^ variable.other.constant +# ^ punctuation.separator.sequence +# ^^^^^^^^^^^^^^^ variable.other.constant +# ^ punctuation.definition.sequence.end