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

Roadmap to version 3 #195

Closed
12 of 18 tasks
andreynering opened this issue Mar 31, 2019 · 22 comments
Closed
12 of 18 tasks

Roadmap to version 3 #195

andreynering opened this issue Mar 31, 2019 · 22 comments
Labels
meta type: proposal A ticket that proposes a new feat/enhancement.
Milestone

Comments

@andreynering
Copy link
Member

andreynering commented Mar 31, 2019

This is a general issue to track proposals with small or big breaking changes, that could be released in the next major version.

This list is a work in progress and can change at any time.

Development is happening on the v3 branch.

Cleanup

Breaking changes

New stuff

Documentation

  • Mention changes related to method: (shouldn't also check the main guide)
  • Update "Taskfile versions" article

There are more issues and feature request that could be added to this release.

@andreynering andreynering added the type: proposal A ticket that proposes a new feat/enhancement. label Mar 31, 2019
@andreynering andreynering added this to the v3 milestone Mar 31, 2019
@andreynering
Copy link
Member Author

/cc @smyrman @sheerun @jamestenglish @jaxxstorm @Evertras


As you may have noticed, I've being very slow on implementing new stuff for this project. So don't expect this release to happen soon. This is mostly to grab feedback.

@Evertras
Copy link

Just a big +1 to the 'run a dependency with the same input only once' by default. That's my only pain point right now, so I'm a little biased. :)

@smyrman
Copy link
Contributor

smyrman commented Apr 1, 2019

It's a great list, agree to all points; take your time:-)

@edrd-f
Copy link

edrd-f commented Apr 10, 2019

It would be great if there was a way of making variables part of the environment, as suggested on #181.

@andreynering andreynering pinned this issue Apr 24, 2019
@andreynering andreynering changed the title [Feedback wanted] Roadmap to version 3 Roadmap to version 3 May 26, 2019
@stephenprater
Copy link
Contributor

Some things that are on our wish list.

  • Allow sh cmds to export their results to the Templater Env or to a environment variable available in subsequent commands.
cmds:
  - sh: uname
    export: UNAME
  - sh: echo $UNAME
  • Preconditions (we made a PR for this one)
  • Expose {{.CHECKSUM}} and {{.TIMESTAMP}} in status to check remote artifacts (I have this done as well and will make a PR after pre-conditions.)
  • Specify a "format string" for the output prefix (to control width / color of prefix output)
  • Allocate a TTY to cmds on demand. (For interactive commands)
  • Pluggable interpreters besides "sh" like you could do
cmds:
  - python: |
import os
print(os.getcwd())

We'll probably add some or all of these things as it becomes necessary to support our automation tasks.

@andreynering
Copy link
Member Author

Hi @stephenprater,

Expose {{.CHECKSUM}} and {{.TIMESTAMP}} in status to check remote artifacts (I have this done as well and will make a PR after pre-conditions.)

🙂

Allocate a TTY to cmds on demand. (For interactive commands)

We recently had some issues on running interactive commends that should have been fixed after #200. Are you still experiencing issues? If so, let me know.

Pluggable interpreters besides "sh" like you could do

cmds:
  - python: |
import os
print(os.getcwd())

