Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dependencies and Enhanced Depends is broken if you call a task 'split' #12037

Closed
2 of 3 tasks
tico24 opened this issue Oct 19, 2023 · 29 comments · Fixed by #12573
Closed
2 of 3 tasks

Dependencies and Enhanced Depends is broken if you call a task 'split' #12037

tico24 opened this issue Oct 19, 2023 · 29 comments · Fixed by #12573
Assignees
Labels
area/templating Templating with `{{...}}` area/upstream This is an issue with an upstream dependency, not Argo itself P2 Important. All bugs with >=3 thumbs up that aren’t P0 or P1, plus: Any other bugs deemed important solution/suggested A solution to the bug has been suggested. Someone needs to implement it. solution/workaround There's a workaround, might not be great, but exists type/bug type/regression Regression from previous behavior (a specific type of bug)

Comments

@tico24
Copy link
Member

tico24 commented Oct 19, 2023

Pre-requisites

  • I have double-checked my configuration
  • I can confirm the issues exists when I tested with :latest
  • I'd like to contribute the fix myself (see contributing guide)

What happened/what you expected to happen?

If you happen to call a task split, you'll break anything that depends on it.

This is broken:

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: broken-
spec:
  entrypoint: main
  templates:
    - name: main
      dag:
        tasks:
          - name: split
            template: foo
          - name: map
            template: foo
            depends: split

    - name: foo
      container:
        image: alpine
        command:
          - sh
          - -c
          - |
            echo "foo"

This is the same workflow, but with split renamed to bar. It works fine:

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: working-
spec:
  entrypoint: main
  templates:
    - name: main
      dag:
        tasks:
          - name: bar
            template: foo
          - name: map
            template: foo
            depends: bar

    - name: foo
      container:
        image: alpine
        command:
          - sh
          - -c
          - |
            echo "foo"

The resulting error in the UI is

unable to evaluate expression '(split.Succeeded || split.Skipped || split.Daemoned)': unable to evaluate expression '(split.Succeeded || split.Skipped || split.Daemoned)': type func(...interface {}) (interface {}, error)[string] is undefined (1:8) | (split.Succeeded || split.Skipped || split.Daemoned) | .......^

This used to work on 3.4.11 and earlier. I'm even convinced it worked on both 3.5.0 release candidates.

Version

v3.5.0

Paste a small workflow that reproduces the issue. We must be able to run the workflow; don't enter a workflows that uses private images.

See above

Logs from the workflow controller

