From 8a98f45d4cee3774aec44d5f5580b19f4e04ca38 Mon Sep 17 00:00:00 2001 From: Keith Hall Date: Thu, 16 May 2024 21:50:29 +0300 Subject: [PATCH] [GitLab] support script references --- Gitlab CICD.sublime-syntax | 35 ++++++++++++++++++++++++++ tests/syntax_test_gitlab_cicd.yml | 41 +++++++++++++++++++++++++++++++ 2 files changed, 76 insertions(+) diff --git a/Gitlab CICD.sublime-syntax b/Gitlab CICD.sublime-syntax index 2a59a4d..93d6cae 100644 --- a/Gitlab CICD.sublime-syntax +++ b/Gitlab CICD.sublime-syntax @@ -39,6 +39,12 @@ contexts: 2: punctuation.separator.key-value.yaml script-block-sequence: + - match: (-)[ \t]+(!reference\b)\s*(\[) + captures: + 1: punctuation.definition.block.sequence.item.yaml + 2: meta.property.yaml storage.type.tag-handle.yaml + 3: meta.sequence.flow.yaml punctuation.definition.sequence.begin.yaml + push: script-reference-flow-sequence-body - match: (-)[ \t]+(?=\S) captures: 1: punctuation.definition.block.sequence.item.yaml @@ -63,3 +69,32 @@ contexts: - meta_include_prototype: false - meta_scope: source.shell.bash.embedded - include: scope:source.shell.bash.folded + + script-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: after-reference + - match: '[-\w.]+' + scope: constant.other.label.gitlab + - include: flow-pair-no-clear + - include: flow-node-11 + + after-reference: + - match: \w+ + scope: constant.other.gitlab + - match: ',' + scope: punctuation.separator.sequence.yaml + set: after-reference-type + - match: (?=\]) + pop: 1 + + after-reference-type: + - match: \w+ + scope: variable.other.constant.gitlab + pop: 1 + - match: (?=\S) + pop: 1 diff --git a/tests/syntax_test_gitlab_cicd.yml b/tests/syntax_test_gitlab_cicd.yml index 3aa4088..0970e30 100644 --- a/tests/syntax_test_gitlab_cicd.yml +++ b/tests/syntax_test_gitlab_cicd.yml @@ -153,3 +153,44 @@ 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 +# ^^^^^^ constant.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] + script: + - printenv