#general

1 messages Β· Page 9 of 1

torpid maple
#

Is there a way to tell dagger to install modules using SSH instead of HTTPS?

acoustic current
tropic remnant
#

Hello πŸ‘‹
I search to install module with Dagger Shell, but if I init Dagger without SDK, it fail cause Dagger want an SDK.
Do you know it is possible to use module without SDK in case of I want only use Dagger Shell?
Thanks

winter linden
gleaming chasm
#

is there a layer caching difference between using withMountedDirectory and withDirectory ?

#

for some reason my layer caching completely stopped working and I can't figure out why πŸ˜…

cunning jolt
agile marsh
#

Hey! I’d really appreciate some help with a module download issue. I’m running Dagger in an Azure DevOps pipeline, calling a module from the current repo. However, that module has a dependency on another one hosted in a private GitHub repo.
What’s the recommended way to provide a fine-grained token to Dagger so it can access and download that private dependency?

11 : β”‚ load module ERROR [0.9s]
11 : β”‚ ! failed to get configured module: input: moduleSource failed to resolve dep to source: failed to load git dep: select: failed to resolve git src to commit: failed to fetch remote https://github.com/xxxx: git error: exit status 128
stderr:
remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.

torpid maple
#

@agile marsh AFAIK dagger will try to access modules via git using either HTTPS or SSH, the credentials for which are configured like so.
https://docs.dagger.io/api/remote-repositories#authentication-methods

From the look of your error message it looks like you were having the same issue as me, where you have to configure access to that Git repository.

For me I created an SSH key that had access to the repository and added it to the SSH agent before calling dagger.

For HTTPS you'll likely need to do something else, I'm also not well versed on the specifics of Azure.

agile marsh
#

Thanks for the fast response @torpid maple , the point is that the pipeline runs in an azure devops agent that runs into a docker container, and those are triggered on an automated demand way lets say, I was hoping with a GITHUB_TOKEN env would work or replicating ont he fly the credentials , just like I do locally, but didnt work, I will try with SSH and see if that works better

torpid maple
#

I'm on to the next problem now which is net/http: TLS handshake timeout errors when trying to run in the pipeline.

Stdout:
generating go module: typescript-sdk
creating directory . [skipped]
writing dagger.gen.go
writing go.mod
writing go.sum
creating directory internal
creating directory internal/dagger
writing internal/dagger/dagger.gen.go
creating directory internal/querybuilder
writing internal/querybuilder/marshal.go
writing internal/querybuilder/querybuilder.go
creating directory internal/telemetry
writing internal/telemetry/attrs.go
writing internal/telemetry/env.go
writing internal/telemetry/exporters.go
writing internal/telemetry/init.go
writing internal/telemetry/live.go
writing internal/telemetry/logging.go
writing internal/telemetry/metrics.go
writing internal/telemetry/proxy.go
writing internal/telemetry/span.go
writing internal/telemetry/transform.go
running post-command: go mod edit -replace go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc=go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc@v0.8.0
running post-command: go mod edit -replace go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp=go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp@v0.8.0
running post-command: go mod edit -replace go.opentelemetry.io/otel/log=go.opentelemetry.io/otel/log@v0.8.0
running post-command: go mod edit -replace go.opentelemetry.io/otel/sdk/log=go.opentelemetry.io/otel/sdk/log@v0.8.0
running post-command: go mod tidy
post-command failed: exit status 1
Stderr:
go: downloading github.com/iancoleman/strcase v0.3.0
go: downloading golang.org/x/mod v0.24.0
go: downloading github.com/stretchr/testify v1.10.0
go: github.com/go-logr/stdr@v1.2.2 requires
    github.com/go-logr/logr@v1.2.2: Get "https://proxy.golang.org/github.com/go-logr/logr/@v/v1.2.2.mod": net/http: TLS handshake timeout
chilly arch
#

@here community call starting in 1 minute

agile marsh
slender charm
cunning jolt
tribal burrow
#

Is there a way of getting the timeline in the web ui as interwoven log lines like as if you're watching in the plaintext mode? (the nnn : logline format)

vivid mango
#

and then there is this....

https://github.com/koalaman/shellcheck/wiki/SC2096

On most OS, shebangs can only specify a single parameter.

Is there a solution for this? like set -xe for bash? I mean setting dagger parameters at a script level, not at a CLI args level.

GitHub

ShellCheck, a static analysis tool for shell scripts - koalaman/shellcheck

torpid maple
#

How can I get dagger to output plain logs similar to how it does running in a CI environment?

cunning jolt
amber quail
swift inlet
amber quail
amber quail
#

Hey folks πŸ‘‹ Is there some way to leverage existing MCPs like the official github MCP within dagger? https://github.com/github/github-mcp-server

Instead of re-implementing those tools in dagger it would be great to have the ability to run them in a container (the github one is already a container image ghcr.io/github/github-mcp-server) – as an MCP provides a schema it should be even possible to integrate them into the existing type system for codegen.

GitHub

GitHub's official MCP Server. Contribute to github/github-mcp-server development by creating an account on GitHub.

winter linden
#