time="2023-10-19T07:11:28.513Z" level=warning msg="was unable to obtain the node for wat-fpdsp-2364469670, taskName map"                                                                                  time="2023-10-19T07:11:28.513Z" level=info msg="node wat-fpdsp-4039980688 phase Running -> Succeeded" namespace=ci workflow=wat-fpdsp
time="2023-10-19T07:11:28.513Z" level=info msg="node wat-fpdsp-4039980688 finished: 2023-10-19 07:11:28.513582048 +0000 UTC" namespace=ci workflow=wat-fpdsp                                              time="2023-10-19T07:11:28.513Z" level=warning msg="was unable to obtain the node for wat-fpdsp-2364469670, taskName map"
time="2023-10-19T07:11:28.513Z" level=info msg="Skipped node wat-fpdsp-2364469670 initialized Error (message: unable to evaluate expression '(split.Succeeded || split.Skipped || split.Daemoned)': unabletime="2023-10-19T07:11:28.513Z" level=info msg="Outbound nodes of wat-fpdsp-2263525054 set to [wat-fpdsp-2364469670]" namespace=ci workflow=wat-fpdsp
time="2023-10-19T07:11:28.513Z" level=info msg="node wat-fpdsp-2263525054 phase Running -> Error" namespace=ci workflow=wat-fpdsp                                                                         time="2023-10-19T07:11:28.513Z" level=info msg="node wat-fpdsp-2263525054 finished: 2023-10-19 07:11:28.513781073 +0000 UTC" namespace=ci workflow=wat-fpdsp
time="2023-10-19T07:11:28.513Z" level=info msg="Retry Policy: OnError (onFailed: false, onError true)" namespace=ci workflow=wat-fpdsp                                                                    time="2023-10-19T07:11:28.513Z" level=info msg="1 child nodes of wat-fpdsp failed. Trying again..." namespace=ci workflow=wat-fpdsp
time="2023-10-19T07:11:28.513Z" level=info msg="was unable to obtain node for , letting display name to be nodeName" namespace=ci workflow=wat-fpdsp                                                      time="2023-10-19T07:11:28.513Z" level=info msg="DAG node wat-fpdsp-2733151291 initialized Running" namespace=ci workflow=wat-fpdsp
time="2023-10-19T07:11:28.513Z" level=warning msg="was unable to obtain the node for wat-fpdsp-2348667151, taskName map"                                                                                  time="2023-10-19T07:11:28.513Z" level=warning msg="was unable to obtain the node for wat-fpdsp-942064205, taskName split"
time="2023-10-19T07:11:28.514Z" level=warning msg="was unable to obtain the node for wat-fpdsp-942064205, taskName split"                                                                                 time="2023-10-19T07:11:28.514Z" level=info msg="All of node wat-fpdsp(1).split dependencies [] completed" namespace=ci workflow=wat-fpdsp
time="2023-10-19T07:11:28.514Z" level=warning msg="Node was nil, will be initialized as type Skipped" namespace=ci workflow=wat-fpdsp                                                                     time="2023-10-19T07:11:28.514Z" level=info msg="Retry node wat-fpdsp-942064205 initialized Running" namespace=ci workflow=wat-fpdsp
time="2023-10-19T07:11:28.514Z" level=info msg="Pod node wat-fpdsp-2693710620 initialized Pending" namespace=ci workflow=wat-fpdsp                                                                        time="2023-10-19T07:11:28.537Z" level=info msg="Created pod: wat-fpdsp(1).split(0) (wat-fpdsp-foo-2693710620)" namespace=ci workflow=wat-fpdsp
time="2023-10-19T07:11:28.537Z" level=warning msg="was unable to obtain the node for wat-fpdsp-2348667151, taskName map"                                                                                  time="2023-10-19T07:11:28.537Z" level=warning msg="was unable to obtain the node for wat-fpdsp-2348667151, taskName map"
time="2023-10-19T07:11:28.537Z" level=info msg="TaskSet Reconciliation" namespace=ci workflow=wat-fpdsp                                                                                                   time="2023-10-19T07:11:28.537Z" level=info msg=reconcileAgentPod namespace=ci workflow=wat-fpdsp
time="2023-10-19T07:11:28.537Z" level=info msg="Workflow to be dehydrated" Workflow Size=3285                                                                                                             time="2023-10-19T07:11:28.575Z" level=info msg="Workflow update successful" namespace=ci phase=Running resourceVersion=175536869 workflow=wat-fpdsp
time="2023-10-19T07:11:31.534Z" level=info msg="Processing workflow" namespace=ci workflow=wat-fpdsp                                                                                                      time="2023-10-19T07:11:31.535Z" level=info msg="Task-result reconciliation" namespace=ci numObjs=0 workflow=wat-fpdsp
time="2023-10-19T07:11:31.535Z" level=info msg="node changed" namespace=ci new.message=PodInitializing new.phase=Pending new.progress=0/1 nodeID=wat-fpdsp-2693710620 old.message= old.phase=Pending old.ptime="2023-10-19T07:11:31.535Z" level=info msg="node unchanged" namespace=ci nodeID=wat-fpdsp-2072654003 workflow=wat-fpdsp
time="2023-10-19T07:11:31.535Z" level=warning msg="was unable to obtain the node for wat-fpdsp-2348667151, taskName map"                                                                                  time="2023-10-19T07:11:31.535Z" level=warning msg="was unable to obtain the node for wat-fpdsp-2348667151, taskName map"
time="2023-10-19T07:11:31.535Z" level=warning msg="was unable to obtain the node for wat-fpdsp-2348667151, taskName map"                                                                                  time="2023-10-19T07:11:31.535Z" level=info msg="TaskSet Reconciliation" namespace=ci workflow=wat-fpdsp
time="2023-10-19T07:11:31.535Z" level=info msg=reconcileAgentPod namespace=ci workflow=wat-fpdsp                                                                                                          time="2023-10-19T07:11:31.535Z" level=info msg="Workflow to be dehydrated" Workflow Size=3343
time="2023-10-19T07:11:31.555Z" level=info msg="Workflow update successful" namespace=ci phase=Running resourceVersion=175536902 workflow=wat-fpdsp                                                       time="2023-10-19T07:11:34.536Z" level=info msg="Processing workflow" namespace=ci workflow=wat-fpdsp
time="2023-10-19T07:11:34.537Z" level=info msg="Task-result reconciliation" namespace=ci numObjs=0 workflow=wat-fpdsp                                                                                     time="2023-10-19T07:11:34.537Z" level=info msg="node changed" namespace=ci new.message= new.phase=Running new.progress=0/1 nodeID=wat-fpdsp-2693710620 old.message=PodInitializing old.phase=Pending old.p
time="2023-10-19T07:11:34.537Z" level=info msg="node unchanged" namespace=ci nodeID=wat-fpdsp-2072654003 workflow=wat-fpdsp                                                                               time="2023-10-19T07:11:34.538Z" level=warning msg="was unable to obtain the node for wat-fpdsp-2348667151, taskName map"
time="2023-10-19T07:11:34.538Z" level=warning msg="was unable to obtain the node for wat-fpdsp-2348667151, taskName map"                                                                                  time="2023-10-19T07:11:34.538Z" level=warning msg="was unable to obtain the node for wat-fpdsp-2348667151, taskName map"
time="2023-10-19T07:11:34.538Z" level=info msg="TaskSet Reconciliation" namespace=ci workflow=wat-fpdsp                                                                                                   time="2023-10-19T07:11:34.538Z" level=info msg=reconcileAgentPod namespace=ci workflow=wat-fpdsp
time="2023-10-19T07:11:34.538Z" level=info msg="Workflow to be dehydrated" Workflow Size=3332                                                                                                             time="2023-10-19T07:11:34.543Z" level=info msg="cleaning up pod" action=terminateContainers key=ci/wat-fpdsp-foo-2693710620/terminateContainers
time="2023-10-19T07:11:34.553Z" level=info msg="Workflow update successful" namespace=ci phase=Running resourceVersion=175536924 workflow=wat-fpdsp                                                       time="2023-10-19T07:11:37.619Z" level=info msg="Processing workflow" namespace=ci workflow=wat-fpdsp
time="2023-10-19T07:11:37.619Z" level=info msg="Task-result reconciliation" namespace=ci numObjs=0 workflow=wat-fpdsp                                                                                     time="2023-10-19T07:11:37.620Z" level=info msg="node changed" namespace=ci new.message= new.phase=Succeeded new.progress=0/1 nodeID=wat-fpdsp-2693710620 old.message= old.phase=Running old.progress=0/1 w
time="2023-10-19T07:11:37.620Z" level=info msg="node unchanged" namespace=ci nodeID=wat-fpdsp-2072654003 workflow=wat-fpdsp                                                                               time="2023-10-19T07:11:37.620Z" level=warning msg="was unable to obtain the node for wat-fpdsp-2348667151, taskName map"
time="2023-10-19T07:11:37.620Z" level=info msg="node wat-fpdsp-942064205 phase Running -> Succeeded" namespace=ci workflow=wat-fpdsp                                                                      time="2023-10-19T07:11:37.620Z" level=info msg="node wat-fpdsp-942064205 finished: 2023-10-19 07:11:37.62036697 +0000 UTC" namespace=ci workflow=wat-fpdsp
time="2023-10-19T07:11:37.620Z" level=warning msg="was unable to obtain the node for wat-fpdsp-2348667151, taskName map"                                                                                  time="2023-10-19T07:11:37.620Z" level=info msg="Skipped node wat-fpdsp-2348667151 initialized Error (message: unable to evaluate expression '(split.Succeeded || split.Skipped || split.Daemoned)': unable
time="2023-10-19T07:11:37.620Z" level=info msg="Outbound nodes of wat-fpdsp-2733151291 set to [wat-fpdsp-2348667151]" namespace=ci workflow=wat-fpdsp                                                     time="2023-10-19T07:11:37.620Z" level=info msg="node wat-fpdsp-2733151291 phase Running -> Error" namespace=ci workflow=wat-fpdsp
time="2023-10-19T07:11:37.620Z" level=info msg="node wat-fpdsp-2733151291 finished: 2023-10-19 07:11:37.620538442 +0000 UTC" namespace=ci workflow=wat-fpdsp                                              time="2023-10-19T07:11:37.620Z" level=info msg="Retry Policy: OnError (onFailed: false, onError true)" namespace=ci workflow=wat-fpdsp
time="2023-10-19T07:11:37.620Z" level=info msg="2 child nodes of wat-fpdsp failed. Trying again..." namespace=ci workflow=wat-fpdsp                                                                       time="2023-10-19T07:11:37.620Z" level=info msg="was unable to obtain node for , letting display name to be nodeName" namespace=ci workflow=wat-fpdsp
time="2023-10-19T07:11:37.620Z" level=info msg="DAG node wat-fpdsp-49276704 initialized Running" namespace=ci workflow=wat-fpdsp                                                                          time="2023-10-19T07:11:37.620Z" level=warning msg="was unable to obtain the node for wat-fpdsp-911175476, taskName map"
time="2023-10-19T07:11:37.620Z" level=warning msg="was unable to obtain the node for wat-fpdsp-4145173754, taskName split"                                                                                time="2023-10-19T07:11:37.620Z" level=warning msg="was unable to obtain the node for wat-fpdsp-4145173754, taskName split"
time="2023-10-19T07:11:37.620Z" level=info msg="All of node wat-fpdsp(2).split dependencies [] completed" namespace=ci workflow=wat-fpdsp                                                                 time="2023-10-19T07:11:37.620Z" level=warning msg="Node was nil, will be initialized as type Skipped" namespace=ci workflow=wat-fpdsp
time="2023-10-19T07:11:37.620Z" level=info msg="Retry node wat-fpdsp-4145173754 initialized Running" namespace=ci workflow=wat-fpdsp                                                                      time="2023-10-19T07:11:37.620Z" level=info msg="Pod node wat-fpdsp-3447821985 initialized Pending" namespace=ci workflow=wat-fpdsp
time="2023-10-19T07:11:37.655Z" level=info msg="Created pod: wat-fpdsp(2).split(0) (wat-fpdsp-foo-3447821985)" namespace=ci workflow=wat-fpdsp                                                            time="2023-10-19T07:11:37.655Z" level=warning msg="was unable to obtain the node for wat-fpdsp-911175476, taskName map"
time="2023-10-19T07:11:37.655Z" level=warning msg="was unable to obtain the node for wat-fpdsp-911175476, taskName map"                                                                                   time="2023-10-19T07:11:37.656Z" level=info msg="TaskSet Reconciliation" namespace=ci workflow=wat-fpdsp
time="2023-10-19T07:11:37.656Z" level=info msg=reconcileAgentPod namespace=ci workflow=wat-fpdsp                                                                                                          time="2023-10-19T07:11:37.656Z" level=info msg="Workflow to be dehydrated" Workflow Size=4503
time="2023-10-19T07:11:37.676Z" level=info msg="Workflow update successful" namespace=ci phase=Running resourceVersion=175536948 workflow=wat-fpdsp

