#general
1 messages ยท Page 15 of 1
I can knock that out today
If you prefer to focus on your proposal, I can take a look ify
Thatโd be helpful thanks!!
Welcome @stoic turtle!
Hello all
welcome ๐
Nice new logo ๐
Love it
I love it, too!
the new logo is awesome ๐
Welcome @split badge!
Hi @split badge,
We talked earlier (it's Guillaume). Feel free to explore and ask any question whatsoever ๐
Hello there ๐ I'll probably start to look at Dagger this week-end (or maybe next because Hacktoberfest is waiting for me for tomorrow ^^).
Welcome @winged oyster!
o/ @turbid tulip
Welcome @still wolf!
Hey everyone, had chat with @winter linden few days back, I am trying to look at cue and would love to contribute in it. I am just getting started with the language. It'd be great if someone can suggest any issue or experiments regarding performance or anything else that I can do around it please let me know! ๐
Hi @undone summit,
Are you looking to contribute to Cue specifically ? Or Dagger in a bigger extent ? We can definitely help you find an issue fitting your requirements. What are you, more specifically, looking to work on ?
The current main performance issue around Cue is being tracked here: https://github.com/cue-lang/cue/issues/804.
Hey @swift inlet , I think the target definitely would be latter one. I don't have any specific requirement right now. It's mostly for my learning purpose and contributing while doing so. So whatever might be a "good" start . I think the target for this week is just understanding Cue first, thus looking forward for suggestions.
Thank you the the link to the issue, I will go through this ๐
Awesome. Thanks for your interest in Dagger ๐ Don't hesitate to ping us anytime. We have other issues that may be better fits for onboarding ๐ (encountered a segfault once recently, didn't manage to reciprocate/isolate it precisely, but we could explain you the context for example. Isolating and fixing it could be extremely valuable for example)
Would youโor anyone else for that matter!โbe interested in either free recorded videos or live community talks where you could ask questions? I'm considering both but don't have a timeline for any publications atm
I think that sounds like a good one to look through. Let me ping you once I clear my schedule for this week ๐
I didn't quite understand, do you want to someone to attend these events and note the learnings (or answers to the questioners?) what are the videos/live community talk about?
The videos and potentially live events would be about a mix of CUE and Dagger. Just curious who would be interested in attending as a way to learn
attending live talks or watching recorded video
I think that is a very good idea, there are twitter spaces dedicated for even discussions (there is performance twitter space for instance)
If you do post on twitter it might get you an idea of how many people would be interested in attending in (twitch streaming is also a good way but you might know that already)
Hmmm twitch could be interesting
I definitely would be interested in attending. But I would prefer if it was live as we get to hear discussions. It's usually difficult to remember what event I wanted to watch (if I miss them) sometimes and unless its being directly used in my job I wouldn't remember to watch it so easily
but live events are usually a good way to get more audience
We can start simple with a community call here on discord
Thatโs been on my todolist for months actually..
I was about to suggest live youtube or twitch and read questions from the comments, but a discord community call is a great place to start and see what interest there is. I imagine interest being huge once Cue hits critical mass
VS Code finally gets bracket pair highlights. Been waiting for that forever
oh! and static terminal dimensions and custom tab titles! I swear VS Code continues to be the best thing to ever come out of Microsoft
Welcome @tidal cape!
Hi everyone ๐ . Just wanted to say I'm looking forward to trying out Dagger. I've used Cue a bit in the past and worked with a couple people who are already here (good to see you here @silent agate and @turbid tulip )
Welcome! Glad you joined us
Hey @tidal cape! Good to see you!
@here We are looking for a dagger developer with strong devops experience. We are open to both contract or full-time employment.
Please DM me if interested.
Welcome @shy wyvern!
./wave
I was wondering if this could have been in #๐ญuniverse but @winter linden it seems that the ๐ฅ men have a serious competitor against docker ๐ https://github.com/brouberol/marcel
The Issues
The current version of Dagger requires imperative CLI commands that complicate the use of the tool as well as forcing the user to do the very operations Dagger sets out to eliminate. The dagger input commands are a regular source of confusion, both for developers new to and experienced with CUE. Furthermore, Dagger has overloaded some concepts such as inputs and left other concepts such as environments and plans rather vague.
This proposal will describe a version ...
Hi folks! Please take a look at this proposal and consider how it would improve your experience of Dagger and how it would enable easier onboarding and adoption. Feedback of any kind is greatly appreciated!
ok now I have to learn French and Rust https://github.com/bnjbvr/rouille
I like the general direction, as you know.
A few questions and comments in no particular order. Not an exhaustive list, but wanted to get the conversation moving ASAP.
- Will I still be able to query the state of an environment with
dagger query? If so, how is that state stored and attached to the proper environment? - You use
package daggerto mean 2 different things depending on context. Even in this proposal, there are 2 code snippets, each usingpackage daggerin a different ...
Answering your points in order:
- yes via
dagger query <environment>. The question of state is still outstanding. We may still need a.daggerfolder for that purpose - I agree a local
package daggercoexisting withalpha.dagger.io/daggeris confusing. I feel its important to be able to colocate dagger .cue files with files used by other tools. Perhaps not? In order to do that CUE needs the package identifier. For the project package name to be arbitrary, we would need to configur...
Answering your points in order:
- yes via
dagger query <environment>. The question of state is still outstanding. We may still need a.daggerfolder for that purpose
OK. Could you add a section on this topic, if only to say โthis point is still outstandingโ?
- I agree a local
package daggercoexisting withalpha.dagger.io/daggeris confusing. I feel its important to be able to colocate dagger .cue files with files used by other tools. Perhaps not? In order to do that ...
Just wanted to pop in and say, i'm glad to see a proposal like this! I (still ๐ข ) haven't had much time to really grok Dagger's codebase, so don't have an informed opinion on Dagger's current architecture, but many of the basic principles here - e.g., eliminate special input paths, express as much of the logic as possible natively in CUE - are hard-won ideas i've come to over the past six months.
With polly, we gyrated for a couple weeks on what "passing in variables" should look like, unt...
Glad you weighed in @sdboyer . I'm glad to hear you echo my experience that expressing as much as possible natively in CUE is the way to go.
@winter linden and @wraith niche were on Changelog's podcast Ship It! https://changelog.com/shipit/23
In todayโs episode, Gerhard is talking to Sam Alba, Dockerโs first employee, and Solomon Hykes, the Docker co-founder. Together with Andrea Luzzardi, they are the creators of Dagger, a universal deployment engine that trades YAML for CUE, and uses Buildkit as the runtime. Why? Because we should stop rewriting the same ...
- edited proposal to speak to state management and continuing to use
.dagger/<env>/state.json - clarified the idea of a project entrypoint and listed other possibilities besides
package dagger - added section for host-dependent vs host-independent config
@shykes raises an interesting concern as it relates to the loading of CUE files as the proposal is written: It would be possible to invoke Dagger commands in a number of different ways.
- Single environment specified in the project root: may run
dagger upwithout specifying an environment - Single environment specified in the project root: may run
dagger up <environment>so long as there is a match - Multiple environments defined in the project root: must run `dagger up <envir...
๐
Welcome! If anyone has issues accessing the github repo, please let me know (you can pm your username).
<@&707664746224025688> this feels better. In fact it makes me rethink how stax does things. Curious and eager to hear feedback as you have time
Welcome @opal solar!
๐
I really like that approach but I think removing #Environment isn't a good idea.
The killer feature of [name=string]: #Environment was the possibility to dynamically create environments thanks to regexp (your example with PR was really cool btw).
If we decide to use directories as environments, how would you manage that?
Instead of removing #Environment, I think we should find a way to control how users can deploy their plans.
Dagger commands in a number of different ways.
...
What we basically want to avoid (tell me if I'm wrong) is the case of multiple environments split between directories because to deploy it we will need to jump to the directory and then tip dagger up <environment>
If I understand right you can execute all variations with dagger up ./...
Yead this is what @talentedmrjones explained in the main message
For advanced users it would be possible to do the following from the project root:
dagger up ./...and execute all variations. In this case each variation would require a unique name. It may also be possible to specify whether the variations execute sequentially or in parallel.
And I think this is not a good idea to allow that.
@TomChv can you elaborate on why you think it is not a good idea to allow the user to dagger up ./... and execute all variations?
Also @TomChv you're right! Moving dagger.#Environment keys up to the root removes the killer feature of matching dagger up <env> to a regexp. ๐คฆ I'll think through this more...
Re: Loading CUE Files:
Another option could be to always have the CUE API load from the project root no matter what directory you are in so long as you are in or below the project root so that executing dagger anywhere within a project always produces the same result (kind of like how git always finds .git at the root).
With this we could keep dagger.#Environment and the flexibility it provides, especially as it relates to regex matching.
If we load from the root with the _i...
can you elaborate on why you think it is not a good idea to allow the user to dagger up ./... and execute all variations?
I think it could lead to unexpected behavior :disappointed_relieved:
Imagine you do dagger up ./... in a project with multiple local, production and staging environments, you don't have the control over your deployment.
Also how dagger should deploy?
- Each environment are up one by one or in parallel?
- What happens if an environment fails?
I know I'm de...
@TomChv excellent points. Especially if my host is not setup or authorized to deploy certain environments. It's common for devs to be able to dagger up local but not remote cloud-based environments
@TomChv actually, in this alternate approach, with the dagger.#Environment keys were made top-level keys, there is still the name: string field which could be written as a regex like this:
name: =~"review-[a-zA-Z0-9-_]*"
And dynamic PR review environments enabled with a flag such as --name which could be used to fill that path. So from the root: dagger up ./review --name pr-toms-feature. Without the --name flag Dagger would error with No environments found
Okay that solve a problem, but I think we
Regarding version: string there have been questions regarding how this is used. I propose that this specifies the minimum Dagger version the plan is written for. Dagger will compare this field to its internal version, and return fatal error if dagger binary version is < plan version
-
I agree that we should only allow
dagger upon one environment at a time. Itโs one less thing to worry about in the design, and it doesnโt seem to be a big problem for users since we already have this restriction in place and nobody (to my knowledge) has complained about it. -
I think this variation has promise. The issue with environment naming seems solvable.
-
I donโt think this variation requires eliminating
dagger.#Environment. As a CUE developer, wouldnโt I expect to appl...
That could be useful, but feels like we could chop it off the proposal for now, in the name of scope control, and discuss later without difficulty. Wdyt?
Apologies for the notification spam everyone. But if you look closely, itโs not actually spam ๐ Each notification is for a post that would otherwise be made here. If the volume becomes too much, weโll move it to #github-feed
Also:
- In this variation, is a project just a cue module?
If anyone happens to be in the Bay Area and free tonight, Iโll be at Render Oakland. Come say hi and ask me about Dagger ๐ https://www.meetup.com/renderoak/
cc @grim dawn @fallow bloom
im there ๐๐
- I agree. Execute a single environment at a time.
- yep
- The schema for
dagger.#Environmentcan be applied to top-level keys in several different ways. That's an implementation detail to solve later. The point for now being that this pattern still allowscue evalto catch errors. Another important consideration is thatenvironments: [string]: dagger.#Environmentallows multiple environments to be defined in each cue value instance and I see a lot of room for trouble there. It se...
4. In
dagger up ./review --name pr-toms-feature./reviewwould be where to load CUE files and retrieve a single value instance (plan variation) which in this example does not define a concrete name but rather a regex pattern;pr-toms-featurewould be used tovalue.Fill()which would return a concrete value for the name (assuming the string provided matched the regex)
I understand how it would work but was wondering about terminology, and specifically user-facing terminology. I...
It's not two types of objects (plan and environment). In this alternate approach the plan variation is the environment. Which is one object. What's happening is that the plan as an incomplete value is being completed by the provided string.
I would explain it differently:
- a plan which is the CUE configuration loaded recursively from the specified directory to the project root
- a concrete value used to complete the plan's
namefield
I think it's simple enough to implement, and useful enough to authors that we should leave it. Especially considering that at this stage we're likely to change the API several times before official v1.
It's not two types of objects (plan and environment). In this alternate approach the plan variation is the environment. Which is one object. What's happening is that the plan as an incomplete value is being completed by the provided string.
I would explain it differently:
- a plan which is the CUE configuration loaded recursively from the specified directory to the project root
- a concrete value used to complete the plan's
namefield
In this scenario, wouldnโt th...
๐คฆ I misread this the first time. I would refine the explanation like this (because one thing is an object, the other thing is a string)
It defines 2 things: a CUE plan and a name for the plan
- a PLAN which is a Cue configuration loaded from the specified directory recursively to the project root
- a name for the plan to use
Each plan is its own operational context / configuration profile.
OK, I was hoping to dodge yet another debate ;) Unfortunately I disagree that we need such a field at this time, sorry.
- At the moment there is no backwards-incompatible format to support, so developers donโt actually need this field
- If in the future we do introduce a backwards-incompatible format change (which could be in a distant future or even never, depending on how good / lucky we are), we can always introduce the field then. There is no downside to waiting. No need to burden dev...
Just to be clear. My thought in this alternative is that an "environment" is not a discreet entity. There is only the plan. And variations of the plan (via sub directories) allows authors to refine plans for multiple environments
Welcome @ebon cargo!
Hello all, Guillaume Bizet from societe gรฉnรฉral.
Welcome!
Welcome @tender sedge!
<@&707664746224025688> proposal body updated according to our last discussion: https://github.com/dagger/dagger/discussions/1058
should I remove some of the comments that are no longer quite relevant?
Thereโs a โhideโ feature for that purpose, works well, go for it
Our team would be very happy with a CUE native way of expressing inputs. We do this already anyway in non-Dagger projects - we have a root env.schema.cue file that is copied to env.cue as step 1 of a setting up a dev machine. After being replaced/refined with concrete values from the developer, the schema file validates the env file since it's in the same package. Other configuration packages import this env package and use it to load in secrets etc.
To manage secrets we also have an ...
In this scenario, wouldnโt there be a state file named
.dagger/pr-toms-feature/state.json? Wouldnโt that file contain the state of an environment calledpr-toms-feature? How exactly would you define an environment?
๐ I had the same thought later actually. That regardless of where we store the state file, it really represents the environment, there for the plan that created it represents the environment. I've edited the proposal to include this.
Letโs discuss a dimension that is crucially important to me: code reuse.
A major problem we want to solve with Dagger is the lack of a high-quality ecosystem of reusable CICD code. When I write a new application in Go, Python or Typescript, I can leverage the work of thousands of people via the corresponding package ecosystem. I CICD there is no such ecosystem. Dagger has the ability to change that, and we must design with that priority in mind.
To pick a counter-example: Docker Compo...
Welcome @vast jasper!
Hi, I went through the doc (got a little late due my daytime job) and I have few question. In "General Evaluation", has anyone been working on Keeping sorted list of arcs and/or Reuse of computation. Second, would this be a good issue to pick up for performance enhancement in Cue?
Hi @undone summit,
Nice, no worries ahah, we totally understand ๐ I'm not sure to fully understand the meaning of arcs here, can you please detail ?
I was hoping to know it from y'all ๐
In following link
https://github.com/cue-lang/cue/issues/804
Under General Evaluation, the OP is writing about merging the sorted list so label matching can be done in < O(n) time? I am assuming by arc here they are talking about some kind of data structure?
@winter linden besides the ability to script around it Iโm curious what you think of the security model Deno uses https://deno.land/manual@v1.15.2/getting_started/permissions#permissions-list
Will check it out, thanks!
If we implemented an explicit permissions model we could write that in CUE rather than cli args which would make it harder to script around
(in cue as a separate, isolated, hermetic scope that does not import anything)
Seems like a good fit for platforms like Deno that have no choice but to support posix because thatโs what millions of JS developers expect. Their only choice is to bolt ACLs on top of APIs they donโt control. We have the luxury of breaking the dependency on posix because cloud engineers/SREs (our developer demographic) have been trained to expect that their pipelines will run in a distributed system, and that if they need to run posix-dependent code, they can always fire up a container.
TLDR we can do better because we have more advantageous constraints than Deno
Sorry if I'm being dense, but I don't understand how posix or a dependency on it relates to the issue of preventing reusable packages from accessing host resources, or a Dagger api that uses permissions or indirection of some kind. Can you help? I generally need more low-level mechanical examples if you can
Host access APIs
Cue has been featured all day on the first page of hacker news ๐ https://news.ycombinator.com/item?id=28915655
Welcome @sacred chasm!
@silent agate Starting a thread on buildkit resources ๐ If anyone has good resources, please share!
Welcome @oak estuary!
I'll take a look tomorrow, if you're ok with it ๐
Welcome @timid epoch!
Thanks, I did get an answer on cue channel regarding this.
it's an []* Vertex type
but I'd still need to understand the purpose of arc if I go with first performance issue (using Merge sort and matching the label in < O(n) time)
which brings me to this question, should I go with issues under General Evaluation as the first things I'd be solving? Or if you think something else would be a better issue to pick/ more easy or /important
Welcome @river rock!
Welcome Harsh!
Glad to finally have hands on Dagger ๐
do you mean on the dagger/dagger github repo? Can you elaborate on the use case you have in mind?
@wraith niche sure, I meant probably a performance improvement on cue repository (which could help dagger in some manner?) I haven't picked up any issue as of yet. But @swift inlet directed me to future roadmap of cue in performance issue. And I want to find a good first issue to start with. Does that explain your question?
CUE town hall starts in 18m! https://www.youtube.com/watch?v=GMTQcm3AwOU
We are excited to confirm Thu 21 October at 1500 UTC as the date for the first CUE community town hall!
The session will start with a project update, a high level review of the roadmap, upcoming releases, and major proposals. We will also dedicate a good portion of time to questions/topics the wider community would like to see addressed. So ple...
I just learned that you can't close the root level struct. Even though you can enforce the types for root struct keys, you cannot prevent other keys from being added. ๐ฌ
@winter linden @silent agate Marcel talks about the Value lattice in more depth here: https://www.youtube.com/watch?v=jSRXobu1jHk
In this talk, we introduce CUE, a new aspect-oriented, constraint-based configuration language that deploys a more formal approach to configuration aimed at solving many of the issues that persist with more conventional approaches. You will leave with an understanding of the CUE language, and an appreciation of how it can help mitigate the chall...
~18min
Looking at the answers to registration forms, it looks like โparity between CI and local developmentโ is a big pain point for a lot of peopleโฆ
@winter linden I like hearing that. ๐
I've seen stuff like this to attempt to alleviate it: https://github.com/nektos/act
Downloaded the full image once, 20go+ ๐คฃ
Umm... what?! That's insane.
Reminds me of openstack as an attempt to solve cross-cloud VM portability. In the end itโs just a bandaid
Actually this reminds me of Eucalyptus
Early attempt at an API-compatible open-source AWS clone
Sorry, exagerated a little. But If I remember well, I had to extend 2 times the Docker disk image size
Interesting. I hadn't heard of that. That sounds like an enormous errort.
Still rather large.
I'm not surprised.
It appears we are doing for CICD infrastructure what Docker did to app hosting infrastructure ๐
Yeah, I definitely see the parallels.
Not too surprising, given what you, @wraith niche, and @cloud canyon did at Docker. ๐
Whatโs funny is that the infrastructure water line has moved up since then
In part because of Docker and containers, Iโd say.
And systems and tools built around them.
Yes exactly. Those are infrastructure now. Same problems have moved up.
Iโm very much looking forward to building amazing, solid, and valuable tooling around making that easier with you all.
I feel like @talentedmrjones's proposal addressed the security concern of host local access by performing static analysis, preventing imported packages from accessing host resources.
As for package re-usability, I feel like that's the job of the package author. We can provide security guarantees but we cannot guarantee re-usability without collaboration. As in, a layer of indirection won't necessarily make a package reusable if it wasn't designed this way.
A package can hard...
I feel like @talentedmrjones's proposal addressed the security concern of host local access by performing static analysis, preventing imported packages from accessing host resources.
As for package re-usability, I feel like that's the job of the package author. We can provide security guarantees but we cannot guarantee re-usability without collaboration. As in, a layer of indirection won't necessarily make a package reusable if it wasn't designed this way.
A packag...
That doesnโt mean we shouldnโt take every opportunity to make it as easy as possible to write secure and portable code for Dagger. Otherwise, why bother to make any improvement to security or portability at all?
I see the indirection file as an alternative UI for achieving the same result.
I'm failing to imagine a configuration where the indirection makes a package more portable than forbidding packages to access local resources (i.e. the original proposal).
It's a trade-off in UI....
I'm failing to imagine a configuration where the indirection makes a package more portable than forbidding packages to access local resources (i.e. the original proposal).
Itโs a developer experience issue. Hereโs a trivial example:
Good snippet:
// My custom transformation pipeline
#Transform: {
// Input directory
input: dagger.#Directory
// Output directory
output: dagger.#Directory
}
Bad snippet:
// My custom transformation pipeline
#Transform...
Itโs a developer experience issue. Hereโs a trivial example:
100%. Either approaches are as secure/portable, the only difference is in DX.
Hopefully we agree that the first snippet is good, and the second is bad.
Yes
Where we disagree is on whether the โbad snippetโ should be allowed by our API at all. I say no, and you say yes.
It's a trade-off between DX and UX. Yes, it's going to be a nuisance to learn there's a field which you cannot set in packages. To compensate, we...
Thinking some more, perhaps an alternative would be to copy the buildkit API, something like this:
{
plan: #Transformation & {
input: id: "source"
output: remote: "https://github.com/aluzzardi/fork"
}
local: source: "./my-test-input"
}
However we'd end up in the same situation -- there is no scenario where it is useful for the developer to specify a value for id
Itโs a developer experience issue. Hereโs a trivial example:
100%. Either approaches are as secure/portable, the only difference is in DX.
Hopefully we agree that the first snippet is good, and the second is bad.
Yes
Where we disagree is on whether the โbad snippetโ should be allowed by our API at all. I say no, and you say yes.
It's a trade-off between DX and UX. Yes, it's going to be a nuisance to learn there's a field which you cannot set in packa...
๐ Lots of great input here!
I think I'm on to something.... hope to have something more concrete to show tomorrow or monday latest
100%. Either approaches are as secure/portable, the only difference is in DX.
I disagree, but understand why you think that: you are assuming that all solutions (with or without indirection) eventually result in all information being 1) merged in a single CUE lattice, 2) from files all living in the same git repo.
I actually think the mapping of client resources should be defined in a client-specific configuration. That configuration should not be merged in the same CUE lattice as the...
For clarity I think we need to speak in terms of a "project author" and a the "package author".
The package author is writing a package which could could be a single component such as yarn.#Package or a custom dagger.#Plan as an entire collection of resources, and this package is intended to be imported into a project.
The project author is the engineer writing a plan to deploy their application.
Package authors should generally avoid (and be prevented) from referencing host resources....
I can imagine in dynamic scenarios, especially in CI pipelines (circleci, gitlab, etc) that the contents of the sandbox scope might be dynamically generated. So maybe the sandbox scope could include json and yaml as well as cue, and even unify multiple files. Perhaps those are specified as [...string] in the plan? Or by command line flag. Or both and the CLI flag overwrites the plan
For clarity I think we need to speak in terms of a "project author" and a the "package author". The package author is writing a package which could could be a single component such as yarn.#Package or a custom dagger.#Plan as an entire collection of resources, and this package is intended to be imported into a project.
The project author is the engineer writing a plan to deploy their application.
Package authors should generally avoid (and be prevented) from referencing host r...
I don't mean to say or imply that we should determine how people break up packages. That's not at all what I'm saying. I wholeheartedly agree it should be up to them.
And I should have been more clear that I'm speaking to a persons intention and perspective more than package organization or structure. If I intend for my package to be imported then I'm authoring a package and I have to keep in mind the implications and consequences of that package's scope. If I'm writing code specific t...
We're just building abstractions on top of existing ones.
You just need to believe the previous one is already good enough ^^
Welcome @fair scaffold!
Hi everyone, I just ran brew outdated and I get a small warning:
โฏ brew outdated
Warning: Calling bottle :unneeded is deprecated! There is no replacement.
Please report this issue to the dagger/tap tap (not Homebrew/brew or Homebrew/core):
/opt/homebrew/Library/Taps/dagger/homebrew-tap/dagger.rb:9
it's just a warning, I don't think it's massively important but there it is ๐
thanks @nimble stone, we'll look into it
it was solved with the latest goreleaser, so this warning will go away with the next dagger release.
Welcome @weary mantle!
Hi
Welcome @terse tinsel!
Hi
Welcome ๐
Thanks @winter linden
Welcome @stone jay!
Hello there ๐
Welcome @blissful grove!
Hey all ๐
Thanks for the invite.
Welcome @fringe marlin!
Hi all, thanks for opening the door. Curious to poke around, that Dagger episode of the Ship It podcast rocked ๐
Thanks ๐ Lots of improvements underway, make sure to let us know if you encounter an issue - itโs likely to be fixed in the coming weeks
Hello there, I'm currently doing research to make a presentation of what is Dagger and why it's awesome and because of my young experience in IT, I would like to know if somebody can give me a feedback of what changed in your project development with Dagger to complete my own experience ?
Don't hesitate to DM me ๐
@zinc coral thatโs great!when is your presentation due? We do a lot of user interviews, we could mention your presentation and aak of theyโre willing to share some of their feedback with you. Is it for a school project, or work?
it's for my school
I don't have the date atm, I will choose one when everything will be ready
In case anyone has an opinion ๐ https://twitter.com/solomonstre/status/1455319894749155332
If you could make one problem go away in your CICD setup, what would it be? (round 1)
Welcome @wind matrix!
Welcome @oak sand!
Welcome @silent moon!
๐ - hi folks, excited to take Dagger for a spin ๐
Not actively on twitter but my vote would be for Reusable components, I appreciate the massive ecosystem of GitHub actions, but having that available in a statically typed (this is what drew me to Dagger in the first place, down with YAML configs - its already happening for IaC, look at the CDK and Pulumi), run from anywhere interface would be amazing.
Welcome @silent moon , abd appreciate the perspective ๐
Note there has been discussion of 2-way compat betwen Dagger and Github Actions
meaning that every GitHub actions author wouldn't have to re-write in Cue for us to take advantage of them using Dagger (if this happens)?
Correct you could wrap an existing GH action into a Dagger action with minimal effort. You would still write the wrapper in Cue but could be a very easy path
At least thatโs the theory
And in any case you can write Dagger actions in any language. Shell python typescript etc. Cue is the declarative wrapper that allows cross-language composition into a DAG
Welcome @raw crescent!
Welcome ๐
Welcome @quartz pumice!
Hi everyone just landed here from down under
Make yourself at home, if you get stuck or confused please let us know. The more feedback you send us, the faster we can improve Dagger and launch it into the world ๐
Hello to the person from Twitter who wants to discuss SBOMs
Feel free to ping me here or send me a pm
cc @meager stream ๐
I may be a bit slow to respond, feeling a bit sick today
Thanks @winter linden for pointing me in this direction. And hello @patent stirrup! Hope you get feeling better. Iโm interested in learning about SBOMs and where things are related to them. Iโve been experimenting/playing around with some graph database action (Neo4j) that graphs the relationships between container image layers and tags. Iโm also looking at adding nodes to represent whatโs running in our k8s clusters. By adding in SBOM nodes to the graph, Iโm interested in the ability to say โdependency X has problems, what images running in our cluster needs to be updated?โ Obviously, to do that, I need to know whatโs baked in. Iโve seen SBOMs mentioned over the years, but havenโt updated myself in a while. Soโฆ here I am! Where can I get started? What work is being done? Etc. etc.
How much time do you want to spend on this topic? I can put together a playlist of things to watch from kubecon. Alternatively, I can have a talk with you tomorrow and just fill you in on context and the spaces you want to focus on.
I need to write about this stuff, so either way this will help me too
SBOM
Welcome @final peak!
Welcome @inland smelt!
Welcome @green spire!
Welcome @last vector!
Welcome @slender orbit!
Welcome @tropic crown!
Welcome everyone!
Welcome, @final peak @inland smelt @green spire @last vector @slender orbit @tropic crown! Let us know if you have any questions, feedback, ideas, etc.
Welcome @patent yacht!
Welcome @hardy plaza!
Welcome @vast sand!
Hey everyone ๐ Thanks for the alpha invite, excited to try Dagger with my company!
FYI, now there are more active developers working on Dagger, weโre experimenting with an open audio channel to have more design discussions in the open. If you see people in #dev-audio , feel free to join. Please mute yourselves to avoid disrupting conversations. But if you do want to participate in the topic, you are welcome to. If it gets too crowded, we can always adjust the tooling (moderation etc)
Anyone else old enough to remember dial-up bulletin boards (BBS) before internet was widely available? I was a daily visitor to one throughout the 90s. It was a magical time of text-based graphics! Anywho I'm looking to use Dagger to deploy MajorBBS to EC2 so I can host a retro BBS and play some of those old multiplayer text games
You missed out!
I've heard it was a fun time. ๐
You'll have to join me for Cybertank and Trade Wars
I'd do that!
perhaps I'll host it in my closet with my gigabit fiber ๐
Get an RPi ๐
Welcome @hollow moat!
Welcome @fossil pine!
Welcome @dense shell!
Welcome @thorny juniper!
Hello, excited after hearing the ChangeLog podcast
Welcome ๐
Upon first glance, it seems similar to what Waypoint is trying achieve except its way more configurable and declarative using CUE where as Waypoint is limited to its plugins and supported features like Terraform. Am I way off?
Not too far off. One big difference with is that Waypoint is specialized deployment tool. Dagger is a framework for developing any kind of CICD pipeline.
So you can implement any deployment logic you want on top of Dagger - including invoking Waypoint itself, or replicating its features. But the opposite is not true.
๐ dagger v0.1.0-alpha.29 is out!
Release highlights:
- Support different platforms (OS / Architecture) when creating a new Environment
- Windows is now 100% on-par with MacOS / Linux (was missing support for
input dirandinput stream) - Universe: adds support for Trivy (vulnerability scanner for container images, file systems and git repositories)
- Universe: docker package can now auto-replace local containers
- Universe: supports AWS CLI v2
- Other various improvements and reliability fixes
Complete changelog: https://github.com/dagger/dagger/releases/tag/v0.1.0-alpha.28
Install & Upgrade instructions: https://docs.dagger.io/1001/install/
As usual, if you need any help or spot any bug, please let us know.
Welcome @lost prawn!
Welcome @swift barn!
Welcome @tall quiver!
Welcome @eternal rain!
Welcome everyone! (Pascal ๐)
โ ๏ธ Erratum from yesterday release: we just released dagger v0.1.0-alpha.30 to address a fix for the input socket on Windows. If you had issues trying the new release on Windows, please upgrade to this latest one. Other users will be unaffected.
Thanks @weary mantle for the bug report.
Welcome @maiden cloud!
Welcome @clear gorge!
๐บ In case you prefer videos over written docs, here is a fresh one from @silent agate walking you through the Dagger tutorial:
https://www.youtube.com/watch?v=QvyB3m9Fti0
This should give you what you need in less than 20 minutes, so you can write your own Dagger plan. If not, please don't hesitate to ask question on #help-old-do-not-post!
In this tutorial, you will learn the basics of Dagger by building a Dagger project from scratch. This simple project deploys a React application to your local machine via Docker.
More tutorials on https://dagger.io
Music by Joystock - https://www.joystock.org/
Welcome @swift barn!
Welcome @swift barn!
I gotta sayโฆ Iโve enjoyed taking Dagger for a spin.
When I first saw Solomon at DockerCon 2021 announcing Dagger, at first I didnโt quite get what Dagger was, but I also tried Docker at first a couple of months after it was announced until today. I remember the learning curve, and how it got better with time. Itโs such a massive part of my day to day, so with this new projectโฆ I was interested.
Even though there were some pain points, I find that most of that is being addressed. I saw CUE some time ago, but didnโt see how Iโd want to use it. Dagger brought CUE to life for me and now I feel itchy to migrate when Iโm using something else (YAML, Makefile, bash scripts, Helm charts!!โฆ.).
The team has been really helpful here. Iโm grateful for all your work and I love to see you guys discuss things, even though I donโt understand all of it. Canโt wait to try the new Europa, and see Dagger get better and more useful with time. Iโm looking forward to being able to adopt it company-wide. It has so much potential. ๐
What a nice way to start the day! Thanks @rain oriole ๐
Yes I agree it is reminiscent of the early days of Dockerโฆ Kind of different from everything else, so it takes time to figure out when and how to use it. Personally I can feel the picture getting clearer over the last few months.
Thanks, @rain oriole! Glad you're so excited about Dagger! And I'm glad that it brought CUE to life for you. It's... an amazing config language.
Welcome @sacred mango!
You made it @sacred mango ๐
Thanks! Took some email digging! ๐
A bit about myself for the amazing team here.
I'm Eyal Mor, a developer based out of Tel-Aviv/Israel.
Currently working for Autodesk as a SRE/DevOps/Platform/Fullstack engineer (I can't seem to choose what I like!)
I heard of dagger through a podcast, and it immediately hit the right notes!
Incidentally, my team has been developing a similar (albeit powered down) tool similar to Dagger.
Dagger has made me wonder if we can contribute our time into a community that is aiming to solve a problem which everyone is dealing with today.
Super excited to get started with dagger, this project is what i've been dreaming of for a long time ๐
Thatโs exciting! Yes I noticed that too, a lot of teams forced to develop their own in-house solutionโฆ I would be interested to learn more about your in-house tool, and of course how Dagger can help you ๐ Anything we can do to help, let us know!
Welcome @shell sparrow!
I will be happy to share details!
Let me get back with a more detailed overview, and how I think Dagger can help us (and how we can contribute to Dagger)
Any specific channel I should be checking out? Or posting in?
- Iโll DM you to schedule a video call (if thatโs OK) to ask you questions about your setup
- Anything related to your use of Dagger, you can use #general, #help-old-do-not-post, github issues, github discussions as you see fit
- In #dev we discuss the internals of Dagger, future improvements, possible contributions etc
How cool is this? ๐
$ alias dc="cue export compose.cue --out yaml | docker compose -f /dev/stdin"
$ dc up -d
Still thinking how I can integrate it with dagger. The best I can think of is to have dagger save a docker-compose.yaml on the host (warning that it's generated and shouldn't be edited), and use docker compose normally. I want to use dagger to build the image, and CUE to abstract/reuse that yaml, but I still need docker compose to run its commands.
Check out my Dockercon demo, thereโs a docker compose integration in there
You donโt need to generate anything ๐
I saw that, but you're doing it the other way around. Reading the compose into dagger. What I want is to reduce duplication in writing the same compose in lots of websites, so I want to use dagger/cue to write it instead.
The most promising workflow IMO:
- Keep docker-compose.yaml as is, developers can continue using it AND modifying it without having to learn anything new
- In your Dagger plan, load docker-compose.yaml on the fly, then use its contents to do a variety of things:
- You can call
docker-compose upfrom Dagger of course - even on the exact docker-compose.yaml, or after tweaking it on the fly - You can extract parts of the docker-compose.yaml to generate other configs, for example Kub resources, ECS manifest etc. This gives you a continuous compat bridge between docker-compose and other container deployment services
I see. Yeah usually the bottleneck is getting people to adopt new tools, and hard switch to new formats. If you donโt have that problem, then you can do it the other way around
Check out the docker.#Compose package:
https://github.com/dagger/dagger/blob/main/stdlib/docker/compose/compose.cue
Just make sure you donโt actually have that problem ๐ Getting people to switch to new tools is very hard, unless you can force them
Yeah, it's not a problem.
Then I guess the ideal workflow for you is like your alias dc, but in Dagger ๐
this is roughly:
mycompose: {
services: [... compose-y stuff ]
}
docker.#Compose & {
// cue export --out yaml equivalent
source: yaml.Marshal(mycompose)
[...]
}
How do I write that source to the host system?
oh I thought in the dc alias you were just piping it to compose, not writing it?
bah uhm
In Europa there is a context.export ๐
So you can write to local directories
coming soon โข๏ธ
err
-f raw
it's already yaml
No, I didn't know how to actually pipe until I remembered query, so piping query to docker compose is great!
I'm excited about this, it's been on my mind for a while! I've told @wraith niche today that my biggest pain is having lots of websites with lots of duplicated Dockerfile, compose.yaml and Jenkinsfile. Which is a nightmare to update when something changes. And they do!
Our developers don't actually mess with any of those files. They just use how I set them.
In your case, developers would keep using docker-compose up, just with a generater compose file instead of manually edited one. Right?
Yep
Which allows me to update those configs more easily across the board.
I'm talking over 150+ websites.
It works! dagger -e compose query source -f text | dc -f /dev/stdin --project-directory .
Easier to reuse without anchors.
Welcome @storm zinc!
Welcome @winged falcon!
@silk apex @muted gale is great! I've enjoyed having him as an advocate for CUE.
Welcome @fossil swift!
Experimenting with live coding on #dev-audio, and the new โeventsโ feature. Letโs see if itโs helpful!
Welcome @swift barn!
Should docs.dagger.io repo be available to edit? I'm working through the docs today and spotted some typos
@kindred flume The docs are all here: https://github.com/dagger/dagger/tree/main/docs
Thanks for spotting them @kindred flume !
Yes, thanks!
Happy to do a little to help FYI, that YT video walkthrough finally motivated me to dive in today.
That will make @silent agate happy ๐
@kindred flume Really glad to hear that. ๐ That will definitely make @silent agate happy. ๐
Let us know if you need any help, want to talk through Dagger or CUE or Buildkit.
I can't claim expertise on Dagger or Buildkit yet, but my CUE is pretty solid.
Thanks! I'm working through the Cue tutorial now. This tool alone is very cool. Never heard of it before the Dagger docs.
also, is the Cue Playground broken for others too, or is it just me?
not hard to run local, but the dagger docs link heavily to it
Appears to be broken to me. I'm getting a WASM error:
Uncaught (in promise) LinkError: WebAssembly.instantiate(): Import #5 module="go" function="runtime.walltime" error: function import requires a callable
ok, that's the same error i'm getting
Welcome @sterile canyon!
Ah, definitely not just me then ๐
@turbid tulip Do i need to worry about that DCO error in the docs PR?
@kindred flume I think that is necessary, yes.
If you click into the details, it has some steps you can walk through: https://github.com/dagger/dagger/pull/1154/checks?check_run_id=4269938661
<@&785926252749651978> Anything else @kindred flume should know? (this is my first time bumping into the DCO)
ok cool, i'll take care of it now
๐๐ป
all fixed up, thanks!
Welcome @cold ravine!
Welcome @bold fox!
Welcome @robust canopy!
Hi there everybody! I just got the invite to early access!
Looking forward to give it a try and contribute, to best I can! ๐
Welcome ๐
Thanks @heavy gazelle for promoting Dagger ๐ That was such a fun episode, I hope we get to record a new one together soon. Perhaps Europa release will be the excuse. We can live code something together maybe.
๐ก maybe it's time to think more deeply about everything that Buildkit offers...
"Everybody else uses Buildkit to build. Dagger is using Buildkit for much more than build."
๐ฃ @solomonstre on https://t.co/QwdjgyCjwK https://t.co/DrG2vCgArL
I really like your thinking! Europa is another great reason to do a follow-up. Once the Christmas episode with @turbid tulip & @swift inlet is in the bag, let's start on this one. January is a great month for new beginnings ๐
Welcome @meager fiber!
This is what brought me here
Welcome @stoic bay!
Welcome @sly jay!
Welcome @torpid wyvern!
Welcome @blazing lion @meager fiber @sly jay @torpid wyvern !
@winged wren I'm glad to hear that! Anything specific that you're excited about?
- Cue is brilliant, I'm definetely going to look into using it to replace a JSON DSL we use.
- Replacing my Makefiles + docker-compose + gitlab-ci dev/test/ci approach that tries to achieve "dev/ci parity".
- ... but also then merge/include the actual deployments to remote/prod/etc
a universal deployment enginewhy the "focus" on "deployment"? It seems capable/applicable to way more
Can I start trying/using it at work here? Share with teammates? How should I approach this :p
Weโve been iterating on how best to position Daggerโฆ Itโs very flexible so you canโt cover everything it can do. You need an initial focus. โdeploymentโ is one possible way to narrow it down
@winged wren check out dagger.io itโs a newer iteration of the positioning
Dagger is like lego. You stay because of the infinite possibilities. But you started because one day you saw a pirate ship in the store ๐ We need to define our pirate ship.
Yes absolutely. If you want to invite teammates, have them sign up and DM their usernames, weโll fast track
Any plans to integrate in some way with https://temporal.io ?
Thanks!
I'm not aware of any current plans. Curious, though, how you'd like an integration to work.
Then you can contribute universe.dagger.io/temporal ๐
Hm, not sure. Maybe "dagger remote execution" backed by a temporal workflow ... to combine the benefits of both tools. What for, idk yet
TBH I had never heard of temporal before, but generally speaking: if thereโs a valid use case for integrating something with Dagger, we want to make it work ๐
FYI Iโll be livecoding the upcoming Europa stdlib at 3:30PM pacific (in one hour). Bring questions and use cases, and letโs see how well they work in Europa! If it breaks, we can fix it together.
Thanks everyone for the great feedback & questions! Iโll schedule another one soon. Europa here we come!
Welcome @sterile tartan!
Welcome @swift barn!
Welcome @glacial cosmos!
Welcome @dim sandal!
Welcome @swift barn!
Welcome @dreamy plover!
Doing a livecoding & Q&A sessionon Europa release, later today: https://discord.gg/mWrVPmYE?event=917483021827993630
One topic Iโd like to address in that session is runtime parameters, and condition execution. Starting from your use cases @rain oriole @winged wren @blissful bone ๐
Thatโs 9:15 PM for me, Iโll be putting my kid to bed. Iโll join when I can.
I can relate ๐
I might be able to join ๐
Welcome @lone salmon!
๐ dagger v0.1.0-alpha.31 is out (as of Monday night)!
Release highlights:
- Add support for tcp:// DOCKER_HOST in docker.#Command, docker.#Load, docker.#Run h/t @heavy gazelle
- Add tests for http.#Wait
- The first parts of @cloud canyon's work towards our Europa release.
- runtime: support legacy Pipelines in new execution engine
- runtime: new execution engine
- runtime: support for context imports
- runtime: context: support secret environment variables
- runtime: context: support secret files
- dagger.#FS support
Complete changelog: https://github.com/dagger/dagger/releases/tag/v0.1.0-alpha.31
Install & Upgrade instructions: https://docs.dagger.io/1001/install/
As usual, if you need any help or spot any bug, please let us know.
For tomorrowโs community call weโll try porting a real-world Dagger configuration to the new Europa standard library. Featuring special guest @heavy gazelle ๐
As usual bring your ideas and questions.
I'm interested but I won't be able to attend. That's the time I pick up my kid ๐
Starting now ๐
Going for lunch. Will cleanup our notes from the community call after, thanks everyone for participating!
@winter linden Looking forward to seeing them! Curious what you uncovered with @heavy gazelle.
Thank you @winter linden, that was so good, looking forward to episode 2 in the week after next ๐
Draft PR here ๐ https://github.com/thechangelog/changelog.com/pull/401
Completely unfinished. Weโll continue tomorrow
Sweet! Iโll check it out tonight or tomorrow!
I like it! It'll be fun to get the rest of the config built. ๐
Welcome @swift barn!
Welcome @tame oxide!
Hey all, any admins here who could help? I applied for Dagger back in September and received an invite on Nov 23rd, I've only just seen it as it was in my junk box. The invite has now expired; would love to get a new one ๐ or do I need to re-apply to early access?
Hello, yes sending you a PM. I'll refresh your invite.
If anyone here does not have access to the repository or the docs yet, please ping me. I'll give you access right away.
Thinking about doing part 2 today, 1pm pacific. Anyone interested?
@winter linden ๐๐ป
@rain oriole let me know if another time works better for you
For me Iโm mostly free at 21h30/22h which is 3 pm PST.
Ok I can do both ๐ This afternoon is all Europa DX for me anyway
Community call discussion
Welcome @lilac void!
Hey, thanks for the invite. Excited to learn more about Dagger. Iโll dive into docs as soon as I have some free time
Welcome @leaden patio!
Awesome, don't hesitate to ping if you need any help
Hello ๐ How open are you to integrate vendor in there: https://github.com/dagger/dagger/tree/main/stdlib in particular would scaleway be a good fit? Do you have plan to have out of tree plugins to support vendors?
Could you also add https://github.com/Sh4d1
Et Val ?โบ๏ธ
vendors
Dagger (via GitHub Actions) just deployed https://changelog.com . The new pipeline is 2 minutes quicker than what we had previously with CircleCI. This is a summary of the entire story & code behind it: https://github.com/thechangelog/changelog.com/pull/395
Listen to @turbid tulip & @swift inlet tell us more about it next week on https://changelog.com/shipit
Also follow @winter linden's attempts to break changelog.com production: https://github.com/thechangelog/changelog.com/pull/401
Capture deps, test & assets in Dagger
Build & publish prod container image to DockerHub
Run it in a GitHub Actions - Tailscale integration + github-action
Switch to dagger &g...
A show about getting your best ideas into the world and seeing what happens. We talk about code, ops, infrastructure, and the people that make it happen.
Welcome @pine jetty!
Awesome @heavy gazelle !! What a great milestone
ty
Welcome @stray jolt!
Happy to be here and be able to test dagger ๐
Welcome @swift barn ๐
If you get stuck or have questions, donโt hesitate.
We also have a big release coming in January, with major UX improvements. All the user requests we couldnโt fit in smaller incremental releases basically
thanks
Welcome @manic heath!
looking forward to trying out Dagger this week, read the docs so far and it looks really cool and intuitive!
Welcome @naive sequoia!
๐
Welcome ๐
Welcome @knotty copper!
SPOILER: This CI/CD Lego set is ready for Christmas https://github.com/thechangelog/changelog.com/pull/395
Welcome @rigid storm!
Welcome @mystic bronze!
Welcome @snow sequoia!
๐ Hello and thanks for the invite
Welcome!
Welcome @frank frost!
Welcome @humble marten!
Welcome @ashen ice!
Welcome @cedar folio!
Welcome @sharp oracle!
Hi everyone, the whole Dagger team is taking time off the last week of the year, so we will not be as responsive. We hope you are able to take time off too. See you next year, we have a lot of excitement planned for you. First our Europa release, our largest yet! And thenโฆ launch preparations ๐
In the meantimeโฆ happy holidays !
Happy holidays! ๐ฅณ
Welcome @swift barn!
Welcome @latent mural!
Welcome @vapid stag!
happy new year to all the dagger community
looking forward to discover the europa release ๐
Happy new year!
looking forward to trying out Dagger this week, reading the docs and trying to create CI workflow to setup home cluster with all necessary deployments
Us too! Stoked for you all to get your hands on it and tell us how we can make it even better.
Welcome @sick rain!
Thanks for the invite, excited to poke around soon ๐
Welcome, @violet socket! Let us know how we can help you out!
Thanks for the invite, this week Iโm on PTO but definitely will give it a spin later, and I have plenty of docs to read through
Welcome @swift barn!
Hello everyone ๐
Thanks for the invite ๐ค
I played with CUE before and can't wait to see how you used it to make CI/local experience awesome ๐ช
Thanks ! Itโs still work in progress ๐ Big UX improvement dropping soon.
Welcome @feral herald!
Welcome @scenic sequoia!
Welcome @robust agate!
Welcome @patent juniper!
Welcome to the other side ๐
Welcome @ornate wave!
Welcome @naive skiff!
Welcome @pure holly!
Welcome @clear oriole!
Welcome @tight vigil!
hello
It's nice to see you @grand ravine - what brings you here? ๐
Hey there :)! Iโd like to try dagger ! The idea is great :)!
That sounds great! What is the first thing that you want to do with it? Happy to help ๐
Have in mind a client I wrote ..! Maybe I would start to create a ci for it !
That sounds great! Would you like us to kick it off together?
Let me read the basic documentation and start trying! Then I will ask for help ! Thanks !
Hello - just starting to read docs as @grand ravine
Thanks for the invitation ๐
๐!
Welcome @solemn schooner and @grand ravine, let us know if you need any help!
Welcome @raven mauve!
Hi everyone and thank you fro the invitation! Let's dive into the docs
Welcome, @raven mauve!
Welcome @ornate cedar!
Welcome @languid terrace!
Welcome @mild scarab!
Welcome @silent sluice!
Welcome @uneven haven!
Welcome @sour imp!
Welcome @wet wadi!
Welcome @silk temple!
Welcome @silk temple! Nice to have you here. Enjoyed your Klustered episode with @vestal creek and Thomas: https://www.youtube.com/watch?v=ysfUgYs4YYY
Welcome @slate beacon!
I found this comment insightful and, although the author is talking about build systems, I think it applies 100% to Dagger and we should take it seriously.
Considering that all build systems must keep a dependency graph internally, itโs surprising how many of them make it incredibly difficult to inspect why things are being rebuilt. I donโt really get it either, Iโve talked to a lot of people and getting feedback on how the build system is doing its task is one of the biggest complaints I see (othe...
Does Buildkit have a way to show differences between states?
That would be killer for this.
Welcome @woven laurel!
Welcome @frail latch!
Hello! Thank you for the invitation! I'm going to read the documentation to learn more ๐
Welcome @blissful gulch!
It's very nice to see you here JSP. Welcome!
Nice to see you too David. Let us know if you get stuck on anything ๐
Not directly I believe, but it does provide a full resolution map of the DAG, with topology, content-addressed ID of every edge and vertice, and per-edge event stream we can hook at will. I think caching decisions are included?
Ok. That makes sense.
With the ability to connect that back to CUE values (and from there, to Dagger engine operations) we could present something very powerful to end users..
I think the first step, though, would be to present a full picture of the DAG to end users, even without details on what was changed or executed this time. Just a static map of the DAG.
Yeah, that'd be really good.
There was a discussion in universe not long ago, about the idea of generating a standard graphviz output from a given Dagger config, to then visualize with a variety of graphviz-compatible tools and libraries
Food for though if anyone is looking for a fun side project ๐
I was noodling on similar ideas recently. Wondering if there was some useful synergy between the CUE value lattice and a graph database...
perhaps dagger graph via https://github.com/goccy/go-graphviz
One small concern I have about this is... if statements and how that might impact the DAG.
Hello - thanks for the invitation! I just finished reading the non-reference docs, which provide a very nice intro. One topic I was surprised to not see addressed is multi-node coordination - a particularly tricky concern for portable CI. Did I miss something obvious or does anyone have pointers on how Dagger will think about that?
It definitely is a tricky topic. We will add more content down the road. But there is excellent news in the meantime: we delegate this 100% to buildkit ๐ So if you can find a solution in buildkit, you solved the problem for Dagger as well
Here is an example, from the buildkit repo, of distributing buildkit jobs across multiple kubernetes nodes: https://github.com/moby/buildkit/tree/master/examples/kubernetes/consistenthash
Thanks - that helps!
Not sure if this will be useful... but seems related: https://github.com/moby/buildkit/blob/ffe2301031c8f8bfb8d5fc5034e5e509c5624913/client/llb/diff.go#L93-L108
Note: This isn't in the latest release, only on master
Welcome @surreal prism!
Hi everyone! ๐
Welcome @mossy turret!
Welcome @ionic lotus!
Welcome @swift barn!
Welcome @digital dagger!
Welcome @regal monolith!
I think my original comment that went into how/if to visualize the DAG came from, is my wish I can understand how and what I can "stick together" to get a pipeline written and that I thought CUEs value lattice or/and then the validity of the resulting DAG helps. Now, I don't know if that makes sense at all ๐ but writing the loosely YAML "stuff" often lefts me (perhaps because I haven't read the documentation) lost.
Welcome @oak valve!
Hey! Thanks for the invite. Super excited to dig into it more (and it's great seeing CUE get more usage )
this would not represent resolved state, right? it's kind of a possible/alternative DAG. I'm not that much into dagger, but I assume you have a static and "runtime" aspect regarding the resolved resulting DAG?
Welcome @swift barn!
Welcome @dark wave!
๐ dagger v0.1.0-alpha.32 is out (as of Wednesday)!
Release highlights:
- We added support for private repos for dagger mod: https://github.com/dagger/dagger/pull/1186
- Much of work since alpha-31 has been focused on building the core engine for our next major design, codenamed Europa.
- Our intent with Europa:
- Dramatically improving the developer experience and ergonomics of using Dagger, and remove some of the patterns that caused issues in configurations in the past.
- The new dagger.#Plan configuration schema is intended to simplify and consolidate inputs and outputs, secrets, and the actions that plans should take to execute CI/CD pipelines.
- The new implementation of our core types is here: https://github.com/dagger/dagger/tree/main/pkg/dagger.io
- This includes low-level primitives for defining a #Plan, filesystem states (#FS), and a number of engine tasks: https://github.com/dagger/dagger/tree/main/pkg/dagger.io/dagger/engine, including running shell commands, getting source code from git, reading and writing files, pulling and pushing containers, and building from a Dockerfile.
- We are working on a new set of universe packages that utilize these low-level types: https://github.com/dagger/dagger/tree/main/pkg/universe.dagger.io
- These are still in very active development, and some of them simply don't work yet.
- You can see examples of how the Dagger team has used Europa in our tests
- For #Plan: https://github.com/dagger/dagger/blob/main/tests/plan.bats + https://github.com/dagger/dagger/tree/main/tests/plan
- For engine Tasks: https://github.com/dagger/dagger/blob/main/tests/tasks.bats + https://github.com/dagger/dagger/tree/main/tests/tasks
- We are also in the process of converting the changelog.com dagger config (found here: https://github.com/thechangelog/changelog.com/blob/master/2021/dagger/prod_image/main.cue) to Europa, you can find our current versions here: https://github.com/dagger/dagger/tree/main/pkg/universe.dagger.io/examples/changelog.com
Complete changelog: https://github.com/dagger/dagger/releases/tag/v0.1.0-alpha.32
Install and Upgrade instructions: https://docs.dagger.io/1001/install/
As usual, if you need any help or spot any bug, please let us know.
Welcome @light quiver!
Welcome @swift barn!
Welcome @scenic fiber!
Welcome @whole apex!
For anyone interested in this kind of thing: weโre discussing Daggerโs approach to open-source licensing, branding, and how to build a great community AND business. https://twitter.com/solomonstre/status/1483857267011190787
This is the model we chose for https://t.co/8fo2WhpPce. Red Hat proved that by restricting how your trademark is used, you can build a huge open-source business and brand without restricting how your software is used. You just need to design your business model accordingly :) https://t.co/XtmlRiM9UI
I suspect that we will get more questions on this topic as we get closer to launch. We have very specific opinions on this topic, and are happy to share them anytime ๐
Welcome @slender star!
Welcome @zinc mirage!
Welcome @spark stag!
Welcome @steep shoal!
Welcome @unreal flower!
Welcome @flint lintel!
Welcome @haughty lark!
Hi I am trying to learn about how to write custom CUE templates in Dagger
Could anyone tell me what this means?
#Input: {
@dagger(input)
_
...
}
#Output: {
@dagger(output)
_
...
}
I think ... already represents an open struct. Why does it have _ here?
_ allows it to match non-struct values
These definitions #Input and #Output are kind of special cases, they were intended as convenience wrappers for @dagger() attributes (annotation, same as Go tags). So that you could set those annotations without learning the extra syntax for attributes. Weโre moving away from using CUE attributes, so these definitions will be deprecated in the next release.
If you can share more about your use case, Iโm happy to help you find more useful code examples
Welcome @swift barn!
Thanks @winter linden !
My use case is like this:
- I am trying to parse a app.yaml as a values file: https://github.com/hongchaodeng/ai-demo/blob/main/app.yaml
- It will translate into some CUE structs that generates yaml files
Welcome @quartz arch!
Welcome @royal drum!
Welcome @frank sigil!
Welcome @violet flicker!
Hey, folks ๐๐ฝ
Hope youโre having an awesome Friday! Not sure if this is the right channel for intros/hellos. My name is Derek from South Africa. My colleague told me about Dagger and immediately it sounded like something Iโd want us to use.
Iโm on our companyโs security committee and platform team and Iโm hoping that if I can be an early contributor this will help me convince the teams to use Dagger once itโs production ready. I donโt have any experience in Go but Iโm happy to learn. If thereโs any bugs that need help or small features, etc. Iโm happy to help out ๐ Also more than happy to help out with documentation and other important stuff that people donโt always like doing but is necessary
Welcome @shut jay!
Welcome, @violet flicker! We'd love to have your help. Lots to do. ๐
There are a number of issues here: https://github.com/dagger/dagger/issues/
We're currently focused on the next milestone: https://github.com/dagger/dagger/milestone/5
And the issues in the Europa milestone will follow that: https://github.com/dagger/dagger/milestone/4
I'm not sure if we've done a good job of splitting out good starter issues, but we could probably find some stuff that would be good starters. Another thing you could do is begin to work on packages that utilize dagger that would be useful at your work. Hopefully that would help you out and it would give us feedback to make dagger even better.
Awesome! Thanks! I will check it out this weekend and see what I can do
Sounds great! Feel free to ping us and ask about any of it.
@violet flicker welcome! I think the biggest help is in implementing dagger in real world scenarios and providing feedback on bugs or usability (DX) issues
Welcome @swift barn!
It looks like dagger relies on docker to run? What if I want to run dagger as a k8s job or pod?
Everything is run in buildkit - same backend as a docker build
So any valid buildkit installation is also a valid Dagger installation. Including running buildkit on top of kubernetes ๐
For example: https://github.com/estesp/buildkit-cluster-example
You can configure dagger to use any buildkit daemon. By default, it will bootstrap a buildkit installation automatically, on top of a Docker engine. So Docker is a requirement for easy auto-install of buildkit; but not for running Dagger itself
Why does it run on buildkit? In my case I just want to use it to render a couple of yaml files and orchestrate applying order..
Nothing to do with buildkit
Well it has nothing to do with Linux either, but youโre still running it on Linux probably ๐
Joking aside: we use buildkit as a general-purpose VM. It allows you to run any program as a DAG of nodes running in parallel, instead of a sequential list of operations. Itโs a great fit for CICD pipelines in particular.
I see. The buildkit is the workflow manager
Yes. Using buildkit gives you lots of powerful features for free. For example every operation are automatically cached if poosible, so you get lots of performance optimization out of the box.
Every input and output is content-addressed, so you can reliably inspect what changed from one run to the next; get a reliable audit trail, etc
Nice!
One more question. Is there any way for Dagger to parse yaml files for inputs?
Yes CUE supports yaml natively. You can do it either statically with cue import (one time conversion of your yaml file to a cue file), or at runtime with something like:
import (
โencoding/yamlโ
)
rawYAML: string
data: yaml.Unmarshal(rawYAML)
// Enforce a schema
data: {
hello: string
foo: int
}
Then the question is: how do you want to pass the yaml file to Dagger?
- Do you want to pass the raw contents as a string?
- Do you want to pass a directory, and have Dagger open the file itself?
- Something else?
But you can pass either string inputs, or directory inputs
I want to take it like dagger input -f app.yaml
Right.
So in my example below, you can just mark rawYAML as an input, with rawYAML: string & dagger.#Input
Then dagger input text rawYAML -f app.yaml
Oh, I forgot about dagger input yaml. If you use that, then your configuration gets simpler:
data: {
hello: string
foo: int
}
Then dagger input yaml data -f app.yaml
Then the yaml file is implicitely unmarshaled, and merged at the key data. If the contents of the file match the structure of your CUE value, then the merge succeeds
Awesome! That's what I am looking for ๐
@cloud canyon
Nice talking to you. Here is the issue describing the use case I just mentioned:
https://github.com/dagger/dagger/issues/1481
@haughty lark Thank you! Nice talking to you as well, will look into it
How can I get the output data of a struct? I only find dagger output list but that only shows struct
What does op.#Load mean?
#up: [
op.#Load & {
from: kubernetes.#Kubectl
},
op.#WriteFile & {
dest: "/kubeconfig"
content: TestCluster.kubeconfig
},
Welcome @swift barn!
Welcome @vital brook!
๐ dagger v0.1.0 is out!
Important Notes
This is our first minor release. If you are an early Dagger adopter, we recommend that you lock your pipelines to this version, since we intend to start shipping more meaningful (and potentially breaking) changes in 0.2.0 pre-releases, starting with 0.2.0-alpha.1.
Based on all your feedback, we have been working on a simpler and more intuitive configuration schema which we intend to ship as 0.2.0. Internally, we refer to this as Europa. You see our work on this new schema in dagger.io and universe.dagger.io
Release highlights:
- engine.#Source- https://github.com/dagger/dagger/pull/1312
- This allows Dagger packages to use shell scripts, etc. from the filesystem, rather than needing to embed them in CUE (think go:embed for Dagger)
- rename engine.#Build to engine.#Dockerfile - https://github.com/dagger/dagger/pull/1404
- We started implementing Europa-native packages
- alpine package - https://github.com/dagger/dagger/pull/1449
- netlify package - https://github.com/dagger/dagger/pull/1462
- Add engine.#TransformSecret - https://github.com/dagger/dagger/pull/1435
- This allows secrets to be transformed using CUE functions, allowing for unmarshalling of YAML/JSON, stripping of newlines, etc.
- docker.#Build - Fixed up some issues related to CUE structural cycles and definitions.
- nested #Build - https://github.com/dagger/dagger/pull/1468
- This is working better, but we still have some issues we need to dig into and understand better for deeply nested docker.#Build structs.
- docker.#Run - https://github.com/dagger/dagger/pull/1438
- Updated the struct, so that it can be used in docker.#Build
- Fix missing auth in docker.#Push - https://github.com/dagger/dagger/pull/1448
- Re-implement docker registry parsing - https://github.com/dagger/dagger/pull/1454
- Allow hidden Tasks - https://github.com/dagger/dagger/pull/1403
- This allows package authors to hide tasks within a package.
- Port docker.#Copy to hidden fields - https://github.com/dagger/dagger/pull/1410
- Port engine.#Subdir to hidden fields - https://github.com/dagger/dagger/pull/1406
- Support for partially running a DAG - https://github.com/dagger/dagger/pull/1302
- @hoary spoke cleaned up git repository management - https://github.com/dagger/dagger/pull/1431
- Regular weekly releases h/t @heavy gazelle - https://github.com/dagger/dagger/pull/1372
Complete changelog: https://github.com/dagger/dagger/releases/tag/v0.1.0
Install and Upgrade instructions: https://docs.dagger.io/1001/install/
As usual, if you need any help or spot any bug, please let us know.
================
Also!
๐ dagger v0.2.0-alpha.1 is out!
Important Notes
This release is identical to the v0.1.0 release, it is meant to signal potentially breaking changes as we work towards the Europa release.
Complete changelog: https://github.com/dagger/dagger/releases/tag/v0.2.0-alpha.1
Install and Upgrade instructions: https://docs.dagger.io/1001/install/
As usual, if you need any help or spot any bug, please let us know.
dagger v0.1.0 just pushed changelog.com into production in 72s. The non-Dagger, CircleCI equivalent, took 240s:
๐ฅ
Welcome @timber ermine!
Welcome @thorn cedar!
Welcome @dull widget!
Welcome @swift barn!
Welcome @swift barn!
Welcome @fringe gale!
Welcome @glossy cave!
Welcome @swift barn!
Welcome @barren axle!
Hey folks! I'm tazjin from nixery.dev, tvl.fyi and some other stuff. @heavy gazelle invited me here after some followup discussions we had after recording https://changelog.com/shipit/37
I'm interested in contrasting Dagger with Nix.
Vincent Ambo โthe person behind nixery.dev, tvl.fyi, and a former Google engineerโ shares his take on monorepos, Nix, and fully declarative systems without any Flux, Argo or Kubernetes. While the tooling is impressive, itโs the principles behind it that captivated Gerhardโs imagination. Vincent has a rather interesting...
Welcome @swift barn!
Welcome @safe burrow!
Hey! It's great having you here, welcome ๐๐ป I'm looking forward to your thoughts, as will @turbid tulip @silent agate @swift inlet @wispy tapir I'm sure of it ๐
@heavy gazelle Thanks! Actually going to dive right in because I came up with a complicated question I didn't ask you yet. Question is long, but I'll try to put a TL;DR at the end ๐
There is a concept in some systems about extending a computation graph from within. For example in the gg paper (good summary: https://buttondown.email/nelhage/archive/papers-i-love-gg/ ; the important section is "The compute IR"), a step that models some kind of computation can "return" a "primitive value" (e.g. bytes on disk after running some build command) or it can return another (list of) step(s) to run.
This concept is pretty powerful. Off the top of my head, here are some examples:
-
Nix has this, we call it "import from derivation". It means running something in Nix that generates more Nix code and then importing it into the same execution graph. We use this in TVL as part of our Nix build system for Go (https://code.tvl.fyi/about/nix/buildGo) to have Nix first fetch third-party deps, then run an analysis tool on them, and then import the output of that analysis tool to generate the build plan for the dependency.
-
Google's CI system allows checks to return more checks to run. For example, this lets you write a check which analyses the kinds of files included in your change and generate more checks to run based on that (e.g. language-specific linters).
-
Buildkite has a feature for uploading more build steps from within a build step (https://buildkite.com/docs/agent/v3/cli-pipeline). We use this in our build pipeline generation (https://cs.tvl.fyi/depot/-/tree/nix/buildkite) to go from a pipeline with a single initial step to our fully dynamic CI (e.g. https://buildkite.com/tvl/depot/builds/12075)
Is there an equivalent in Dagger and what does it look like?
(TL;DR: Can a Dagger op (not sure about the term?) dynamically output more ops to run?)
The short version is that it can't currently do that. There are a few limitations in cue/flow that make that difficult (we can't currently change the evaluation tree to add nodes/tasks dynamically). But I'd say that is more of a current limitation than a fundamental limitation. I've been digging into that code base and I'd say it is something we can likely do in the future.
All of that said, I'm curious about how you would imagine doing that. What sorts of operations would you want to have that would add additional steps? I like your example of language-specific linters. Do you have you any thoughts about the interface for that?
In the case of the gg paper (great paper btw :), if I remember correctly, there are use cases specific to the compile/build use case. For example, dynamically scanning for dependencies between files in a large codebase.
@winter linden yeah, that's a good case! For us the key insight is that this applies at multiple different levels. We're interested in finding a good solution for distributing the graph of our CI builds (which is dynamically generated; adding a new project in our monorepo only consists of adding the source files for the project - the rest is "discovered"). Right now our solution is specific to Buildkite, because they have this feature at the right level.
I'm thinking about the idea of Dagger as "CI-system independent CI definition", in which case we'd likely "compile" our Nix evaluation graph into something Dagger can consume. We're doing this outside of Nix itself because of two reasons:
a) we have steps that are not "pure" (e.g. integration tests), which conflict with Nix's model
b) Nix itself is (currently) not very good at distributing to e.g. multiple separate build hosts - in Buildkite we can "model" that using their build agents
It's also interesting because we have customers that use our setup who are currently tied to Buildkite if they want their CI to work the same way, but it would be nice to have an abstraction level there that makes this possible on ~any CI system without losing too much of the UX we have right now
That sounds like a great fit for Dagger and we would love to help make it happen ๐
One unfair advantage of Dagger is that we rely on buildkit for the heavy lifting. 2 major benefits in this case:
-
Compatibility with the container ecosystem without the worst of its baggage (buildkit adds the useful constraints of the DAG model compared to raw docker engine)
-
We can leverage buildkit infrastructure. Clustering, storage, multi-arch nodes, caching backend.. if someone did it for buildkit it will work out of the box for Dagger
Buildkit is curiously the most opaque component of this for me. Cue and the DAG engine make sense right away.
I don't fully understand how Buildkit interfaces with tools that build container images on their own. In Nixery for example I have a completely custom builder and layering logic with close to optimal content-based caching (described in the talk https://www.youtube.com/watch?v=pOI9H4oeXqA or in text here: https://tazj.in/blog/nixery-layers).
My vague feeling is that Nixery should probably "compile to" this LLB format when running standalone and not as a registry.
A couple more hours in each day would be useful ๐
Buildkit takes over the entire build DAG. If you were to integrate Nixery with it, it would be kind of like moving some of your internal data structures to Redis (if that makes sense). Itโs the same functionality you already have (build and layering logic, content-based caching etc) but packaged in its own daemon with its own API and infrastructure.
In practice Nixery would 1) compile LLB and 2) probably submit them on the fly to the buildkit daemon to be resolved. It theory you can decouple those two steps (llb can be serialized to a file) but I donโt know anyone who actually uses that pattern. Perhaps something to be explored
Intuitively the LLB serialisation would make sense in the Nix case, since then we'd get caching for that for free. Not sure how much that is worth though unless the closure of image contents is humongous. Regardless of that, this might be interesting to experiment with.
On the other topic, I think a first sketch could be actually generating the Cue files from Nix (a bit dirty, but could work as a POC) and then invoking Dagger on the generated files.
Unless Nixeryโs current build & caching logic is broken or you were planning major refactoring anywayโฆ Personally I would just leave it the way it is. Bolting in buildkit may not be worth the effort. I could be wrong.
On generating the Cue files from Nix. Thatโs a really interesting idea ๐
The main Nixery use-case is the ad-hoc registry at the moment (spitting out images based on the image name), but there are some people that would like to use the same build logic "standalone". I think for that second use-case Buildkit may be interesting. Not super high priority atm though ...
I was thinking re: generating Cue - does the Cue code evaluate to some data structure that is then processed, or is there tighter integration with the evaluation? In the former case, it might be easier to output that data structure directly from Nix code instead
Iโm not sure what your inputs are, but if itโs possible, outputting JSON would be cleaner
Nix -> JSON -> CUE
- Execute a nix-specific tool that generates json
- Execute a Dagger configuration that loads the json
For CUE, the data structure is CUE. The evaluator behind the scenes does translate it into an abstract data type, but it's all defined as golang data structures (and, as such, not available to an end user).
Okay, so it's not like cue -> ?? proto ?? -> dagger, but more direct?
the JSON generation would be very easy - that's what we do right now for Buildkite. Hmmhmm
We're using an evaluation engine in CUE called flow, which allows tasks to be defined by CUE values (typically a field), which progressively concretizes the CUE value lattice.
So, the output from a task becomes concrete, which allows another task to start, etc. in a DAG.
nix+dagger
Welcome @lost bone!
Welcome @coral wedge!
Hi happy to join ๐
Welcome @tired robin!
Welcome @twin scaffold!
Welcome @compact magnet!
Hey All!
Welcome @rustic shard!
Welcome @sonic patio!
Welcome @blazing moth!
For those of you who use Twitterโฆ Dagger now has a Twitter account ๐ https://twitter.com/dagger_io
A portable devkit for CI/CD pipelines, by the creators of Docker. https://dagger.io
11
11
Goal:
Implement a system that allows deployment of multiple services to a cluster in a micro-service / service-oriented architecture. There are a bunch of separate services running together to make a cohesive whole. Every service is an app in and of itself and it needs to fulfill the 12-factor app principles.
Build and run server could be completely separate, meaning - the build can happens on one location, while deployment or running the service can happen on another, completely separate location.
Only the build server requires access to the source code as input. The job of the build system is to produce all the needed artifacts for going to production. These artifacts include the containers of the images, the manifests for the cluster - maybe even the description of the infrastructure (as terraform source code maybe?) required to completely run it?
The deployment system takes as input the artifact from the build system and runs it - it spins up infra as needed, applies the manifests to the cluster etc.
Is this a crazy idea? If yes, tell me why? If it's not so crazy - can dagger do this?
Iโm sure on one point, itโs definitely possible with dagger ๐
You should check our Kubernetes tutorial, itโs similar to your use case but with one service, but thanks cue, itโs not a big deal to do something like that on a micro service infrastructure ๐
the key point here is the k8s manifests and the infra descriptions being part of the built artifact
conceptually this is like a golden image on steroids or something
You can generate your k8s manifests directly from dagger, we also wrote a #Kustomize definition to apply kustomization on already existing yaml, this way you can dynamically update your manifest with the image tag you built previously and so on ๐
Imagine this use-case: a developer is working on a feature for some service x but in order to implement said feature they need to add new infrastructure. Say for example they need to start using a redis or mongo database where previously they didn't. Now they write code that connects to redis into a new branch on github, they test it locally (by providing the connection params to localhost via env variables) but they now want to deploy this to a staging environment in the cloud. I want them to be able to push terraform code, app code and k8s yaml files all on the same branch and have a deployment ready in the cloud.
Basically gitops but not only limited to k8s (like flux or argocd would be) but k8s + infra that sits outside of k8s
With the twist that a build stage happens only once per commit and produces a complete deployable artifact of that commit. If you lost the entire git history and source code but still had this artifact you could deploy it to production
With dagger, you can run any kind of commands, from a simple bash script to just anything you want, that is not limited to k8s or anything.
Everything that can be run in a container should work in Dagger.
So what I would do is create a dagger configuration to build my project -> push it to a remote registry, this way even if you lost the source code, you still have the working image in the registry.
And then from that build, I would update the k8s yaml (still from dagger) to use the latest image build and indeed we have a terraform package to apply terraform configuration so I would just pass it as input to deploy and use your package to apply it.
This way the developper can just update the terraform code and that's it.
This is how I see it, maybe @heavy gazelle can add more context or share his experience to confirm my words
You can also create dependency between task, so you can build -> push -> update yaml & deploy infra
but that all happens as part of one process that combines build + deploy, right?
what if I want to build on monday, but deploy what I built on tuesday?
I guess I could rephrase this
Ohhhh okay I see
A methodology for building modern, scalable, maintainable software-as-a-service apps.
I want the 12 factor app separation of build release run but want it to include infra too
I'm not sure it's available for now but we are working on the possibility to run only one part of the dag, so that should be possible
So you could run the build part on monday and the deploy part on tuesday ๐
Thank you for the link!
In my opinion, if it's possible to run a part of the dag, it will be easy to match your need, we are saving outputs (for example the image sha) in a JSON so we could reuse it during deployment
so what I'm thinking about is roughly -> a BUILD is a complete specification of what an application and the infra it needs to run in a point in time. So then an imaginary release process could take as input this build artifact along with any enviroment variables it needs plus things like infra state files to apply this to and presto you got a release
you could say it would enable time travel releases
that sounds promising!
would it be that crazy of an idea to have as build output not just the image shas but also the IaC source describing the infra they need to run on?
so the build is a function of source code with some amalgam as output
build(source) -> artifact
and then release/run is a function of that artifact plus related input to a real-world deployment
run(artifact, config, infraState) -> thing is live and running
I didn't get enough sleep last night so I could be rambling semi-coherently ๐
If it's an output of a definition, that's definitely possible, there is an issue about that : https://github.com/dagger/dagger/issues/1317
And it has been merged here : https://github.com/dagger/dagger/pull/1528
It's okay, I'm not sleeping well too ๐คฃ
I think you should book a call with the Dagger team to talk about this, we would be happy to help you ๐
so the output could literally be a zip file with terraform code in it that a run phase could point terraform apply to? along with kubectl apply etc.
would be happy to book a call!
In theory it's possible, I've never output a zip file because that feature is new and I think it only supports string for now, but with some change, we could output zip
I just want a sanity check first - does this thing that I'm thinking about make sense to do at all? Do you see any major issues with this approach?
I'm pinging you back with a calendly link from one of the team later
IMO that make sense, split the building process from the deployment isn't a bad idea and it improve the flexibility of your infrastructure, versioning etc... so yeah
I think other member of the team should give their opinion, it will maybe be different from mine
@umbral glacier You can also run different plans, one for build and another for deploy, just reference the .cue file with the plan in the CLI. As for outputting, with outputs: directories, you can save any #FS into your local disk, so that includes .zip files or any other file that's produced using a task.
One neat thing you could do with an approach like that is the following scenario:
You have your app running in production. It is a nodejs backend that connects to a postgresql database and runs inside a k8s cluster. The code for your app is all the javascript application source code, the terraform source code that describes an EKS cluster, an RDS instance and the k8s yaml files that describe yours pods and whatnots.
Now, you want to add some async work capabilities and you add in the popular bullmq package for giving you queues and workers etc. But for that to work you need to point it to a redis instance. So you add a redis instance definition inside your terraform source code. You also need to add another pod that runs the workers connecting to redis instance so you make the changes to your manifests by adding the required yml files as well. Now the PR for adding this work is complete. You push it up. A CI pipeline finishes the build phase and produces your artifact. You now have the following options:
-
Take this artifact and apply it to your existing staging or even production environment. The run phase upon receiving it will run terraform apply and spin up a new redis cluster for you to use, will add a new pod into your running cluster and update all the others. You have now UPGRADED this environment to have this feature.
-
You can also take this artifact and apply to a brand new environment that doesn't yet exist. Say you give it an empty infra state file. Now the run phase does terraform apply but it notices that it needs to create not just a redis instance, it needs to create also an RDS instance, an EKS cluster etc. You have now spun up a completely new environment with this feature.
Why choose? You could do #2 to test things out first and if satisfied pull the trigger on #1. Or you could even do #2 multiple times for n copies of your complete app (of course they would all get random domains or some other way to differentiate them)
Sure! You can have tweaks in your plans for dev, staging and prod. Either different plans that share definitions, or by feature flags using inputs: params, or maybe with partial dags (not ready).
what is a partial dag?
It enables you to run only part of your plan.
what is the envisioned use case for partial dags? What i'm describing could also be implemented with different plans right?
It depends how much different the plans are. You could have, at the root of your plan's actions, keys for your environments (e.g., dev, staging, prod) and run partially the one you want, instead of the whole plan.
If they're similar apart from a few configs, you can set that in inputs.
If they're pretty different (dev vs prod maybe), I would rather have different plans.
See I don't want hardcoded environments. I will have as many environments as the number of times I applied the run/release of a build
I guess run phase would also need as output something that a destroy phase could take as input to clean the whole thing up
By environment I mean type of configs, not instance of that config.
oh ok, gotcha
In dev you could be running docker compose, and in prod kubernetes.
ok, got it - what would be the difference between staging and production in that example? staging would have smaller instance sizes or something like that?
You tell me. That depends. It could just be the target cluster, which is a simple setting.
ah but IMO the target cluster should be an input of the run phase
But your terraform configs are different between those?
no, they wouldn't be in this case
Or is it just the difference of using something that's there (prod) vs something new everytime (staging)
Yep, you can have simple settings in your CUE to trigger one behavior vs another in your plan.
I like the thought that you put into this. While I have read the rest of the comments, I am going to reply to your first one. Happy to talk more.
The short answer is no, it is not a crazy idea. Yes, Dagger can do this. There's more โคต
We run a Phoenix app on Kubernetes. Dagger runs inside GitHub Actions.
The pipeline stops when it publishes the resulting container image to Docker Hub.
In Kubernetes, we run a reconciler - https://keel.sh - that triggers deployment updates when there is an update to this image.
In your case, I think that you would want to replace keel.sh with Dagger, and run another pipeline with its own set of rules.
Having a seam between build & deploy is a good idea in my opinion. The / in CI/CD is important, and some people respect it.
While it's OK for a single pipeline to do it all, I understand why you don't want that - I am doing the same thing.
I am also thinking about replacing keel.sh with something else, and while I would want to do it with Dagger, there are a few issues which are not yet solved.
If you decide to use ArgoCD or Flux for K8s, and integrate with Crossplane Terrajet for the Terraform part, I would totally understand that. I partially did that 2 months ago, and while I am moving towards Dagger, I don't have a proven solution to share just yet ๐
I like your thinking @umbral glacier and would be curious to learn more about your use case. A repository to look at would be great.
More context:
That's awesome @heavy gazelle . I will dig into this a little later. Glad to see I'm not completely rambling crazy thoughts. Was surprised that this kind of practice is so rare or almost non-existent. I was thinking I had to be missing something
It's more common among the high-performing teams, which are at the more extreme end of the scale of CI/CD. We most certainly hope that encoding these practices within Dagger will help others to benefit from this approach more.
I like your thinking @umbral glacier and would be curious to learn more about your use case. A repository to look at would be great.
@heavy gazelle I am actually in the process of setting up a CI/CD pipeline for an older system that had none previously. The CI part is done and it stops when container images get published to the registry. The other part, CD, is just getting started and I am a little overwhelmed with all of the options since I don't have much experience in the space and it's my first time setting something like this up. All of this to say - not much of a repository to look at right now but I will definitely try to circle back once I have something
I understand. I'm a big fan of taking small steps towards better. It helps with the getting overwhelmed part, and focusing more on the fun, exploratory side of it. We now know the direction that you are going towards, it sounds good to me, and the next step is to look at the particulars via some code. Leaving it with you ๐๐ป
Welcome @worn lichen!
Welcome @snow bloom!
Welcome @scarlet crow!
Welcome @silk carbon!
If anyone wants to run Europa on Circle via an Orb, I've made this:https://github.com/logicalhq/dagger-orb
(Please note it's a private orb, so you'll have to fork the repo if you want to use it in your own org)
Wow nice! Thank you @surreal echo !
Welcome @nova robin!
Welcome @cosmic pawn!
Hi guys
Glad to join this mind-blowing project and this growing community ๐
I'm so excited!
Welcome @coral wedge and thank you for the kind words!
Yay, https://twitter.com/dagger_io just broke 50 followers ๐ Small beginnings
A portable devkit for CI/CD pipelines, by the creators of Docker. Launching early 2022... https://dagger.io
14
50
Welcome @earnest ember!
I have made a demo based on dagger: https://github.com/hongchaodeng/ai-demo
Is there any community meeting that I can join and share it?
Hi ๐
Awesome news ๐ฅ
We have one tonight aimed on another use case, but I'm sure you can jump and show us what you did ๐
Letโs schedule another one dedicated to your demo @haughty lark . Tomorrow would be too tight IMO. Can you send me your availabilities for next week by DM? Weโll figure out scheduling. Looking forward to seeing it!
If you're watching the live-coding session: use this thread to participate ๐
Welcome @placid grove!
Welcome @real garden!
100 followers ๐ฅณ
I love that the numbers are so small ๐ Itโs way more fun going from 0 to 100 than from 1000 to 10000 (but that will be fun too)
Welcome @swift barn!
Welcome @fierce harbor!
Hi all, I got the email to allow early access to dagger but when I go to github I get a 404
any ideas?
Hi, there may have been an issue with our bot. I unfortunately don't have the access to check it out ๐
It will be resolved by Monday for sure, thanks for telling us ๐
It didnt work when I originally got the invite either ... I think it might be more than a restart ... no rush of course ๐
Give me your GitHub username, I can probably fix it manually
@fierce harbor ok, go to https://github.com/dagger/dagger , you should see the invite pending. Once accepted, the links from the welcome email (docs) should work, let us know
working now! thanks @wraith niche and @swift inlet
Welcome @gloomy prawn!
Welcome @leaden fiber!
Welcome @green bramble!
Welcome @pale fossil!
hey @wraith niche , can you resend my invite? it's expired. GH username is benmoss.
Done! Go to https://github.com/dagger/dagger/ - you should see it. docs.dagger.io should also work now.
Hi DevOps Pros, I am trying to understand more about the world of devops and would love to learn more about your experiences. If you are passionate about devops and would like to share your knowledge with someone new to the subject, I would like to schedule a quick call with your to discuss the main challenges and problems you are facing.
This is for my own exploration purposes on devOps processes, and on dagger.io, although I will likely share any interesting insights I gain with the dagger folks.
What is in it for you? Well, 30 minutes to brag about your work, and make a new connection, just for the heck of it. ๐
DM me if you have the time.
Welcome @halcyon vault!
Welcome @mental peak!
Welcome @random crag!
Welcome @tribal arch!
Welcome @glacial flame!
Welcome @sharp marsh!
Welcome @prisma sparrow!
Welcome @bitter skiff!
Welcome @lofty dagger!
200 ๐
FYI, I implement KubeVela on client side using Dagger: https://github.com/hongchaodeng/vela-dagger
Welcome @wary cave!
This is fantastic. I think we could probably make this into an official package in Dagger Universe, so anyone could import universe.dagger.io/kubevela and get started with kubevela in a few minutes. Would you be interested in contributing that?
Welcome @abstract arch!
Welcome @zenith wind!
Hey there @zenith wind good to see you here ๐
We're looking for pilots that would use dagger to deploy AWS infrastructure. Please DM me directly. I will personally help with your implementation of dagger (europa release)
Welcome @wet locust!
Of course! It's still early. Let me chat with @swift inlet first ๐
FYI we'll be discussing design blockers for the 0.2 release in 40mn : https://discord.gg/GRRVxC48?event=946464302259376208
Welcome @eternal ocean!
Welcome @marble vapor!
Welcome @lost egret!
Welcome @shut silo!
Welcome @neon warren!
Welcome @swift barn!
Welcome @soft lichen!
Welcome @hybrid gorge!
hey there, thanks for the invitation!
Welcome @sage prism!
Hola everyone! This is one very interesting project and thanks for the invite
Nice to have you here, @sage prism!
Welcome @regal otter!
Welcome ๐
Welcome @pseudo stream!
Thanks!
Welcome @hearty kestrel!
Hello, thanks for the invite!
Welcome ๐
Welcome @tepid horizon!
Welcome @clear tiger!
Welcome @fresh dagger!
Welcome @fair plover!
Welcome @bitter oak!
Hi @everyone. Here it is, finally... 0.2.0-beta.1. The first beta release of Dagger 0.2, codename "Europa"!
In addition to a new version of the dagger CLI, it also features a new website, and new docs (still work in progress). Check it out at https://beta.dagger.io
Dagger 0.2 includes a major overhaul of our developer experience. It is more powerful, and simpler to use, than 0.1... But it's also incompatible! If you have a Dagger 0.1 plan, you will need to migrate it manually, but don't worry, we will help. Ping us here or open an issue, and we will guide you through the process.
Thanks and please send us feedback so we can keep improving!
One more note: this release is special because it kicks off our countdown to launch ๐ Once Dagger 0.2.0 is officially finished... We will open the community and source code to everyone. Finally!
Looking forward to showing dagger to more people
Looking forward to the new features!!
Congrats Dagger team!
Do we have a way to integrate with GCP workflows?
Two areas: 1. dagger could execute a workflow. 2. Dagger could possibly run in a workflow (need to validate that this is possible)
Hi ๐
We would definitely want that ! ๐ It's currently not the case. Can you make an issue out-of-it, to keep track of your finding (2) especially + (1), the spec that you envision for the package. We had a gcp integration in the past, so (1) shall totally be possible. We may take some parts of the previous gpc integration to integrate to this new version
Sure, will do!
Welcome @slow mural!
We have officially released 0.2.0 ๐ Look in your inbox for a detailed release post. Happy testing everyone! Thank you for your support!
Welcome @west frost!
Welcome @ripe crag!
Welcome @jovial trout!
Well done guys.
Welcome @blazing horizon!
Welcome @drowsy briar!
Thanks Lionel!
Welcome @loud glade!
Helllooo all, especially @winter linden @drifting crown ๐
Yay you made it! Sorry about the glitch
Hello everyone
Happy to be here!!
Hello ๐ Happy to be here too ๐
Let's see if I can finally get my head around dagger ๐
Let us know if we can help!
Welcome @civic tinsel!
Welcome @boreal fable!
Congrats on shipping dagger 0.2! What a giant payload!
Welcome @shut shore!
Welcome @swift barn!
Welcome @sullen spear!
Welcome @humble pasture!
๐ Howdy!
Welcome @earnest granite!
==> Oups!
It seems you don't have the permission to see Dagger's documentation. But don't worry you can request an Eary Access :). You'll be redirect to Dagger website in -8 seconds
See you soon !
ah actually all links sent by mail redirect me to an error page
Strange... @neat anchor could you try to access to docs.dagger.io in a private window please ?
@neat anchor : I found the bug and opened a PR. I let you know when this will be fixed. Thanks
Welcome @verbal canopy!
Freaky timing with that comment, @heavy gazelle
Welcome @barren patrol!
Welcome @echo palm!
@last pine sorry, didn't see your message. It works fine now! thank you!
my pleasure ๐
Welcome @radiant talon!
Kind of a conceptual question, not sure if this is the right place but
Somewhere I see dagger potentially helping us is in things like setting up dev environments; fetching containers, fetching secrets, running some other jobs like populating a test database, spinning up a local isntance; is that something that makes sense?
Yes absolutely. Dagger is perfect for that.
It actually started out as a tool to do only that. Then we redesigned it to be more flexible.
Welcome @chilly sonnet!
Welcome @chilly arch!
Welcome @orchid raven!
Welcome @wicked badger!
Welcome @bitter swift!
Hiya I like to develop using my local file system and Mac set up because itโs faster and more ergonomic than doing development inside a container convenient. But my CICD and Dagger all run Docker containers. Is there some way to get parity between my local file system for local development and whatโs in the container that dagger and cicd uses?
Hey ๐
Create CI/CD with Dagger required 2 things :
- A buildkit daemon (launched using docker by dagger if no one is set)
- A plan (made in
cue)
So basically, you can run the daemon in a container but the plan can be in your local system
Ah yes that is what Iโm doing. But it means my project dependencies are all in the Docker image. Iโd prefer them on the local file system for development eg: hot reloading, running tests etc.
What are you trying to do with Dagger?
Welcome @stone tulip!
You can access the local filesystem at will: see client.filesystem, you could for example load your dependencies directly from local fs. However you will need to handle platform differences
Welcome @lilac thicket!
Hey all ๐ Iโve been dagger-adjacent for a while, but Iโm diving in properly this week ๐ Really looking forward to seeing how I can stop building the same bloomingโ pipelines in different systems, over and over again ๐
Welcome! Yes that is the dream ๐
general feedback for the https://docs.dagger.io/1203/client page. I would personally love for each of the sections to be fully working dagger configurations so I can fiddle with them to learn. As they are today, if I copy/paste (the copy button is there) them into a dagger project they won't work due to missing package and import definitions. Thoughts?
OK it's settled then!
Filesystems: You should only write once to any named filesystem. Multiple writes to a single filesystem can cause unexpected results. This bit of trivia cost me a least a day of troubleshooting.
Platform: This appears to build on the previous example without explaining why you used client: _ and what it means.
Multiple writes to a single filesystem shouldn't even be possible due to the way the CUE api is set. If you have:
client: filesystem: "./dir": write: contents: actions.build.one.output
client: filesystem: "./dir": write: contents: actions.build.two.output
Then those two contents are going to be unified, which should error. Can you explain a bit more how you had it set up? Did you have different paths pointing to the same place on disk?
It wasn't possible. Every attempt to compile the config would hang CUE/Dagger indefinitely consuming 90%+ CPU. There was no error.
Also, it would be great that those would be checked by the CI directly. A little bit like Go that runs the examples in _test.go files, so we know our documentation is up to date with the current dagger implementation: https://go.dev/blog/examples
Go is an open source programming language that makes it easy to build simple, reliable, and efficient software.
400 twitter followers today ๐ ๐ Small beginnings
A portable devkit for CICD pipelines, by the creators of Docker. Powered by CUE and Buildkit. Launching early 2022... https://t.co/ojiN8fWCeI
403
53
Welcome @toxic trellis!
Welcome @timber wind!
Welcome @analog iron!
Welcome @viral rapids!
Welcome @sage plank!
Welcome @radiant cape!
Welcome @earnest prawn!
dagger v0.2.3 is out ๐ ๐
This release focuses on polishing the CLI and CUE API, notable changes:
- Move core actions to a subpackage
- Rename
dagger.#Servicetodagger.#Socket - Move connecting socket to
client: network - Add docker CLI package
We'll be conducting a bug bash today and tomorrow -- we'd very much appreciate if you could try out the release and the documentation, to report back anything unexpected!
@everyone
Welcome @pastel sluice!
Welcome @ember juniper!
Tomorrow we're throwing our first virtual meetup, right here on Discord. It will be an unconference format: bring your topics and questions! The Dagger team will be there to answer your questions, discuss the roadmap, show real-world examples of Dagger, live coding, and more.
Event link: https://discord.gg/ZSnUCNYr?event=958494137127161916
See you soon @everyone!
Welcome @swift barn!
Welcome @steady wasp!
@everyone Dagger is now officially launched! https://dagger.io/blog/public-launch-announcement
Thank you all for investing your time and energy with feedback and contributions, Dagger is improving a little bit every day thanks to you.
Dagger.io | Blog | Title of post
Welcome @deep mesa!
Welcome @earnest patio!
Welcome @inland harness!
Welcome @median owl!
yay congrats on the launch!
Hello everyone! Our little community call is starting in one minute. Participants are muted by default, but raise your hand here, or ask questions if you want to participate and we'll unmute you!
Welcome @vital shoal!
We moved to "The Stage"!
Welcome @lime plover!
What should we add next to the Dagger Universe?
gotta run to a meeting but good to see you all again ๐
Re: UIs in CI/CD. https://twitter.com/paulstovell/status/1508973078298398724
With this feature, we hope to prove something to other CI/CD tooling vendors: you can add version control without the UX suffering; without the DevOps toolchain becoming inaccessible to the rest of the team.
next 5 pages cover a small portion of the Concourse topic that we were talking about on The Stage: https://gerhard.io/slides/observable-systems-beta/#/21
Welcome @tawny notch!
I've started testing out using binlog (https://msbuildlog.com/) for MSBuild. One awesome benefit is the Log Viewer tool generates a flame graph of your build.
there is more here on the Concourse subject in this repo - bte pipeline.gerhard.io no longer works - https://github.com/gerhard/pipeline
hi, saw this amazing project announced on twitter and I just had to come say hi to the community
Welcome, @tawny notch!
are there any high level introductory technical guides I can look through?
Hey everyone! Not sure to where to direct this, but the website currently redirects to two different Discords! The first link is this Discord, and further downthe website says
If you share our definition of fun, come say hi!
This link redirects to a discord with Cyrillic characters in the name. I'm pretty sure this wasn't on purpose ๐
There's a getting started tutorial on https://docs.dagger.io . And also a section explaining core concepts.
Everyone should be able to develop, test and run their CI/CD pipeline locally.
awesome thanks!
@winter linden @last pine ๐๐ป
Good catch @neat rampart
Thanks! We're fixing it now
Np! I'm also a Dev currently looking at new roles, so maybe this is my in ๐
๐ Well we're hiring! https://dagger.io/careers . We'll be opening new roles in the next couple weeks, too
Dagger.io | Careers
Hi - I build lots of ETL and DB schema pipelines in the microsoft stack
coming in to check what's going on here
Welcome, @tired pulsar!
Welcome @pale current!
Welcome @frail dagger!
Welcome @swift barn!
Welcome @worthy tiger!
Welcome @stable grove!
Welcome @fringe cargo!
Welcome @scenic saddle!
Welcome @graceful wigeon!
Welcome @swift barn!
Welcome @agile anchor!
https://github.com/dagger/dagger/discussions/1922 > Please vote your next Universe ideas here!