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

cannot override vars from console #850

Closed
antonio-antuan opened this issue Aug 26, 2022 · 9 comments
Closed

cannot override vars from console #850

antonio-antuan opened this issue Aug 26, 2022 · 9 comments
Labels
state: awaiting response Waiting for issue author to respond.

Comments

@antonio-antuan
Copy link

  • Task version: 3.14.1.r21.g421cb52-1
  • Operating System: archlinux

Example Taskfile showing the issue

version: '3'


tasks:
  foo:
    vars:
      BAR: default
    cmds:
      - echo "{{.BAR}}"

I'm trying to override variable BAR:

➜  task foo         
task: [foo] echo "default"
default
➜  TASK_BAR=baz task foo
task: [foo] echo "default"
default
➜  BAR=baz task foo     
task: [foo] echo "default"
default
➜  task BAR=baz foo
task: [foo] echo "default"
default
➜  task TASK_BAR=baz foo
task: [foo] echo "default"
default
➜  task foo TASK_BAR=baz
task: [foo] echo "default"
default
➜  task foo BAR=baz     
task: [foo] echo "default"
default

Is there any way to do it?

@mrwormhole
Copy link

mrwormhole commented Aug 27, 2022

Hello @AcLr

If you want to override vars, you would be using go templates more like this

version: '3'


tasks:
  foo:
    cmds:
      - echo "{{.BAR | default "my-default-value"}}"

or alternatively this

version: '3'


tasks:
  foo:
    vars:
      BAR: '{{.BAR | default "my-default-value"}}'
    cmds:
      - echo "{{.BAR}}"

@antonio-antuan
Copy link
Author

Thanks for your help, it is more clear now.

BTW is it a good idea to make it possible to override variables in a way, introduced in my previous message?

@mrwormhole
Copy link

yea ofc, it is best to use them with default parameters tho, whole purpose of taskfiles is to shorten commands

@antonio-antuan
Copy link
Author

I mean in my previous message. Intuitively I want to define a variable with vars and after that I want to redefine it with cli-arguments.

default is usable but I want to say that redefining can be an option to. You can consider it as a feature request :)

@pd93
Copy link
Member

pd93 commented Sep 9, 2022

@AcLr unless I'm misunderstanding your message, you can achieve exactly what you are asking using @mrwormhole's suggested method. The variables documentation describes this behaviour in the section: sending parameters with environment variables.

See example below:

version: '3'

tasks:
  example:
    cmds:
      - echo "{{.MYVAR | default "foo"}}"

Run task normally (sets default value to "foo"):

❯ task example    
task: [example] echo "foo"
foo

Run task with variable overridden (sets value to "bar"):

❯ MYVAR="bar" task example
task: [example] echo "bar"
bar

If this does not fulfil your needs, please could you give an example of how you would expect this to work. I personally prefer that you need to explicitly describe how the default behaviour should work in the taskfile, rather than implicitly overriding variables. The latter could lead to unexpected behaviour in certain scenarios.

@pd93 pd93 added the state: awaiting response Waiting for issue author to respond. label Sep 9, 2022
@ssbarnea
Copy link
Contributor

ssbarnea commented Oct 9, 2022

I think that we really need command line options that would allow us to override vars, without any tricks. Vars have a lot of advantages over expansion of shell variables, which is not visible inside the console.

Probably a syntax like --vars VAR1=foo,BAR2=bar would suffice, or similar alternatives.

@trallnag
Copy link

@ssbarnea, why not use the existing way to set variables? Only thing missing would be to override stuff internally.

task build FOO=bar

@andreynering
Copy link
Member

I feel that this issue is a too loosely defined.

It is already possible to override vars, but you need to use default in the var declaration.

Changing vars to override without that would be a backward incompatible change, so I'm closing this for now. Changes on this should be pushed to the (far in the future) next major release.

@andreynering andreynering closed this as not planned Won't fix, can't repro, duplicate, stale Jan 5, 2023
@vctls
Copy link

vctls commented Oct 6, 2023

This is what I ended up doing to give variables passed at runtime priority over dynamic global or task variables:

vars:
  DEFAULT_NAME:
    sh: 'echo world'
  NAME:
    sh: 'echo {{ .NAME | default .DEFAULT_NAME }}'

tasks:
  say_hello:
    cmd: 'echo hello {{ .NAME }}'
> task say_hello
hello world

> NAME=John task say_hello
hello John

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
state: awaiting response Waiting for issue author to respond.
Projects
None yet
Development

No branches or pull requests

7 participants