Logs from in your workflow's wait container

none relevant
@tico24
Copy link
Member Author

tico24 commented Oct 19, 2023

It also breaks if you call a task map

@tico24 tico24 changed the title Dependencies and Enhanced Depends is broken if you call a template 'split' Dependencies and Enhanced Depends is broken if you call a task 'split' Oct 19, 2023
@caelan-io caelan-io added the type/regression Regression from previous behavior (a specific type of bug) label Oct 19, 2023
@agilgur5 agilgur5 added area/templating Templating with `{{...}}` P2 Important. All bugs with >=3 thumbs up that aren’t P0 or P1, plus: Any other bugs deemed important labels Oct 19, 2023
@agilgur5
Copy link
Member

expr built-in functions collision

I'm even convinced it worked on both 3.5.0 release candidates

You are correct on that, expr was upgraded to 1.14 in 3.5.0-rc2, and split is a new built-in function.

It also breaks if you call a task map

That's a much older built-in.

solutions?

I'm not entirely sure what the correct solution here is. Ideally Argo's variables would be under a different "namespace" to avoid collisions, but now we already have this behavior to retain backward-compat with.

I am surprised that the Argo variable isn't overriding the expr built-in though 🤔

@tico24
Copy link
Member Author

tico24 commented Oct 19, 2023

