(no YAML)
looks inside
still has YAML
(no YAML)
looks inside
still has YAML
GH project link - https://github.com/melezhik/DSCI
You can just hit up any other language from it though?
Here is SDK for those languages:
Raku Perl Bash Python Ruby Powershell Php Golang
UPDATE: so it's not just hitting up a language from a pipeline , it's full reach SDK, one writes a pipeline on a language, if I get your comment correctly
Well no I mean if you want to do something in python just call up the python interpreter, if you have some existing stuff in TCL, just run it through that interpreter and so on,no need for a specific anything.
But now when you have a YAML program as the first level abstraction how do you handle results between those multi language calls ? In DSCI this is achieved via states and normal functions , and everting is just a function on general purpose programming language, in YAML you need all these magic ( awkward ) YAML syntax to mimic all those things ( pass parameters , handle global variables , process user input , handle returned parameters , etc )
Looking at the examples, you’ve just made a brand new GitHub Actions framework. There’s YAML to wrap everything together and a bunch of Python that’s so declarative it might as well be HCL. Do you have an example that’s a bit more than “do what YAML does only in bash?”
Ok, try to do it on GH actions, share states between tasks/jobs for example:
tasks/task_one/task.py
#!/usr/bin/python3
update_state({
'out1' : 'out1 value',
'out2' : 'out2 value'
})
tasks/task_two/task.py
#!/usr/bin/python3
dict = get_state()
print(dict["out1"])
print(dict["out2"])
Or share states between jobs:
jobs/job1/task.py
#!/usr/bin/python3
update_state({
'out1' : 'out1 value',
'out2' : 'out2 value'
})
jobs/job2/task.py
#!/usr/bin/python3
dict = config()
print(dict["_dsci_"]["job1"]["out1"])
print(dict["_dsci_"]["job1"]["out2"])
I can't imagine how much boilerplate code (if this ever possible ) one needs to write to achieve that on YAML based pipelines (GH Actions/ etc)
And don't tell me about jobs artifacts ))
UPDATE:
Another good example is to run tasks conditionally, yes using old good if:
#!/usr/bin/python3
if some_condition(foo, bar):
run_task(
'task1', {
'foo' : 'foo value',
'bar' : 'bar value'
}
)
The same could be quite awkward in YAML based code
This is a boilerplate example. I asked for something more than boilerplate. Give me some reasons why I need an incredibly stateful CI engine.
it's just because I think in real world we have a lot of tasks where state is required or extremely beneficial, some examples on top of my head:
etc
I wouldn’t do any of that in a CI-only system. If I did, I’d use tools that exist for those jobs that already allow scripting languages.
If you use tools gluing them into YAML - you get YAML bloated with time . When you say those tools already having Python - excellent I would like to use those Python libs or SDK directly in my Python code instead of juggling those tools as cli or code blocks inside YAML
UPDATE: and yeah , re-read again - I guess the most of automation is done today via “CI” pipelines even when those are not meant to be CI only, like you said … anyways the rest I have said stands true for me … don’t bake your code into YAML )
all 20 comments