This is an interesting idea. On the other hand, there are reasons why it isn't available today:

  1. You can already call it by having sh: python your_script.py
  2. We compile a Shell interpreter written in Go with Task to run commands, so results are consistent between platforms (including Windows which doesn't have Bash always available, or it sometimes behave differently). Allowing Python/Ruby/etc scripts would make it more dependent on the environment (people have different versions of these installed, different libs installed, etc).

@stephenprater
Copy link
Contributor

You can already call it by having sh: python your_script.py

This isn't quite the same thing because you need to interpolate your task variables into the command line, plus you have a script that also does project automation so not all of your automation lives in one spot anymore.

This is definitely our lowest priority item - and it's mostly because things like:

service_status=$(nomad deployment status $deployment | grep "^services")
service_complete=$(echo -e "$service_status" | awk '{if($4==$7){print "1"}else{print "0"}}')
if [ $service_complete == "1" ]; then
    echo $green
fi
echo -e "$service_status $(tput sgr0)"

are harder to read (and write!) than the python equivalent.

while True:
    deployment = nomad.client.deployment("adf3ec3")
    if (
        deployment["TaskGroup"]["services"]["DesiredCanaries"]
        == deployment["TaskGroup"]["services"]["HealthyCanaries"]
    ):
        break

print("Services Deployed!")

We tend to use Task as an automation tool and for scripting complex CI/CD workflows more than as a pure build dependency tool, so the scenario where people have different versions of an interpreter installed isn't really a concern for us, as it's handled by the language tooling for Python / Ruby.

One of the things that's left out of my one-sentence description there is that the Taskfile itself would need to specify the interpreter.

So at the top you'd do something like:

interpreters:
    python: /usr/bin/env python
    ruby: bundle exec ruby

Anyway - that's definitely pie-in-the-sky kind of stuff - we haven't even looked seriously at this as a feature yet - it's just that every time our devs have to write sh and then remember it's not bash they complain about it. 😉

@andreynering
Copy link
Member Author

One of the things that's left out of my one-sentence description there is that the Taskfile itself would need to specify the interpreter.

So at the top you'd do something like:

interpreters:
    python: /usr/bin/env python
    ruby: bundle exec ruby

This makes me like it better, since it's generic and customizable. 🙂

Implementation-wise, it can be challenging to make YAML accept python: or ruby: attrs if we don't know beforehand which interpreters the user will implement. Not that we won't find a solution, though.

@stephenprater
Copy link
Contributor

Allocate a TTY to cmds on demand. (For interactive commands)

This is definitely not fixed for me on today's master. Filed an issue - #217.

@andreynering
Copy link
Member Author

Things have been progressing slowly.

From now on, I'll ask PR authors to target non-small new features to the v3 branch (bug fixes should target master).

I'll make preview releases once in a while for people to use the new features and report bugs. This is the first one: v3.0.0-preview1.

@zx8
Copy link

zx8 commented Sep 11, 2019

Any chance remote includes (#98) can be considered for this?

@andreynering
Copy link
Member Author

Any chance remote includes (#98) can be considered for this?

@zx8 Sorry, but that's on hold and it won't be on v3.

I'm not happy with the complixity it'd brings as it's proposed (regarding caching, versioning, etc).

@brandonkal
Copy link

Rather than a syntax like this:

interpreters:
    python: /usr/bin/env python
    ruby: bundle exec ruby

Why not just use shebangs at the top of the tasks like the just tool does?

@andreynering
Copy link
Member Author

@brandonkal That sounds like something worth considering. Thanks for the idea!

@andreynering
Copy link
Member Author

Hey everybody,

We just reached a great milestone for v3 which is refactoring variables, which will now be evaluated in the sequence of declaration. This means that Taskfiles like this will just work ™️ without having to set expansions or similar workarounds:

version: '3'
vars:
VAR_A: A
VAR_B: '{{.VAR_A}}B'
VAR_C: '{{.VAR_B}}C'
VAR_1: {sh: echo 1}
VAR_2: {sh: 'echo "{{.VAR_1}}2"'}
VAR_3: {sh: 'echo "{{.VAR_2}}3"'}
tasks:
default:
- task: missing-var
- task: var-order
- task: dependent-sh
- task: with-call
missing-var: echo '{{.NON_EXISTING_VAR}}' > missing-var.txt
var-order:
vars:
VAR_D: '{{.VAR_C}}D'
VAR_E: '{{.VAR_D}}E'
VAR_F: '{{.VAR_E}}F'
cmds:
- echo '{{.VAR_F}}' > var-order.txt
dependent-sh:
vars:
VAR_4: {sh: 'echo "{{.VAR_3}}4"'}
VAR_5: {sh: 'echo "{{.VAR_4}}5"'}
VAR_6: {sh: 'echo "{{.VAR_5}}6"'}
cmds:
- echo '{{.VAR_6}}' > dependent-sh.txt
with-call:
- task: called-task
vars:
ABC123: '{{.VAR_C}}{{.VAR_3}}'
called-task:
vars:
MESSAGE: Hi, {{.ABC123}}!
cmds:
- echo "{{.MESSAGE}}" > with-call.txt

This is not yet released, not even to the preview channel, so you need to manually build the v3 for now, but I'd really like feedback on whether it's working as expected and it's bug free. (Remember that to test this you need to change your Taskfile version to 3).

Completing this means we're now close to finally shipping v3. Since this issue is opened for more than a year already, I'll probably postpone some of the bulled points above to v3.1+, specially those who aren't breaking changes, so we can ship this sooner.

Opinions are welcome!

@danquah
Copy link
Contributor

danquah commented Aug 16, 2020

Would definitely prefer a V3 with the current set of (great) features, then subsequent fixes of whatever bugs has snug in.

And maybe then go so far as to ping all the issues that are then scheduled for a V3.1 and evaluate whether they are still relevant? :)

@andreynering
Copy link
Member Author

v3.0.0 is finally released! 🎉

As I said, it was not possible to address everything at once, but this release is already big enough, and I plan to add features in smaller releases from now on...

If the feature you asked for doesn't have a an open issue, please open so it isn't forgotten.

Thanks for everyone that helped in one way or another!

@andreynering andreynering unpinned this issue Aug 17, 2020
@marco-m
Copy link
Contributor

marco-m commented Aug 17, 2020

Just wanted to 🎉 ! Thanks! :-)

@danquah
Copy link
Contributor

danquah commented Aug 17, 2020

Yes, a thousand times 🎉 Thank for all the hard work!

@Nadock
Copy link

Nadock commented Jan 29, 2021

One of the things that's left out of my one-sentence description there is that the Taskfile itself would need to specify the interpreter.
So at the top you'd do something like:

interpreters:
    python: /usr/bin/env python
    ruby: bundle exec ruby

This makes me like it better, since it's generic and customizable. 🙂

Implementation-wise, it can be challenging to make YAML accept python: or ruby: attrs if we don't know beforehand which interpreters the user will implement. Not that we won't find a solution, though.

Did this interpreters feature make it into v3? I can't see any details in the documentation aside from #243 and I can't see any other reference to it in the repo. It's certainly a feature I'd like to see added to Task.

Thanks for all your hard work either way 🎉

@andreynering
Copy link
Member Author

Hi @Nadock,

Sorry, that just wasn't implemented. Maybe it's worth creating an separated issue about it.

@Nadock
Copy link

Nadock commented Mar 8, 2021

Hi @Nadock,

Sorry, that just wasn't implemented. Maybe it's worth creating an separated issue about it.

All good, I suspected as much. I have opened #448 to track this 👍

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
meta type: proposal A ticket that proposes a new feat/enhancement.
Projects
None yet
Development

No branches or pull requests

10 participants