map definitely definitely worked in v3.4.x.. all the way up to 11.

We even did an argocon talk in April using it, so we know it worked then.

@agilgur5
Copy link
Member

agilgur5 commented Oct 19, 2023

If that's the case that 3.4.x worked with Argo variables overriding built-in functions, then it's possibly a regression in expr: that built-ins now have priority over added context variables?

@agilgur5
Copy link
Member

Does map work in 3.5.0-rc2? Trying to pinpoint if it's expr 1.14 or 1.15 that has the regression

@terrytangyuan
Copy link
Member

@tico24 Would you like to document this as a breaking change in upgrading guide?

@agilgur5
Copy link
Member

@terrytangyuan this seems more like a regression in expr that we should get fixed and include in 3.5.1 rather than a breaking change we should document

@agilgur5
Copy link
Member

agilgur5 commented Oct 19, 2023

I was gonna file a bug report in expr (and potentially fix it myself) once I knew the specific version with the regression

@tico24
Copy link
Member Author

tico24 commented Oct 19, 2023

Agreed. This definitely isn't a breaking change, it's an issue.

We also don't know the full list of magic bad words we can no longer use. If I found two in one workflow, I imagine there's lots.

@agilgur5
Copy link
Member

We also don't know the full list of magic bad words we can no longer use. If I found two in one workflow, I imagine there's lots.