hello! We started prototyping that (there's a draft PR) but not finished yet.

Integration with the schema would be ideal, but tricky because mcp doesn't have any affordance for static schema introspection. It's all dynamic.. but we have ideas for working around it πŸ™‚

sharp marsh
sharp marsh
tribal quail
#

hi there ! I'm finding the dagger logs resulting from the dagger call are way too verbose. is there any way i can tune those down ?
The azure devops pipelines doesnt support TTY and the progress=plain makes it almost unreadable.
I tried the following dagger call --quiet --progress plain myfunction but i can still see logs like this that i'm not interested in:

11  : consuming /v1/traces DONE [0.0s]

12  : consuming /v1/logs
12  : consuming /v1/logs DONE [0.0s]

13  : consuming /v1/metrics
13  : consuming /v1/metrics DONE [0.0s]

14  : moduleSource(refString: "."): ModuleSource!
tribal quail
sharp marsh
agile marsh
tribal quail
#

I have a weird issue with dagger cloud.
I have my CI agent running my dagger function. the dagger cloud token is set. The logs are providing me with a dagger cloud trace URL which is working. But the trace is missing from the list of traces in the dashboard. Any obvious reason why this happens ? If i use the same token on my local the trace shows up fine

torpid maple
#

@sharp marsh have you had any issues running k3s via dagger on GitHub hosted runners?

I'm getting this error, which implies that the k3s server never started correctly, and therefore didn't create the kube config in the cache volume?

Error: process "cp /cache/k3s/k3s.yaml k3s.yaml" did not complete successfully: exit code: 1

The other logs suggest that it's an issue listening on port 6443?

neon warren
sharp marsh
#

@marcosnils have you had any issues

warm temple
slender charm
sharp marsh
#

Seems like azure pipelines from previous

honest oasis
#

quick Q, everything worked swimmingly before upgrading to v0.18.3 this morning, now I'm getting this error:

Error: failed to serve module: input: moduleSource.asModule.serve module runme (source: github.com/runmedev/runme | pin: 280c226fe7bf495c0a5bb6e4d8ec2caea7d5ea51) already exists with different source github.com/runmedev/runme (pin: 15b94571d4dc35688de18d276b0d3162a2177c34)
#

already purged the cache etc

#

I'm poking around but can't seem to find the "problem"

#

oh wait, dagger install github.com/runmedev/runme fixed it πŸ€¦β€β™‚οΈ

#

sorry about the noise πŸ˜„ - using the linked module name now to avoid the mismatch

tribal quail
fossil pine
#

Some of you may remember this: https://openmeter.io/blog/supercharge-helm-chart-development-with-dagger (it was very well received by the community).

I turned that into this: https://labs.iximiuz.com/tutorials/testing-and-releasing-helm-charts-with-dagger-4dcb152e

Love @keen brook labs so far!

Use Dagger to achieve isolation and reproducibility with Helm, including running linters, tests, and pushing to a registry.

iximiuz Labs

Learn how to test, package and release Helm charts using Dagger.

torpid maple
#

I've been getting this error.

Error: failed to forward exit code: failed to close terminal

When using --progress plain and withExec(['pnpm', 'test'], { expect: ReturnType.Any }).
https://github.com/dagger/dagger/issues/10129

GitHub

What is the issue? Hi all I'm using the latest version of Dagger engine i.e. 0.18.2 By running my module using dagger call [...] -vvvv --progress=plain --interactive tests (where [...] represen...

narrow nymph
torpid maple
narrow nymph
tribal quail
#

Hey ! I'm not sure what i'm doing wrong here ? I'm trying the quick start for llm. using qwen2.5-coder:14b

  with-prompt "What tools do you have available?" 0.0s
! input: llm.withPrompt.id select: POST "http://172.26.15.221:11434/v1/chat/completions": 400 Bad Request {"message":"json: cannot unmarshal array into Go struct field Message.messages.content of type
! string","type":"invalid_request_error","param":null,"code":null}
neon warren
#

Missing Traces

sharp marsh
winter linden
fossil pine
north dune
#

following up here - after spending a couple hours today working on my CI setup w/dagger, I already love Dagger Cloud traces way more than plain logs πŸ™‚ it's soooo cool

slender charm
chilly arch
pearl gust
#

Hi - I was wondering if there is a commercial support offering for dagger engine if we install on kubernetes and run ourselves? Thanks!

gleaming chasm
#

is there some way to have a fallback cacheVolume? say I want for my build to have different cacheVolumes for each branch, but on initial build, I want to copy the cacheVolume from main?

winter linden
gleaming chasm
slender charm
jagged flicker
#

Beginning of dagger's hands on lab at Devoxx FR πŸŽ‰

tired moth
#

In this doc https://docs.dagger.io/ci/adopting Day 2 is a typing mistake? and if no then where is day 01?

Once you have completed the quickstart, and learned the basic concepts, it's time to take the next step: adopting Dagger in your project. We call this daggerizing. But how does one daggerize a project, exactly?

rapid cove
north dune
#

Does Dagger Cloud support otel span attributes / events? I can't seem to find a way to view anything other than the name

elfin frigate
north dune
#

ahh gotcha. I kept thinking I'd be able to click on the name and see attributes (or at least see them in the full page view of a span)

#

honeycomb has a pretty decnet ui where it shows the details on the right

elfin frigate
#

yeah we use honeycomb internally πŸ™‚ the span duration distribution is pretty neat too, another one of our TODOs (analytics, more generally)

humble sage
#

Hello, great to discover Dagger.

What is the syntax to pass an array of strings to as-service --args in the dagger shell ?

humble sage
#

@vivid mango Do you mean --args ["mycommand", "somearg"] ?

#

Or sthing else ?

winter linden
#

--args mycommand,somearg, or --args mycommand --args somearg

humble sage
#

Am I supposed to be able to surface a service to my MAc host when using Podman ?

winter linden
# humble sage Am I supposed to be able to surface a service to my MAc host when using Podman ?

Using Dagger? Yes, you can call the Service.up or Container.up function, for example:

dagger -c 'container | from nginx | up'

The use of podman is irrelevant - this should work the same regardless of how you provisioned the dagger engine itself. (Dagger does not use podman to execute containers; it supports being provisioned itself as a privileged podman container, which is probably what you're doing. From that point on, it takes over and ignores podman completely)

humble sage
#

I did not understand the difference between service up and container up...

#

@winter linden Thanks for your help !

winter linden
humble sage
#

Ok thanks

vivid mango
winter linden
#

(Service is an abstract type which can be backed by a container, or by eg. a tunnel to an external service)

winter linden
humble sage
#

@solomon Where should I add a hint for that syntax in the documentation ?

#

the string array for dagger shell

vivid mango
#

Just curious, are there any plans for a v1.0.0? How far in the future do we expect to have the first full version? πŸ™‚

sick monolith
#

Its also confusing because day 2 to some might think "where is my day 1 tutorial"? but also on the day2 page, it mentions "phase 1: research"

#

Probably it should say "Next steps" - i feel like it might have even said something like this in the past?

#

Basics -> Build (an Agent or a Pipeline) -> Next steps

tired moth
winter plank
#

Is there a way to set docker flags on dagger container runs? I'm trying to run playwright tests, but the playwright docs recommend setting --ipc=host -- can i set this for dagger?

fossil pine
winter plank
jagged flicker
#

Dagger at DevoxxFR πŸ˜‰

torpid maple
#

Can Dagger be used to create development environments in the same way Docker is typically used?

e.g. You start a container with runtime dependencies and bind mount your source code into the container, then edit the code on your host and observe some sort of hot-reload that updates your service/app?

winter linden
white zephyr
#

what is everyones favorite ollama model for dagger and coding?

#

Trying out qwen 2.5 coder at the moment

winter linden
white zephyr
#

Thanks Solomon! Dagger is becoming one of the more popular topics on the platform team I am in in a fortune 1000 company.

winter linden
#

There are other F1000 engineers lurking here, in case you want to exchange tips and get their experience

white zephyr
#

A line i've told my colleagues this week is "Dagger Agents Are All the AI You Need"

rapid cove
chilly arch
small river
#

Thanks @Courtcircuits for the write-up

jagged flicker
#

(last one as DevoxxFR is over)
@honest pebble presenting dagger

winter linden
#

DevoxxFR is a Dagger-fest this year πŸ™‚

#

Thanks for sharing!

fossil pine
white zephyr
# rapid cove could you explain why? (i'm the marketing guy and i want to help you spread that...

Because the agents can be called from the Dagger shell and do absolutely anything you want to use an agent for (pending improvements to MCP and A2A) in any env (cicd builds, any provider). Sure my statement is a bit hype right now but Ive reviewed 20 open source agentic frameworks the last 6 months, they all the do the same thing to one level of maturity or another. As the dagger capabilities mature dagger agents will be able to do everything a Copilot does, I would give it 6-9 months based on current rate of progress. I also know I'll be able to afford to scale dagger agents in a multi-agent paradigm world which is likely going to be major innovation trend of 2026.

winter plank
tired moth
#

does dagger support otel-config.yml to behave as otel collector?

slender star
white zephyr
#

dagger needs an official chainguard image

fossil pine
winter linden
fossil pine
winter linden
#

@fossil pine now I'm running into exactly the update problem you were asking about earlier

fossil pine
slender star
#

dagger needs an official chainguard

gloomy drum
#

@heavy gazelle: @slender star: o/

gloomy drum
#

@pseudo stream, and thanks for the prompt review. There are some tests failing and some typos in the commit message (which I can fix if we're fine about rerunning the tests)

torpid maple
#
β”‚ ✘ Container.withExec(args: ["apk", "add", "--no-cache", "git", "helm", "k9s", "kubectl"]): Container! 0.1s                                                                                                 
β”‚ ! process "apk add --no-cache git helm k9s kubectl" did not complete successfully: otel tcp proxy listen: context canceled: context canceled

Is there a way to turn off tracing? I already have DAGGER_NO_NAG=1.

elfin frigate
fossil pine
slender charm
fossil pine
winter linden
elfin frigate
#

sure

winter linden
lime dirge
topaz blade
#

Is there a way I can get the Image digest(SHA) of a container that was built using Dagger?

amber quail
winter linden
amber quail
vivid mango
winter linden
# vivid mango Thanks! Though after this long of listening to crickets chirping around my quest...

Sorry for missing this. The channel has been busy lately!

We don't have active plans for a 1.0. We'll get around to it eventually. Dagger is already used widely in production, and we manage it accordingly. But the label "1.0" is a can of worms, because people have wildly different interpretations of what it actually means. And we are trying to delay the distraction of addressing those different interpretations.

chilly arch
#

Hey everyone! We have quite the agenda for tomorrow's community call at 9 am PT.

On tomorrow’s Community Call:

πŸ€– @urban anvil replays his work with the Robot Operating System (ROS), showcasing reproducible robotics workflows with Dagger.

πŸ‘Ύ @sonic obsidian dives into cosmic horror and LLMs, generating and running a full-stack app from a single SQL file using Dagger.

🧠 @fierce sandal builds an offline AI tutor with Dagger and Deepseek

Watch live on YouTube or X and join the conversation! https://www.youtube.com/watch?v=BEcD7exeafU

stoic knot
#

We're seeing the following error when trying to add a new member/invite to our Google OAuth'd Dagger Cloud setup

gleaming chasm
#

Uhm why am I getting this every now and then when working with secrets? Secret.plaintext: runtime error: invalid memory address or nil pointer

gleaming chasm
torpid maple
#

I'm trying to use this npm module in conjunction with my dagger functions (using TS).
https://www.npmjs.com/package/config

When I try to user the module via import config from 'config', the config.get('some.key') I get the following error.

✘ .configFile: String! 1.7s
┃ WARNING: No configurations found in configuration directory:/scratch/config                                   
┃ WARNING: To disable this warning set SUPPRESS_NO_CONFIG_WARNING in the environment.                           
┃ Error: Configuration property "service.repository" is not defined                                             

This module expects config files to be located at ./config/*.json which I have created.

I can see from the error that it's looking for the config directory at /scratch/config, so I assume that this Node.js module is executing in some sandbox container that doesn't have the files that are present in the dagger project directory?

gleaming chasm
#

_EXPERIMENTAL_DAGGER_CACHE_CONFIG this only affects layer cache right? not dagger cache volumes?

cunning jolt
#

npm package/config only in scratch

gleaming chasm
tired moth
slender star
#

πŸ‘‹

karmic sand
#

where

slender star
#

Dagger Community Call

karmic sand
#

got it

chilly arch
#

Thank you @urban anvil , @sonic obsidian , and @fierce sandal for the demos today! For those who missed it, you can view the full recording here: https://www.youtube.com/watch?v=BEcD7exeafU

Join the Dagger team and fellow Daggernauts for our bi-weekly Community Call! Stay up-to-date with the latest product enhancements, discover innovative use cases, and gain valuable insights from community demos. Whether you’re new to Dagger or a seasoned user, there’s something for everyone!

β–Ά Play video
fierce sandal
# chilly arch Thank you <@701107645075030017> , <@314086321746346005> , and <@1174206195045777...

For anyone interested here is my repo and some of the blogs I wrote regarding this:
Repo: https://github.com/EmmS21/fundAI
Building the Dagger Agent to support the first offline tutor: https://emmanuelsibanda.hashnode.dev/fundaai-an-ai-school-building-the-first-ai-tutor
Building the "virtual campus" https://emmanuelsibanda.hashnode.dev/fundaai-an-offline-ai-school-for-self-driven-learners-across-africa (I was inspired by Daggerverse in this regard - a "galaxy of AI tutors" to teach self-driven kids different skills I believe will help them navigate the tech world)
Building some of the "supporting infrastructure": https://emmanuelsibanda.hashnode.dev/funda-ai-building-a-laptop-powered-by-ai-to-help-students-in-africa-learn
Exploring different LLM models: https://emmanuelsibanda.hashnode.dev/building-offline-ai-tutors-boosting-the-next-generation-of-african-students

GitHub

We give students across Africa access to laptops preloaded with offline AI tutors to help them prepare for exams and build tech careers - EmmS21/fundAI

carmine oracle
#

Hi, can I get help being added to a channel? I updated my roles to include Typescript but I'm not seeing a typescript specific channel.

chilly arch
#

updating Discord roles

wraith niche
#

Hey @everyone!

Just dropping in to officially announce our new LLM primitive in Dagger! Some of you already found this in v0.18 a few weeks back, but now we're making it official.

We've added native LLM support directly into the Dagger engine. This means you can build AI-powered automation right into your workflows - for testing, deployments, code fixes, and more.

LLMs now work just like any other Dagger primitive - they can interact with containers and other resources while running in code-defined environments with proper isolation and observability.

Check out the details:

And share with your friends!

Can't wait to see what you all build with this!

chilly arch
torpid maple
#

What am I supposed to do if I'm creating a type that returns a JSON parsed value, it seems any isn't acceptable.

/src/dagger/sdk/src/module/introspector/dagger_module/module.ts:278
      throw new IntrospectionError(
            ^


IntrospectionError: could not resolve type reference for any.
    at DaggerModule.resolveReferences (/src/dagger/sdk/src/module/introspector/dagger_module/module.ts:278:13)
    at DaggerModule.resolveTypeAlias (/src/dagger/sdk/src/module/introspector/dagger_module/module.ts:356:12)
    at DaggerModule.resolveReferences (/src/dagger/sdk/src/module/introspector/dagger_module/module.ts:254:14)
    at DaggerModule.resolveTypeAlias (/src/dagger/sdk/src/module/introspector/dagger_module/module.ts:356:12)
    at DaggerModule.resolveReferences (/src/dagger/sdk/src/module/introspector/dagger_module/module.ts:254:14
    at DaggerModule.resolveTypeAlias (/src/dagger/sdk/src/module/introspector/dagger_module/module.ts:356:12)
    at DaggerModule.resolveReferences (/src/dagger/sdk/src/module/introspector/dagger_module/module.ts:254:14
    at new DaggerModule (/src/dagger/sdk/src/module/introspector/dagger_module/module.ts:134:10)
    at scan (/src/dagger/sdk/src/module/introspector/index.ts:18:18)
    at async connection.LogOutput (/src/dagger/sdk/src/module/entrypoint/entrypoint.ts:17:26) {
  cause: undefined,
  code: 'D110'
}

Node.js v22.11.0
torpid maple
#

Is there anyway to get access to the default SSH socket, that dagger implicitly has access to by way of it being present in the environment it's executed without it being explicitly passed in to a function as an argument?

Like when you pass a Git repository URL as a Directory argument, it provides the socket.

git(
β”‚ β”‚ keepGitDir: true
β”‚ β”‚ sshAuthSocket: Host.unixSocket(path: "/tmp/ssh_agent.sock"): Socket!
β”‚ β”‚ url: "git@github.com:jshbrntt/test.git"
β”‚ ): GitRepository!
sharp marsh
#

Is there anyway to get access to the

winter plank
#

what's the right way to load a git repo into a dagger function call? I'm trying Directory but it's not including my .git in context

modest pier
winter plank
sharp marsh
winter plank
#

I'm trying to pass as a function arg

sharp marsh
#

just check that you don't have any exclude options that might be excluding the git dir by any chance

cunning jolt
winter linden
#

If you're into AI agents, you probably heard of SWE-bench, the de facto standard benchmark for coding agents.

Well it turns out that SWE-bench has a lot of messy artisanal scripts for running its evaluation workflows in containers... So we thought, why not Daggerize it? πŸ˜‡

Here is the PR by @cloud canyon : https://github.com/SWE-bench/SWE-bench/pull/386

If you're into this, feel free to follow the PR, try it out, and leave a supportive comment or emoji - without spamming the project if course!

GitHub

What does this implement/fix? Explain your changes.
This PR adds support for running the evaluation harness using dagger. The feature is gated behind the --dagger flag, in line with the existing --...

tired moth
#

Hey dagger team any updates on dagger reload/watch if yes please share. Thanks

tired moth
#

is it possible to see dagger otel data in grafana cloud, if yes then how can we configure dagger for it? Docs?

sharp marsh
# tired moth Hey dagger team any updates on dagger reload/watch if yes please share. Thanks

yes, it's possible. You need to configure the corresponding OTEL exporter variables and Dagger will forward them to the specified collector accordingly. https://opentelemetry.io/docs/languages/sdk-configuration/otlp-exporter/.

There's no Dagger docs for this currently

OpenTelemetry

Endpoint Configuration The following environment variables let you configure an OTLP/gRPC or OTLP/HTTP endpoint for your traces, metrics, and logs.
OTEL_EXPORTER_OTLP_ENDPOINT A base endpoint URL for any signal type, with an optionally-specified port number. Helpful for when you’re sending more than one signal to the same endpoint and want one...

tired moth
# sharp marsh yes, it's possible. You need to configure the corresponding OTEL exporter variab...

Thanks a lot for your confirmation and i think it should be in docs and so i have created one issue https://github.com/dagger/dagger/issues/10280

GitHub

Is your feature request related to a problem? Please describe. Currently, there isn't a dedicated, step-by-step guide in the official Dagger documentation detailing how to configure Dagger'...

sharp marsh
tired moth
heavy karma
vivid mango
#

I see there is a way to create a Directory via dagger shell, but I can't find a way to create a File.

completion    
 cache-volume 
 container    
 directory    
 engine       
 env          
 git          
 host         
 http         
 llm          
 set-secret   

I'd like to create one with my predefined content from a variable (text value). Is it possible in dagger shell? Dumping file contents via with-exec seems quite annoying, because I have to escape all the bits and bobs to work with shell redirection.

sharp marsh
sharp marsh
narrow nymph
#

actually realized this is very easy, throwing a pr together now

narrow nymph
vivid mango
loud briar
#

Anyone got an example of using the proxy module to proxy multiple services to a single service with a .dag script? Can the up function accept many --ports and just work?

#

Proxy module can just forward one service port to the host and avoid that question I presume, just struggling to get it working

slender star
#

Nice!!

vivid mango
#

In the LLM module... Do files in env have a size limit? It seems that there is something like that, and the limit is ~80kB
OpenAI and Claude seem to agree on the truncation size

The wrapping script is a straight-forward wrapper, it should not cause any truncations: https://gitlab.com/netikras/llm-toys/-/blob/main/dagger_agent/dagger_task.dagger

queried with: ' dagger-agent -i log=file://ci.log "There is a log file from a CI run. Try reading this file's contents. How many bytes do you see / can you read vs. what's the actual file size? I have a feeling that this AI agent has issues uploading the whole file." '

sick monolith
#

Dagger shell & directories/paths for dagger.File - Am i doing something wrong?

tired moth
# sharp marsh yes, it's possible. You need to configure the corresponding OTEL exporter variab...

Does dagger support this natively or we need to config with config.yml file with this https://hub.docker.com/r/otel/opentelemetry-collector-contrib or with binary https://github.com/open-telemetry/opentelemetry-collector-contrib

GitHub

Contrib repository for the OpenTelemetry Collector - open-telemetry/opentelemetry-collector-contrib

lime pond
#

I’m really wondering how all of you did cicd for your dagger modules.
Are there demos of blogs or anything available on this subject?

slender star
cursive moon
#

How does export work on directories when using it inside of a module? If I use the dagger CLI and run my command that returns a Directory | export it works like a charm. If I just alter that function to await output_dir.export(...), nothing shows up on my host machine

winter linden
#

since the function is in a sandbox it cannot access the caller's context. You have to return the directory and let the caller decide what to do with it

torpid maple
#

Is there a way to pass environment variables in by default?

In the same way you can pass through files and directories if they are default paths and in the current working directory?
https://docs.dagger.io/api/default-paths/

It is possible to assign a default path for a Directory or File argument in a Dagger Function. Dagger will automatically use this default path when no value is specified for the argument. The Directory or File loaded in this manner is not merely a string, but the actual filesystem state of the directory or file.

cursive moon
cunning jolt
chilly arch
neon warren
cursive moon
#

I was curious, is there a way to do some kind of Hot Module Reload when working on and debugging Dagger modules? Right now my workflow when working on a module is to keep exiting out and then calling dagger to get back to the CLI and it has to load the modules each time. Is there a better way? Or is there a way to have the CLI watch the filesystem for modules it already loaded and if they change reload them to the engine (which is what I think is happening but cannot be sure haha)

slender star
# cursive moon I was curious, is there a way to do some kind of Hot Module Reload when working ...

@winter linden do we have a separate issue for just module reload while developing or would that be covered by https://github.com/dagger/dagger/issues/9934

GitHub

Problem When calling Host.directory() or Host.file(), I get a one-time snapshot of the file or directory, and it will never change for the whole session. This hasn't been too much of a problem ...

winter linden
#

I think there's a .refresh or .reload builtin no?

cursive moon
#

.refresh is exactly what I was looking for thank you

winter plank
#

Anyone else struggle with getting dagger to pull private repos? doing --repo=https://github.com/myorg/my-repo#pull/number/head and i get this message:

! stderr:
! remote: Support for password authentication was removed on August 13, 2021.
! remote: Please see https://docs.github.com/get-started/getting-started-with-git/about-remote-
! repositories#cloning-with-https-urls for information on currently recommended modes of
! authentication.
! fatal: Authentication failed
``` but according to the docs (https://docs.dagger.io/api/remote-repositories/#https-authentication), i should be able to pull. I can run `git clone` just fine. Using dagger 0.18.5 (same issue on 0.18.4)

Dagger supports the use of HTTP and SSH protocols for accessing directories, files, and Dagger modules in remote repositories. This feature is compatible with all major Git hosting platforms such as GitHub, GitLab, BitBucket, Azure DevOps, Codeberg, and Sourcehut. Dagger supports authentication via both HTTPS (using Git credential managers) and ...

winter plank
#

This seems like it works in Go, but I'm not having success with typescript:


@object()
export class Github {
  private _container: Container;

  constructor(
    repo: Directory,
    githubToken: Secret,
  ) {
     this._container = this.baseImage()
      .withSecretVariable("GH_TOKEN", githubToken)
      .withDirectory("/src", repo)
      .withWorkdir("/src");
  }

  @func()
  pullRequest(): PullRequest {
    return new PullRequest(this);
  }
...

@object()
export class PullRequest {
  private _container: Container;
  private _prNumber: string | null = null;

  constructor(github: Github) {
    this._container = github.container();
  }
tribal quail
#

hey team has anyone experienced a container CMD being executed twice with service binding ?
here's what my code looks like (running dagger 0.18.3)

func (m *RabbitmqDlqProcessor) Test(ctx context.Context) *dagger.Service {
    rabbitmq := dag.Container().
        From("rabbitmq:3.13.7-management").
        WithExposedPort(5672).
        WithExposedPort(15672).
        WithEnvVariable("RABBITMQ_DEFAULT_USER", "rabbitmq").
        WithEnvVariable("RABBITMQ_DEFAULT_PASS", "rabbitmq").
        AsService(dagger.ContainerAsServiceOpts{UseEntrypoint: false})

    _, _ = dag.Container().From("alpine:latest").
        WithServiceBinding("rabbitmq", rabbitmq).
        WithExec([]string{"apk", "add", "--no-cache", "curl"}).
        WithExec([]string{
            "curl", "-o", "/usr/local/bin/rabbitmqadmin",
            "http://rabbitmq:15672/cli/rabbitmqadmin",
        }).
        WithExec([]string{"chmod", "+x", "/usr/local/bin/rabbitmqadmin"}).
        WithExec(slices.Concat([]string{"rabbitmqadmin", "--host", "rabbitmq", "--user", "rabbitmq", "--password", "rabbitmq", "list", "queues"})).
        Sync(ctx)

    return rabbitmq
}
tired moth
winter linden
tired moth
tired moth
#

does v0.18.5 remove the need of sdk folder for monorepo with dagger? can you please confirm @wispy tapir

#

can we use github copilot cli in pipeline with dagger ai agents? any exmaple or POC?

wispy tapir
cursive moon
#

I just ask because you said finalize the UX

tired moth
winter plank
#

can you call dagger functions from the cli across modules? like for instance, if I have m1 with function f1 which returns o1 -- and then m2 with function f2 which takes an o1 and an argument -- is that doable from a dagger-cli invocation?

winter plank
winter linden
# winter plank or does this require a dagger shell session

2 different issues here:

  1. Composing function calls. Object IDs are not guaranteed to persist across dagger sessions, so you need to do it in dagger shell
  2. At the moment a module cannot use another module's type. There's an issue to try and fix that. The tricky part is avoiding dependency hell (https://github.com/dagger/dagger/issues/8529)
GitHub

Problem A module cannot return another module's type. This makes it harder to break down larger projects into several modules. Solution I'm not sure what the solution is. On the one hand, t...

winter linden
tired moth
winter linden
# tired moth so we can try it but it's not documented due to work in progress, understood cor...

They all work, it's just that we don't guarantee that they will still have the same syntax in future releases, or even exist at all.

Here's a list:

β”‚ ┃   .debug
β”‚ ┃   .help
β”‚ ┃   .echo
β”‚ ┃   .wait
β”‚ ┃   .cd
β”‚ ┃   .pwd
β”‚ ┃   .ls
β”‚ ┃   .types
β”‚ ┃   .refresh
β”‚ ┃   .deps
β”‚ ┃   .stdlib
β”‚ ┃   .core
β”‚ ┃   .shell
β”‚ ┃   .prompt
β”‚ ┃   .clear
β”‚ ┃   .compact
β”‚ ┃   .history
β”‚ ┃   .model
β”‚ ┃   .login
β”‚ ┃   .logout
β”‚ ┃   .module-install
β”‚ ┃   .module-uninstall
β”‚ ┃   .module-update
tired moth
winter linden
#

Fun fact I used a Dagger agent to get that list πŸ™‚

tired moth
winter linden
tired moth
#

Running things in a container is pushing new age startup teams to use traditional clouds and they need to manage infra for it...
and such management is overhead. And so nowadays so many new companies and startups are choosing edge cloud only...
eg. supabase

#

WASM can/will solve this...

winter linden
#

and tell me how it goes πŸ˜›

#

(you can't)

tired moth
#

if the dagger can run on top of WASI 0.2 specs then it can be solved without containers...
and that's the future also for run times and deployments also...

winter linden
tired moth
winter linden
#

In the future you could imagine that dagger functions run in wasm (but it would be a lot of work for not a lot of benefits). But even then, the core container API would require container access. And so many dagger functions today need to run containers.

#

By the way, all those serverless clouds are adding a container service too

#

Cloudflare with its container service. Vercel with its "fluid compute". Containers are here to stay

#

You need both layers

tired moth
cursive moon
#

I can't even imagine where I would be without containers

#

probably still trying to configure my dev environment...

#

So happy I don't have to deal with "it works on my machine" anymore

valid notch
#

Also what direction is Dagger going for right now? Is AI agents the main objective or still CI workflows?

winter linden
#

But Dagger is a general-purpose workflow engine, that is very good at making your workflows repeatable, observable, portable and modular. Beyond CI and dev workflows, there's always been a long tail of other applications. I think we'll see the same thing with agents also

#

Anything that involves moving artifacts around or orchestrating containers, Dagger can probably help

#

@valid notch what kind of agents are you building?

valid notch
#

Currently we are planning on enabling agent development org wide and I was looking into different modules/frameworks to get that going

#

I think from incident first responders to documentation helper could be some ideas I had in mind

winter linden
#

Another observation is that most agent frameworks enforce a strong separation between "agent" and "tools", and typically have no visibility into what the tools actually do. By contrast Dagger offers a unified runtime across agent and tools - we think the distinction between them is arbitrary and will fade away. In Dagger, LLMs are just another system primitive, alongside functions - you can call a LLM from a function, and a LLM can call functions. That makes some problem that are very hard in other platforms, become very easy in Dagger. For example:

  • Deep tracing. Since everything is a system primitive, everything can be traced at the system level. When you build an agent in Dagger, the trace shows you everything: what you told the LLM, what the LLM told you, what tools the LLM called, and what the underlying tools actually did. If some of the functions are themselves calling more LLMs (multi-agent), you get tracing of all that out of the box

  • Multi-agent works out of the box. LLM calls function, function calls LLM, and so on as much as you want

  • Cross-language ecosystem. Most AI frameworks are mono-language. Great for monoliths, not so great for platforms. Dagger's module ecosystem is cross-language by design. So agents written in any language can call tools written in any language

cursive moon
#

I can definitely see using Dagger to embed agents/LLMs into my CI pipelines, something like a custom Ellipses

#

I love how easy it is to use Dagger for build pipelines, just started this week and already have a setup for FastAPI to generate an openAPI spec, using a generator to generate a typescript client for it, building that typescript application into a static bundle, and then copying that back into my python application and having it served from FastAPI as an embedded UI

winter plank
#

@fossil pine I've been unable to upgrade to dagger 0.18.5 from 0.18.4 due to the aws-cli module:

Error: failed to serve module: input: moduleSource.asModule failed to load dependencies as modules: failed to load module dependencies: select: failed to call module "awscli" to get functions: process "tsx --no-deprecation --tsconfig /src/shared/dagger/awscli/tsconfig.json /src/shared/dagger/awscli/src/__dagger.entrypoint.ts" did not complete successfully: exit code: 1

going back to 0.18.4 fixes the errors

cursive moon
#

Id be interested to get some public opinions on this. I have a series of intermediate artifacts in my Dagger pipeline. Some of those are useful to have when you are in dev mode like generated code. For example when developing on my Typescript application, it is nice to have the generated version of server present for autocompletes and stuff. The overall build of my Dagger pipeline will of course place the most up to date generated code into the right place when the time is right, but at dev time it is inconvenient to be building blindly knowing that the Dagger pipeline will fill the holes at the end.

I use a few export statements to refresh these dev artifacts when I need to. Question is, should I commit these artifacts to Git? Or should I put them in the .gitignore and trust that they can be rebuilt exactly from the source? On one hand the generated code is a build artifact and I would refrain from putting it in git, but on the other its nice to have in the local filesystem.

winter linden
#

Or, do you mean specifically Dagger module generated code?

cursive moon
#

Oh yes this is not a Dagger-specific question, more so one of any system with generated code/artifacts like it. I just thought the community here might have some interesting takes on it.

winter linden
# cursive moon Oh yes this is not a Dagger-specific question, more so one of any system with ge...

I believe you are right πŸ™‚

The two main preferences I've seen:

  1. ignore all generated files

  2. commit all generated files, and mark them as generated in .gitattributes (https://docs.github.com/en/repositories/working-with-files/managing-files/customizing-how-changed-files-appear-on-github?utm_source=chatgpt.com)

#

In my experience it's not a no-brainer: we ourselves struggled to get consensus on a default for our own generated clients when calling dagger init. We flip-flopped a bunch of times between these two approaches.

cursive moon
#

Thats an interesting #2 I've never used that before. Do those files still contribute to merges even if they are not in the diff?

#

I think I'm leaning towards ignoring them all. If you commit them I feel like you need a precommit hook or action to generate everything to ensure that what is committed to the repository does indeed match the source code. That being said, some build tooling automatically culls ignored code, and so you have to be careful to make sure that your generated code gets included in final bundles

winter linden
#

Yeah I tend to ignore them also (not sure how standard the "linguist" system is beyond github)

#

Also with Dagger it's easy to have a function that spits out the generated code in a reproducible way.

cursive moon
#

I think that is probably the approach I will take too. Thanks for the input

sharp marsh
tender goblet
#

Is there something wrong with the Daggerverse web frontend? For example, this query:
https://daggerverse.dev/search?q=rust
I get the attached image as results. Under the search bar, it lists "2 matches", but the first 4 are actually about rust. What are all these other dagger-dev listings about?

tender goblet
slender star
# tender goblet Is there something wrong with the Daggerverse web frontend? For example, this qu...

Hi πŸ‘‹ @tender goblet. Search improvements are being worked on right now (shipping soon) since we want something better than the full text search we have currently. The dagger-dev module does have mention of the Rust SDK, so matches today.

The 2 matches below the search box pertains to matches on the dagger docs site, specifically the cookbook. It was a quick improvement so folks could find modules in daggerverse and relevant docs in the cookbook.

We want to improve the overall quality of search results and the bi-directional linkage between daggerverse and docs.

We’ll reach out to you for feedback once we ship the first improvement.

#

Don’t publish yet

fossil pine
#

I'll be at Cloud Native Days Romania next week (presenting a workshop about Dagger on Monday).

Ping me if you are around and want to chat.

humble sage
#

Is there a way to stop a service started from dagger shell with | up --ports 8080:8080 outside exiting the shell ?

#

Seems Ctrl-C is the way. But there are UI glitches.

#

Well not really reliable. Worked only once.

patent plover
sharp marsh
raven stag
#

Hey! Would anyone have a hint on how to create many cache layers on a dagger pipeline in a simple/efficient way? πŸ˜…
We're trying to reproduce some issues with our engines and the GC and need some easy way to create a cache over 300gb
ty

cursive moon
#

How can I create a new File in my pipeline with just some generic text? I am trying to make sure that all output directories of dagger pipelines are properly gitignored, so I want to include a .gitignore file in the build directory with just a simple "*" in it. Normally I would just create this file local and mount it into the directory, but since its a .gitignore with a star in it, that doesn't work so well lol.

winter plank
#

Man i keep finding myself reaching for some api like .repeat where i need to loop over something in my builder pattern

#

Can I take a .env file and populate a container environment directly?

sharp marsh
winter linden
undone parcel
#

I could use some help here https://github.com/dagger/dagger/issues/10347 struggling with my first dagger experience for an entire day now trying to make it work. Might be very well a user mistake on my side or a bug.

GitHub

What happened? What did you expect to happen? I have following module. type Platform struct { terraformVersion string awsAccessKeyID *dagger.Secret awsSecretAccessKey *dagger.Secret awsSessionToken...

slender star
#

πŸ– Module arguments always nil or empty...

humble sage
#
  1. When passing a container as input to a module function, what is the best practice to assert that it fulfills some prerequisite ? For instance, I would like to check that some directories or files exist in the input container.
#
  1. When working on a module, is there a better way to reload it than quitting the shell and launching it again ?
winter linden
# humble sage 1) When passing a container as input to a module function, what is the best prac...

The best practice would be to implement those checks in your function, like you would in regular code. Once you have a container object, you can inspect its filesystem and so on.

Note that we're missing a core function to check for the existence of a file or directory (we have an issue to fix that) but you can simply try to read the file's contents (Container.file("foo/bar").contents()) or list a directory's entries (Container.directory("foo/bar").entries()) and check for error

winter linden
humble sage
humble sage
winter linden
#

I think in the future it might become automatic? cc @pseudo stream not sure if that's an easy follow-up to live reloading directories?

humble sage
#

after .refresh, if I run the same command again, I get the cached result, is there a way to run the same command and force computation again ?

humble sage
#

What is the way to stop a running service started with up --ports ?

humble sage
winter linden
#

Yeah also Ctrl-C quits the whole shell for me

warm temple
#

is that a tmux thing? I'm on ghostty + macos and Ctrl-C is what I use

winter linden
#

Not tmux in my case

#

ghostty + macos -> Ctrl-C quits the whole shell

#

Ok I just recorded it, and this time it didn't quit... I think I figured it out:

  • If you Ctrl-C while the service is running in the background (ie. you're in the editor) then it doesn't quit the shell
  • If you Ctrl-C while the service is running in the foreground (ie. you're in view mode) then it does quit the shell
warm temple
#

ah I see the distinction, yes I was in background I guess. I didn't give any additional inputs between | up and Ctrl-C

#

quitting out of the shell entirely with Ctrl-C from foreground feels like a bug to me. wdyt?

winter linden
#

yes absolutely

#

Also with q which has the same effect

warm temple
chilly arch
#

Hello everyone!

**πŸš€ Dagger Community Call tomorrow at 9 am PTπŸš€ **

We look forward to seeing everyone there!

What's on the agenda?

Hacking Dagger to play StarCraft
@small river, Dorian & Mathias boot a full Windows XP VM in Dagger, mount the StarCraft ISO, and stream gameplay inside a container.

Smarter Renovate with Dagger
@split olive shows how he used Dagger to fix Renovate by building a bot that batches updates by module instead of spamming 22 PRs for every Go lib. It’s modular, efficient, and way less noisy.

**Join us live on YouTube or X **

undone parcel
#

I'm trying following

$ dagger call --aws-access-key-id env://AWS_ACCESS_KEY_ID --aws-secret-access-key env://AWS_SECRET_ACCESS_KEY --aws-session-token env://AWS_SESSION_TOKEN aws-container with-exec --args ["aws", "sts", "get-caller-identity"] stdout
βœ” connect 0.1s
βœ” load module 0.5s
✘ parsing command line arguments 0.0s
! unknown command "sts," for "dagger call aws-container with-exec"```

What is the correct syntax to pass in the with-exec args? it now fails with sts is a unknown command

This is what help shows 

--args strings Command to execute. Must be valid exec() arguments, not a shell command. Example:
["go", "run", "main.go"].

#

I have also considered using the dagger shell so I can use pipes and cleaner syntax, however then I can't do following in my GitHub workflow

      - name: AWS caller identity
        id: aws-caller-identity
        run: |
          caller_id="$(dagger call \
            --aws-access-key-id env://AWS_ACCESS_KEY_ID \
            --aws-secret-access-key env://AWS_SECRET_ACCESS_KEY \
            --aws-session-token env://AWS_SESSION_TOKEN \
            aws-container --env environments \
            with-exec --args aws sts get-caller-identity \
            stdout)"
          echo "caller_id=${caller_id}" >> $GITHUB_OUTPUT

      - name: Echo caller ID
        run: |
          echo Caller ID: ${CALLER_ID}
        env:
          CALLER_ID: ${{ steps.aws-caller-identity.outputs.caller_id }}

Trying to migrate some logic to dagger step by step

winter linden
neon warren
# undone parcel I'm trying following ``` $ dagger call --aws-access-key-id env://AWS_ACCESS_KEY...

There are some examples of array arguments on this page which should help: https://docs.dagger.io/api/arguments/#array-arguments

Dagger Functions, just like regular functions, can accept arguments. In addition to basic types (string, boolean, integer, arrays...), Dagger also defines powerful core types which Dagger Functions can use for their arguments, such as Directory, Container, Service, Secret, and many more.

analog raven
split olive
#

Hello.
This is the repository of my Dagger Renovate module I showed: https://github.com/chrira/dagger-renovate
As an example, it is used inside this module as renovate workflow to update itself: https://github.com/puzzle/dagger-module-helm

GitHub

Contribute to chrira/dagger-renovate development by creating an account on GitHub.

GitHub

Dagger Module providing Helm functionality. Contribute to puzzle/dagger-module-helm development by creating an account on GitHub.

tired moth
chilly arch
# chilly arch Hello everyone! **πŸš€ Dagger Community Call tomorrow at 9 am PTπŸš€ ** We look ...

Thank you @split olive , @midnight rock , @small river , and @slender otter for demoing at the Community Call today!

If you missed it, you can check out the recording here: https://t.co/ZinIGcp1dg

Demo snippets will be up tomorrow!

StarCraft in a container. Renovate reimagined. What happens when your automation is just code?Join the Dagger team and fellow Daggernauts for our bi-weekly C...

β–Ά Play video
patent plover
winter linden
patent plover
winter linden
#

we could add a silent field

patent plover
winter linden
patent plover
winter linden
#

@patent plover oh wait, I just checked and there is a dagger-flags field that is perfect for this

patent plover
#

Btw I'm struggling to understand what people are using dag.LLM for. Initially I thought it was helping to create CI/CD pipelines, but now as I know it, all I can think of using it for is to run tests against different models?

winter linden
patent plover
winter linden
#

For example you could write an agentic function to:

  • review code on demand
  • generate docs
  • do QA on an artifact
  • inspect a project and generate a CI workflow
  • generate a changelog
  • help you navigate a codebase
  • read a github issue and implement a solution
  • add tests
#

The Dagger CLI also has a builtin chat interface to drive a dag.LLM instance directly. Basically an interactive command-line agent which can call the dagger functions in the environment. Comparable to claude code, openai codex or goose

#

Lastly, we are adding MCP server support, so that you can also connect your Dagger environment to external AI apps

lime snow
#

I'm noticing that dagger is updating my function signatures with every call to dagger functions or dagger call <function-name> --help.

I used to need to call dagger develop for it to update function signatures.

Is this an improvement that has been made recently or have I broken something? πŸ˜„

patent plover
slender star
# patent plover Maybe I am thinking of dagger in the wrong way, but I think of it as a way of do...

Today, this is something that you do. We're working to make it easy for an agent to do to any project.

  • To "daggerize" your project today, run dagger init --sdk=go(for example) in your project dir, and you'll have a new .dagger directory with a new Dagger module with a couple of sample functions.
  • Create lint, build, test (for example) functions using the Dagger SDK. The CI quickstart takes you down that path: https://docs.dagger.io/quickstart/ci.
  • Now you can call your build function locally or from any CI, like GH actions workflows, for example.

The near future state is that you would use an agent written in Dagger to examine your project, determine how to do lint, build, test (or whatever) in Dagger, and it would write the module for you, and maybe offer a PR πŸ™‚

patent plover
narrow nymph
#

I'm noticing that dagger is updating my

slender star
# patent plover Yeah some CI/CD review agent would be nice. Typically I work with clients to imp...

The "daggerize any project" agent is something our team is working on, but you can build review agents or any other agent you need today! Here's the AI agent quickstart: https://docs.dagger.io/quickstart/agent?sdk=go and some example projects: https://docs.dagger.io/examples#ai-agent-examples

The same qualities that make Dagger excellent for build and tests, make it great for AI agents. Running them in CI or dev environments is a natural fit.

ripe kestrel
#

Hi babes, i'm back! ❀️ so happy to be using dagger. Just trying to understand how to configure host resource access to Dagger containers. We are hoping to use Dagger to run encapsulated workflows with full access to GPUs when they exist (we can ensure they run serially / don't compete for GPU usage in our orchestration scripts). Is that possible ? Default?

winter linden
north dune
#

Whoa, this new modules scanning feature is pretty cool!!

loud briar
winter linden
loud briar
#

Ah, looks good at a glance!

winter linden
#

Thanks! We're announcing it monday.

There's actually 2 features:

  • A private module catalog, continuously updated from changes on your git repos. Each module gets a generated API docs page like on daggerverse, and an activity feed with new versions. You can also navigate versions and dependencies.

  • module insights show traces in the context of your modules. So you can see in real-time who is using your modules and how; see what version is being used, how well it's performing; and troubleshooting errors

Infrastructure-wise, it adds a complete event routing layer to Dagger Cloud, which opens many exciting possibilities πŸ™‚

loud briar
#

That second point is going to be incredibly useful

north dune
#

Modules feature feedback

chilly arch
chilly arch
#

**Calling all SF/Bay Area Daggernauts! **

We're hacking in your area this week. If you haven't already, sign up for the SF Dagger Hack Night! https://lu.ma/p85doawg

Dagger is an open-source runtime for composable workflows. If you're curious about building AI agents that can interact, automate, and transform your…

winter linden
#

Actually I believe there is a fallback to vanilla git server with polling? cc @rigid pebble

winter linden
#

"coming soon" it is, then

tired moth
#

Module Catalog can replace the need of npm like registeries?

tired moth
tired moth
#

1000X better DX, we can create multiple products into dagger cloud. Charging very nominal like $1/month but can be another product like google cloud secret manager but for devops
https://github.com/dagger/dagger/issues/10388

GitHub

Problem Current Dagger pipelines lack a built-in, seamless, and secure method for handling sensitive information like API keys and database credentials across various execution environments. This c...

tired moth
tired moth
chilly arch
tawdry imp
#

Hi! I wrote a new tool on top of Dagger, using a declarative config: https://github.com/vbehar/mason
And I also wrote a quick blog post explaining why: https://whtwnd.com/vbehar.dev/3lp2uqrwpbo2i

Early release, but you know what we say... release early, release often πŸ˜‰

GitHub

Declarative build tool based on Dagger. Contribute to vbehar/mason development by creating an account on GitHub.

Mason: a declarative build tool on top of Dagger

I wrote something. A build tool. A declarative build tool on top of Dagger.

Why? Because I really like Dagger, but as I tried to spread its usage at work, I found that in its current form, it was difficult to scale its deployment.

My main concerns ...

cunning jolt
chilly arch
winter linden
#

Nicely done @karmic sand !

dusty knoll
#

Hi everyone !
I'm executing a test on a dotnet application using dagger ( for CI purpose ) but it do not work due to testcontainers usage... do you have some tips ?
i'm using typescript language ( already posted [here](#testcontainers message))

modest pier
# tired moth <@430802613848506380> can you please share any update on top of this? PLEASE

ah i had a wip up friday that i thought i had linked to the issue, but here you go: https://github.com/dagger/dagger/issues/9934. didn't land in 18.7 today, but probably in the next one. to be clear this doesn't support "live" host mounts like your comment requests, it busts the session cache for discrete function calls with +defaultPath host dirs.

GitHub

An open-source runtime for composable workflows. Great for AI agents and CI/CD. - Issues Β· dagger/dagger

gentle scroll
#

Hey can someone clarify? Are the intended markets for CI/CD stuff -vs- the agentic stuff-- basically two separate markets as far as your product is concerned?

#

like I am fascinated with agentic AI but have no interest in devops.

#

i want to string up multiple agents like in the multiple agent example and just experiment with it.. i don't have a devops or ci pipeline or aything like that though, and i have no need for CI

#

Or maybe there is some integral connection between CI and agentic design that i'm unaware of, like.. i guess what i'm asking isL:

Is dagger a CI tool first that people started using for agentic AI

#

like is it "off prescription" use when we use it for ai? (edit: i meant off-label)

winter linden
#

@gentle scroll Dagger is definitely more than a CI tool. It's really an operating system for DAGs. So very generalizable.

CI is our beachhead to introduce the world to a better software architecture (DAGs of immutable objects flowing through ephemeral functions) without sacrificing compatibility (thanks to containers). But it's engraved in the DNA of the platform to provide system primitives that can generalize beyond any one use case.

gentle scroll
#

okay. yea. i can get behind that

gentle scroll
#

sounds almost poetic

#

ok so just because i don't have devops experience, i shouldn't shy away if i want to conduct my multi-agent experiments then

winter linden
#

Oh yeah if you're into this sort of tech, we took it very far 😁 And it applies fantastically well to agents as it turns out.

We do have some rough edges in the DX so don't hesitate to ask if you're stuck or confused! It's probably not you πŸ™‚

gentle scroll
#

cool cool it looks really awesome (it's nice to see the developer answering questions on discord too)

winter linden
winter linden
#

not to mention a friendly and super active community

gentle scroll
#

when i check my provider it says "other" (via llm | provider) is that what i should correctly be seeing if I am using an openai endpoint on my local network? ```

gentle scroll
gentle scroll
#

Dumb q- Is it expected behavior to see the same thing repeated in the cli output? the way it says "write a curl clone" multiple times.. just want to be sure i'm not like, running 2 dagger engines somehow twice at the same time..

karmic sand
sharp marsh
narrow nymph
marsh timber
#

hey guys

#

If i attach an aws role to the service account associated with dagger

#

Do all the pods then have the ability to perform AWS actions?

#

and kube for that matter

#

kinda be handy if it did.

gentle scroll
#

Quick question about DAGS. and Dagger,, DAG based workflows are kind of new to me.. I'm used to working in a game engine where logic is executed and variables updated via an ever-busy, looping state machine. I am beginning to understand that the acyclic in dag means "no looping" so I'm curious about the differences in these two approaches, and how I could have an "always on" equivalent to my looping state machine?

gentle scroll
winter linden
#

So when you run dagger, you're running a DAG which can contain loops, which in turn can contain more DAGs, which call more loops, all the way down

winter linden
#

At the moment Dagger can only start with a DAG. That is, it doesn't run continuously in a loop, or give you an event/trigger system to continuously re-run a DAG. You have to bring your own outer loop.

Typical outer loops that you can embed Dagger in:

  • CI (git changes trigger CI job, which calls Dagger)
  • Dev loop (dev runs dagger directly from the CLI)
  • Custom application (application code makes dagger calls as part of its own business logic loop)
  • AI agent (LLM calls dagger functions as part of its agentic loop, typically over MCP)
gentle scroll
#

Oh okay, I see how that could be very flexible. What a clever system.

Just as an aside, I've seen a someoneusign Node-RED from IBM to hook up workflows to LLM models for industrial automation applications. Like feeding events and metrics from sensors and activating actuators and stuff. I think it maybe would use DAGs too considering its acyclic workflow-first approach but they did add some kind of looping functionality.. But I think they haven't made this portable architecture you've come up with and you're stuck in their little nodered ecosystem.

winter linden
#

But there's an inherent network effect to workflows - the whole point is to connect things. So narrow specialized application is not actually a benefit. Because you're leaving it to the user to stitch together several specialized systems to actually model the whole workflow.

#

And that leads to the current state, layers and layers of mini-platforms that you can't generalize, but you can't get rid of either, so you glue them together when bash scripts

gentle scroll
#

Anyone know if tonight's event will be live streamed

chilly arch
slim geyser
#

off topic: Qr code for todays hacking event how do i get it?

stoic knot
#

When running Dagger in interactive mode, so that when an error happens we get dropped into the container shell, it seems the error is not printed. If we exit the shell, or don't use interactive, then it is printed. Is this a known issue? Is it possible fixed in more recent version v0.16.2?

Side note, the 4th arg (-X <space> ...) loses the quoting and the command cannot be simply copied & pasted

missing error msg

    Container.withExec(args: ["go", "build", "-ldflags", "-X 'main.Version=feature-foobar'", "-o", "./foo", "./main.go"]): Container!

! process "go build -ldflags -X 'main.Version=feature-foobar' -o ./foo ./main.go" did not complete successfully: exit code: 1
sh-4.4# 

has error msg

✘ .withExec(args: ["go", "build", "-ldflags", "-X 'main.Version=feature-foobar'", "-o", "./fpp", "./main.go"]): Container! 5.8s
┃ # command-line-arguments                                                                                                                            
┃ ./main.go:14:1: syntax error: non-declaration statement outside function body                                                                       
! process "go build -ldflags -X 'main.Version=feature-foobar' -o ./foo ./main.go" did not complete successfully: exit code: 1
slender charm
#

off topic: Qr code for todays hacking

sharp marsh
sharp marsh
gloomy drum
#

Folks, I'm running dagger engine on k8s, and one thing that I'm noticing is that even if I have my imagePullSecrets configured on the k8s side, it doesn't seem that dagger engine understands it.

Am I missing something obvious? Is there a specific location where I should drop a file to make dagger happier about this?

Any pointer to a documentation would be awesome.

vestal creek
#

Why are required arguments -- style with dagger call, but positional with Dagger shell?

Deploy a website to Cloudflare Pages.

USAGE
  dagger call deploy [arguments]

ARGUMENTS
      --cloudflare-api-token Secret   [required]
      --dist Directory                [required]
      --gitlab-api-token Secret       [required]
      --wrangler-toml File            [required]
      --merge-request-id string
sharp marsh
# gloomy drum Folks, I'm running dagger engine on k8s, and one thing that I'm noticing is that...

imagePullSecrets currently don't work since those configure the kube CRI to pull secrets from, no the dagger engine. In order for dagger to authenticate to the underlying OCI registry you currently have two ways of doing that.

  1. Perform a docker login in the client where dagger is being executed
  2. Use the WithRegistryAuth call and explicitly pass your registry credentials there.

Having said that, it'd be nice to have better support for this. cc @rigid pebble @heavy gazelle. @gloomy drum would you mind opening an issue please?

sharp marsh
vestal creek
#

It's a little weird πŸ™‚

#

but it is very bash, so I'll make friends with it

sharp marsh
vestal creek
#

I expected the behaviour to be the same as dagger call, perhaps that should adopt positional for required arguments too

#

I feel like they shouldn't differentiate

gloomy drum
# sharp marsh `imagePullSecrets` currently don't work since those configure the kube CRI to pu...

I will open an issue later Today about this, and this would be amazing to use. πŸ™‚
I've had a short convo with Gerhard on this as well, and both the ideas of having the ~/.docker/config.json (where the CLI runs) and explicitly calling docker login are not really working for me, as I am still facing 429 Too Many Requests - Server message: toomanyrequests: You have reached your unauthenticated pull rate limit.

winter linden
#

Forwarding to general, this is good stuff! Thanks @wary sparrow for joining us last night!

wary sparrow
gloomy drum
dusty knoll
#

Hi ! does someone already used a cache with AzureDevops pipeline ?

sharp marsh
winter linden
wary peak
#

Quick question. πŸ˜„ I'm noticing that the volume attached to the dagger daemon is leaving behind some large artifacts, specifically the go build cache (GOCACHE or /root/.cache/go-build). Usually not a big deal but we're compiling like 20 different large binaries in 1 process which means it adds up quick. Is there a way I can prevent this large directory from ending up in the daemon's volume? I'm thinking I could rm -rf $(go env GOCACHE) after it's all done?

winter linden
wary peak
#

It just gets cached alongside the rest of the container rootfs. Locally I think that's totally fine but I could throw it in a CacheVolume and it'd probably keep my computer from exploding. atm our github action runners are running out of space before the worfklow is able to complete πŸ˜‚

winter linden
#

Yeah I see, in your current setup, every time your source changes, you're 1) starting from an empty go cache, wasting compute, network bandwidth, and clock time; and 2) storing a full copy of your go cache multiplied each time

#

So by using a cache volume you'll make your builds faster and save disk space

gentle scroll
#

Wow Dagger is SO COOL. I just ran the multiagent demo entirely locally on my mac m3 with lmstudio hosting v3-0324 and it did a great job!

wary peak
#

Yeah definitely! In GitHub Actions what's the current way to get a working reusable CacheVolume? Right now if I switch it to a CacheVolume I think it would still start from scratch 😦

winter linden
wary peak
# winter linden Yeah that's a blind spot for us... We're working on making this part much much b...

Pains me to say it but we don't really use any caching at the moment. It's a shame too because I put a lot of effort into building our dagger pipelines in a way that they could take advantage of it.

For each process (building the frontend, storybook, packaging the tar.gz, building the backend, downloading modules / yarn, etc) we only copy in the files that are absolutely needed, and most PRs are small and only change 1 small thing at a time

winter linden
#

Also if you run several go builds in dagger on the same CI job, then at least you'll get benefits of caching within that job

mystic mantle
#

It seems depot would be the way to go, but they might need on premise, and for that I don't have a good idea on what to suggest.

gentle scroll
#

Howdy! I 'm trying to fire up the Melvin example but i'm kinda new to go .. any ideas on what could be causing the module to do this?

βœ” connect 0.2s
✘ load module 2.0s
! failed to serve module: input: moduleSource.asModule failed to call module "melvin" to get functions: call constructor:
! process "go build -ldflags -s -w -o /runtime ." did not complete successfully: exit code: 1```
winter linden
wary peak
#

In that case, you won't see any downside

gentle scroll
stoic knot
#

echo '{daggerEngine{localCache{entrySet}}}' | dagger query used to work to get cache entries, but it seems "daggerEngine" is no longer in the graphql?

sharp marsh
sharp marsh
winter linden
stoic knot
sand gorge
#

https://events.pinetool.ai/3412/#sessions/110563?referrer[pathname]=%2Fsessions&referrer[search]=&referrer[title]=Sessions

next week my Dagger tour starts. 2x conferences.

This is DevOps Pro Europe - probably 1000 attendees (or maybe more). https://devopspro.lt/

DevOps Pro Europe conference covers the core principles and concepts of the DevOps methodology and demonstrates how to use the most common DevOps patterns to develop, deploy and maintain applications on-premises and in the cloud.

sharp marsh
dusty knoll
#

Up πŸ™‚ : Hi ! does someone already used a cache with AzureDevops pipeline ?

sharp marsh
dusty knoll
#

is allowing a cached directory on azure pipeline can work ?

sharp marsh
dusty knoll
#

local i think

#

let's try πŸ™‚

sharp marsh
# dusty knoll local i think

It might seem "local" but that path in the FS I'd assume is connected to a network storage device since otherwise it wouldn't be possible to mount that cache in a subsequent ephemeral pipeline

dusty knoll
#

ok maybe

#

i will try it and let you know πŸ™‚

dusty knoll
#

is dagger cloud compatible with Azure devops pipeline ?

dusty knoll
#

i got on CI and locally : (traces export: failed to send to https://api.dagger.cloud/v1/traces: 500 Internal Server Error (body: (empty)))

dusty knoll
#

ok

#

same issue

#

do not seems to be linked to my project nor env

sharp marsh
sharp marsh
dusty knoll
#

i see traces in dagger cloud but still failure

sharp marsh
#

currently wrapping up something

#

it's good to know the trace still shows in cloud πŸ™

dusty knoll
#

i was not logged but still have the issue after doing dagger login

#

weird display

cunning jolt
#

Is there a simple docs generator for dagger modules? I want to generate some docs for my modules with examples. I know the daggerverse.dev does it but that code isn't open. Is it?

winter linden
# cunning jolt Is there a simple docs generator for dagger modules? I want to generate some doc...

You're in luck, we just shipped Module Catalog in Dagger Cloud, which generates API docs pages for your private modules as well

It's actually an improved version of the Daggerverse pages. https://dagger.io/blog/module-catalog-insights

Dagger Cloud customers can now discover, reuse, and track Dagger modules across their org. Less YAML, less reinvention, more shipping.

cunning jolt
#

Ah I'm aware of the module catalog πŸ™‚ I am not on dagger cloud yet. Trying to improve my existing private module catalog with docs.

warm temple
#

If you're looking to generate better code examples that show up there, check out my module kpenfound/dagger-programmer

cunning jolt
warm temple
#

Ah right. I think it should be easy to script a more basic version

winter linden
#

We could add the ability to generate the docs from Dagger Cloud and download them for self-hosting, if that helps

#

Like CI/CD for you Dagger module docs πŸ™‚

cunning jolt
tired moth
amber quail
#

Hey folks I have a question regarding the new experimental clients. First of all it's working really well chefkiss
I'm just now running in an issue where if I invocate the library with go run main.go it's working but in the built state I get a GRAPHQL_VALIDATION_FAILED error that it cannot find the modules that are installed as dependencies. I thought when building the go binary it will compile the graphql schema with the added modules?

dusty knoll
sharp marsh
#

Just sent you a DM Tony

sharp marsh
amber quail
#

Hey folks I have a question regarding

sand gorge
#

I'm flying now to DevOps Pro EU. I need core team members to drop me links to Demos, or links to some parts of repos with the latest good stuff, that you think DevOps teams will find interesting.

Python is primary
Golang is secondary
JavaScript is good for easy understanding.

If you were with me at dagger KubeCon exhibitior stand you'll know what I mean.

Please let's make a thread and drop as much as you can.

I'll spend my time this evening going through it all, and trying to make some interesting Demos.

There will be around 300 people in the audience and probably 99% never seen Dagger before, so let's blow their kinds.

Tyvm for support.

daggerfire

cunning jolt
#

is --platform=current documented somewhere? I see refs to it on discord. I'm trying to get current host platform. dag.Module().Runtime().Platform(ctx) panics

slender star
# cunning jolt is `--platform=current` documented somewhere? I see refs to it on discord. I'm t...

I get the panic at dagger core module runtime before platform. Guessing this is not meant to be accessed directly.

This works for default engine platform: dagger core default-platform
linux/arm64

Realizing that --platform=current comes from here
https://github.com/dagger/dagger/blob/main/cmd/dagger/flags.go#L725
https://github.com/dagger/dagger/pull/7158

https://github.com/dagger/dagger/issues/8354#issuecomment-2332652070
Finding this proposal related. ⚠️ Warning, below is NOT implemented.

func Foo(
  // +optional
  // +default="client"      <-- OPTION 1: use the client's platform
  // +default="runtime"    <-- OPTION 2: use the current runtime platform (running the current function)
  // +default="engine"      <-- OPTION 3: use the engine's default platform
  platform dagger.Platform,
)
$ dagger call foo --platform=client
$ dagger call foo --platform=runtime
$ dagger call foo --platform=engine

Something like that still needed, do you think, @cunning jolt @sharp marsh ? πŸ‘†

cunning jolt
#

Something like that still needed

I think so. Or any other way to grab the module runtime platform programatically.

slender star
cunning jolt
#

And from the module code itself. For example, I want to pick between amd and arm based on host when building a docker image.

winter linden
#

@cunning jolt for the runtime platform (the one running the engine) there is dag.DefaultPlatform()

cunning jolt
#

Oh! that would work let me try. Would it be possible to cross-link the main docs site with the API site? When I search "defaultplatform" in the main site, it doesn't show me the dagger API results

slender star
cunning jolt
#

should dag.Module().Runtime() throw a panic? If it's not supposed to be used by consumers, shouldn't it be hidden? Happy to open an issue for it if that's the expected result.

slender star
dusty knoll
#

Hello, i got something weird when installing a new module with "dagger install" my sdk/client.gen.ts is wiped everytime... that cause my import break :/

#

known issue ?

slender charm
dusty knoll
#

it was not the first time, i had the same with testcontainer module...

#

dagger develop do not restore :/

#

last time (with testcontainer module install) i completely restarted the project

dusty knoll
#

@slender charm any info about it ?

cunning jolt
mild coral
#

Hi there guys. Chris here from Nine. Got a question regarding interface codegen.

It seems if I create the following interface:

// ModuleX

type Task interface {
  Do() *dagger.Container
}

type ModuleX struct {

}

func (m *ModuleX) Do(t Task) *dagger.Container {
    return task.Do()
}

and the following type:

// MyModule

type MyModule struct {}

func (m *MyModule) Do(ctx context.Context) (*dagger.Container, error) {
  // ...
}

then when running dagger develop, MyModule won't have the .AsModuleXTask method generated. However I believe if I were to call the graphql API directly it would work.

winter linden
sharp marsh
winter linden
sharp marsh
#

two should be ok. In this case I see two modules so that should work

#

since there's an implementation in the same module as the interface definition

winter linden
#

ah right! yeah makes sense

mild coral
#

Hey guys! Yes have scanned those docs quite a bit. And yes my example was missing DaggerObject!

#

I think even with DaggerObject it has this behaviour... I will try to produce an actual example on github for you guys

mild coral
#

Okay after a bit of testing I think its a case of PEBCAK

#

I'll get back to you if I manage to reproduce it..

slender charm
mild coral
#

Pleasure Lev. Having lots of fun with dagger these days

#

This is a sick product

#

Got my team very excited

#

The reaction was "yeah we're using dagger, we knew that all along"

slender charm
mild coral
#

We have a use case where we would like to dynamically import a module and then load it into the value of an interface type.
The reason is we want to drive the version of a particular module from a file checked into the repo that we control. Therefore rather than using the normal module resolution that is coming from dagger.json, we want to read in this file and do this at runtime. I actually figured out how to do this.

It seems to be a case of resolving that module via dag.Git() then using .AsModule(). Finally calling .Serve on that module loads the module up. Then I use the GraphQL API to get the module's ID and load that into the interface type:

        client := querybuilder.Query().Client(dag.GraphQLClient())

    err := module.Serve(ctx)
    if err != nil {
        return nil, err
    }

    name, err := module.Name(ctx)
    if err != nil {
        return nil, err
    }

    var id string
    err = client.Select(toCamelCase(name)).
        Arg("source", source).
        Arg("sshSocket", sshSocket).
        Select("asGolangServiceBuilder").
        Select("id").
        Bind(&id).
        Execute(ctx)
    if err != nil {
        return nil, err
    }

    return LoadBuilderFromID(dag, BuilderID(id)), nil

All this actually works and is pretty cool

#

Just wondering however, is this likely to get us into trouble later?

#

If we use the GraphQL API directly like this, would there ever be a chance that these APIs might change?

slender charm
mild coral
#

There is a desire to avoid a local dagger module in repos if we can avoid it. What this means is that we are looking to invoke the dagger command like this:


dagger call -m github.com/nine-digital/dagger-go-service ci-check-pull-request
#

So there wouldn't be a dagger.json in the first place

#

We are thinking this might reduce the difficulties when rolling out across the organisation's huge codebase. We have >3000 repos and >300 developers... having a local dagger module in each repo could create a lot of "snowflakes"

#

So that is the motivation for not having a local dagger module

#

Now I should clarify that our architecture for the dagger modules would be comprised of two components:

  • CI module - performs tasks that don't really need to be done on the developer's machine such as interacting with the container registry, putting a comment on a github PR, running stuff against the real cluster
  • Builder module - concerned with producing artifacts tied to the source code
#

Our plan is to loosely pin the CI module to a branch ( by way of using the -m flag like above )

#

And to pin the builder module since it is concerned with producing artifacts and we want consistent results from it

#

So to get everything we want here, we are looking at this dynamic import mechanic so that we can do:

dagger call -m <ci-module> ci-check-pull-request and then that pulls in the builder module dynamically at the specified version.

#

The result is we avoid boilerplate of a repo dagger module whilst still daggerising our repo πŸ™‚

#

It's an idea currently being explored by the team.

sharp marsh
mild coral
#

Hi Marcosnils. That file would exist on every repo. A simple yaml file in each repo:

goBuilderRef: 0.1.0
sharp marsh
mild coral
#

Our builder module will have +defaultPath=/ for the src directory being passed in

#

But good point, this command is still a bit tedious

#

we will have a big -m <module> flag and that will cramp up the dev experience a bit

sharp marsh
mild coral
#

src hopefully not

#

but other things yes

sharp marsh
mild coral
#

Here is the module construtor:

func New(
    ctx context.Context,

    // The CI platform that is running
    // +optional
    ciPlatform string,

    // A directory holding the goBuilder module, to override
    // the infrastructure/denv.yaml. Useful for testing locally
    // with an experimental version of the goBuilder.
    // The module must be in a directory called `go-builder`
    // under the passed in directory.
    // +optional
    goBuilderOverride *dagger.Directory,

    // A token for authenticating to github
    // +optional
    githubToken *dagger.Secret,

    // The pull request issue id
    // +optional
    issueID int,

    // The source to compile
    // +defaultPath="/"
    src *dagger.Directory,

    // The ssh socket of your machine. Typically set to the value ${SSH_AUTH_SOCK}
    ssh *dagger.Socket,
)
sharp marsh
#

since defaultPath will only be relative to the remote module when using -m

mild coral
#

ah okay didn't know that

#

yeah so you are spot on this is going to make a very long command for developers to type out

sharp marsh
sharp marsh
mild coral
#

they would need to do :

dagger call -m <module> --ssh=${SSH_AUTH_SOCK} --src=. ci-check-pull-request
sharp marsh
mild coral
#

so at this stage we are thinking of basically creating a thin wrapper which does nothing more than inject those flags to the dagger call command

#

We are thinking of calling our wrapper denv

#

so the developer could theoretically type denv call ci-check-pull-request and this would expand out to the above command

#

it would only do this if the second argument was call... in all other cases, it would just pass all the arguments to dagger as per normal

#

so denv functions should work etc. etc.

sharp marsh
# mild coral so `denv functions` should work etc. etc.

yep, that works. There's some users in the community which follow a similar pattern where they prefer devs and app repos not to have local dagger modules and they leverage the -m remote flag so the platform team can drive a more curated and controlled experience

#

In that sense it makes sense to give them some knobs they can configure in a config file so they can dynamically set some things

winter linden
#

@mild coral @sharp marsh I'm starting a thread for this

sand gorge
#

For a presentation, what kind of things do we think DevOps Engineers would be interested to see? When seeing dagger for the first time ..

slender star
#

For a presentation, what kind of things

loud briar
#

Question re dagger install .. for testing a module: it seems to lag behind the actual module. I've made changes to the module itself, saved the file, but running the test module doesn't pick up those saved changes. dagger develop doesn't seem to do anything. First time I've really done this submodule tests layout, what am I missing?

gentle scroll
#

Would anyone happen to know if there is a particular LLM which is ideal for pair-programming-with-ai-assistant (like with Cline or Roo Code) and more importantly, which happens to understand the Dagger methodology with its most up-to-date protocols and ways of doing things? Being nascent I wonder if Dagger methodology is too new to be in existing LLM training data.. Or if there may be perhaps an existing body of context already-authored to clue the LLM in so it produces clean and up to date dagger code? I mean i can provide documentation and examples i guess, just wondering if maybe there is a finetune model or a body of already prepared context for models to use.

winter linden
vestal creek
tribal quail
#

Hey everyone. I have a question regarding dagger versioning ( and the dagger engine versioning)
I'm currently hosting a v0.18.2 engine. We writes modules that are mostly with more recent versions but not all modules are on the same versions.
How can i solve this issue ? Do I have to run a single engine on the latest version ? Do I need to run an engine for each of the dagger versions we use ?

chilly arch
#

Hey everyone! We’re excited to see you at Dagger Live tomorrow (formerly known as the Dagger Community Call)!

**Tomorrow will be all about autonomous workflows & reusable building blocks! **

🧱 @sharp marsh and @rigid pebble will showcase the brand-new Module Catalog & Insights, giving you the power to discover, reuse, and manage modules across your team, so you can build your own software factory.

πŸ€– Plus, @warm temple will demo how to create your own AI agent that builds, tests, and reviews code, so you can let your workflows run themselves.

See you there! We'll be live on YouTube and X. https://www.youtube.com/watch?v=u9XICtc8FeI

mystic citrus
#

Hey all,
I have some good news, we have been struggling with slow builds in Dagger for Harbor Next. (https://github.com/container-registry/harbor-next/tree/build/daggerize/.dagger)

After we have spun up a Dagger service on a Hetzner Machine, we were able to chop build times from ~30min, to 1-3 minutes.
So now we are 10x faster than the 2k loc Makefile,

GitHub

Next-generation Harbor. Use features before they move upstream. - container-registry/harbor-next

rigid pebble
#

harbor-next/.dagger at build/daggerize Β·...

wary peak
#

πŸ˜„ lots of dagger users on public github runners it seems

Error response from daemon: Head "https://registry.dagger.io/v2/engine/manifests/v0.18.8": toomanyrequests: retry-after: 394.374Β΅s, allowed: 44000/minute
gloomy drum
#

@winter linden ... πŸ™‚

dusty knoll
#

hello is it necessary to be root when running dagger ?

sharp marsh
#

If you're running the engine in a k8s environment, it requires the privileged security context to be set.

dusty knoll
#

local machine yes

sand gorge
#

300 more people now love Dagger.

Mission complete. Thanks to @slender star and @heavy karma for the help.

Images will follow from the conf photographer, but here is a phone camera one

#

The pro photographer should have good ones. I'm enthusiastic to see what they have

chilly arch
# chilly arch Hey everyone! We’re excited to see you at Dagger Live tomorrow (formerly known a...

@here Dagger Live Starting Now! https://www.youtube.com/watch?v=u9XICtc8FeI

  • Watch Kyle Penfound demo how AI agents build, test, and review codeβ€”while he plays video games.
  • Get a deeper dive into the new Module Catalog & Insights: discover, reuse, and manage modules to build your own software factory.
β–Ά Play video
chilly arch
mild coral
#

Hi there team. We have a use case where we need to pass the host's SSH socket to dagger so that it can use it to resolve private sources during container builds. Specifically this is for resolving our private go libraries. To do this currently we are using the *dagger.Socket type and using commands like this:

dagger call function --ssh=${SSH_AUTH_SOCK}

We were wondering if there was a way to accept this as a default as it would need to be typed out by the developer each time. Understand that dagger's security posture is to require the developer to explicitly grant resources to dagger which makes perfect sense. Still just wondering if there was anything to allow this to be more automated in anyway πŸ™‚

This is kinda related to some of my earlier questions about having a wrapper. We are trying to look for ways to avoid wrapping if at all possible πŸ™‚

slender charm
#

Private Go Modules

dusty knoll
sharp marsh
tribal quail
#

If I have Module A calling Module B. Can i retrieve on module B the Git Ref of the directory that i run module A in ?

#

dag.CurrentModule returns module B ( understanbly) . what i'm after is the calling module

winter linden
jagged epoch
#

I'm going to continue the update for platform stuff here since it's not really intro anymore.

I'm going to set up k0s instead.

Creating a new Kind cluster named 'bootstrap' using podman...
using podman due to KIND_EXPERIMENTAL_PROVIDER
enabling experimental podman provider
Creating cluster "bootstrap" ...
 βœ“ Ensuring node image (kindest/node:v1.31.0) πŸ–Ό
 βœ“ Preparing nodes πŸ“¦ πŸ“¦ πŸ“¦ πŸ“¦
 βœ“ Configuring the external load balancer βš–οΈ
 βœ“ Writing configuration πŸ“œ
⠎⠁ Starting control-plane πŸ•ΉοΈ

It's not so happy with podman. I had trouble before but I think it might work with either docker/podman with k0s.

jagged epoch
#

I got tired fast and had to get some sleep before the flight back. I can come back to this soon. Need to spend some time this weekend getting ready for a customer demo early next week for the hardware project.

Going to head to the airport now, Cheers!

winter linden
#

Thanks for sharing @jagged epoch . You plan on integrating Dagger into this platform?

jagged epoch
dusty knoll
jagged epoch
#

There is the office/lab. My favorite things. Software development, music, hardware and electronics. My life is a mix of all these things.

jagged epoch
#

What a night. Was working till 4 or maybe 5 am. I have the demo mostly ready for client. I added automated tests with playwright and if it wasn't for having human accept web serial would all be AI driven automated testing and iteration. Something I was talking about at conference. It isn't hardware testing hardware yet. In any case once I think I have the recipe for what/how that works down I can model it with dagger as a workflow pattern others can use.

I am most worried about not having the time I need. 4 days left need to do Cisco work, then prepare for Cisco Live.

Btw if anyone is attending, I will be working in the DevNet area. Would love to visit. Wife is also going(on trip not conference) She is my hero because she runs all the things at home so I can do what I love like stay up till 4am making dreams reality.

Hope demo is amazing and we get more work, so I can do more of what I love. I can update. Also if there is a channel for hardware, and it can be for using Dagger for hardware projects I can give updates there too so don't spam the general chat if that is a concern.

#

That's what it looks like when Claude is running development and automated test cases with playwright and examining the screen shots πŸ˜‰

cursive moon
#

Thread

sharp marsh
dusty knoll
#

yes

sharp marsh
sharp marsh
# dusty knoll yes

still can't repro Tony. I've installed multiple dependencies along with the git-info that you have provided and I still get the client.gen.ts each time

#

here's what I did

dagger init --sdk typescript --name foo
dagger install github.com/vbehar/daggerverse/git-info@v0.13.2
dagger install github.com/sagikazarmark/daggerverse/helm@v0.14.0

^ after running all that, I still get the client.gen.ts after running dagger develop

warm temple
# dusty knoll yes

Hey @dusty knoll which version of Dagger are you using? And when you say it wipes it, you mean the file is empty after, or it's regenerated with different contents? Are you trying to modify the client.gen.ts in any way?

dusty knoll
#

completely wiped, last version of dagger

#

no edit on client.gen.ts

dusty knoll
#

Stupid question, but have you tried to generate new sdk using IA agent ?

vivid mango
#

in dagger 0.18.6, while exitting a container container | from node:18-alpine | with-mounted-directory /mnt ./ | terminal back into dagger shell, I woke up some hungry ass beast sleeping inside Dagger that immediatelly ate up all the remaining 14G of my RAM.

Yes, I'm calling it -- there's a memleak somewhere in there πŸ™‚ killing dagger process from another TTY caused it to print some stacktrace, IDK if it's of any use..

$ ps faxu | grep dagger
<...>
netikras  1290607  6.4 19.5 14100236 12764040 pts/74 Sl+ 18:26   1:53      \_ dagger shell
netikras  1290654  0.0  0.0 2291180 9324 ?        Ssl  18:26   0:00          \_ docker exec -i dagger-engine-v0.18.6 buildctl dial-stdio
netikras  1290723  0.0  0.0 2217448 8780 ?        Ssl  18:26   0:00          \_ docker exec -i dagger-engine-v0.18.6 buildctl dial-stdio
netikras  1290758  0.0  0.0 2291436 9280 ?        Ssl  18:26   0:00          \_ docker exec -i dagger-engine-v0.18.6 buildctl dial-stdio
<...>

What's curious is that it was triggerred by exitting the |terminal back into the dagger shell, not entering the terminal or doing npm builds in it.

cursive moon
#

@dusty knoll I'll be the one to say it, the Dagger team is being very kind but your question does not make any sense. If you'd like help, provide the following things.

  1. Run dagger version and supply the text that is output like so: dagger v0.18.6 (docker-image://registry.dagger.io/engine:v0.18.6) linux/amd64
  2. Explain what you mean by wiped. Completely wiped does not mean anything in this context. I believe you are saying that client.gen.ts is empty after you use dagger install. Take a screenshot of the before, run dagger install and take a screenshot of the after. Include both of them.
  3. It would help to know more about your project and use case in general. What your dagger code looks like, what are you trying to install, etc.
dusty knoll
#

πŸ˜‚

dusty knoll
#

Ok, here the video and after taking some time to understand where exactly, i think it's an IDE issue...
After init of the dagger project when i open it through Rider or Webstorm this file is empty... ( but not empty on my storage ) i do not know why :/

#

dagger v0.18.8 (docker-image://registry.dagger.io/engine:v0.18.8) darwin/arm64

neon warren
# dusty knoll Ok, here the video and after taking some time to understand where exactly, i thi...

are you running your shell/terminal as root (sudo su)? I'm not sure if that is going to be a permissions issue with the file or not but I noticed it seemed to be running as the root user, which is most likely not the same user your IDE is opened as. If you are running as root, might be worth running the dagger commands as your normal user - if you can.

Also, after running dagger init --sdk=typescript can you open that directory in your IDE and then in the terminal again, run dagger develop then recheck the contents of that file?

sharp marsh
stoic knot
#

Tried out the Dagger DaemonSet Helm Chart last night (in Kind + Argo), very nice! Will be rolling out to GKE before long. Still need to figure out taints and engine config via the chart

topaz arrow
#

wait... is the only way to access any "host" resources thru CLI arguments or the REPL?

If I know I want to build a docker image with files from my current directory, is there any way I can write my module so it's possible to call dagger -c fn_name and have the function be able to access the files it needs to build the image?

winter linden
# topaz arrow wait... is the only way to access any "host" resources thru CLI arguments or the...

Modules are sandboxed by design, it's one of the features that a module only has access to its own files, and to whatever you pass explicitly as arguments. No implicit host access. This is what makes Dagger modules safely reusable out of the box. For example you could develop a custom CLI (basically your alternative to the dagger CLI) or a custom server.

Of course that custom client would not be package as a dagger module, so it wouldn't benefit from the sandboxing, cross-language integration etc. So it's a tradeoff.

topaz arrow
winter linden
#

Every dagger module has a context (usually the git repository it's part of), and a root (the directory containing the dagger.json). Any time one of your module's functions receives an argument of type File or Directory, you can specify a default path for that argument. If the default is used, it will be loaded at that path from the context (if the path is absolute) or from the module root (if the path is relative).

So for example:

func (m *MyModule) Build(
  // The source directory to build
  // +defaultPath="."
  source *dagger.Directory,
) {
  // Build implementation goes here
}

This allows you to dagger call build and by default source will be set to the current module's root directory.

#

But you can always override the path, eg. dagger call build --source=https://github.com/foo/bar#other-version:/dir for example to run build logic X against source directory Y

#

Sometimes you want the build logic tightly coupled to the source directory, sometimes not. It depends of the situation. Dagger lets you choose the right pattern for each situation.

dusty knoll
#

cc @sharp marsh

slender star
winter linden
slender star
cursive moon
#

I think what would have helped me understand Dagger at the beginning would have been two things:

  1. A picture of the architecture. The intro has a nice architecture section, but it didn't really click for me at the start. Understanding that the code I write, is client code that ships off my local environment to the Dagger engine was something fundamental that might use a little picture.
  2. An understanding that everything is sandboxed. I was very confused at the start why every command basically started with .container(). I guess this comes from other build frameworks where the building is happening on my local machine, in my environment. Dagger is different in both of those ways (I guess it is still my local machine but the engine is the one running it yknow).

I think starting off with these two things would have helped me ask the right questions earlier and probably search the docs much more effectively on my own.

sharp marsh
winter linden
#

⏰ Dagger 0.18.9 dropped yesterday. It's mostly optimizations and bugfixes, but there is a hidden gem: you can now reload host files as they change.

This means you can keep a dagger shell session open while you develop, then call build, test, lint or other custom functions in your module, knowing that your latest changes are being loaded.

You can also control the caching behavior when calling the low level Host.file() and Host.directory() functions directly. In dagger shell: host | file --no-cache foo.txt

cursive moon
winter linden
#

Automatic

#

But doesn't apply to the module's code - only to its arguments (eg. the source code being tested, or built etc)

#

We're also looking at automatically reloading the module from local source, but that's a separate issue

chilly arch
#

<@&1285644377615634544> fans!

If you’re a Deno Dagger developer, you may already know this β€” but just in case…

Deno support is officially here in Dagger! πŸŽ‰
This has been a highly requested feature, and it’s finally possible thanks to major improvements in Deno 2 and tons of input from our amazing community.

πŸ‘‰ Learn more: https://dagger.io/blog/dagger-supports-deno
πŸ‘‰ Join #deno to share what you’re building!

Build powerful software environments and containerized operations from modular components and simple functions. Perfect for complex software delivery and AI agents. Built by the creators of Docker.

mystic charm
#

@winter linden @chilly arch Wow, two amazing new features right as I ramp up my use of Dagger!

mild coral
#

Hey guys a question about runtime containers.

Would copying files into my module runtime container produce any side effects for subsequent runs of that module?

winter linden
mild coral
#

I forget the API but I know there is an example in the cookbook

#

Great thank you!

winter linden
#

oh that! Yeah, all good. No side effects. Useful when you need a native library that access the local filesystem directly. Is that your situation?

#

The only "side effect" is that it copies the full contents of the file, and is not as efficient as other dagger file operations (kind of like copying data from kernel to userland is slower than keeping it in kernel). So make sure you actually need it. But otherwise it works just fine

mild coral
#

thanks Solomon I'll give it a test and see if it works well for our use case.

topaz arrow
#

what decides whether a chained function is cached or not? for example, I see this in one of my dagger modules:

$ container: Container! 0.0s CACHED
$ .from(address: "python:3.9-bullseye"): Container! 0.0s CACHED
βœ” .withWorkdir(path: "/opt"): Container! 0.0s

Why would the .withWorkdir(...) command not be cached here? if the container itself is cached?

rich barn
#

the quickstart for adding an ai agent to an existing repo was awesome. thanks @warm temple + team!

everything went pretty smooth, except for one bump during my local development. i wanted to use ollama, and i followed the instructions to get the IP address of my host, but the dagger engine was still not able to reach it. after a few minutes of troubleshooting i just gave up and switch to anthropic (which makes more sense for the github integration part since ollama isn't available there).

im thinking about extending it to include a screenshot of the app and including it in the PR description.

warm temple
topaz arrow
# topaz arrow what decides whether a chained function is cached or not? for example, I see thi...

ah, I think this was the cache being automatically GCed repeatedly... opened an issue here to provide a better experience in this scenario: https://github.com/dagger/dagger/issues/10504

GitHub

What is the issue? When testing out Dagger locally, layers seemed to fail to cache randomly. It was confusing to me because it seemed like Dagger caching wasn't working at all as advertised. I ...

jagged epoch
#

One nice thing about living in DFW.

cunning jolt
jagged epoch
#

I don't get it! But hello fellow DFWer

#

Maybe we can get a hackathon day group in this area. I had so much fun in SFO, wish the cost of living was less.

chilly arch
cunning jolt
#

Would be happy to help however I can

slender star
cunning jolt
warm temple
#

I'm down that way a few times a year! That would be fun!

plush lotus
#

expression of interest in basic sorting functions for https://daggerverse.dev/

perspective of a newcomer to Dagger, a major signal would have been finding recent packages that address the kinds of things people are generally up to these days. my ideal first step would be to sort by recently updated and/or most updoots, and additionally the default sorting is just kind of a mess

mild coral
#

Hi there. Quick question about the use of insecure-entitlements config...

Is it possible to use the dagger engine with insecure-entitlements = [] in production when deploying to k8s?
I am guessing this will just block the use of InsecureRootCapabilities: true when supplying .WithExec()?

#

Just FYI we want to use dagger-in-dagger (ExperimentalPrivilegedNesting: true) ... would setting the insecure-entitlements to [] block this?

winter linden
mild coral
#

Thanks Solomon appreciate the fast reply!

narrow nymph
#

yes this is correct! only insecureRootCapabilities will get blocked. nesting is still allowed (though in this case, there's still only one dagger engine, i assume that's what you want?).

#

btw, i'd recommend using the engine.json configuration - the engine.toml config is legacy, and new config options probably won't be added to it

fossil pine
#

If you are in Timisoara on June 19, join the Cloud Native Timisoara meetup: https://community.cncf.io/events/details/cncf-timisoara-romania-presents-cloud-native-timisoara-summer-2025/

(You can listen to me yap about Dagger)

CNCF

In-person Event - Exciting talks at our upcoming meetup: Alessandro & Adrian on "The first CNCF / Linux Foundation Operating System - Flatcar Container Linux" and Mark presenting his "Accelerate Your Development and CI/CD Pipelines with Dagger" .

Join us at Cloudbase Solutions office, in Timisoara on June 19th.

chilly arch
sand sierra
#

If i clone the https://github.com/dagger/dagger i can run dagger call --help. But my editor complains (vscode) about "undefined: dag" in the .dagger/main.go.

I have that with a module i am testing locally also? It this something that other people also have, i can't seem to find the issue online.

#

Anyone has a pointer where I can look to debug this?

#

Never mind sorry i found dagger develop 😦

elfin frigate
mild coral
#

Hi there! Question about codgen. We are thinking of removing the .gitignore files and checking in all our codegen.
There are a few reasons for wanting to do this:

  • reduces steps required to get started after a fresh clone
  • allows renovate bot to easily update the dependencies (because it needs a complete go project to work)
  • makes it easier to batch changes across our repos
  • synk scanning requires a complete go project to run
#

In order to keep the codegen consistent, we have created a job which runs on pull request that runs dagger develop on all the modules in our repo and then compares the git diff. If the working tree is dirty, the check fails and the developer is forced to update the generated code.

#

I have a few questions about this approach though:

  • is codegen consistent everytime? - sometimes I have noticed things changing order in the codegen (could be just me but worth asking)
  • is the codegen output bound to the dagger engine being run or the dagger version of the dagger.json ?
#

thanks!

narrow nymph
#

is codegen consistent everytime? - sometimes I have noticed things changing order in the codegen (could be just me but worth asking)
ah it should be - but there may be a bug there. if you notice that the codegen isn't consistent, that's a bug, a bug report would be very useful!
is the codegen output bound to the dagger engine being run or the dagger version of the dagger.json ?
both πŸ˜› so, the engineVersion in the dagger.json specifies the compatibility level to use - we try our best to do codegen that's compatible with the specified version - but there will likely be drift between the engine version used.

cunning jolt
#

allows renovate bot to easily update the dependencies
You don't want to update dagger dependencies with Renovate right? Mostly because codegen recreates the deps to the version needed by the engine version used. How do you prevent that?

jagged epoch
#

Something I am seeing in the industry. Lots of vibe coders and software like Claude Code, Goose, improved context aware agents.

They make huge commit sets, often commit helper scripts, markdown and just refactor sources regularly. While functionally it works there is a need for an AI mege and integration suite. To handle these massive merges, ensuring existing work doesn't break, that understands the purpose of the branch source etc.

What we have today will overwhelm even the most sr developers.

Another business idea if anyone wants to run with it or knows who is already doing that.

jagged epoch
mild coral
cunning jolt
# mild coral We actually reverted our decision to do this for now. As the engine gets upgrade...

We use renovate for everything but dagger. Just ignore the dagger module folder. Not sure if you were present but a daggernaut did a presentation at the community call on how they integrated renovate within their environment to manage module versions (not other deps). Here's that session https://youtu.be/d0Y5QplCwl0?si=4Bknvn-C89toibBR. Doesn't seem like a trivial process though.

Christoph from Puzzle ITC shares how he automated Dagger module updates using a Dagger Renovate Agent. He walks through building a custom Renovate manager that detects Dagger CLI versions and runs dagger develop automatically within GitHub Actions. The setup helps streamline dependency updates, close noisy PRs, and ensure pipelines stay compatib...

β–Ά Play video
chilly arch
#

πŸš€ New Community Content Format! πŸš€

If you’ve been with us for a while, you know we’ve hosted livestreams featuring community demos every other week.

Starting this week, we’re changing things up!

To deliver more community content faster, we’re shifting to pre-recorded demos. This new format allows us to spotlight the amazing things you’re building with Dagger more quickly and more clearly.

I already have several users lined up to share their Dagger stories, but if you’ve got a cool use case or demo, we’d love to feature it too!

Drop your information in this form or DM me directly.

Let’s keep building and showing off what Dagger can do! πŸ’₯

I can't wait to get out @amber quail and @karmic sand interviews out soon!

**All the content will be on our YouTube, so don't forget to subscribe ! **

warped karma
winter linden
#

Congratulations @sonic obsidian for launching a new open-source coding agent today, https://app.build ! You may have seen it on the first page of Hacker News today πŸ™‚

I'm very proud that app.build makes heavy use of Dagger for its code execution backend. If you're interested in how they use Dagger, here are the relevant files: https://github.com/search?q=repo%3Aappdotbuild%2Fagent dagger&type=code

App.Build

App.build is an open-source AI agent that generates and deploys full-stack apps with Postgres. Use it as a reference to build your own agent.

GitHub

GitHub is where people build software. More than 150 million people use GitHub to discover, fork, and contribute to over 420 million projects.

sonic obsidian
#

Open Source AI Agent: Build Full Stack A...

vivid mango
#

Hey. I know dagger runs everything in a sandbox. But is there a way to bridge sbx to a host? I'd like to explore the llm module more, perhaps I could bridge some linux devices (/dev/) or named pipes/sockets or ttys/ptys for llm to work on my issues? E.G. I'm curious whether it would solve issues with my router-switches configuration [can only be accessed via serial], if I gave it the means to access them and devices connected to them.

#

Sure, I can set up connections in my host and tel llm to ssh into it, but this way it would get full access to the host, not just the parts of it I want to share. Ofc I could set up permissions and all, but that seems a bit too involving

winter linden
vivid mango
#

I see... That's unfortunate :/ Especially with this LLM module. Every day I run into similar situations more than once: I do smth on my host laptop, something borks up, and then I switch to copy-paste-routing between my terminal and ChatGPT. And every time I think to myself "what a perfect use-case would that be for an LLM agent, like dagger. But these sbx restrictions are so in a way..."....

This morning I decided to ask, hoping dagger client can operate in a full-duplex RPC proxy mode. Too bad πŸ™‚ Now I don't even have a hope that there is a simple way πŸ˜„

chilly arch
chilly arch
# chilly arch @here Solomon's keynote at AI Engineer World's Fair is happening now. Tune in no...

Repo that he just open-sourced on stage - https://github.com/dagger/container-use

Development environments for coding agents. Enable multiple agents to work safely and independently with your preferred stack.

GitHub

Development environments for coding agents. Enable multiple agents to work safely and independently with your preferred stack. - dagger/container-use

swift bronze
chilly arch
balmy wolf
#

AI Engineer World’s Fair 2025 - Day 2 Ke...

old arch
#

That session POPPED ❀️

mild coral
#

Hey guys we are testing out assuming the node role on EC2 instances from within a dagger module (via the runtime container). Getting some issues with reaching the irsa server.
Currently not using a *dagger.Service to pass that into our dagger module but might test that next.
Do we know if the irsa would be unavailable due to sandboxing or is it more likely something to do with our setup?
We are using the aws sdk for go.

no EC2 IMDS role found, operation error ec2imds: GetMetadata, canceled, context deadline exceeded
mild coral
#

Cheers for that. Got our issue sorted

loud briar
#

Getting stuck into private repositories. I've got a Terraform container and it needs to be able to source modules from private repositories... I pass the SSH_AUTH_SOCK env var as a parameter of type *dagger.Socket (can I just +default this?) so the function has the socket. The TF container now needs the WithUnixSocket method... What's the path here? Does it matter?

wise kettle
#

Hello everyone, is anyone down to get on a discord chat with me? I started looking into dagger and need to use it for work to build functions for steps for our pipeline - I just have some questions

slender star
#

Pipeline functions questions

slender relic
#

What can we expect Dagger's focus on CI/CD use-cases to be in the future? I'm looking at using Dagger for all our CI/CD, but all the AI stuff is extremely concerning.

(To be clear, I'm not anti-AIβ€”I use Claude Code every day. Just the Dagger docs and marketing feels very unfocused and confused and pivot-y. The first ten examples in the docs are all LLM examples, and the quick start starts with building an AI agent!)

winter linden
# slender relic What can we expect Dagger's focus on CI/CD use-cases to be in the future? I'm lo...

Sorry for the confusion.

The focus on CI/CD remains the same. The whole point of Dagger is to be a modular workflow engine, with a rich set of system primitives that you can compose into arbitrarily complex workflows. LLMs are a new primitive in the set. So now you can have deterministic workflows that can embed agentic functions. And your agentic functions can themselves call more workflows. All of this still in the frame of the same composition model.

Embedding agents inside the CI workflow is something that you will see happen more and more. Even the big AI labs are starting to talk about it. Well Dagger supports it natively.

#

Once consequence of coding agent tools like Claude Code, is that tasks that were part of your devloop, can be automated, and are really part of the "delivery loop". The same loop that CI is part of. That is a major change to how we ship software, that goes beyond just the generation of code. As a result legacy CI systems (which were already showing their age) will become completely irrelevant. By contrast, we want Dagger to have all the capabilities to natively run this "agent-native" delivery loop

cursive moon
#

The way I see it, the LLM primative enables things like CodeRabbit or other code review LLM tools to be built into your same CI system you already use with Dagger. Only a matter of time before an open source version pops up on Daggerverse that you can just use without an extra service.

topaz arrow
# slender relic What can we expect Dagger's focus on CI/CD use-cases to be in the future? I'm lo...

This is a valuable question to ask - as an internal advocate who spent a lot of time convincing a team at my company to adopt another CI product (Earthly) just to have it shut down, I think it's worth being mindful about messaging.

I see the vision of the LLM primitive and how it fits into the larger Dagger workflow... But in my opinion, it definitely confuses the messaging, and that could hurt adoption. I know it's a balance between providing an open source brand that projects stability and providing a startup brand that projects "keeping up with the cutting edge..."

Just wanted to share one data point where focus on one can definitely hurt the other. When I've showed Dagger around to that same team internally, the heavy LLM focus was a bit of a red flag. Enough to make some folks go "wait, is this even a CI/CD tool at all?"

cunning jolt
#

I've seen this same sentiment at my company too. When I point folks at dagger.io they are initially put off and I hear phrases like "ah this is an AI tool", "All this AI stuff is cool but can we use it?". I have to convince them that AI is not the focus and it's first and foremost a containerized workflow engine.

LLMs in general are still very restricted access within my company.

rapid cove
#

This is terrific feedback - we’re updating the homepage to make it clear this is about software engineering workflows (includes both software delivery and development) with the option to put LLMs inside.

#

Also we’re participating in both platform-and AI-centric events, tailoring the content accordingly. We just wrapped up at an AI event (AI Eng World Fair) so you likely saw a spike in AI-flavored content. There’s GH Universe, Kubecon US, and multiple DevOps Days coming up which will feel more familiar.

slender relic
# winter linden Sorry for the confusion. The focus on CI/CD remains the same. The whole point o...

Thank you for the response! I do understand the appeal of the long-term vision. Like I said, I use claude code myself every day, and I'm looking at integrating more agents like coderabbit into our workflows.

To be blunt though, I'm not particularly receptive to the idea that we can or would want to build our own coding agents today. IMO claude code is the only good coding agent, so it clearly isn't a simple as just prompting an LLM with You are an expert Go programmer.... I'm sure this will change at some point as LLMs become better and better out of the box, but when I ask myself "what solutions am I looking for right now," a build-your-own agent platform is not one of them.

So it's great to hear you don't think of this as a pivot. I would suggest from a sales perspective though (data point of one), keeping grand future visions secondary in public-facing content to what the main problems Dagger solves today are.

#

E.g., I would make Build a CI Pipeline the first project in the Quickstart section of the docs, and Build an AI Agent the second one. And move at least some of the non-LLM CI examples to the top of the Examples page.

#

I could be wrong and maybe we should all be using Dagger right now instead of Claude Code and Coderabbit. This is all just the perspective of one potential customer πŸ™‚ But if that is what you really believe, then you should work instead on selling me on that vision because I don't feel sold on that at all

#

If it weren't for Depot having a Dagger integration I wouldn't even have gotten this far

winter linden
#

@slender relic you're misunderstanding what I explained to you about the agentic use case. It's not a grand future vision, it's happening today.

The goal is not to reinvent claude code but to demistify the primitives that it's built from, and make them available to platform engineers.

If you don't learn to do this in your own pipelines within the next 12 months you will be left behind.

Thank you for your feedback.

slender relic
#

I appreciate the conviction.

winter linden
slender star
#

Apple supercharges its tools and technol...

dusty knoll
#

Hey, will you consider opening the Open telemetry produced ? ( to read it with some tool like Datadog ?)

worldly pike
dusty knoll
#

Hi again, i see all my dependencies broken, something happened on the Daggerverse side ? :

! select: Get "https://github.com/vbehar/daggerverse/info/refs?service=git-upload-pack": EOF
β”‚ ✘ finding module configuration 0.5s
β”‚ ! input: moduleSource failed to resolve dep to source: failed to load git dep: select: failed to resolve git src: failed to resolve git tags: select: Get
β”‚ ! "https://github.com/vbehar/daggerverse/info/refs?service=git-upload-pack": EOF
β”‚ β”‚ ✘ moduleSource(refString: "Pricing/Infra/GraphSessionRenewalScheduler/pipeline"): ModuleSource! 0.4s
β”‚ β”‚ ! failed to resolve dep to source: failed to load git dep: select: failed to resolve git src: failed to resolve git tags: select: Get
β”‚ β”‚ ! "https://github.com/vbehar/daggerverse/info/refs?service=git-upload-pack": EOF
β”‚ β”‚ β”‚ ✘ moduleSource(refPin: "1464b057adc8229e79fcf9ab4b96670517e70a8e", refString: "github.com/vito/daggerverse/testcontainers@1464b057adc8229e79fcf9ab4b96670517e70a8e"): ModuleSource! 0.0s
β”‚ β”‚ β”‚ ! failed to resolve git src: failed to resolve git src: select: Get "https://github.com/vito/daggerverse/info/refs?service=git-upload-pack": EOF
β”‚ β”‚ β”‚ β”‚ ✘ git(url: "github.com/vito/daggerverse"): GitRepository! 0.0s
β”‚ β”‚ β”‚ β”‚ ! Get "https://github.com/vito/daggerverse/info/refs?service=git-upload-pack": EOF
β”‚ β”‚ β”‚ 
β”‚ β”‚ β”‚ ✘ moduleSource(refPin: "dea7c3f08641fd37e72e45530c5091fda2334b08", refString: "github.com/vbehar/daggerverse/git-info@v0.13.2"): ModuleSource! 0.0s
β”‚ β”‚ β”‚ ! failed to resolve git src: failed to resolve git tags: select: Get "https://github.com/vbehar/daggerverse/info/refs?service=git-upload-pack": EOF
β”‚ β”‚ β”‚ β”‚ ✘ git(url: "github.com/vbehar/daggerverse"): GitRepository! 0.0s
β”‚ β”‚ β”‚ β”‚ ! Get "https://github.com/vbehar/daggerverse/info/refs?service=git-upload-pack": EOF```
slender star
dusty knoll
#

Just for information i tried with a vpn and it seems to work but very very slowly... does dagger need to have constant connexion with the network (internet) ?

slender star
dusty knoll
#

i do not understand why without vpn i got : ✘ git ls-remote --symref https://github.com/kpenfound/dagger-modules HEAD HEAD^{} 0.0s fatal: unable to access 'https://github.com/kpenfound/dagger-modules/': TLS connect error: error:00000000:lib(0)::reason(0) ! git error: exit status 128 ! stderr:

slender star
# dusty knoll does offline mode exist ?

This has been something very desirable, but not yet fully implemented.
We started with working behind corporate proxies:

Some issues about full offline-ness

#

cc @pseudo stream πŸ‘†

dusty knoll
#

thank you yes very important πŸ™‚

#

i'm still having issue with the network... don't know why ( i'm not behing corporate proxy)

worldly pike
#

I was having a bunch as well - but pushing to github, not with daggger

Im not sure - but looks like a bunch of spikes, but they dont all line up...

https://downdetector.com/

timber sphinx
#

Hackathon Ideas/MCP AI

slender star
#

Hey, will you consider opening the Open

lyric turtle
#

where can i ask dev questions?

is discord the place? or do you have slack channels for that?

slender star
lyric turtle
#

i have a question slash feature request

#

its about how the dagger engine could interpret non-primitive parameters to dagger functions (assuming that's not possible which is my current observation/experimentation)

#

where should I ask this?

jagged epoch
#

Catching up here. Been busy at Cisco Live. If anyone is attending I would love to say Hi at DevNet Share Your Experience.

I wonder if we could bring Dagger into the DevNet sandboxes and labs to help stand them up quickly or automate some things.

hazy rover
#

Hey, I have a quick question about Dagger Engine: when running on Kubernetes, does the engine still use DinD to execute jobs or does it create additional Kubernetes pods & containers?

winter linden
hazy rover
sharp marsh
cursive bridge
#

That sounds like containers-in-container? I mean I guess the difference is that dagger doesn't rely on any external container engine to launch its containers. Does that sound right?

hazy rover
sharp marsh
#

On the contrary, if you run the dagger engine directly on the host, then there's no container-in-container happening

cursive bridge
#

Right

hazy rover
#

Thanks

sharp marsh
wise kettle
#

Are there possible risks or vulnerabilities in installing remote modules from daggerverse? How are all those sources vetted?

slender star
#

Are there possible risks or

cursive bridge
#

I'm getting a backtrace after coming out of a .Terminal() call where I was modifying a mounted file from host for testing purposes. Am I doing somethin wrong?

cursive bridge
#

I'm getting a backtrace after coming out

wise kettle
#

Hi guys I’m testing out the cookbook functions with dagger go-sdk, why is it that in youtube videos, where in a custom application a client (*dagger.Client) can give me access to the host() method but in the when I am using the dagger function route - I can’t gain access? - https://docs.dagger.io/api/reference/#query-host - I know in custom applications they always import that dagger/dagger.io line initially too

slender star
# wise kettle Hi guys I’m testing out the cookbook functions with dagger go-sdk, why is it tha...

In Dagger functions in modules you are always using a Dagger SDK, like Go, Python, Java, etc.
So we don't need to rely on your actual host machine (e.g. laptop) having a Go, Python, or Java runtime environment, Dagger creates a Go, Python, or Java runtime container to execute the function in and provides you with a Dagger client called "dag" so you can use the Dagger API. All that means that from the function's perspective, the "host" is now that runtime container and not your actual host machine which is still not directly accessible from the sandbox. You have a few ways to explicitly provide args from your host machine like env vars, files, directories, sockets, secrets, etc, but you have to explicitly pass them in via the CLI/shell. Similarly you can ask for certain things like a directory or file to be exported to your local host from the CLI/shell.

wise kettle
#

So is it something like dagger tells docker daemon initially to spin a Go SDK container within which the module functions will run? So it’s like containers in my go sdk container?

#

That way I don’t need to use my host’s run time and instead rely on the container go sdk setup

slender star
wise kettle
#

You can create containers without any underlying docker daemon? I understand now that dagger is running in a docker container at least

slender star
# wise kettle You can create containers without any underlying docker daemon? I understand now...

Yep!

  • Dagger does not depend on Docker to build containers.
  • It uses Docker (or Podman, etc) only to get started (like using a launcher).
  • After that, it builds containers, runs services, etc on its own, using BuildKit (an open source component used by docker build too) and other Dagger components , inside its own engine.
  • That’s why it works even on systems without Docker, like Kubernetes.
cursive bridge
#

I've run into an issue where Container.Sync() is returning nil, err. I was following the cookbook for Continue using a container after command execution fails as I wanted to get the return code and whatnot. Why would Sync() return a nil container? This is using the Go SDK.

cursive bridge
#

I've run into an issue where Container.

wise kettle
ancient escarp
#

quick question: is there a way to get the last result in dagger shell to do something with it eg chain another call

#

it's a directory: Directory@xxh3:3ddc3114d451511a if that helps at all

sharp marsh
ancient escarp
#

Just $var=Directory@xxh:... ?

glad jolt
ancient escarp
#

if ive already called a function and want to use the result - is that possible?

slender star
#

@winter linden @rain oriole feels like $_ here πŸ‘† should also point to the Directory ideally (doesn't today). Wdyt?

night grove
late kite
#

Hi all πŸ‘‹ , I'm new to the Dagger ecosystem. Would it be reasonable to describe dagger workflows exclusively using the dagger shell language, or is picking one of the sdks recommended beyond adoc usage?

thick trench
#

Hi all. I'm a dagger noob so forgive me if this is a silly question.

https://docs.dagger.io/api/module-structure: "Only types and functions in the top-level package are part of the public-facing API for the module."

IIUC, all custom types must be in the main package? I can't have a custom type Foo in pkg/foo/foo.go that is returned by a top-level module function in main.go?

winter linden
#

would you mind filing a github issue? πŸ™

thick trench
thick trench
loud briar
#

Any specific EC2 instance type suggestions for a Dagger engine? Searched discord, figured this would have been asked before, not sure I found anything concrete

late kite
#

when creating a module a dag variable is available to the sdk: this appears to be a Client instance: but I don't see a dag.host() member for any of the sdks, (go, python, typescript). Just trying to work out what I'm missing

slender star
# late kite when creating a module a `dag` variable is available to the sdk: this appears to...

@wispy tapir did we start hiding dag.host() for Modules here?
https://github.com/dagger/dagger/pull/10326/files#diff-d4c892e5583ff7fad1d3c54c7a0ae74eed26e7d3cf6ab236b5904ae365d3225dR515
Oh, that's just for generated clients?

I see it's been like this for a minute: #daggernauts message

Previously I think we had dag.host() though in a Modules context, it gave access to the runtime container for the SDK (e.g. Go, Python, TypeScript container that ran the module's functions) instead of the actual host (e.g. laptop, server). I think we were debating changing the name of host in this context to make it more clear that the runtime container was being accessed.

cc @winter linden

wispy tapir
# slender star <@281874480651829250> did we start hiding `dag.host()` for Modules here? https:/...

No, this PR exposed dag.Host for generated client because it's a possible use case, however it has been hidden for modules since a year I think, maybe more.
If you want to access the host of your module, you can do it with dag.CurrentModule().XXX() so it's scopped to your module only and not the caller's host on invocation (we don't want a caller to share his host implicitely, it should be done through a directory argument)

slender star
wispy tapir
#

Yes, so you can access your module host

narrow nymph
#

something seems wrong here

#

if you append to an array, then this modifies the original (even though it returns another value, it's not a clone)

fossil pine
quartz basin
#

Is there prebuilt container for dagger, or is best practices just curl <link> | bash for gitlab runner workflows?

neon warren
quartz basin
mighty flax
#

Hi everyone. Just making sure I am not missing something. with dag()->git()... is there a way to apply the --single-branch option ? It would make a huge difference on my end

quartz basin
mighty flax
quartz basin
mighty flax
#

I could but I find it provides a lesser DX to require the dev to know and write (or copy) the full git repo

quartz basin
#

Yeah I wrapped mine in a makefile for now but it definitely could be a bit easier

loud briar
wanton pumice
#

hello, i posted this in the th epython chat, posting here as well:

--
hello!

I am stuck on this.
I need to generate YAML in my python function and then I need to load that YAML in a container as a file and execute helm command on it.

How can i load string/YAML into a container as a FILE object?

wanton pumice
late kite
#

Is it possible to launch a "work-session" that's a container build with effectively .. | terminal that lands you in zellij, that you can then dettach and re-connect to, until a task / session is complete?

sharp marsh
slender star
wise kettle
#

This is a novice question but how are people who do not have a dagger engine on k8s cluster making use of dagger engine in their pipelines, is it getting spinned up every single time? How is the dagger engine in k8s cluster helping here and how is work normally done without the cluster for the pipeline scripts? I apologize if it’s a basic question

stray trench
#

Ok I can see this in the response: x-reason: Rate limit exceeded. You are allowed 10 requests every 10 minutes. Please reach out to contact@dagger.io for help.
1 request per minute really? So am I supposed to host my own mirror just for the cli install script so that I can use dagger in my CI?

wraith niche
stray trench
wraith niche
neon warren
quartz basin
#

Can you expose a service to peers on a host? I've got host-> container working but not sure how to publish it out further

slender charm
#

Can you expose a service to peers on a

mild coral
# winter linden ⏰ Dagger 0.18.9 dropped yesterday. It's mostly optimizations and bugfixes, **bu...

Hey @winter linden gave this a try with a vite app and tried to get hot reloading working. I wasn't using the dagger shell but I was using the // +defaultPath="/" attribute. My code was as follows:

dagger call dev up
func (m *Backend) Dev(
    // +defaultPath="/frontend"
    src *dagger.Directory,
) *dagger.Service {
    src = src.WithoutDirectory(".dagger")
    return m.env(src).
        WithMountedDirectory(".", src).
        WithEntrypoint([]string{"npm", "run", "dev", "--", "--host"}).
        WithExposedPort(5173).
        AsService()
}

func (m *Backend) env(src *dagger.Directory) *dagger.Container {
    return dag.Container().
        From("node").
        WithMountedCache("/root/.npm", dag.CacheVolume("npm-cache")).
        WithWorkdir("/src").
        WithFiles(".", []*dagger.File{src.File("package.json"), src.File("package-lock.json")}).
        WithExec([]string{"npm", "install"})
}
#

Let me know if I'm doing something wrong.

#

I was expecting that changes to files made on the host would propogate to the service container but they don't seem to

#

Could be something on my end, or perhaps I misinterpreted how this feature should work πŸ™‚

winter linden
#

@mild coral unfortunately what you're describing is a separate feature which we haven't shipped yet. But we really want to 😁

What we shipped is the ability to run your function multiple times from the same dagger shell session, and have the latest changes to local directories be used each time

mild coral
#

All good. There isn't a strong need for this feature right now within our organisation, but it came up as a question from the frontend development teams.

humble sage
#

Does container-use support using Podman instead of Docker ?

vestal creek
#

Though technically cu uses the Dagger API and Dagger doesn't need Docker beyond getting it's BuildKit environment up; so the alias is merely plumbing to deal with that

hardy umbra
#

Seeing a ton of "healthcheck failed fatally" on a our dagger engines after upgrading to 18(.10). We have not verified any adverse effects but it sounds worth investigating. I know that there is this issue but there has been no traction and I cannot verify that this is the same issue.

We are running engines in k8s and clients are run on selfhosted github actions on the same nodes in k8s.

GitHub

What is the issue? Dagger clients do not properly detect session termination and continue executing even after a shutdown is triggered, resulting in the job running until a full CI timeout. In our ...

sharp marsh
chilly arch
#

**Calling all of our Daggernauts in France! πŸ“£ **

@paper grove and @tropic remnant will be at the following places this week during their Dagger tour:

Tomorrow - Livestream in French - https://www.linkedin.com/events/7341139672217145346/about/

Breizhcamp - This Wednesday - In-person in Rennes, FR - https://www.breizhcamp.org/

Sunny Tech - This Thursday - In-person in Montpellier, FR -

If y'all get to meet in-person, don't forget to share pictures πŸ™‚

wise kettle
#

Hello where can I find the latest helm chart for the dagger engine?

slender star
#

Hello where can I find the latest helm

loud briar
empty jay
loud briar
#

Not an option for us unfortunately. CI_WEB_TOKEN, or a very close similar HTTPS auth method is required

empty jay
#
  before_script:
    - |
      echo -e "\e[0Ksection_start:$(date +%s):ssh-key[collapsed=true]\r\e[0KSSH Config"

      mkdir -p ~/.ssh
      mv "$DAGGER_DEPLOY_KEY_PRIVATE" ~/.ssh/id_ed25519
      chmod 600 ~/.ssh/id_ed25519
      eval $(ssh-agent -s)
      ssh-add ~/.ssh/id_ed25519

      echo -e "\e[0Ksection_end:$(date +%s):ssh-key\r\e[0K"

πŸ‘† this is what i'm doing as part of the dagger job template

loud briar
#

PAT auth works, but we can't have developers using PATs in pipelines - CI_JOB_TOKEN should work equally well but it doesn't

winter linden
#

Hello! I recommend starting with the "CI quickstart" in the docs: https://docs.dagger.io/quickstart/ci

CI pipelines often start simple, but eventually transform into a labyrinth of artisanal shell scripts and/or unmanageable YAML code. Dagger lets you replace those artisanal scripts and YAML with a modern API and cross-language scripting engine.

mild coral
#

Hi there guys. As we are running self hosted dagger engines in kubernetes, something we want to be able to do is feed engine stats into our metrics platform (grafana, mimir). Things like how full is the disk and how much cache is in use would be interesting... there are other ways we could do this probably ( node metrics )... but just wondering if there is a way to do this currently within dagger itself? Thanks!

elfin frigate
mild coral
#

Well there we go

#

Thank you!

neon warren
slender star
#

Notice the code in the Cookbook link (second link). Seems like same use case you're looking for if you're converting from doing things in a Dockerfile to doing things in the Dagger Go SDK.

#

Ah, I read more scrollback. I see you said

For example I want to build a Docker image from a Dockerfile and push it to ECR

#

I think you'll have a better experience overall in this case. Though you can use Dockerbuild() on a dagger.Directory as docker context with Dockerfile, it seems that the opts you want for SSH mount aren't there today
https://pkg.go.dev/dagger.io/dagger#DirectoryDockerBuildOpts

Do you want what this issue asks for?
https://github.com/dagger/dagger/issues/6736

GitHub

What are you trying to do? I'm trying to use dockerBuild() with a Dockerfile containing the statement RUN --mount=type=ssh ... to forward the SSH agent to the build container so I can fetch pac...

#

The Dagger Engine has historically relied heavily on buildkit as an internal component, but we are steadily removing our dependency on buildkit, so there is not always an easy passthrough.

#

Got it. So you could create a module that takes in the build context, creates a Docker engine service and CLI and does the build. Perhaps we could pass in the SSH socket and you could use the --ssh option.

#

Dagger is sandboxed from the host, but you can pass in directories, files, sockets, secrets, etc from the host and also export things back to the host. You just have to be explicit.

slender star
#
// Build a Docker image from a Dockerfile

package main

import (
    "dagger/nrs/internal/dagger"
)

type Nrs struct{}

// Returns a container with source code, docker cli and engine
func (m *Nrs) Build(source *dagger.Directory) *dagger.Container {
    return dag.Container().
        From("alpine").
        WithDirectory("/app", source).
        WithWorkdir("/app").
        WithExec([]string{"apk", "add", "docker-cli"}).
        WithExec([]string{"apk", "add", "docker-cli-buildx"}).
        WithEnvVariable("DOCKER_HOST", "tcp://docker:2375").
        WithServiceBinding("docker", dag.Docker().Engine())
}

Somewhere to start.
You can get that going by:

mkdir nrs && cd nrs
dagger init --sdk go
dagger install github.com/shykes/x/docker # dependency module that gives us Docker engine πŸ™‚
# (replace main.go with code above)
dagger call build --source <a directory or git ref with a docker build context> terminal
# you'll be in a terminal, in the container, and can try running `docker build .`

Alternatively, you could pass in your docker socket and mount that.

manic mauve
cunning jolt
#

There may be a breaking change related to ENUMS in 0.18.11. I don't see it mentioned in release notes. I see the following error

Error: generate code: template: module.go.tmpl:86:3: executing "_dagger.gen.go/module.go.tmpl" at <ModuleMainSrc>: error calling ModuleMainSrc: failed to generate type def code for FmrDaggerEngine: failed to convert method Publish to function def: unknown enum value ""

I remember seeing a PR about ENUM namespacing, could be related.

narrow nymph
#

yeah, that's probably that change

#

it's in the go release notes

#

curious, do you have a code link? or at least the enum definition for any args in Publish

cunning jolt
#

Let me see what I can share. I'm assuming it's not supposed to be a breaking change? (it is so far)

narrow nymph
#

not supposed to be

chilly arch
# tawdry imp

This is the best! Thanks for sharing 😍 Great to see Daggernauts getting together.

slender star
cunning jolt
warm temple
cunning jolt
#

Apple container -v /var/lib/dagger

night grove
#

hey all, super interesting project and there’s a lot of info so im wondering if someone can help me with some questions i have

  • the immediate use case is ephemeral environments for agentic tooling, but im wondering how folks have taken that one step further. does anyone have a full blown β€œagentic” k8s cluster doing mind blowing stuff?

  • funnily enough, I found this project for agentic tooling, but it hit me that, this could be used for CI in general, and noticed that was an intended use case by dagger team. has anyone successfully revamped their enterprise CICD with dagger? we’re currently using GitHub actions runner controller on k8s

slender charm
#

hey all, super interesting project and

chilly arch
#

🚨 New in Dagger Cloud: Share any trace with a link β€” even from private repos and local runs!

Until now, public traces were only available for public repos. That was great for open source, but what about local dev or private CI? Today, that changes.

With one click, you can now make a single trace public. Perfect for:

  • Sharing local LLM prompts and builds with your teammates
  • Debugging CI runs in private repos together
  • Collaborating async across teams and orgs

Watch @slender charm 's demo πŸ‘‡
https://www.youtube.com/watch?v=EPEGTfaFnpA

Anyone can try it here - https://dagger.cloud/

real kite
slender star
mild coral
#

Hi guys. Quick question about tracing in the typescript SDK. For context I am on dagger 0.18.8 and I haven't tried any higher engine versions yet...

I am currently doing a POC for a few teams who might be interested in using the typescript SDK for dagger development. One of the features we have found almost essential so far is the ability to create your own spans:

@func()
  async checkPullRequest(prId: number): Promise<void> {
      const tracer = trace.getTracer(MyModule.name)
      await tracer.startActiveSpan("unitTest", async () => this.unitTest())

      await tracer.startActiveSpan("integrationTest", async => this.integrationTest())

      await tracer.startActiveSpan("dangerJs", async () => this.dangerJs(prId))

  }

We love that this allows us to group different processes together and see them in dagger cloud. Something I have noticed however is that when using tracer.startActiveSpan, if the function fails ( that is the function passed to startActiveSpan ), anything that would have otherwise appeared in the dagger cloud trace is lost.

We end up with a trace like this with no leave nodes under the failing dagger function.

#

Just wondering if this is a know issue or potentially something that I am doing wrong on my end...

Thanks for your time as always πŸ™‚

mild coral
#

... tried 0.18.11 and got the same result

slender star
#

cc @elfin frigate πŸ‘†

mild coral
#

if you want the trace urls I can DM them to you

slender star
sharp marsh
# mild coral if you want the trace urls I can DM them to you

@mild coral have you updated your module with dagger develop after you bumped to the latest version? Trying this myself in v0.18.12 with a very simple case and seems to be working correctly. I'm aware that Alex has been improving this recently so not sure if it's working because of my simple repro or the fact that I'm in 18.12 and you are in 18.12.

here's my trace and the code that I'm using:

https://dagger.cloud/dagger/traces/f2b54f722b3cad8499d6b53b011fd3e4#fac2af63e21278cf

@object()
export class Tracer {
  /**
   * Returns a container that echoes whatever string argument is provided
   */
  @func()
  async containerEcho() {
    const tracer = trace.getTracer(Tracer.name);
    await tracer.startActiveSpan("containerEcho", async (span) => {
      await dag
        .container()
        .from("alpine:latest")
        .withExec(["ls", "/fails"])
        .stdout();
    });
  }
}
mild coral
#

Hi @sharp marsh I didn't update by genned code when running dagger develop. I'll try that now. However the thing I am wondering even with your example is, I actually can't see container, from, withExec and stdout in the trace link that you sent. That is what I would expect to see even during a failure.

#

Tried on 0.18.12:
Still not seeing the dag in the trace:

#

What I would have expected is this:

#

^ which is what I get if I remove the tracer

sharp marsh
wise kettle
#

Hello, would I need to manually upgrade the dagger engine on my device everytime there’s a new engine version? How would I do that?

sharp marsh
#

this is mostly when running dagger via the CLI outside a custom setup like provisioning the engine fleet yourself or things like that

wise kettle
sharp marsh
cedar oxide
#

is there an easy way to spin up a container for an entire environment to use to spin up containers from (not nested). i want to be able to have a terminal multiplexer open for a container that i can use to orchestrate running containers, applications, agents, etc. sort of a uniquely addressable "workspace"

sharp marsh
cedar oxide
#

i'm not sure if cu solves it or not exactly.

i'm trying to develop a workflow where the agent isn't the only one who has access to the throw away environment. i want to be in there with it, and I want it to be resumable later like a terminal multiplexer.

sharp marsh
#

I'd suggest giving the readme a try and asking any questions or share ideas in the #container-use channel

#

there's a recent cu terminal command that allows you to jump into any environment to fiddle in there

cedar oxide
#

amazing

chilly arch
cunning jolt
#

Cool!

wispy tapir
# sharp marsh that makes sense. cc <@281874480651829250> seems like `startActiveSpan` is som...

/cc I found the problem, fixes is here: https://github.com/dagger/dagger/pull/10677 πŸ™‚

@mild coral I'll ping you when it's merge so you can lookup for the next release to see theses traces on cloud πŸš€
EDIT: actually it's already merged, you should get that change in the next release πŸ˜‰

GitHub

Raised by @marcosnils on Discord: #general message
Fixed by correctly awaiting sdk.shutdown and closing telemetry when an error...

sharp marsh
mild coral
#

Amazing guys! thank you so much!

topaz blade
#

Hey, quick question. In dagger is there a mechanism where-in I can prune cache which isn't being used. Similar to how it's done in nix garbage collector.

jagged flicker
# topaz blade Hey, quick question. In dagger is there a mechanism where-in I can prune cache w...

Maybe what you are looking for is dagger core engine local-cache prune

$ dagger core engine local-cache prune --help
β–Ά connect 0.2s
● loading type definitions 0.3s
● parsing command line arguments 0.0s

Prune the cache of releaseable entries

USAGE
  dagger core engine local-cache prune [arguments]

EXPERIMENTAL
  dagger core engine local-cache prune is currently under development and may change in the future.
topaz blade
#

Btw, just wanted to let the dagger team know that. I completed a contract where I had to migrate the entire CI/CD from GHA to Dagger, they were quite happy with the performance. And now I am doing the same for my current org. Couldn't have done without the help from you guys! So thanks a ton πŸ’“ !

late kite
#

when you run container | terminal or container | up, where does that container "run"? and then follow up question, is that the same strategy container-use uses to run a container?

winter linden
winter linden
sharp marsh
late kite
#

I'm working on an idea around light weight, resumable sessions, with a goal that nothing is stored locally. One idea is something like with-mounted-cache, but instead of local-cache, a volume is pulled from, for instance, s3, and when the pipeline completes, the volume is written back to s3. Brainstorming out loud πŸ˜… . Is this a thing already? If not, would it be achievable in the dagger ecosystem, perhaps with a custom function? Is there any api to "backup" an entry in the engine cache?

topaz blade
# sharp marsh <@437495595892998145> congrats and thanks for helping us making Dagger better. M...

A couple of reasons

  1. Caching, The caching which is provided by GitHub via a plugin or something wasn't working for them. The (n+1)th builds won't use the cache and hence the builds were slow.
  2. It was a mono-repo, where they had a couple of apps Go and others in TS. So the GitHub pipeline would trigger a build for all of apps, even though they were not changed.(This still happens, cause they didn't to delve into path based builds. Since there were no changes in other services, it would build from cache. )
  3. Maintainability, for each service they had a Dockerfile(they were quite long as well, with a lot of common config and setup). With CI as Code in dagger, this was significantly reduced.
  4. Performance, they were running like 7 independent parallel builds for each service which took ~8mins or so. With the Dagger pipeline it was reduced to ~4mins and no independent parallel builds, (just a single graph like flow build, not sure what's the right term. DAG maybe)

|| They also moved from GitHub's Runners to their self-hosted mac-mini. This could also be a contributor to reduced time ||

eager schooner
#

hey folks. i've moved my github based CI to dagger.
it runs using the dagger-for-github.
but even though dagger command exists with a non zero status. the github step marked as successful

#

e.g - name: Run Quality Checks via Dagger
uses: dagger/dagger-for-github@8.0.0
with:
version: "latest"
verb: call
module: apps/api/dagger
args: checks --module-dir apps/api --repo-dir .

#

and checks is basically does this:
return hasFailures ? 1 : 0

winter linden
eager schooner
#

will do, a bit later

wanton ore
#

πŸ‘‹ hi

winter linden
late kite
spark pasture
#

Hey, is the java sdk somewhere published?

sharp marsh
jagged flicker
kindred dove
#

We are looking to implement Dagger more widely in our processes this year, and our first step is to replace our Jenkins pipelines so that can be run on any CI system or locally.
Our initial concept was to have the whole pipeline in Dagger.
So we'd have something like an orchestration module, that would then call other dagger modules like lint, build, test etc.
However from the CI documentation I see that this high level orchestration is still handled by the CI scripting, with calls to dagger modules for each job (lint, build, test).

I can foresee that trying to send jobs to CI runners from a Dagger module could be complex, if not impossible.
Is an orchestration module not feasible with Dagger due to the way the CI systems handle the pipelines and control the runners?

winter linden
kindred dove
# winter linden Hello! I guess this is the docs page you're referring to? https://docs.dagger.io...

Dagger provides a programmable container engine that allows you to replace your Groovy-based Jenkins pipelines with with Dagger Functions written in a regular programming language. This allows you to execute your pipeline the same locally and in Jenkins, with intelligent caching, while keeping all of your existing Jenkins infrastructure.

Dagger provides a programmable container engine that allows you to replace your YAML pipeline definitions in GitLab with Dagger Functions written in a regular programming language. This allows you to execute your pipeline the same locally and in GitLab, with the additional benefit of intelligent caching.

Dagger provides a GitHub Action that can be used in any GitHub Actions workflow to call one or more Dagger Functions on specific events, such as a new commit.

winter linden
# kindred dove Hi, it was these ones https://docs.dagger.io/ci/integrations/jenkins https://doc...

I see. In that case, it's worth reading the link I shared, in particular these paragraphs:

Daggerizing leads to simplifying. It's common to merge several large CI pipelines into a single one that just wraps dagger call. This usually leads to massive simplification of the CI configuration, as complex YAML/Groovy/shell spaghetti is replaced by clean code. Taken to the extreme, this process reduces the entire CI configuration to a single dagger call, with everything else happening inside Dagger. Although this sometimes happens, in practice most projects converge to a middle ground, where the CI configuration shrinks to just enough dagger call invocations to take advantage of proprietary CI features. Usually these features are job scaling, and job visualization. The more dependent you are on these proprietary CI features, the more granularity you will need to keep in your CI configuration.

Remember that Dagger pipelines are not distributed. Each dagger call will execute a single Dagger pipeline on a single Dagger engine. It's the responsibility of the CI system to dispatch jobs across multiple machines. This means that if a single dagger call pipeline doesn't fit in a single machine, you should split it into smaller dagger call pipelines, and configure your CI to run them separately. This way, you can take advantage of the usual scaling features of your CI.

Caching makes everything faster. As a general rule, CI pipelines are very inefficient, so it's common that daggerizing them will make them faster. Importantly, it may also change your scaling requirements. In extreme cases, a pipeline that needed horizontal scaling across many machines, might fit comfortably on a single machine after daggerizing.

kindred dove
winter linden
# kindred dove Thanks for the response, that's helpful. I'll give the link a full read through ...

No problem.

Our goal is to make horizontal scaling a native feature of Dagger. Once that is done, that paragraph will change drastically. It will remove a barrier to collapsing the CI configuration into a single Dagger entrypoint function, which then calls other functions etc.

Until that happens, the current best practice is a pragmatic middle ground - daggerize as much as you can without jeopardizing scalability

uncut karma
#

Hello! What channel/whom can I ask some clueless questions?

winter linden
wary sparrow
#

Hey all, just started exploring Dagger’s MCP capabilities and I’m really excited about what I’ve seen so far.

One thing I was curious about was if it’s possible to pass Dagger core types over MCP? I was trying to invoke a Dagger function as an MCP tool, and it required a dagger.Secret. From what I could tell, there doesn’t seem to be a way to marshal that through MCP the way you can with the env:ENV_VAR syntax in the CLI. Is there a supported way to handle this?

It was easy to replace this with a string value (and fine from a security standpoint), but it would have been convenient to use this module off the shelf instead of forking it.

sharp marsh
worldly pike
#

While I am still getting my ducks in a row with all my scatter_brained_projects -- as I need Dagger for my main ambitious project - I thought I would try and condense some understandings - I very frequently re_check_in on all sorts of things becuase they always evolve and I am learning so much that I am also forgetting at an alarming rate - so I need to keep looping back on things I already knew several months back (even my own inventions Ill do four to five times to make sure I truly am creating something)

--

Anyway --

I linked this from Gemini:

mild coral
#

Hey guys when upgrading from 0.18.8 to 0.18.12 we noticed that module errors were passed back slightly differently. I believe that before they used to be prefixed with input: and now they are not. This detail isn't really important perse, however as we were relying on the error string for some module tests, they started to fail with the upgrade. We have since changed our module tests to reflect the new error string and the problems are gone. One of the issues we will probably face is that upgrades will have to be coordinated quite carefullly. We currently host a single self hosted dagger engine on our own infrastructure that runs a specific version of the engine. We don't allow the repo to choose which dagger version it runs on, as we are running just one self hosted dagger runner version at a time. The case like this morning was trivial and only affected the platform engineering team, but changes between versions could introduce differences that do cause more issues with pipelines. I understand that at the current time, dagger is at major version 0 and therefore we should expect a few breaking changes from time to time... just wanted to highlight our current position to you guys. To mitigate this in the future on our end, we might look at spinning up a new version of the engine alongside the old and then running a few of our pipelines on this before proceeding with the full upgrade. πŸ™‚ the joys of self hosted

winter linden
# mild coral Hey guys when upgrading from 0.18.8 to 0.18.12 we noticed that module errors wer...

Thanks for the report! And sorry for the inconvenience... Would you mind filing an issue so we have this in the record? πŸ™

Quick note on compatibility: we actually have a feature called compat mode, which allows newer engines to emulate older engines depending on the version required by each module. This has allowed us to introduce occasional breaking changes without actually breaking modules. Unfortunately you hit a "shadow breaking change" - since the contents of error messages are not considered part of the API, we don't implement compat mode for those.

But as a general rule, our strategy is to make it as painless as possible to upgrade, so that users do it as often as possible.

Note: we also have an alpha version of a hosted service that spins up an engine on the fly, and makes sure the engine version always matches the current CLI version. Let me know if you're interested in evaluating that πŸ™‚

quiet tiger
#

How do I get dagger to not "squash" things a method prints to stdout when the cli returns?

winter linden
quiet tiger
# winter linden what do you mean by "squash"?

things printed to stdout by a method are output while the dagger cli is running but then removed from the screen (squashed) when the cli returns (when --progress auto) .. but --progress plain is TOO VERBOSE

chilly arch
#

Calling all <@&1113692044158836736> fans! The TypeScript SDK is now 2x faster, and @wispy tapir shared how we did it.

We slashed cold starts from 20–30s to ~11s by bundling the entire SDK.

Read the full story from @wispy tapir here:
https://dagger.io/blog/typescript-sdk-performance

Try it out and let us know what you think in the #typescript channel!

Build powerful software environments and containerized operations from modular components and simple functions. Perfect for complex software delivery and AI agents. Built by the creators of Docker.

wispy steppe
scarlet cloak
#

I came here to solve an issue with running AMD64 containers and binaries on a Mac M1 and immediately found the solution in #1030538312508776540! This is a fantastically organized Discord πŸ™‚

mild coral
# winter linden Thanks for the report! And sorry for the inconvenience... Would you mind filing ...

Thanks Solomon. I have created an issue here to discuss it further: https://github.com/dagger/dagger/issues/10713

GitHub

What happened? What did you expect to happen? Hi there. I created this issue to document how a recent change to the engine impacted us when upgrading. We have since solved our issue, but I thought ...

mild coral
loud briar
#

Dagger cloud suggestion: .exitCode doesn't need an expando, put the exit code after Container.exitCode on the same line

quiet tiger
#

Anyone have any success spinning up a kafka container under dagger ?

worldly pike
#

"Kafka under Dagger" is a pretty ominous sounding

slender charm
#

Anyone have any success spinning up a

scarlet cloak
worldly pike
#

I do find it odd that literally everyone has been attacking bespoke methods for proper project scaffolding.

There was a really great post I shared by someone who mad a ux for clicking and selecting Cursor Rules options for a project and it spits out rules files.

β€”I keep seeing in my head the need for much easier project templating especially in the agentic age.

I have >~150 experimental projects in some state of agentic-disarray.

I’ve been working on an inventory system for my AGENTIC_LITTER as I call stub projects that sue because it becomes too costly to re-contextual use new agents to the core premise of a project experiment.

β€”-

But the thing is I’ve been trying to use template blocks so one can check off the tools the project would rely on and then bespokenly properly setup up.

If you’ve ever used Ninite.com to select various windows packages to install and setup a new machine…

A page with checkboxes that says β€œ

Give me a project setup that’s going to be built with cursor in d:\outputs\new project and it will use guvsonai for the schema build and will be a local Postgres with project meta sdocumented in local sql lite and will use a dagger line for the test and xo harness, vercel deploy, xyz other apps

But you just check off the tooling the scaffold requires and then it will know how to properly scaffold up the project.

Just seems we are all spending overlap tokens where we truly are supposed to be using an agent to fix exactly this problem.

I should be able to just say β€œgive me XYZ” and it should know the correct scaffold to pull.

worldly pike
worldly pike
winter linden
loud briar
#

I'm experiencing more unexpected outcomes with enums since 0.18.12. I moved my enum values to var () from const () to avoid panic: failed to unmarshal parent object: unknown enum value "" but in var they... don't work.

Using this:

var (
    // Terraform
    Plan  TerraformCommand = "plan"
    Apply TerraformCommand = "apply"
)

dagger call <name> --help shows the underlying type (string) not the enum type TerraformCommand, and supplying an invalid value (--command hello) doesn't cause an error but instead happily works.

Moving them back to const produces the expected error: invalid argument "hello" for "--command" flag: value should be one of PLAN,APPLY but doesn't actually work for expected usage: --command plan or --command PLAN both result in panic: failed to unmarshal parent object: unknown enum value ""

Summary:

Enums in var appear descriptive at best (dagger call <> --help: --command string Terraform command (default "plan")). The input validation enums used to have in const seems to have vanished, and the actual enum type isn't shown anywhere in dagger call <> --help

Enums in const do show in dagger call <> --help (--command PLAN,APPLY Terraform command (default PLAN)), do validate the input, but do not actually work for valid input

sharp marsh
chilly arch
#

hi everyone! Our latest Daggernaut story is up.

**@karmic sand shares how he built autonomous testing agents with Dagger. **

Check it out here: https://www.youtube.com/watch?v=Shwv8KrlQfE

I had so much fun putting his demo together. If you want to share your Dagger story with the world, please DM me. I'd love to help πŸ™‚

Meet Kambui Nurse, Founder of AI Agency Services, as he walks through how he built an intelligent, autonomous CI workflow using Dagger. In this deep-dive, Kambui demonstrates how his agents use generative AI to:

  • Automatically generate and validate tests in a self-correcting loop
  • Handle pull requests with smart automation
  • Index code semant...
β–Ά Play video
#

πŸ“£ Reminder!

Tomorrow is our Engineering Deep Dive on Agentic CI 🧠πŸ’₯

@slender star and @warm temple will be joined by @rustic brook to break down why traditional CI/CD isn’t cutting it anymore, and how you can make Agentic CI work for you.

Tomorrow @ 8:30 AM PT

Register here: https://dagger.io/deep-dives/agentic-ci

Don’t miss it!

mild coral
#

Hi dagger people! I am facing an issue when using interfaces and dagger shell together. We are trying to use dagger shell to help us initialise "dependency" modules and inject them (dependency injection style) into a main module which is going to house most of the CI/CD logic.
We are internally calling this "main" module a "workflow" module. We then install these "workflow" modules into application repos as a dependency. When we install them, we install them with the alias workflow by doing a dagger install --name workflow <workflow-module> on the application repo.

Update: this doesn't have much to do with dagger shell, as I was able to reproduce this in some fully codegenned scenarios too, seems to be related to the module aliasing
To tell the truth, blueprint modules would probably solve the underlying concern for us here because the reason why we were aliasing the workflow module name is so we could supply -m workflow everywhere where we wanted to invoke the workflow module
But blueprint modules would allow us to simply do . <constructor params> | <module-function> in dagger shell or dagger call <constructor-params> <module-function>... so its a minor issue for us
not a blocker

I am getting the following error at the moment.

! marshal: json: error calling MarshalJSON for type *main.GoService: json: error calling MarshalJSON for type *main.openBaoImpl: returned error 422: {"data":null,"errors":[{"message":"Cannot query field \"loadGoServiceOpenBaoFromID\" on type \"Query\". Did you mean \"loadWorkflowOpenBaoFromID\", \"loadServiceFromID\", \"loadInterfaceTypeDefFromID\",
  \"loadSourceMapFromID\", or \"loadTerminalFromID\"?","locations":[{"line":1,"column":7}],"extensions":{"code":"GRAPHQL_VALIDATION_FAILED"}}]}
tough lynx
#

Hi ! I am using container-use with gemini cli. It works well but I want to start from a pre-built image. So I update my environment.json. it works well however I want different images. It is a monorepo composed of python and nodejs. Can I do that or should I create a bug image with all reqs?