I imagine it would be every built-in function. And yes, that list could potentially grow with every expr release

@terrytangyuan
Copy link
Member

IMO users should be aware of this when considering upgrading before major impact has occurred.

@terrytangyuan
Copy link
Member

Actually upgrading.md also contains non-breaking changes.

@Joibel
Copy link
Member

Joibel commented Dec 1, 2023

filter is also a problem

@agilgur5 agilgur5 added the solution/workaround There's a workaround, might not be great, but exists label Dec 1, 2023
@jmmclean
Copy link

jmmclean commented Dec 6, 2023

join also appears to be a problem

@jonwest
Copy link

jonwest commented Dec 12, 2023

duration is also a problem.

@agilgur5 agilgur5 added the solution/suggested A solution to the bug has been suggested. Someone needs to implement it. label Dec 27, 2023
@agilgur5 agilgur5 self-assigned this Dec 27, 2023
@isubasinghe isubasinghe self-assigned this Jan 13, 2024
@isubasinghe
Copy link
Member

isubasinghe commented Jan 13, 2024

After looking at the expr-lang/expr code, I am surprised how this ever worked actually. expr-lang has two phases,
a compile phase and a run phase. The eval function first compiles the stringly typed expression into a expr-langs VM instructions, then the run phase kicks in (this is where reads from the env happen).

Our error happens in the compile phase (and rightly so) because split is of the wrong type.
I suspect a commit in expr-lang introduced stricter type checking and this might have been the reason it worked in the past.
If this is the case, the reason our code worked in the past was because of a bug (or lack of a feature(type checking)) in expr-lang.

The fix for this should be from our end ultimately (imo), it's quite simple to do, replace all "${keyword}" expressions with "${argo_wf_keyword}" and then perform this replace in the env as well.

We could also ask expr-lang to special case the Eval function, where we leak the env to the Compile function, where it overrides it's own definition of "${keyword}".

@isubasinghe
Copy link
Member

Created an issue: expr-lang/expr#520, let's see how they respond.

@antonmedv
Copy link

that built-ins now have priority over added context variables?

I see. Let me refactor expr so env variables take precedence over built-in function (plus some syntax to still be able to call top overridden built-ins).

@antonmedv
Copy link

Will create a new release with a fix.

@antonmedv
Copy link

antonmedv commented Jan 13, 2024

Now we need some syntax to access builtin function in case it is overridden by env variable. I'm thinking about :: as prefix:

split.Succeeded && ::split(longString, ",")

@isubasinghe
Copy link
Member

Thanks @antonmedv, appreciate your quick response

@antonmedv
Copy link

expr-lang has two phases,
a compile phase and a run phase.

Yes, you can think of it as regexp: it also has compile and run steps.

A good practice is to compile expressions on configuration update. And notify users of any errors.

Also precompiled programs are faster.

@isubasinghe
Copy link
Member

isubasinghe commented Jan 17, 2024

This has now been addressed in expr-lang, waiting for a new release, if urgent we can probably just use master.

@antonmedv
Copy link

Will release today or tomorrow.

@talebzeghmi
Copy link

talebzeghmi commented Jan 24, 2024

I'm hitting the same issue, when running Metaflow on Argo with a join step.
There is no simple workaround because we'd have to recompile all customer Metaflow flows to prevent the list of keywords, hence making this blocking.

@antonmedv was there a release? I'm hitting this with v3.5.4

thank you!

@antonmedv
Copy link

Released new expr version https://github.com/expr-lang/expr/releases/tag/v1.16.0

@agilgur5
Copy link
Member

agilgur5 commented Jan 27, 2024

I suspect a commit in expr-lang introduced stricter type checking and this might have been the reason it worked in the past.
If this is the case, the reason our code worked in the past was because of a bug (or lack of a feature(type checking)) in expr-lang.

There were indeed some type checker improvements in expr 1.14 and 1.15, so maybe those were the root cause of the regression (not sure myself, Anton might now).

A good practice is to compile expressions on configuration update. And notify users of any errors.

This is potentially possible with WorkflowTemplate validation, where we see the template before it is run, though with dynamically created Workflows, we don't necessarily know what a user's expressions might look like until they submit it.
For anyone interested in this, Anton previously filed #11609 as a feature request for this.

@talebzeghmi
Copy link

When could we expect a release of Argo with the https://github.com/expr-lang/expr/releases/tag/v1.16.0 fix?
thanks!

@agilgur5
Copy link
Member

There's a PR out above: #12573. That will almost certainly make it into the next patch release, 3.5.5

terrytangyuan pushed a commit that referenced this issue Jan 30, 2024
Signed-off-by: isubasinghe <isitha@pipekit.io>
Signed-off-by: Isitha Subasinghe <isitha@pipekit.io>
isubasinghe added a commit to isubasinghe/argo-workflows that referenced this issue Feb 4, 2024
Signed-off-by: isubasinghe <isitha@pipekit.io>
Signed-off-by: Isitha Subasinghe <isitha@pipekit.io>
@agilgur5 agilgur5 added the area/upstream This is an issue with an upstream dependency, not Argo itself label Feb 9, 2024
isubasinghe added a commit to isubasinghe/argo-workflows that referenced this issue Feb 27, 2024
Signed-off-by: isubasinghe <isitha@pipekit.io>
Signed-off-by: Isitha Subasinghe <isitha@pipekit.io>
isubasinghe added a commit to isubasinghe/argo-workflows that referenced this issue Feb 27, 2024
Signed-off-by: isubasinghe <isitha@pipekit.io>
Signed-off-by: Isitha Subasinghe <isitha@pipekit.io>
isubasinghe added a commit to isubasinghe/argo-workflows that referenced this issue Feb 27, 2024
Signed-off-by: isubasinghe <isitha@pipekit.io>
Signed-off-by: Isitha Subasinghe <isitha@pipekit.io>
isubasinghe added a commit to isubasinghe/argo-workflows that referenced this issue Feb 28, 2024
Signed-off-by: isubasinghe <isitha@pipekit.io>
Signed-off-by: Isitha Subasinghe <isitha@pipekit.io>
Signed-off-by: Isitha Subasinghe <isubasinghe@student.unimelb.edu.au>
@agilgur5 agilgur5 added this to the v3.5.x patches milestone Apr 3, 2024
isubasinghe added a commit to isubasinghe/argo-workflows that referenced this issue May 6, 2024
Signed-off-by: isubasinghe <isitha@pipekit.io>
Signed-off-by: Isitha Subasinghe <isitha@pipekit.io>
isubasinghe added a commit to isubasinghe/argo-workflows that referenced this issue May 7, 2024
Signed-off-by: isubasinghe <isitha@pipekit.io>
Signed-off-by: Isitha Subasinghe <isitha@pipekit.io>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area/templating Templating with `{{...}}` area/upstream This is an issue with an upstream dependency, not Argo itself P2 Important. All bugs with >=3 thumbs up that aren’t P0 or P1, plus: Any other bugs deemed important solution/suggested A solution to the bug has been suggested. Someone needs to implement it. solution/workaround There's a workaround, might not be great, but exists type/bug type/regression Regression from previous behavior (a specific type of bug)
Projects
None yet
Development

Successfully merging a pull request may close this issue.

10 participants