#github-feed
1 messages ยท Page 18 of 1
Fixes #11168 (and other similar bugs).
See individual commits for details, there are two changes here:
- Include removed nested files in
Changes.asPatch(this ensures that the changeset preview includes line counts of those files) - Update handling of changeset previews with https://github.com/waigani/diffparser, which ensures proper mode detection, so that we correctly distinguish between new/deleted files.
Here's a little example. Before:
$ touch foo && mkdir foo.d
$ dagger...
Reapplies https://github.com/dagger/dagger/pull/10266.
This seems to have been removed in #10907, which sadly makes light mode unusable again.
What are you trying to do?
Export the Container image manifest and layers directly from the Dagger engine instead of the entire image tarball.
Related https://github.com/dagger/dagger/issues/4450 -- it would be very easy to implement Container.digest() on top of this functionality, I think.
Why is this important to you?
I'm working on a container registry that builds images on-demand as they are pulled, using Dagger as the image builder. Currently, I have to export the entire imag...
What are you trying to do?
When running a typescript modules which uses custom spans, the custom span does not appear in the trace viewer until it is done.
Considering the following code:
async unitTests() {
const tracer = trace.getTracer(MyModule.name)
await tracer.startActiveSpan('unitTests', async () => {
const unitTest = await this.dockerfileTarget('tester');
await unitTest.sync();
})
}
The unitTests span does not appear in the trace viewer u...
Fix Module._register so we add the enum once after building all members. Before this, only the first value (GO) ever showed up. Dropped in a Python integration test that introspects the module and expects all Language members, so weโll catch it next time.
Thanks for starting this!
-
As you know I love the idea of splitting the SDK interface into smaller entrypoints with a simpler relationship between them.
-
I notice your proposed schema has
moduleClientGenandgenerateClient, but then there's a comment saying we should merge them. Let's start with the ideal schema we want to arrive to (so, in this case, the schema with these two functions merged). Then we can separately talk about incremental steps to get there.
# Initialize a module for the given module source moduleInit( modSource: ModuleSource! ): GeneratedCode!
What does this do exactly? And what's the difference with moduleScaffholdGen?
Maybe it would be useful to give a concrete listing of actual files produced by each function, in a typical case. Just so we can map these functions to a real example.
This issue is tracking follow-up improvements to #11034 .
- [ ] Allow expanding system env variables (currently disabled because of a caching issue)
- [ ]
dagger --env-fileto select an alternative filename - [ ]
dagger --no-env-fileto disable local defaults entirely - [ ] Don't inject defaults in dependencies by default. Make it a configurable opt-in
- [ ] Optimize caching (avoid edge cases where the same module source is re-evaluated several times because of different .env)
- [ ] When...
Problem
The new Changeset type is awesome, but lacks the ability to merge Changesets.
A workaround is possible, but requires applying all changesets to a common ancestor directory, then re-computing changes. This is unnecessarily verbose, and possibly less inefficient. It also requires access to a common ancestor, which is not always handy. I've had this problem in our own CI for SDK generation.
Solution
Implement Changeset.merge (name TBD).
Possible names:
Changeset.merge...
Problem
dagger call can apply a Changeset returned by a function. But it can't apply an array of Changesets. This requires re-implementing boilerplate to merge them explicitly before returning them. It would be a nice convenience to not have to write that boilerplate.
Solution
When dagger call receives a []Changeset, it merges them (using #11189 ) and applies the combined result.
cc @eunomie is this compatible with #10584 ?
Also cc @kpenfound . How would this be affected by #11166 ? Would that require a new entrypoint to be added to this proposal? And if so, what?
In the current implementation it would go through the moduleInit interface described above
Problem
When calling Changeset.asPatch, the full contents of the patch is dumped to the TUI, making the output unnecessarily verbose.
When chaining it with File.contents (Changeset.asPatch().contents()) that gets dumped too, so it's double penalty.
Solution
I guess change the logging and/or TUI rendering behavior, to not dump the full contents in Changeset.asPatch, and maybe File.contents while we're at it?
Actually I don't know if thats true. The current GenerateModule interface has the schema introspection similar to generateClient in the proposal. More likely #11166 would fit in moduleScaffholdGen but I think that would also need the schema
Signed-off-by: Solomon Hykes
What is the issue?
I am trying to run a container from a private registry (auth'd through docker login before hand), and the engine is dying with a panic
Dagger version
dagger 0.19.0
Steps to reproduce
dagger core container from --address=$PRIVATE_REGISTRY/fastly/base-noble:latest terminal --cmd bash
-- Engine crashes (see logs output)
docker pull $PRIVATE_REGISTRY_URL/fastly/base-noble:latest works fine
Log output
time="2025-10-07T18:01:04Z" level=debu...
Fixes #11195
The terminal implementation was not providing a session group when creating new mounts. This meant that if an input mount was derived from a still-lazy private image, no auth was available and pulling the image would fail.
This was exacerbated by a missing check for err != nil, which meant we went ahead and tried to start the container even though all the mounts were nil, which crashed the engine.
Would like to add a test for this but gotta see what it will tak...
Adds a coding agent that for developing Dagger.
Instead of assuming all non-MCP server tools are ReadOnly, only consider them ReadOnly if they return something other than Env/Changeset. Otherwise, when calling a tool such as EditFile, only one of their results will "win."
Problem
Currently the PHP SDK is synchronous only.
Technical Details
PHP (as of 8.4) has no standard way to perform asynchronous calls.
PHP has Fibers which get you part of the way there. But working purely with those is a bit awkward and there are already several libraries that wrap this step in a neat bow for you. ๐
The GraphQL library we are using, can integrate with [several librari...
What are you trying to do?
I'd like to use the Google Vertex APIs with Dagger. The Vertex APIs are different from Google's Gemini APIs in that they use the Application Default Credentials instead of a specific API key. The google.golang.org/genai package already being used in llm_google.go supports the Vertex APIs and a standard env var mechanism to inject them:
type ClientConfig struct {
// Optional. API Key for GenAI. Required for BackendGeminiAPI.
// Can also be set via t...
Extracting refactoring work from #11158, since some of these are useful (and I've wanted separately).
Also, it seems likely that the entire structure of that PR will change, so wanting to extract as much utility from that as possible.
Mostly changes to IDs and Services, so cc @vito
What are you trying to do?
Problem & Why
Dagger lacks direct support for apple/container v0.5.0, a native, high-performance container runtime on macOS.
- Performance Overhead: Requires Mac developers to use third-party runtimes (e.g., Docker Desktop) which rely on slower, non-native virtualization, slowing down local CI/CD workflows.
- Missing Native Features: Dagger cannot utilize key
apple/containerv0.5.0 features like optimized Named Volumes for persistent, f...
Clarify the locations for writing custom CA certificates on different operating systems.
I ran into this while trying to get my coworker's macOS machine set up with dagger.
Bumps the engine group with 23 updates in the / directory:
| Package | From | To |
|---|---|---|
| github.com/99designs/gqlgen | 0.17.80 |
0.17.81 |
| github.com/Azure/azure-sdk-for-go/sdk/azidentity | 1.7.0 |
1.13.0 |
| github.com/Azure/azure-sdk-for-go/sdk/storage/azblob | 0.4.1 |
1.6.2 |
| [github.com/aws/aws-sdk-go-v2](https://github.com/aws/a... |
What is the issue?
In v0.19.1, when both +defaultPath and +ignore evaluate to an empty directory, dagger incorrectly passes the source of a random dependent module instead.
Dagger version
dagger v0.19.1 (image://registry.dagger.io/engine:v0.19.1) darwin/arm64/v8
Steps to reproduce
Run https://github.com/skycaptain/dagger-issue-defaultPath with v0.19.0 and v0.19.1 and watch output.
$ dagger version
dagger v0.19.0 (image://registry.dagger.io/engine:v0.19.0) darwin/arm6...
Problem
In our quest to make our CI module faster, version stands out as a source of slowness. It takes a long time to load, every time. Main culprits are:
- Git operations
- Uploading
inputsevery time, just to compute a digest
Solution
๐คทโโ๏ธ
Signed-off-by: Marcos Lilljedahl
Previously, the LLM/MCP implementation manually filled in arguments that had a @defaultPath annotation. This worked to some extent, but did not work if the module function then called another module that used contextual args - those would still just load from Host!
In other words, you'd end up with a call stack like this:
LLM
Dev(Env.workspace).test # WORKS
DaggerDev(Host.directory(...)).test # BROKEN (stale data)
DaggerEngine(Host....
fixes an issue when the module source is a git@... url, where the ref
parsing would produce some incorrect information
Signed-off-by: Marcos Lilljedahl
Problem
Dagger takes a long time to load modules. As a result, every interaction with dagger starts with... waiting.
This makes the Dagger experience less delightful than it should be.
Solution
Find the lowest-hanging fruit for improving module load time, and pick it.
Rinse, repeat, until users spontaneously say "hey, Dagger feels much faster!"
This pulls Doug into our main repo, and uses it to implement Dev, an agent specificially for developing Dagger.
- Supersedes #11199
- Based on #11213
Usage:
dagger -m ./modules/dev call agent
> implement https://github.com/dagger/dagger/issues/11160
What is the issue?
System
- Python SDK (
dagger-io==0.18.16) - Matching Dagger Engine of
0.18.16
Description
I would like to exit my CI/CD pipeline early (or re-try) in the case that asService does not exit appropriately. I would assume there would be an exit_code() method exposed, similar to that of a Container object. However, this appears to not be the case.
The suggestion made in [this discord discussion,](https://discord.com/channels/707636530424053791/14262454389...
Fix various issues reported by users after shipping user defaults.
We need to bump to the latest go version in go.mod. But doing this requires that we also bump golangci-lint - which is a bit of a pain.
Fixes #11117.
Now, a module ref can include a pin. For example:
github.com/dagger/dagger@main:210bdce1068db4170b8cc5120d11d8ef8c81f755
This creates a contextual git ref where the ref=main and the commit=210bdce1068db4170b8cc5120d11d8ef8c81f755.
Also, fixes a bug where installing github.com/dagger/dagger@210bdce1068db4170b8cc5120d11d8ef8c81f755 would set ref=main, even though main wasn't specified anywhere. This was incorrect.
Rel #8402
This PR adds a withErrorMessage to dagger.Container and dagger.Directory objects.
If the argument sent to withErrorMessage is not empty, the error will be raised.
This is particularly useful to raise errors in a self chainable way, like when using with.
ctr = ctr.
With(func(r *dagger.Container) *dagger.Container {
ctr, ok = doSomething(r)
if !ok {
return r.WithErrorMessage("not ok")
}
return ctr
})
A go specific withError ta...
fixes #11160
- [ ] Bikeshed API
- Is "origin" too vague?
- [ ] Does this affect LLM's interpretation of a
Changesetreturn value?
Updates the requirements on uv-build to permit the latest version.
Updates uv-build to 0.9.2
Release notes
Sourced from uv-build's releases.
0.9.2
Release Notes
Released on 2025-10-10.
Python
Add CPython 3.9.24.
Add CPython 3.10.19.
Add CPython 3.11.14.
Add CPython 3.12.12.
Enhancements
Avoid inferring check URLs for pyx in uv publish (#16234)
Add uv tool list --show-python (#15814)
Documentation
Add missing "added in" to new environment v...
Bumps the docs group in /docs with 4 updates: posthog-docusaurus, posthog-js, typedoc and @types/node.
Updates posthog-docusaurus from 2.0.4 to 2.0.5
Updates posthog-js from 1.271.0 to 1.275.1
Release notes
Sourced from posthog-js's releases.
posthog-js@1.275.1
1.275.1
Patch Changes
#2422 4e15fda Thanks @โpauldambra! - fix: possi...
Bumps the sdk-typescript group in /sdk/typescript with 6 updates:
| Package | From | To |
|---|---|---|
| @opentelemetry/exporter-trace-otlp-http | 0.205.0 |
0.206.0 |
| @opentelemetry/sdk-node | 0.205.0 |
0.206.0 |
| @types/node | 24.6.2 |
24.7.2 |
| [@typescript-eslint/eslint-plugin](https://... |
Bumps the sdk-python-docker group with 1 update in the /modules/ruff/build directory: astral-sh/ruff.
Bumps the sdk-python-docker group with 2 updates in the /sdk/python/runtime directory: python and astral-sh/uv.
Updates astral-sh/ruff from 0.13.3 to 0.14.0
Release notes
Sourced from astral-sh/ruff's releases.
0.14.0
Release Notes
Released on 2025-10-07.
Breaking changes
Update default and latest Python versions fo...
Allow to export the introspection schema JSON for a module. This can be useful to debug engine/sdk features.
If you have a module initialized at my/module you can use it like:
host | directory 'my/module' | as-module | schema-json
For instance to get it on your host:
host | directory 'my/module' | as-module | schema-json | export schema.json
This if a follow up to #11229
- rename
schemaJSONtointrospectionSchemaJSON: more verbose, but it is exactly what we are providing here - in addition to
module, expose theintrospectionSchemaJSONtomoduleSource
It's now possible to:
host | directory . | as-module-source | introspection-schema-json | export schema.json
Note: contrary to my-dir | as-module, my-dir | as-module-source doesn't load yet the dependencies. But they are required to generate the s...
Dev + commit versions now are all v0.0.0 based. Less git manipulation = faster version computation.
TODO:
- [ ] Ensure v0.0.0 is not rejected by engines, and detected as a dev version.
- [ ] Make sure we have a better way of detecting dirty commits (or decide to not distinguish)
Bumps the engine group with 27 updates in the / directory:
| Package | From | To |
|---|---|---|
| github.com/99designs/gqlgen | 0.17.80 |
0.17.81 |
| github.com/Azure/azure-sdk-for-go/sdk/azidentity | 1.7.0 |
1.13.0 |
| github.com/Azure/azure-sdk-for-go/sdk/storage/azblob | 0.4.1 |
1.6.2 |
| [github.com/aws/aws-sdk-go-v2](https://github.com/aws/a... |
remove core/file's File.Open func, which performs a call to ref.ReadFile which does a mount/unmount each time Read() is called. execInMount on the otherhand only performs a single mount.
What is the issue?
See https://discord.com/channels/707636530424053791/1427354533511696579.
I have a Debian Trixie-based container where I need to run ping as a non-root user. Running the image with Docker Desktop works:
$ docker run --rm -it myimage:latest ping 127.0.0.1
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.032 ms
^C
--- 127.0.0.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1061ms
r...
What is the issue?
I've just started having problems creating Dagger modules using dagger init. See the console log below for example, but this is happening whether the directory is empty, is a n empty Git project root, is non-empty with non-git files, or a non-empty git root directory.
This is on Docker for Mac on sillicon hardware.
Dagger version
dagger v0.19.2 (image://registry.dagger.io/engine:v0.19.2) darwin/arm64/v8
Steps to reproduce
๏ฃฟ 11:28:00 ~
$ cd src/play...
This deprecates the config.Blueprint: *Module in favor of config.Blueprints: []*Module.
If I have the following blueprints:
- Name: Go, Functions: [Build, Lint]
- Name: Npm, Functions: [Build, Lint]
and I install only Go:
I can dagger call build or dagger call lint.
If I install both Go and Npm, I can:
dagger call go builddagger call npm lint- ...
To install blueprints, I can first dagger init --blueprint , and then later dagger blueprint add to add ...
What is the issue?
I'm setting up a simple Dagger function that opens runs Playwright UI mode as a service and as soon as I start using it, HTTP calls stop working.
The exact same setup works perfectly with Docker.
Here's a repro repo: https://github.com/andrestone/dagger-network-issue-repro
Dagger version
v0.19.2
Steps to reproduce
Follow instructions in the repro repo.
Log output
No response
What happened? What did you expect to happen?
What am I doing wrong? ๐
For "reasons", some of our engineers have started looking at apple containers to replace their colima/podman (90% of our team uses apple laptops, so naturally they will eventually look for the "native" container runtime).
I just tried to run dagger with apple containers under the hood, and I'm seeing some issues (which were reported from a couple of our engineers, hence I'm looking at.. ). Maybe is my setup or any...
When we provision engine, we try to always 'start' existing container before to check the state of the container.
This works well with Docker as a 'docker start' on an already existing and started container has no impact.
But with apple containers, to 'container start' an already existing container will stop and remove the container.
Instead, check the running status of the container, and if the container is already running, to not attempt to start it.
That way, from one call to the...
๐ข
func (m *Foo) Test(arg dagger.BuildArg) string {
return arg.Name
}
$ dagger call test
โผ load module: . 7.5s ERROR
! failed to get schema: failed to get schema for module "foo": failed to create
function "test": find mod type for function "test" arg "arg" type: "FooBuildArg!"
โโดโ finding module configuration 0.3s
โโดโ initializing module 7.2s
โฐโดโ inspecting module metadata 0.0s ERROR
! failed to get schema: failed to get schema for module "foo": failed to
create func...
On dagger call, with -y or --auto-apply, returned changeset will be automatically applied without to ask the user.
For instance
dagger call -y build
Bumps the sdk-java group in /sdk/java with 3 updates: io.smallrye:smallrye-graphql-client-api, io.smallrye:smallrye-graphql-client-implementation-vertx and org.codehaus.mojo:exec-maven-plugin.
Updates io.smallrye:smallrye-graphql-client-api from 2.15.0 to 2.16.0
Updates io.smallrye:smallrye-graphql-client-implementation-vertx from 2.15.0 to 2.16.0
Updates io.smallrye:smallrye-graphql-client-implementation-vertx from 2.15.0 to 2.16.0
U...
Bumps the sdk-typescript group with 9 updates in the /sdk/typescript directory:
| Package | From | To |
|---|---|---|
| @opentelemetry/exporter-trace-otlp-http | 0.205.0 |
0.206.0 |
| @opentelemetry/sdk-node | 0.205.0 |
0.206.0 |
| graphql-request | 7.2.0 |
7.3.1 |
| [@types/node](https://github.com/DefinitelyTyped/DefinitelyTy... |
Bumps the docs group in /docs with 12 updates:
| Package | From | To |
|---|---|---|
| @docusaurus/core | 3.9.1 |
3.9.2 |
| @docusaurus/mdx-loader | 3.9.1 |
3.9.2 |
| @docusaurus/plugin-content-docs | 3.9.1 |
3.9.2 |
| [@docusaurus... |
Bumps the sdk-elixir group in /sdk/elixir with 1 update: credo.
Updates credo from 1.7.12 to 1.7.13
Release notes
Sourced from credo's releases.
1.7.13
Check it out on Hex: https://hex.pm/packages/credo/1.7.13
Fix compatibility & compiler warnings with Elixir 1.19
Credo.Check.Refactor.ABCSize fixed false positive
Changelog
Sourced from credo's changelog.
1.7.13
Fix compatibility & compiler warnings with Elixir 1.19
Credo.Check.Refactor.AB...
Bumps the sdk-python-docker group with 1 update in the /modules/ruff/build directory: astral-sh/ruff.
Bumps the sdk-python-docker group with 1 update in the /sdk/python/runtime directory: astral-sh/uv.
Updates astral-sh/ruff from 0.14.0 to 0.14.1
Release notes
Sourced from astral-sh/ruff's releases.
0.14.1
Release Notes
Released on 2025-10-16.
Preview features
[formatter] Remove parentheses around multiple exception...
Bumps the engine group with 28 updates in the / directory:
| Package | From | To |
|---|---|---|
| github.com/99designs/gqlgen | 0.17.80 |
0.17.81 |
| github.com/Azure/azure-sdk-for-go/sdk/azidentity | 1.7.0 |
1.13.0 |
| github.com/Azure/azure-sdk-for-go/sdk/storage/azblob | 0.4.1 |
1.6.3 |
| [github.com/anthropics/anthropic-sdk-go](https://github... |
Use PHPStan in the PHP SDK Dev module to perform static analysis on the SDK.
- repro: inner env files not allowed to use module name as prefix?
- clean integration tests code
- repro: user defaults dont work well whem module name has a dash
- EnvFile.Namespace: expose API, tests
NOTE: this PR depends on #11161
In this PR, we don't add or remove any CI checks. We merely rename one, to make its purpose more clear.
See the comments for more :)
When loading a module on a remote engine, filesync can take a while. In default verbosity, that filesync is hidden from TUI, so it looks like everything is completed, and the dagger call is just hanging. You have to increase verbosity to find out that there are unfinished upload/filesync spans.
Fixes an issue raised by @tibor about module execution. npm ci would lead to a failure if the package.lock is out of date. That can happen for old modules that haven't been updated.
This can also happen for other package managers so we also disable it.
Benchmark shows a performance drawback of 3% with that changes. It's acceptable
Benchmarks
Yarn
โ .ts-missmatch-main/node-yarn.txt โ .ts-missmatch-dev/node-yarn.txt โ
...
- Remove unnecessary abstractions: "checks router", "sdk all"..
- Use new Changeset type for Generate() and Bump()
- Streamline use of errgroups and custom spans, with 'parallel' utility
- 'generate' also generates github actions config and changelog
- New convention: prefix checks with 'check-'
- 'check-lint' runs all linters, not just core go linter
- Remove dirdiff module (deprecated by Changeset)
- Move non-linting checks out of lint functions
- Simplify github actions generated config sl...
This is in preparation for, and to help the design of, an upstream feature that will natively recognize checks in this way.
Haven't sunk any time figuring out a repro for this, but seems obviously wrong from a look at the code.
Goals
- [ ] Uploading changes from local state
- [ ] Saving and loading LLM sessions
- [ ] (Auto-)compacting message history
WARNING: Breaking changes
LLM.loop is now required to actually initiate the LLM loop. Previously it
was "lazy" and happened when you requested the last reply, but that pattern
required the LLM object to update in-place, whereas now we want an ID returned
that includes the message history.
This fixes test failures introduced in a460cd6efc5263115626499d1cecc56f9003262a
Additional changes:
- Pin Typescript dep to
v5.9.3so we always download the same version - Remove register typedef from ts runtime entrypoint
- Remove file loading when introspecting
- Remove unused functions
Before and after comparison
Fixes #11107.
We previously added a fix for diffing identical directories. However, this only worked if both of those directories were at the root (dir=/). If they weren't (dir=/subdir), then this would cause a failure on any subsequent operation.
Follow-up to https://github.com/dagger/dagger/pull/11161
This wasn't working, and was a pain to track down. I only found this while working on an API change, and discovered that dagger generate had entirely stopped working.
generateClientwas somehow accidentally creating files insdk/php/sdk/phpinstead of justsdk/php. We fix the path manipulation, and now get the right path.generateDocswas comparing an empty directory, making the changeset think that all these file...
I ended up wanting this when playing with PARC / scale-out things.
Note - this can't actually be called from a module, since it's one of the blocked APIs. But it's still useful!
This was already getting a bit unwieldy as we've been gradually adding
bits and bobs to the protocol, and it was also used to represent all
forms of modification.
Refactored into an IDOpts pattern, and added ID.With(...IDOpts) for
applying selective modifications to an ID, rather than having to
re-Append from its receiver.
Signed-off-by: Alex Suraci
Bumps the sdk-python-docker group with 1 update in the /modules/ruff/build directory: astral-sh/ruff.
Bumps the sdk-python-docker group with 2 updates in the /sdk/python/runtime directory: python and astral-sh/uv.
Updates astral-sh/ruff from 0.14.0 to 0.14.1
Release notes
Sourced from astral-sh/ruff's releases.
0.14.1
Release Notes
Released on 2025-10-16.
Preview features
[formatter] Remove parentheses around multip...
Bumps the sdk-typescript group with 12 updates in the /sdk/typescript directory:
| Package | From | To |
|---|---|---|
| @opentelemetry/core | 2.1.0 |
2.2.0 |
| @opentelemetry/exporter-jaeger | 2.1.0 |
2.2.0 |
| @opentelemetry/exporter-trace-otlp-http | 0.205.0 |
0.207.0 |
| [@opentelemetry/sdk-metrics](https://git... |
The inverse of Ctrl+S: this allows the user to make changes out-of-band and then sync them efficiently into the env workspace.
To do this efficiently, the CLI tracks an mtime representing the last time that data was synced (in either direction). Then, when the user presses Ctrl-U, we walk the directory and only upload paths with an mtime past the last sync.
- [ ] Test
TODO
- [x] Resurrect
SelectID - [ ] Store
Runtimein acallID
This PR introduces:
- Abstraction named volume, which is the volume mount, mounted from the engine.
- New API providing SSHFS mount, passing down required data for the engine to mount the sshfs, which can later be used as a volume
- Changes to the engine allowing host mounts
Important points:
- Dagger is built with the sshfs and fuse packages. (Should this dependency always be included since it would require starting the engine with certain permissions that might be too permissive for...
What is the issue?
My code:
@object_type
class DemoCi:
@function
async def build_container(
self,
) -> dagger.Container:
"""build container from host image"""
if hasattr(dag, 'host') and callable(getattr(dag, 'host')):
print("dag have host method")
else:
print("dag not have host method")
container = dag.host().container_image("fastapi-demo:v5")
I run:
dagger call build-co...
This will allow passing images from the local store into a dagger function.
For the sake of cross-CI portability, we should sever our dependency on Github as a secrets manager. Since we already use 1password, and Dagger supports that natively... The answer is obvious: migrate to 1password.
What are you trying to do?
The docs for assisted injection state the user must define the assisted injection factory manually. Example:
@AssistedFactory
public interface FooFactory {
Foo create();
}
In some circumstances this formulaic interface could be generated for the user, similar to how AutoFactory generates the factory class based on the constructor of the target class. As there are circumstances where this is not ...
Problem
There is a buildkit feature that Dagger can't currently replicate: the ability to dynamically change the upload filter on a local directory.
There's a good reason for that: it breaks our caching model. If dagger can't tell in advance which parts of a local directory your function will need to read, it has to invalidate your function cache if any file in that directory changes. This has implications for caching that are difficult to even reason about, and so far it hasn't been wo...
Problem
When computing a diff with Directory.changes, I can't specify which paths to include or exclude in the comparison.
This makes it more painful to eg. execute codegen commands and discard known side effects, for example cache files, intermediary artifacts etc.
I've had to develop my own wrapper for this purpose:
// Return the changes between two directory, excluding the specified path patterns from the comparison
func changes(before, after *dagger.Directory, exclude []...
A little papercut I ran into; the intent is to only error on required args, and it handled // +defaultPath but not // +default.
At one point I had added content hashing of git module sources, which is great because it means that different commits from the git repo that don't modify the actual module source can all share cache.
Later, I removed the lines doing that because there was some content hashing happening in the git API itself. However, that content hashing is only happening in some cases, so we actually just dropped the nice extra caching for many scenarios.
This re-adds the content hashing in the module...
What is the issue?
Sometimes the engine stops working with error messages like this:
Error: failed to load cache key: no active session for ja13ul8z8qvjxt376vmkvzvvs: context deadline exceeded
Looking at the engine logs, I've noticed two things:
1 - The first appearance of the error message always occurs after the same other log message:
time="2025-10-24T05:36:55Z" level=debug msg="checked for cached auth handler namespace" cached=true key="docker.io/library/node::pull" n...
On the gitlab free tier, they only last 1 year
We see quite a few flakes around missing sessions in the midst of dagop. It's always when integ tests are running in parallel and a lot that are sharing a step will hit the same error.
I think it may be a timing thing where the client metadata stored in an op is cached in dagql, then the unlazy happens later with timing such that the stored client metadata is okay at first but becomes invalid later due to the session it was from disconnecting.
Instead, I think we should just always use ...
Since #11161 the worktree now includes .changes/ (as it has been added as a dependency inside the top-level dagger.json), which impacts the go sdk git rewrite.
The way the Go SDK publish job rewrites history is:
git filter-branch -f --prune-empty \
--subdirectory-filter sdk/go/ \
--tree-filter 'if [ -f go.mod ]; then go mod edit -dropreplace github.com/dagger/dagger; fi' -- HEAD
and now fails on merge 7383ddd9a17c2fa5ec6c35fec1e406dd87ad74d9 with `error: Entr...
Adds two pretty low-level APIs to LLM for clearing either system prompts or user messages. The compaction dance uses both: first we swap out the system prompt, since the compacting agent is single-purpose, and then we swap out the user messages with the prompt returned by the compacting agent.
The compacting agent is implemented in the CLI at the moment. An earlier iteration had this directly implemented by the API (LLM.compact) but this setup gives us a bit more flexibility without re...
- avoids the need to track state in MCP
- allows LLM to query by span ID after-the-fact
- support an LLM running N tools in parallel and querying the logs for any of them, not just the last one
A small change splitting out from #11264
Bumps the sdk-java group with 4 updates in the /sdk/java directory: io.smallrye:smallrye-graphql-client-api, io.smallrye:smallrye-graphql-client-implementation-vertx, io.vertx:vertx-web-client and org.codehaus.mojo:exec-maven-plugin.
Updates io.smallrye:smallrye-graphql-client-api from 2.15.0 to 2.16.0
Updates io.smallrye:smallrye-graphql-client-implementation-vertx from 2.15.0 to 2.16.0
Updates `i...
Bumps the docs group in /docs with 2 updates: posthog-js and @types/node.
Updates posthog-js from 1.276.0 to 1.280.1
Release notes
Sourced from posthog-js's releases.
posthog-js@1.280.1
1.280.1
Patch Changes
#2492 2b13291 Thanks @โpauldambra! - fix: extendUrlParams should always replace unless the caller says otherwise
#2491 130c9e0 Thanks @โpauldambra! - fix: correctly...
Bumps the sdk-elixir group with 2 updates in the /sdk/elixir directory: credo and ex_doc.
Updates credo from 1.7.12 to 1.7.13
Release notes
Sourced from credo's releases.
1.7.13
Check it out on Hex: https://hex.pm/packages/credo/1.7.13
Fix compatibility & compiler warnings with Elixir 1.19
Credo.Check.Refactor.ABCSize fixed false positive
Changelog
Sourced from credo's changelog.
1.7.13
Fix compatibili...
Bumps the sdk-python-docker group with 1 update in the /modules/ruff/build directory: astral-sh/ruff.
Bumps the sdk-python-docker group with 1 update in the /sdk/python/runtime directory: python.
Updates astral-sh/ruff from 0.14.1 to 0.14.2
Release notes
Sourced from astral-sh/ruff's releases.
0.14.2
Release Notes
Released on 2025-10-23.
Preview features
[flake8-gettext] Resolve qualified names and built-in bindings (INT001, INT002, INT003) (#19045)
...
Bumps the engine group with 8 updates in the / directory:
| Package | From | To |
|---|---|---|
| github.com/aws/aws-sdk-go-v2 | 1.39.3 |
1.39.4 |
| github.com/aws/aws-sdk-go-v2/config | 1.31.13 |
1.31.15 |
| github.com/aws/aws-sdk-go-v2/feature/s3/manager | 1.19.13 |
1.19.15 |
| github.com/klauspost/compress | `1.1... |
In our publishing flow we create dagger-go-sdk and dagger-php-sdk repos that include the contents of sdk/go/ and sdk/php/ respectively. To create these, we were using git-filter-branch.
According to the git docs:
git filter-branch has a plethora of pitfalls that can produce
non-obvious manglings of the intended history rewrite (and can leave you
with little time to investigate such problems since it has such abysmal
performance). These safety and performance issues ...
After a dagger init --sdk=python or a dagger develop on a python module, do not return the sdk/python/runtime files as part of the generated code.
Those files are not necessary for the python module itself, they are only necessary to build the python SDK on the engine side.
This helps to keep the user module code cleaner and more understandable.
Before:
$ tree
.
โโโ dagger.json
โโโ LICENSE
โโโ pyproject.toml
โโโ sdk
โย ย โโโ codegen
โย ย โย ย โโโ pyproject.toml
โย ย โ...
By porting frequently imported modules, or even SDKs, to dang, we can make their downstream modules faster.
To make the most of the performance boost, though, we need to embed a dang interpreter directly in the engine. This removes the overhead of the Go runtime altogether.
This PR contains a lot of improvements for the TypeScript SDK module support (ModuleRuntime / Codegen)
I may then split that into multiple PRs (or not), but this is a global PR so I can easily share my discovery.
TODO
- [ ]
ModuleRuntime- [x] Bun
- [ ] Deno
- [ ] Node
- [ ]
Codegen- [ ] Bun
- [ ] Deno
- [ ] Node
Changes
- Make the step as stateless as possible so we can:
- Run them in parallel (for example generating the SDK bindings, installi...
Enable moduleTypes for python SDK so that module types can be loaded before the runtime.
Fixes 6 issues detected during static analysis.
Each issue fixed as a separate commit, but since they're fairly small changes anyway you can probably just review it as a whole.
Not to worry, it's never been asked of me at least.
I checked the code for Doctum (the library generating the code). There is no config for line numbers.
There's nothing I can do to fix it quickly in this PR.
In a separate PR: Swapping libraries may be the best solution, I'd be quite tempted to try phpDocumentor which seems to be a more mature libra...
Dagger as a native File API, and a native JSON API, but it can't connect them directly. Clients have to 1) retrieve the contents of the file, 2) send the contents back to a JSON object. It would be more efficient (and less verbose) to allow File.asJSON.
adds OTel spans for filesync uploads. This providers better visibility
into what's effectively being uploaded to the context. It only reports
root paths given that in most cases this will otherwise produce a very
large amount of spans which will put a lot of pressure on the tracing
backend.
We're also collecting the amount of written bytes as well as a the total
duration for each root path
Signed-off-by: Marcos Lilljedahl
In addition to installing a toolchain, a user might need to configure it.
This should be done with the CLI eg. dagger toolchain config and backed by fields in dagger.json
Dagger can natively load .gitignore and apply its rules to filter host directories pre-upload.
This feature is disabled by default, and can be enabled as an argument to Host.directory().
But, it can NOT be enabled by a function to specify pre-call filtering on its own arguments...
In other words, we are missing +gitignore (or +ignore="git")
What is the issue?
AsModule fails on certain modules.
โผ Container.withExec(
โ args: ["codegen", "generate-typedefs", "--module-source-path", "/src/docs/current_docs/cookbook/snippets/set-common-default-path/go", "--module-name", "my-module", "--introspection-json-path", "/schema.json", "--output", "typedefs.json"]
โ experimentalPrivilegedNesting: true
โ execMD: "{\"ClientID\":\"84vv2g9f8b7zfiv4oum5cu94r\",\"SessionID\":\"\",\"SecretToken\":\"\",\"Hostname\":\"\",\"ClientStable...
[dagger/dagger] Pull request opened: #11319 fix(ts): recover property access defaults for core enums
Context
In #11267, Tom changed resolveParameterDefaultValue to lean entirely on the TypeScript TypeChecker. That dropped the old object-based lookup we had for ModuleTypes.
The unintended consequence
This is generally not a problem, as, at runtime, everything is properly resolved.
However, my deprecation PR needs to have a static resolving of all enum defaults (to distinguish omittable mandatory args [args with defaults values, variadics], with the others) to ...
[dagger/dagger] Pull request opened: #11320 disable unneeded and extremely expensive content hashing
dag-op is using FileOp as a base, which enables content hashing of all inputs by default.
This is extremely expensive in terms of CPU time, disk reads, memory, etc. It also serves no purpose anymore (that I can see) because we now ensure all inputs to dag-ops have their dagql ID digest mixed into the op's cache key.
This had been getting MUCH worse recently because we've been porting more and more ops to dag-op. I think in particular withDirectory was especially painful because it res...
Close ##11312 (eventually)
Not ready, but a quick test of trying a different documentation generator for PHP
some modules in doc were referencing dagger package as
dagger/my-module/...
but the go.mod files declare
module main
so dagger package can't be found
fixes #11318
Following up from https://github.com/dagger/dagger/pull/11073.
It seems like this is universally the wrong behavior to me.
- Cache performance is just weird. The cache key of a git checkout will have to mutate to account for any tag change in the repo, regardless of whether it's used.
- The logic is hugely complex, and was badly handled. It was possible that the checked out repo tags didn't match the result of
.Tags
Problem
Nightly builds publish main builds of Dagger as usable releases. But the publishing process is slightly different, which requires special cases in the build scripts, and even in the CLI code.
Solution
Change how we publish nightly builds, to be more like stable releases. This will allow simplifying the release toolchain, and the CLI code. It will also remove complicated coupling between the two, thus making the whole system simpler.
Specifically:
- Instead of publishing...
pprof mutex profiles show the engine's goroutines spending an enormous amount of time blocked waiting for various mutexes, mostly from buildkit's worker storage (that manages refs + associated metadata). A 60s profile has shown as much as 1.4h of delay.
Seeing what happens in practice when we reduce that contention. It's hard to predict the end effect on actual wall time, but a few local runs of our integ tests have been pretty promising, so seeing what happens in CI.
What is the issue?
I have a simple module which builds an image and publishes it to ECR. I've also configured it to export the layer cache using _EXPERIMENTAL_DAGGER_CACHE_CONFIG. However, with this configured, it appears that the cache exporter exceeds the timeout window, causing the call to fail with:
ERR cleanup failed msg="close dagger session" err="shutdown: do shutdown: Post \"http://dagger/shutdown\": context deadline exceeded" duration=41.927581741s
Error: cleanup failed: ...
working on a fix for #10992
Plundered from https://github.com/dagger/dagger/pull/11158.
When creating a listener on the host, it was possible that we could leave a dangling connection.
If somehow we failed to dial the connection, or we failed to read or write info from the connection, we just abandoned the connection and left it in an open state. This seems to be an oversight.
I encountered this originally when I misconfigured a service without a healthcheck and tried to connect to it immediately. The container...
Should fix the failing scan on main, failing from https://avd.aquasec.com/nvd/2025/cve-2025-58187/.
Replacement for https://github.com/dagger/dagger/pull/11158. See https://github.com/dagger/dagger/issues/10895#issuecomment-3468452009.
This patch is a quick WIP hack to show how the parts should work together: it should be enough to bikeshed a bit more, and for some one else to pick up this work (I'm not gonna be around to complete it).
Essentially, we introduce a new Watcher type. It can be constructed from Host.watcher, can be filled from defaultPath and can be passed as an arg...
Also includes bumping all the dagger.json's to not disable function caching and annotate some functions here and there:
- publish-related functions are cache per session
- I also annotated some of the test functions as cache per session because we often want to re-run the same test repeatedly (i.e. for a flake)
- this works for now, but wondering if there's a better way of approaching this such as allowing a function with a cache annotation to have that behavior overridden at runtime ๐ค
With the bundled python SDK, uv and uvx are packaged inside the engine. In that case we don't need to pull an image to get those tools.
Only pull the image if it's required. On my machine this saves almost 1.5s.
If uv and uvx are not found in the dist (bundled) directory, pull the image as usual.
The benefit is really on the first call. Otherwise the image would be cached. But the first call is still very important as it's creates a first impression.
This changes also mo...
Disabling sync in both bk+containerd boltdbs makes an absurd difference in execution time for me locally (9m for TestModule vs over 30m previously).
Very curious to see the impact in CI. Disk performance, filesystem, etc. are obviously all big factors in this, so want to see if it's as dramatic on our CI infra.
Either way, clearly worth pursuing. Will require we upgrade to containerd v2 to be able to customize these settings, for now just cp -r'd it in to while testing.
Generally s...
This is probably a worthwhile chore, but immediate motivation is to support https://github.com/dagger/dagger/pull/11336 since v2 allows us to customize bbolt configuration and reap performance benefits
What are you trying to do?
From https://docs.dagger.io/extending/function-caching/
We should find the way to put cache option to the defn to enable cache TTL.
Why is this important to you?
No response
How are you currently working around this?
No response
Bumps the engine group with 10 updates in the / directory:
| Package | From | To |
|---|---|---|
| github.com/anthropics/anthropic-sdk-go | 1.14.0 |
1.16.0 |
| github.com/aws/aws-sdk-go-v2 | 1.39.3 |
1.39.5 |
| github.com/aws/aws-sdk-go-v2/config | 1.31.13 |
1.31.16 |
| [github.com/aws/aws-sdk-go-v2/feature/s3/manager](https://github.com/aws/aws-... |
It's just a small typo I noticed while trying to understand #11328. I think this is supposed to be init (since the error is returned from the initServer function.
What happened? What did you expect to happen?
Currently, when a SDK is registering the types and functions exposed by a module, the SDK is doing this using the engine version declared by the user module and not by the SDK module.
This is currently required for backward compatibility regarding enums: to allow a module declaring an engine version lower than v0.18.11 to work with the legacy enum values even if the engine is running a more recent version.
But maybe that's wrong and we sh...
Bumps the sdk-java group in /sdk/java with 2 updates: com.jayway.jsonpath:json-path and org.junit:junit-bom.
Updates com.jayway.jsonpath:json-path from 2.9.0 to 2.10.0
Release notes
Sourced from com.jayway.jsonpath:json-path's releases.
json-path-2.10.0
What's Changed
Bumps dependency versions by @โkallestenflo in json-path/JsonPath#1057
net.minidev:json-smart:2.6.0
org.slf4j:slf4j-api:2.0.17
com.goo...
Bumps the sdk-typescript group in /sdk/typescript with 4 updates: graphql, tar, @types/node and eslint.
Updates graphql from 16.11.0 to 16.12.0
Release notes
Sourced from graphql's releases.
16.12.0
v16.12.0 (2025-11-01)
New Feature ๐
#4482 Implement changes for executable descriptions (@โJoviDeCrooc...
Bumps the docs group in /docs with 3 updates: posthog-js, sass and @types/node.
Updates posthog-js from 1.280.1 to 1.284.0
Release notes
Sourced from posthog-js's releases.
posthog-js@1.284.0
1.284.0
Minor Changes
#2529 882d823 Thanks @โMattBro! - feat(surveys): add URL prefill and auto-submit support
Surveys can now be prefilled and a...
Bumps the sdk-python-docker group with 1 update in the /modules/ruff/build directory: astral-sh/ruff.
Bumps the sdk-python-docker group with 1 update in the /sdk/python/runtime directory: astral-sh/uv.
Updates astral-sh/ruff from 0.14.2 to 0.14.3
Release notes
Sourced from astral-sh/ruff's releases.
0.14.3
Release Notes
Released on 2025-10-30.
Preview features
Respect --output-format with --watch (#21097)
[pydoclint...
updates docs so that they use directory.dockerbuild instead of the
deprecated container.build method.
Signed-off-by: Marcos Lilljedahl
Close #11312
The previous library (Doctum) has no configuration for avoiding line numbers. This is an issue as it causes unnecessary churn during code reviews.
This PR replaces Doctum with PHPDocumentor, and then customizes the output to minimize the docs to the bare necessities. :bear:
It should make the diffs smaller, as well as a few customization tweaks to make the docs fit more nicely with Dagger's current theme.
Signed-off-by: Marcos Lilljedahl
In order to improve and formalize jumping into the context of the SDKs runtimes, this commit adds an option to the dagger.json (easiest option) to jump into the container runtime.
It's a good DX loop to work on the auth:
- Just add a
debug: truefield -->
{
"name": "dagger-dev",
"engineVersion": "v0.19.4",
"sdk": {
"source": "go",
"debug": true
}
}
- Then, call any dagger function (any return types will work). You will j...
There's a bug w/ function caching in the following scenario:
Say there's 3 functions like A calls B calls C. C uses a context dir arg. Then on a subsequent run A is cache invalidated but B + C are cached. The problem is the contextual dir arg to C was never loaded and A sees it from the cached result and tries to load it but does so from its context, which is different than the original host.
So you get various errors along the lines of not being able to load a path because it's missing...
Problem
When running dagger call from a local module, filesync operations (Host.directory()) are triggered by loading modules, loading contextual directories... These filesync operations are "orphaned": they don't appear as children of a top-level span. Combined with the fact that they are hidden by default... the result is a frequent illusion of nothing happening, when in fact a lengthy filesync is underway.
What are you trying to do?
See https://github.com/dagger/dagger/pull/11071#pullrequestreview-3411250888
Why is this important to you?
No response
How are you currently working around this?
No response
Context
The dagger.json fileโs "sdk" key provides a convenient channel for passing configuration data from the SDK layer down to the engine.
This PR adds a debug flag to the core schema, binding it to the SDK config. It doesnโt enable debugging yet, just sets up the plumbing and cache-busting needed for the debug flow (PR #11349)๏ฟผ.
Example:
{
"name": "dagger-dev",
"engineVersion": "v0.19.4",
"sdk": {
"sou...
this is useful particularly in the cases where the trace is started from
the SDK which currently results in a generic span name like "dagger
session...."
Signed-off-by: Marcos Lilljedahl
Introduce a new ast parser for python that parses the code to convert them to dagger types. This is used by moduleTypes SDK function. Contrary to the code used to call functions that is loading the user module code, this parser never load the code, it only analysis it for objects, functions, etc. That way this will still work even if the code contains unresolved dependencies, like when using self calls.
For performances reasons, the tool doing the registration of the types is bundled in ...
This fixes a bug where directory.Exist failed to resolve an absolute symlink relative to the mounted filesystem, but instead escaped the mounted filesystem and incorrectly referenced / on the host's filesystem.
Fixes #11325
[!NOTE]
Implemented using Doug
Summary
Successfully implemented the changes to simplify nightly builds by using version strings instead of git commit tags. This removes the distinction between "version" and "tag" in the build and publishing process.
Changes Made
1. Removed Tag Variable from Engine Package ( engine/version.go )
โข Removed the engine.Tag variable that was previously filled at link-time
โข Only engine.Version remains, which s...
Signed-off-by: Marcos Lilljedahl
We've seen in CI some SQLITE BUSY errors popping up again in the telemetry client dbs. It's possible (but far from confirmed) that other performance improvements may be resulting in us writing to those dbs faster and thus making it easier to hit that error.
Trying out a bump of the timeout to see if it helps in the short term.
When calling a dagger function in the CLI (dagger call), the result of File.contents is printed to the screen by default, which results in too much output. Example:
Bumps the engine group with 16 updates in the / directory:
| Package | From | To |
|---|---|---|
| github.com/anthropics/anthropic-sdk-go | 1.14.0 |
1.17.0 |
| github.com/aws/aws-sdk-go-v2 | 1.39.3 |
1.39.6 |
| github.com/aws/aws-sdk-go-v2/config | 1.31.13 |
1.31.17 |
| [github.com/aws/aws-sdk-go-v2/feature/s3/manager](https://github.com/aws/aws-... |
There appears to have been a long-standing issue with dagger develop --recursive when your top-level module has a custom name for the dependency (it overwrites the dagger.json of the dep with that name, which isn't correct). Has existed for as long as --recursive has existed I believe.
This fixes the generated dagger.json to use the correct original name.
[dagger/dagger] Pull request opened: #11366 core/git: cache `git.Remote()` metadata in session cache
We currently run git ls-remote on every NewGitRepository, without any cache. This operation takes on average ~0.7s, and should be optimized a bit more.
This commit introduces a session-level caching on this step, meaning that multiple Remote() calls with a different dag.Git(ref, options) leading to the same ref to be cached.
This is the first step towards re-lazyfying git operations
The changelog generation incorrectly marked me as an external contributor during the last release: https://github.com/dagger/dagger/blob/598a68e61ceaa144efad94cba1befeef342fe534/CHANGELOG.md?plain=1#L16
Not sure what changed, but it's supposed to be using the GH API to know who's external.
This isn't really a blocker for v0.19.6 since it's easy to patch, but would be nice to fix, so adding to milestone for now
What are you trying to do?
When I'm exploring modules, especially modules with multiple functions, this can take a while to understand what are the available functions to call.
It could be interesting to have an interactive way to browse functions.
Let's take as an example the main module of dagger/dagger:
$ dagger functions
โถ connect 0.5s
โถ load module: . 35.3s
Name Description
bench Find benchmark suites to run
bump -
check-generat...
- Avoid dumping ginormous object JSON into response body
- Expose tools for object field getters (needed for e.g.
sdk python generate) - Fix OpenAI issue with MCP servers having null properties
we're also enabling the nilness linter to catch these issues earlier
Signed-off-by: Marcos Lilljedahl
This is it! The last layer of the onion. Let's break up our CI monolith into cleanly decoupled toolchains.
Goals:
- Faster CI
- Simpler CI
- A golden example of Dagger best practices
TODO
- CI: run ci-in-ci check without requiring --source constructor argument
- CI: run "scan" check without requiring --source constructor argument
- CI: run scripts/ checks without requiring --source constructor argument*
- **CI: 'dagger call sdk php' doesn't require --source construct...
Seeing if this fixes the flake in TestContainer in CI. I can't confirm locally because there I get seemingly unrelated errors related to cgroup setup ๐ตโ๐ซ, possibly some kernel-related and/or cgroup v1/v2 related nonsense.
Also reducing the verbosity since there were complaints and making the cache volume locked since locally I hit an error due to it being used concurrently
Bumps the engine group with 17 updates in the / directory:
| Package | From | To |
|---|---|---|
| github.com/99designs/gqlgen | 0.17.81 |
0.17.82 |
| github.com/anthropics/anthropic-sdk-go | 1.14.0 |
1.17.0 |
| github.com/aws/aws-sdk-go-v2 | 1.39.3 |
1.39.6 |
| github.com/aws/aws-sdk-go-v2/config | `1.31.13... |
we accidentally removed it in a previous release.
fixes #11367
Signed-off-by: Marcos Lilljedahl
The tests were being given a container with a dev engine attached via service dep, but then were being run as nested execs, which overrode the settings and made them not actually hit the dev engine they were supposed to hit at all.
This adds and option to the tests to disable nested execs (which is particular to the nested dev engine sidecar setup in our top-level module) and uses that to run tests.
This fixes the errors entirely for me locally. It also is likely the explanation ...
Bumps the engine group with 18 updates in the / directory:
| Package | From | To |
|---|---|---|
| github.com/99designs/gqlgen | 0.17.81 |
0.17.82 |
| github.com/anthropics/anthropic-sdk-go | 1.14.0 |
1.17.0 |
| github.com/aws/aws-sdk-go-v2 | 1.39.3 |
1.39.6 |
| github.com/aws/aws-sdk-go-v2/config | `1.31.13... |
What are you trying to do?
Right now every time you do a dagger develop the dagger.json just pins to your current engine version - even if it's a dev version.
This gets really annoying because half the time the module would be just fine on the version it was. It would be nice if we only bumped that version when the module actually needs it.
Maybe we could do that based on views? I don't think we're marking what version new APIs appear in, because there's a chicken-egg problem (don'...
Bumps the sdk-java group in /sdk/java with 2 updates: io.opentelemetry:opentelemetry-bom and com.squareup.okhttp3:okhttp-jvm.
Updates io.opentelemetry:opentelemetry-bom from 1.53.0 to 1.56.0
Release notes
Sourced from io.opentelemetry:opentelemetry-bom's releases.
Version 1.56.0
API
Incubator
Support ExtendedOpenTelemetry in GlobalOpenTelemetry (#7799)
SDK
Changes to MeterConfig, LoggerConfig, ...
Bumps the docs group in /docs with 1 update: posthog-js.
Updates posthog-js from 1.284.0 to 1.290.0
Release notes
Sourced from posthog-js's releases.
posthog-js@1.290.0
1.290.0
Minor Changes
#2553 8a2b790 Thanks @โpauldambra! - feat: yield to the main thread during posthog init
posthog-js@1.289.0
1.289.0
Minor Changes
#2551 10be1b0 Thanks @โdmarticus! - Support bootstrapping feature flags during SSR in ReactJS
posthog-js@1.288.1
1.288.1
Patch ...
Bumps the sdk-typescript group in /sdk/typescript with 11 updates:
| Package | From | To |
|---|---|---|
| @grpc/grpc-js | 1.14.0 |
1.14.1 |
| @opentelemetry/exporter-trace-otlp-http | 0.207.0 |
0.208.0 |
| @opentelemetry/sdk-node | 0.207.0 |
0.208.0 |
| [@opentelemetry/semantic-conventions](https://github.com/open-telemetry/opente... |
Bumps the engine group with 21 updates in the / directory:
| Package | From | To |
|---|---|---|
| github.com/99designs/gqlgen | 0.17.81 |
0.17.82 |
| github.com/anthropics/anthropic-sdk-go | 1.14.0 |
1.17.0 |
| github.com/aws/aws-sdk-go-v2 | 1.39.3 |
1.39.6 |
| github.com/aws/aws-sdk-go-v2/config | `1.31.13... |
Bumps the sdk-python-docker group with 1 update in the /modules/ruff/build directory: astral-sh/ruff.
Bumps the sdk-python-docker group with 2 updates in the /sdk/python/runtime directory: python and astral-sh/uv.
Updates astral-sh/ruff from 0.14.3 to 0.14.4
Release notes
Sourced from astral-sh/ruff's releases.
0.14.4
Release Notes
Released on 2025-11-06.
Preview features
[formatter] Allow newlines after function he...
The action douglascamata/setup-docker-macos-action doesn't work with the new lima v2:
https://github.com/douglascamata/setup-docker-macos-action/issues/53
As the action picks by default the latest version of lima, go back to the previous stable lima v1.2.2 that should be ok.
What is the issue?
When I try to use a TextIO instance (in my case, StringIO), it fails because itโs not a file-like object.
class dagger.Config(*, timeout: ~dagger.Timeout | None = , retry: ~dagger.Retry | None = , workdir: ~os.PathLike[str] | str = '', config_path: ~os.PathLike[str] | str = '', log_output: ~typing.TextIO | None = None, execute_timeout: ~typing.Any = )
log_output(TextIO | None) โ ATextIOobject to send the logs from the engine.
Dagger...
What is the issue?
When I run a Dagger function from the Python REPL or from the command-line, it makes changes to the terminal that are not cleaned up afterwards.
When I run from the terminal, it shows the animated log output, then after the function has finished running, it says โDisconnectingโ and terminates. It fails to print a newline, and for some reason the blinking cursor disappears from my terminal session.
When I run from the Python REPL, the โDisconnectingโ message with ...
With the recent changes introduced by https://github.com/dagger/dagger/pull/11309, we significantly improved the performances for both Node, Deno and Bun.
So I'm wondering if we should change our default TypeScript runtime to maximize performances by default.
If we compare the number for dagger v0.19.6, we got:
โ bun.txt โ deno.txt โ node_yarn.txt โ
...
Noticed this panic locally and chucked it into an LLM to avoid a rabbit hole, here's its generated description:
cc @sipsma
Fixes a panic that occurs during container execution error handling when there's a mismatch between mount indices and output indices.
The Bug
panic: runtime error: index out of range [2] with length 2
at /app/core/container_exec.go:302
The error handling code in WithExec's deferred function was incorrectly assuming that iteration i...
for performances
This should be a drop-in replacement, API should be the same.
What is the issue?
In some cases, module constructor arguments that have python-native default values are not overridden by the values provided in the .env file. Presumably these default values should be overridden if they are supplied via the .env file.
Dagger version
dagger v0.19.3
Steps to reproduce
# .env
SECRETWITHDEFAULT=env://SOME_SECRET_ENV
import dagger
from dagger import Doc, dag, field, function, object_type
@object_type
class MyModule:
src:...
Problem
The experimental toolchain config feature allows setting default values for a toolchain's functions, but only if the argument is a string.
In my case, the argument I want to configure is an array of strings. But there are other possible types.
What is the issue?
I am trying to set up a registry mirror that points to a different location for hub.docker.com. Naturally, I try to follow the docs available for configuring the Dagger engine here, but I am struggling with getting this to make sense.
I create an engine.json config in $HOME/.config/dagger/engine.json with the content below:
{
"registries": {
"docker.io": {
"mirrors": [...
The time has come
The time has finally come to break up our CI monolith into cleanly separated toolchains. This will make our CI simpler, smaller, and hopefully faster! It will also finally allow us to show our own CI as a "golden example" of how to use Dagger. It has been a long road getting to this moment... ๐ญ
What happened? What did you expect to happen?
Dagger seems to try to interpret parts of the env variable: USER=an$example-user as a separate variable. I get the following error:
failed to get configured module: failed to resolve dep to source: failed to load git dep: select: load user defaults: Evaluate env file: USER: example: unbound variable
How do I escape the '$' in my env var? the documentation doesn't mention this behaviour. I pass this value as a regular argument to the dagg...
While working on checks/scale-out I managed to randomly hit locally the same hang we see in our CI occasionally where loading modules hangs forever and lots of spans never finish. In CI that seemed to be accompanied by SQLITE BUSY errors from telemetry, turns out locally it was too.
I only managed to repro it one more time despite many attempts in a loop. Engine SIGQUIT stack traces from both those occurrences (gist was giving me 500s, so uploading files) :
- [engine-goroutines-1.txt](h...
Bumps the engine group with 22 updates in the / directory:
| Package | From | To |
|---|---|---|
| github.com/99designs/gqlgen | 0.17.81 |
0.17.83 |
| github.com/anthropics/anthropic-sdk-go | 1.14.0 |
1.17.0 |
| github.com/aws/aws-sdk-go-v2 | 1.39.3 |
1.39.6 |
| github.com/aws/aws-sdk-go-v2/config | `1.31.13... |
- util/parallel: customize telemetry display options
- faster loading of modules with toolchains
- "dagger toolchain list": faster, less telemetry noise
just checking with CI what I did on python-sdk-dev looks good :-)
Certain (mostly corporate) proxies intercept TLS and thus need to re-sign using their own certificate authority. Dagger already supports specifying custom CAs for regular usage. This patch fixes ./hack/build in environments where a custom CA is needed.
This PR includes implementation (in core/file.go and core/json.go), an integration test, and the result of code generation.
Fixes #11313
Assisted by Claude Code
- replaces the clunky telemetry.End fn pattern with a simple error pointer
- tracks the span as the origin of the error by re-assigning the pointer, if the error does not already have an origin
Note: the generator function is not 100% reproducible, it looks like a transient dependency was updated, and changed a "ghost input" of our generator function.
We should hunt down the root cause and pin dependencies more aggressively.
Signed-off-by: Solomon Hykes
As discussed with @shykes, with the lazy runtime loading addition, it became hard to verify that your module and its dependencies compiles just by running dagger functions.
This PR adds the flag eager-mod-loading to all modules commands so it disables lazy loading on module runtime. That way, running dagger functions --eager-mod-loading also let you verify that your module compiles properly.
Add EagerModuleLoading in engine client metadata.
**Difference between [`dagger functi...
Supports horizontal scaling of checks to cloud engines.
- After earlier experiments, decided to do scale-outs based on checks rather than any generic function call. This makes it easier to support checks that have dependencies on containers/dirs (e.g. our
go/checkTidycheck has a dep on aGocontainer from a parent object). - The underlying mechanism and code is very similar to the function based approach (just simpler), so we aren't locking ourselves out of re-arranging or support gene...
Currently a Go SDK module gets its own personal Dagger Go SDK client generated to ./internal/dagger which the module code then imports.
It also has a locally defined dag variable that is the instantiated Dagger client.
This has a few downsides:
- Can't use a package for module and non-module code, since it's awkward for a module to depend on the external SDK
goimportssees undeclareddagand auto-importsdagger.io/dagger/dagwhich breaks everything - very annoying- Not always ...
Problem
In the experimental dagger checks feature, we use '/' as separator for the check path. This can be confused with a file path (it's actually a function path).
The problem will become more acute if/when we introduce 'dagger generate', which will work similar to 'dagger checks' but with generator functions.
In the context of 'generate', a slash-separated path will definitely be expected to be a file path, and users will be confused when it isn't.
Solution
Change the separator ...
A user reported a panic from ContainerDagOp where it was hitting either a nil return from LoadType or a return that when unwrapped is nil.
I don't have a repro for that yet, so the code there is just an update to turn that into an error and include more debug information to help track it down if/when it happens again.
However while attempting repros of it I managed to hit independent panics involving modules returning various permutations of nil things in lists. Fixed those here and inc...
My unscientific testing on my machine of dagger core version says that the connect time goes from about 1s-2s to 200-400ms.
NOTE: this PR depends on #11422. Please review that first
Change telemetry emitted by the CLI and engine when loading modules, so that it is more clear and pleasant to the user.
- util/parallel: document the meaning of various options
- engine: more user-friendly telemetry when loading modules
- cli: more user-friendly telemetry when loading modules
Previously, each client db could be opened multiple times, with one shared one for writing during the lifetime of the client and multiple other ones for reading (over the sse endpoints).
We also have been seeing occasional mysterious hangs where it becomes impossible to acquire a write lock on the DB, with SQLITE_BUSY errors returned and the engine hanging indefinitely trying to write.
There's a few potential interrelated explanations:
- While working on this PR I found out that `cl...
Minor changes to the choice and manner of prose for the sections which explain the โtypesโ and โchainingโ concepts.
Major change to the conceptual model of โfunctions on typesโ to โtypes as inputs to functionsโ.
Dagger is unambiguously influenced by functional programming paradigms (my opinion as a first-time reader), and therefore I propose the latter framing instead of the former โ which is more suited towards the object-oriented programming model.
I hereby guarante...
Minor changes to the choice and manner of prose for the sections which explain the โtypesโ and โchainingโ concepts.
Major change to the conceptual model of โfunctions on typesโ to โtypes as inputs to functionsโ.
Dagger is unambiguously influenced by functional programming paradigms (my opinion as a first-time reader), and therefore I propose the latter framing instead of the former โ which is more suited towards the object-oriented programming model.
I hereby guarante...
Dagger fails with containerd v2 on GitHub Actions ubuntu-22.04 (testcontainers overlay mount error)
Summary
Dagger pipeline with testcontainers fails on GitHub Actions ubuntu-22.04 after the November 12, 2025 runner image update that upgraded containerd from v1.7.28 to v2.1.5.
Environment
- GitHub Actions Runner: ubuntu-22.04
- Working Image:
ubuntu22/20250929.88(containerd v1.7.28) - Last working Oct 17, 2025 - Failing Image:
ubuntu22/20251112.150(containerd v2.1....
fix incorrect function name in comment
The dang sdk is breaking the engine dev build because it is using unreleased API, we pin the dang SDK to a commit that work to let the engine build
Full incident at: #maintainers message
/cc @eunomie
Expand the SDK.CodeGenerator interface to implements Init.
ModuleSource.GeneratedContextDirectory call init only when a new module is created or a new SDK is added: dagger init --sdk=xx or dagger develop --sdk=xx.
Implement ModuleInit in the TypeScript SDK.
Handle backward compatibility to fallback to Codegen if moduleInit isn't implemented by the SDK.
It would be very cool if a toolchain could introspect all available checks in its current context (NOT just checks it defines itself).
This would allow very cool use cases for example: a toolchain that generates a Github Actions YAML config based on available checks.
Not sure if this should be CurrentModule.checks(), or CurrentEnv.checks(), or some new unified API to represent the current context? Maybe a forcing function to finish "evolution of env"?
cc @vito @tomchv
In the spirit of dagger checks, which implements a native concept of "check functions", we should implement dagger generate, which implements the concept of "generate functions".
Design
TBD. Open questions:
- How to match generate functions? Pragma or no pragma?
- BUilt-in generate function. Can we hook up Dagger's own codegen as a built-in generate function?
Problem
dagger.json has a new field toolchains.*.arguments. This field gets wiped by dagger develop, dagger install, dagger toolchain install.
Rips out the elegant but brittle + high-maintenance error-origin-via-extended-errors approach, in favor of appending metadata to error strings and regexing it back out on the frontend.
It's bit hokey, but it will work everywhere. The previous approach required coordination in each SDK and at every layer (Go SDK, TypeScript SDK, engine calling functions, functions calling API, [...]) to support tracking error origins as extended fields and propagating them across boundaries.
Supporting m...
Tiny tweak to make LLM output less verbose when it's doing direct object function calls.
The current approach for rolling-up span state to a parent span scales extremely poorly as the number of descendant spans grows. Even when only doing it for spans that opt in, it gets really slow.
This new approach is much cheaper, and can be done for all spans. We don't need that yet (the check roll-up spans UI is still opt-in) but having that information handy might pay dividends later.
NB: entirely AI written, but manually verified that this helps a lot via profiling and eye test.
This patch disables the triggering of (unwanted AFAICT) credential prompts via the Dagger CLI.
One notable case where this happens is Visual Studio Code, which sets GIT_ASKPASS such that the user is prompted for credentials via the VS Code GUI. In any case where dagger was started from a VS Code shell and needed to access Git repositories (e.g. because of module dependencies), the user would be prompted via the GUI. This would happen even if credentials were otherwise available (e.g. via...
this is in line with the way that the OTEL exporters also authenticate
Signed-off-by: Marcos Lilljedahl
not really necessary, and seems to be causing conflicts:
The Exodus
It's time! Let us boldly enter a YAML-free future!
Goals
- Faster tests
- Simpler and cleaner configuration
- A Golden Example of solving real problems with Dagger
Tasks
- Kill the monolith
- Migrate secrets to 1password
- [ ] Local release
- [ ] Migrate docs netlify integration
- [ ] Migrate LLM evals
- [ ] Replace Honeycomb/CI infra tracing with (?)
- [ ] Run our checks on native Dagger infra (with secrets access)
- [ ] Keep nice Github checks UI...
The synchronization I added recently didn't handle the case where Open gets a context canceled in the middle of execution and multiple goroutines are waiting on init. The goroutines waiting on init in that case would correctly finish initialization, but the db would not be in the map anymore, so any subsequent goroutines trying to open the DB would think it doesn't exist and create another DB instance.
I actually saw this scenario play out in engine logs in CI, so not just hypothetical.
...
What happened? What did you expect to happen?
Due to extensive Bootstrapping, our application sometimes runs against the 15 Minute timeout and this gets the container stopped and the Pipeline fails.
78 : [14m44s] |
243 : 80/tcp
243 : [14m8s] | 13:05:52 WRN port not ready host=ohecroqomcjsg.k0j8oqtbppdba.dagger.local error="dial tcp 10.87.0.38:80: connect: connection refused" elapsed=14m8.179460325s
243 : [14m22s] | 13:06:06 WRN port not ready host=ohecroqomcjsg.k0j8oqtbppdba.dagge...
Before
$ dagger checks -l
โ connect 0.0s
โ load . 47.5s
โ fetch check information 0.1s
Name Description
ci-in-ci "CI in CI": check that Dagger can still run its own CI
lint-helm Lint the helm chart
test-helm Verify that helm works correctly
scan Scan source code and artifacts for security vulnerabilities
check-generated ...
Problem
When configuring my module to use an SDK, if that SDK is itself a blueprint, loading it will fail with this error:
SDK does not support defining and executing functions
https://dagger.cloud/dagger/traces/fd56a6446143774a7cc9e42a3c0016d3
When I install a toolchain in my module, that toolchain will match user defaults meant for my own module's constructor. Example:
- My module has a constructor argument
source - My module has a toolchain
foo - My
.envcontainsSOURCE=mysource - The toolchain
foowill receive a user defaultSOURCE=mysource, when it should not.
cc @kpenfound who discovered this
Similar to the buildkit codebase, we pretty often want custom dagger-specific changes to code in fsutil. Previously it was just the copy subpackage, which we imported in-tree a while back, but recently it's been to the client-side filesync code. e.g.
- investigating/improving slow performance when filesyncing to cloud engines
- fixing flakey filesync errors caused by inconsistencies between client/server views of filesystems
- simplifying the server-side filesync code, which current...
Previously, we added a fix for stale sessions showing up in dag-op due to per-LLB vertex deduplication in Server.clientFromIDs.
There's another codepath possibly impacted by the same problem when trying to get a session from the buildkit client. So we add the same fix there too.
This theoretically may be the cause of some flakes we occasionally hit with errors like:
failed to stat path: failed to get requester session: session for "...
Was looking into a run of test-sdks that was hanging and noticed some low hanging fruit:
- We were running all tests and lints twice (in parallel) due to some vestigial looking code
- Output was sometimes hanging in the middle of printing a >20k line string from the java sdk tests, which is because it was pushing the output of a introspection query to telemetry.
- it was also spending more than 15s loading a module unnecessarily (afaict)
- [before (1m24s)](https://dagger.cloud/...
User reported a v0.19.3 engine crashing with this stack:
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0xecd5f6]
goroutine 521 [running]:
github.com/dagger/dagger/internal/buildkit/cache.(*cacheManager).DiskUsage(0xc000390370, {0x3efeef0, 0xc0005ae280}, {{0x0?, 0xffffffffffffffff?, 0xc008bb8b50?}})
/app/internal/buildkit/cache/manager.go:1434 +0x1116
github.com/dagger/dagger/internal/buildkit/...
Bumps the engine group with 25 updates in the / directory:
| Package | From | To |
|---|---|---|
| github.com/99designs/gqlgen | 0.17.81 |
0.17.83 |
| github.com/anthropics/anthropic-sdk-go | 1.14.0 |
1.18.1 |
| github.com/aws/aws-sdk-go-v2 | 1.39.3 |
1.40.0 |
| github.com/aws/aws-sdk-go-v2/config | `1.31.13... |
Small core improvements spun out from #11373. Merge this first.
- allow toolchains config defaults to point to non-string defaults
- toolchains: preserve arguments with dagger develop
- Align dagger toolchain list with dagger functions
- util/parallel: configure rollup of logs and spans, for better display in checks
this enables retrieving envs from different sources and not only
process env variables. This is particularly useful so we can use this
package from other parts which can inject labels from other sources
Signed-off-by: Marcos Lilljedahl
When all clients of a service detach, we start a goroutine to stop the service and only remove it from the Services tracker after the service actually stops.
That gives rise to a race condition: if we detached, but then a client came in an attached, it would attach to this "doomed" service, instead of starting its own fresh instance.
Now we'll detect when a "running" service is actually stopping (bindings == 0), wait for it to exit, and then start a fresh instance.
When the registry is down, we currently panic instead of propagating the error. As it's a registry/network failures, it could be part of the hot path
See the added integ test for the case being fixed here.
In retrospect erroring out when transfering secrets/sockets from one client to another was unnecessarily zealous since in the worst case an attempt to use those by the client would just result in an error eventually.
In the current dagql caching system, it's possible for content-digested resources like git repo trees to end up in a client's call ID with auth sourced from an earlier client making the same call. In this case, even th...
There was some vestigial looking code when creating execs that resulted in nested execs created by modules to be marked as being clients for that module. This is subtly incorrect since they are not actually module clients (i.e. clients for function calls of the module), they are just execs created by the module.
This broke some cases of trying to load further modules from these nested execs because filesync tries to find the "non-module parent client", and would thus skip over the nested e...
The actual load of env values was not specifically finding the non-module parent client, which meant in certain cases (i.e. a function called by another function) its value could be loaded from the wrong client.
Think this is likely what's causing errors in https://github.com/dagger/dagger/pull/11373
Will add an integ test too before merge
What is the issue?
It looks like the code is wrong, in the following: https://docs.dagger.io/extending/secrets/?sdk=go
For golang code:
export API_TOKEN="guessme"
The code says MY_SECRET, but is should be API_TOKEN
Dagger version
Dagger *
Steps to reproduce
No response
Log output
No response
What is the issue?
Due to Dagger's limited support for Go subpackages, notably...
Only types and functions in the top-level package are part of the public-facing API for the module.
... I've had in mind this notion of splitting toolchains into a module per subcommand to facilitate chaining of constructors in the root module, submodules, and so forth. Take for example the one-time creation of cache volumes for the go toolchain that are subsequently inherited by go get, `go mod ti...
Seems like a couple version bumps got missed during last release, which is causing publish workflow to fail.
In my last attempt I grep'd for 0.19.6 and fixed those, but that missed places where the string in question is 0-19-6....
Didn't notice in the PR because publish only runs on main. So one more bump.
What is the issue?
Given the following module and function
import dagger
import random
from dagger import dag, function, object_type
@object_type
class Test:
@function
async def test_cache(self, low: int, high: float, limit: float) -> float:
data = random.uniform( low,high)
if data < limit:
# if i hit this i dont want caching to occu
raise ValueError( f"{data} < {limit}")
return data
The behavior i expect to see:
- If a ra...
Seeing if I can repro the occasional hang we see (usually accompanied by SQLITE BUSY timeout errors) in CI to help get to the bottom of it. Can't repro locally...
Problem
Our repository is full of Dagger modules, mostly written in Go. The code for these modules cannot be built or linted by the standard Go toolchain from a clean git checkout. Now that we are trying to use reusable Dagger toolchains as much as possible, this has become a problem.
We have implemented a stopgap: ship a reusable toolchain that can generate dagger modules on the fly before attempting to build/lint them. This works but makes the toolchain more complex and VERY SLOW.
#...
What are you trying to do?
Iโm trying to authenticate my Dagger pipeline to HashiCorp Vault using an AppRole-based workflow, but not via the standard approle auth method path. Instead, I need to authenticate through a custom or non-default auth mount (for example, a renamed or namespaced AppRole mount such as auth/custom-approle/login).
Why is this important to you?
This matters because my Vault environment does not expose the default approle mount.
How are you currently...
What are you trying to do?
Iโm trying to make Dagger expose the actual VAULT_TOKEN value after it authenticates to Vault via AppRole. Many tools used inside CI stepsโlike Terraform, consul-template, and various pluginsโdo not need the secrets themselves but instead require the environment variable VAULT_TOKEN so they can fetch secrets autonomously.
Ideally, after Dagger performs the AppRole login (or any other), I want to retrieve that token programmatically through the Dagger API (e.g.,...
What are you trying to do?
Iโm trying to specify Vault secret paths in Dagger in a way that includes the secrets engine directly in the URL, such as:
vault:///.
Currently, Dagger requires a split configuration model where part of the path (the secrets engine mount) is defined in vaultConfigureClient, and the remaining sub-path is written inside the secret reference (e.g., vault://PATH/TO/SECRET.FIELD).
I want to be able to specify the full Vault pathโincluding the secrets engi...
Bumps the sdk-java group in /sdk/java with 4 updates: com.palantir.javapoet:javapoet, org.apache.commons:commons-lang3, org.codehaus.mojo:versions-maven-plugin and com.squareup.okhttp3:okhttp-jvm.
Updates com.palantir.javapoet:javapoet from 0.7.0 to 0.8.0
Release notes
Sourced from com.palantir.javapoet:javapoet's releases.
0.8.0
๐ Fixes
Produce correct annotations when Pa...
Bumps the sdk-typescript group in /sdk/typescript with 6 updates:
| Package | From | To |
|---|---|---|
| graphql-request | 7.3.1 |
7.3.4 |
| @types/node | 24.10.0 |
24.10.1 |
| @typescript-eslint/eslint-plugin | 8.46.4 |
8.47.0 |
| [@typescript-eslint/parser](https://gi... |
Bumps the docs group in /docs with 6 updates:
| Package | From | To |
|---|---|---|
| posthog-docusaurus | 2.0.5 |
2.0.6 |
| posthog-js | 1.290.0 |
1.297.3 |
| sass | 1.93.3 |
1.94.2 |
| typedoc-plugin-frontmatter | 1.3.0 |
1.3.1 |
| [@types/node](https://github.com/DefinitelyTyped/Definitely... |
Bumps the sdk-elixir group in /sdk/elixir with 1 update: req.
Updates req from 0.5.15 to 0.5.16
Release notes
Sourced from req's releases.
v0.5.16
Req.Test: Fix verify_on_exit! accidentally using Mox name
auth: Support MFArgs
auth: Support digest auth
put_aws_sigv4: Support MFArgs
put_path_params: Encode :path_params even with reserved characters
put_path_params: Set :path_params_template on empty params
run_plug: Handle compressed request body
C...
Bumps the sdk-python-docker group with 1 update in the /modules/ruff/build directory: astral-sh/ruff.
Bumps the sdk-python-docker group with 2 updates in the /sdk/python/runtime directory: python and astral-sh/uv.
Updates astral-sh/ruff from 0.14.4 to 0.14.6
Release notes
Sourced from astral-sh/ruff's releases.
0.14.6
Release Notes
Released on 2025-11-21.
Preview features
[flake8-bandit] Support new PySNMP API paths...
Bumps the engine group with 26 updates in the / directory:
| Package | From | To |
|---|---|---|
| github.com/99designs/gqlgen | 0.17.81 |
0.17.83 |
| github.com/anthropics/anthropic-sdk-go | 1.14.0 |
1.18.1 |
| github.com/aws/aws-sdk-go-v2 | 1.39.3 |
1.40.0 |
| github.com/aws/aws-sdk-go-v2/config | `1.31.13... |
- Rename "dagger checks" (plural noun) to "dagger check" (verb). With an alias for backward compatibility.
- Update tests to call "dagger check" singular
This fixes the failed "dev release" CI job on main.
Follow up to https://github.com/dagger/dagger/pull/11373
New schema:
{
"name": "app",
"engineVersion": "v0.19.4",
"toolchains": [
{
"name": "hello",
"source": "../hello",
"customization": [
{
"function": ["configurableMessage"],
"argument": "message",
"default": "hola"
}
]
}
]
}
Old schema:
{
"name": "app",
"engineVersion": "v0.19.4",
"toolchains": ...
We were publishing engine images for:
- (default) alpine
- (
-gpu) ubuntu - (`-wolfi) wolfi w/out gpu
- (`-wolfi-gpu) wolfi w/ gpu
This change simplifies everything to be just:
- (default) wolfi w/out gpu
- (
-gpu) wolfi w/ gpu
AFAIK all the images had accumulated over time as we wanted to start trying out support for different base images but didn't want to change defaults yet. It seems like its now worth consolida...
WIP because I encountered a scary warning while working through all this that using zig as CC for CGO (cross-)compilation has in the past had negative perf impacts on sqlite specifically. So wanna see whether that's still true quickly
This allow to remove duplication (between the toolchains dev module and the sdk) and let dependabot to deal with the updates as it's a Dockerfile.
One Dockerfile per image. It's still possible to parse the Dockerfile, but I'd like to remove it at some point.
But in the meantime we can build from it, without to know and deal with the docker ref, so that's easier.
Done for python and java
Info about TeamCity integration has been added to the docs: https://docs.dagger.io/getting-started/ci-integrations/teamcity
Use LiveSpanProcessor if live trace is enabled in ts sdk telemetry.
The dang language is perfect for querying the Dagger API. We should support it in the CLI for quick one-liner queries.
In this way it would complement (and compete with) the dagger shell syntax.
Dagger Shell is super useful but not universally popular: some users enjoy the bash syntax, while others are repelled or intimidated by it.
We've envisioned from the start that dagger would eventually support multiple scripting languages, Dagger Shell only being t...
Problem
In a long-lived engine session (interactive shell), function calls that previously failed were incorrectly replayed when invoked again with the same inputs.
The correct behavior should be:
โข Failed calls should never be cached.
โข Subsequent identical calls should rerun and, upon success, then be cached.
This issue did not affect the Dagger CLI (dagger call) because each invocation runs with a fresh session.
Solution
To resolve this, after a forced `DoNotCac...
Follow up to https://github.com/dagger/dagger/pull/11480
Ignore checks within a toolchain
Note the check names are not prefixed with the toolchain name because that would be redundant.
Hi all,
This is a 2nd jab at doing a dotnet (C#) SDK. I didn't want to disrupt the existing experimental dotnet SDK. A few reasons:
- other sdks are language specific, so 'csharp' sdk makes sense and then we might make fsharp later
- quite different from the existing sdk in that it does have module support
- I didn't want to cause conflicts with the existing one and cause confusion so I kept it entirely isolated
- roslyn analyzers for intellisense hints/warnings on using the Dagger S...
Fixes #1440084860273426494 message
When a module function returns an interface value, the result is cached with an ID that contains the module's source path (e.g., moduleSource(refString:"/abs/path/to/module")).
On subsequent sessions, when this cached result is loaded, IDDeps walks the ID to load the module dependencies. This triggers moduleSource calls which use CachePerClient caching, meaning different clients get cache mis...
@tiborvass pointed out that there was just in the last week a fix pushed to modernc for the hangs we've been hitting when contexts are canceled in the middle of a write: https://gitlab.com/cznic/sqlite/-/merge_requests/81
Sadly it was a day or two after I had previously checked and upgraded modernc ๐ข
I couldn't repro anymore after this was in (using repro from first commit here)
Bumps the engine group with 22 updates in the / directory:
| Package | From | To |
|---|---|---|
| github.com/99designs/gqlgen | 0.17.81 |
0.17.84 |
| github.com/anthropics/anthropic-sdk-go | 1.14.0 |
1.19.0 |
| github.com/aws/aws-sdk-go-v2 | 1.39.3 |
1.40.0 |
| github.com/aws/aws-sdk-go-v2/config | `1.31.13... |
What is the issue?
Clicking the highlighted link for "container runtime" points to an invalid address, see image below:
I assume that the link is supposed to route over here instead https://docs.dagger.io/reference/container-runtimes/?
What happened? What did you expect to happen?
stdout, err := e.client.Container().From(image).WithExec([]string{}).Stdout(ctx)
Realized while talking to a user about disk usage problems that thanks to various forward progress on the Theseus front this has become some very low-hanging fruit for optimization.
Before this a WithDirectory operation could under very specific circumstances use MergeOp, which attempts to use hardlinks in its implementation in order to skip copies of files and thus save disk space and time.
This change greatly expands the circumstances in which that hardlink optimization is possi...
๐ง WIP
Add the ability to define generator functions: a function that should return a Changeset and that is used to generate files to export to the host. For instance:
- generating assets
- building binaries
- compiling code
- reports
- ...
Annotate a function with +generator pragma. This pragma takes an optional argument describing the target files.
For instance:
// +...
Currently when an SDK module uses a contextual dir it inherits the context of the module that's using it, which doesn't seem like what you'd want for an SDK module.
This affects Dang, which uses a contextual dir to bring in the Dang language repo so the SDK can compile its entrypoint binary.
It looks like we already had this problem for our builtin SDKs, which already use contextual dir args, but we actually handled it manually by hardcoding an expected arg name and making the behavior ...
Add module cloning for on-prem Azure DevOps
Resolves problem in https://discord.com/channels/707636530424053791/1442826165231550585 and affects #11469
Some of the local cache pruning tests have been flaking for a bit in the test cases where prunes are run manually.
Based on engine logs from passed/failed tests, it appeared that when the prune call was made before the other client had its session fully removed, the test would flake. This is because some parts of session cleanup happen slightly async, so if the prune hit too early it couldn't quite prune everything yet.
The fix here just adds retries similar to those in the other test c...
- C# SDK implementation with module runtime support
- Roslyn analyzers with code fixes for common issues
- NuGet standalone client (DaggerIO package published to nuget.org)
- Examples:
- Standalone client usage
- Module development with attributes
- Caching, ignores, default values, constructors
- Interface implementation examples
- Integration tests for C# modules
Bumps the sdk-python-docker group with 1 update in the /modules/ruff/build directory: astral-sh/ruff.
Bumps the sdk-python-docker group with 1 update in the /sdk/python/runtime directory: astral-sh/uv.
Updates astral-sh/ruff from 0.14.6 to 0.14.7
Release notes
Sourced from astral-sh/ruff's releases.
0.14.7
Release Notes
Released on 2025-11-28.
Preview features
[flake8-bandit] Handle string literal bindings in suspic...
Bumps the sdk-java group in /sdk/java with 2 updates: com.palantir.javapoet:javapoet and org.codehaus.mojo:versions-maven-plugin.
Updates com.palantir.javapoet:javapoet from 0.8.0 to 0.9.0
Release notes
Sourced from com.palantir.javapoet:javapoet's releases.
0.9.0
๐ก Improvements
Validate class name when constructing a ClassName. (#368)
Commits
1654c63 Release 0.9.0
50517eb Check that class name is valid...
Bumps the engine group with 22 updates in the / directory:
| Package | From | To |
|---|---|---|
| github.com/99designs/gqlgen | 0.17.81 |
0.17.84 |
| github.com/anthropics/anthropic-sdk-go | 1.14.0 |
1.19.0 |
| github.com/aws/aws-sdk-go-v2 | 1.39.3 |
1.40.0 |
| github.com/aws/aws-sdk-go-v2/config | `1.31.13... |
Bumps the sdk-typescript group with 10 updates in the /sdk/typescript directory:
| Package | From | To |
|---|---|---|
| execa | 9.6.0 |
9.6.1 |
| graphql-request | 7.3.1 |
7.3.5 |
| @types/node | 24.10.0 |
24.10.1 |
| [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/pa... |
Bumps the docs group with 6 updates in the /docs directory:
| Package | From | To |
|---|---|---|
| posthog-js | 1.290.0 |
1.298.1 |
| sass | 1.93.3 |
1.94.2 |
| typedoc | 0.28.14 |
0.28.15 |
| typedoc-plugin-frontmatter | 1.3.0 |
1.3.1 |
| [@types/nod... |
Install @otel-test-runner/mocha-test as dev dependency.
Update tests suite to use @otel-test-runner/mocha-test.
Demo with a dev engine from #11486
https://github.com/user-attachments/assets/c05c45e4-6b92-4806-8ac5-6a3d8465e524
- test commit
- fix container runtime link from custom runners page
Problem
It should be possible to adopt Dagger in a real codebase, and actually run end-to-end tests, without having to write a custom toolchain on day one. This requires a standard library of reusable toolchains, that can get the job done.
Unfortunately it is currently not possible to achieve this, because a toolchain cannot consume services provided by another toolchain. Without this composition primitive, the most typical end-to-end testing scenarios are not possible.
Exam...
To model this problem, I have this test branch for greetings-api: https://github.com/kpenfound/greetings-api/tree/toolchains_test
The frontend uses an npm toolchain
The backend uses a go toolchain
The frontend e2e tests run cypress which needs the backend running as a service. Because the npm module is not aware of anything like that, I must disable the npm:test check and compose the test with some glue in a main module here: https://github.com/kpenfound/greetings-api/blob/toolchains...
@kpenfound does this give you a clear picture of how we could generalize it to all users?
Not yet. A few ideas:
- Override the default container in the
npm:testfunction with one that has everything my tests need. For my case I'd take the same base image, add the service binding, and pass that in. Others might want to add binaries, env variables, etc. This is still not possible to do purely in dagger.json since I need to do a service binding with a Service output from another toolchain. We'd need to enable that somehow - A toolchain like npm or playwright may have an optiona...
Quite a few of these have one way or another gotten out of date even after releases. Bumping them all, biggest motivation being that when modules are up to date we get better cache usage of pre-installed deps in the engine image.
Noticed telemetry.Close() calls were missing after the InitEmbedded call. Not clear if this was actively harming anything, but worth a quick fix.
@kpenfound if we follow "expand dagger.Env or something like it", then IMO that should not be a value that you pass as argument - instead it should represent the current context, as exposed to the end user: contextual checks, and in the future: contextual generators, services, artifacts, etc.
Signed-off-by: Marcos Lilljedahl
This removes the dagger module codegen from the go toolchain's lint and tidy functions by committing the generated files. This means that lint and IDEs will work with a fresh checkout.
We will be one step closer to a generic go toolchain.
The generate and checkGenerated are now responsible for making sure the generated files are up to date.
This should fix the issue in web trace view, where too many spans are hidden by default with "hiding noisy spans"
What is the issue?
When using this via flake I am getting the below warning:
evaluation warning: 'system' has been renamed to/replaced by 'stdenv.hostPlatform.system'
The flake should be updated to use this.
Dagger version
dagger v0.19.7 (image://registry.dagger.io/engine:v0.19.7) linux/amd64
Steps to reproduce
No response
Log output
No response
Moving the cloud auth initialization earlier in the engine connection
phase so we can pass all the possible auth methods through the client
metadata which can later be used for both PARC and scale-out use cases
Signed-off-by: Marcos Lilljedahl
This basically needs to get released before https://github.com/dagger/dagger/pull/11515 is able to get merged.
Currently modules with dependencies do not have deterministic codegen, which means we cant commit generated files without a healthy amount of pain and regret.
This adds a sort to the codegen and a test to make sure running codegen twice produces the same result.
Fixing the version reference to use # instead of @ in https://docs.dagger.io/extending/remote-repositories/#pass-a-remote-directory-as-argument
Signed-off-by: Marcos Lilljedahl
Last PR fixing the elixir release pipeline kept a shadowing of the elixirToken
Problem
The GO SDK won't let me expose a type that is an alias to another type.
For example:
type Container dagger.Container
func (m *MyMod) Build() *Container {
return Container(dag.Container().From("alpine"))
}
This will fail with:
Error: generate type defs: expected type spec to be a struct, got *ast.SelectorExpr
Solution
Fix the Go SDK so that it exposes the aliased type, instead of failing with an error
Allow check toolchain to expose a dynamic set of checks at runtime. For example, a go toolchain can dynamically list tes$
This allows fine-grained listing, filtering and tracing of checks. Together with scale-out, it unlocks automatic test sp$
Tasks
- [ ] Fix bug in filtering (include filter includes too much)
- [ ] Split engine-dev tests using dynamic checks
- [ ] Hide noise from check logs
- [ ] Re-enable scale-out
โฆ5-66471
Update Python SDK urllib3 dependency to fix HIGH severity vulnerabilities. Another release will probably be made next week
Resolves #11338
defmodule Test do
use Dagger.Mod.Object, name: "Test"
@cache ttl: "30s"
defn cached_with_ttl() :: String.t() do
Integer.to_string(Enum.random(1..1_000_000_000))
end
@cache :never
defn cached_never() :: String.t() do
Integer.to_string(Enum.random(1..1_000_000_000))
end
@cache :per_session
defn cached_per_session() :: String.t() do
Integer.to_string(Enum.random(1..1_000_000_000))
end
end
follows the inte...
Bumps the sdk-java group in /sdk/java with 1 update: io.opentelemetry:opentelemetry-bom.
Updates io.opentelemetry:opentelemetry-bom from 1.56.0 to 1.57.0
Release notes
Sourced from io.opentelemetry:opentelemetry-bom's releases.
Version 1.57.0
API
Add GlobalOpenTelemetry#getOrNoop, #isSet. Update #get to always returns obfuscated instance (#7819)
Incubating
Logs: Complex attributes incubating implementation (#7814)
SDK
Logs
Add ...
Bumps the sdk-typescript group in /sdk/typescript with 6 updates:
| Package | From | To |
|---|---|---|
| @grpc/grpc-js | 1.14.1 |
1.14.2 |
| @otel-test-runner/mocha-test | 0.0.12 |
0.1.0 |
| @typescript-eslint/eslint-plugin | 8.48.0 |
8.48.1 |
| [@typescript-eslint/parser](https://github.com/typescript-e... |
Bumps the docs group in /docs with 3 updates: posthog-js, react and react-dom.
Updates posthog-js from 1.298.1 to 1.302.2
Release notes
Sourced from posthog-js's releases.
posthog-js@1.302.2
1.302.2
Patch Changes
#2696 daeacdb Thanks @โksvat! - Update @โposthog/rrweb dependencies to 0.0.33
(2025-12-05)
posthog-js@1.302....
Bumps the sdk-elixir group in /sdk/elixir with 2 updates: credo and ex_doc.
Updates credo from 1.7.13 to 1.7.14
Release notes
Sourced from credo's releases.
v1.7.14
Check it out on Hex: https://hex.pm/packages/credo/1.7.14
Fixed regression for DuplicatedCode
Expanded Credo.Check.Warning.ExpensiveEmptyEnumCheck to cover less obvious cases
New Check: Credo.Check.Warning.StructFieldAmount
Changelog
Sourced from...
Bumps the sdk-python-docker group with 1 update in the /modules/ruff/build directory: astral-sh/ruff.
Updates astral-sh/ruff from 0.14.7 to 0.14.8
Release notes
Sourced from astral-sh/ruff's releases.
0.14.8
Release Notes
Released on 2025-12-04.
Preview features
[flake8-bugbear] Catch yield expressions within other statements (B901) (#21200)
[flake8-use-pathlib] Mark fixes unsafe for return type changes (PTH104, PTH105, PTH109, PTH115) (#21440)
Bug ...
Bumps the engine group with 23 updates in the / directory:
| Package | From | To |
|---|---|---|
| github.com/99designs/gqlgen | 0.17.81 |
0.17.84 |
| github.com/anthropics/anthropic-sdk-go | 1.14.0 |
1.19.0 |
| github.com/aws/aws-sdk-go-v2 | 1.39.3 |
1.40.1 |
| github.com/aws/aws-sdk-go-v2/config | `1.31.13... |
Fixes an error raised on Discord:
#typescript message
This PR updates the types so it will correctly annotate decorators.
I noticed a small error on our CI due to some outdated protobuf https://dagger.cloud/dagger/traces/65e0109691a0a01fbec5abe675beaa9b
This PR fixes that issue
The previous format was deprecated, which led to a warning during module loading. See:
https://docs.astral.sh/uv/concepts/projects/dependencies/#legacy-dev-dependencies
The previous format was deprecated, which led to a warning during module loading. See:
https://docs.astral.sh/uv/concepts/projects/dependencies/#legacy-dev-dependencies
What happened? What did you expect to happen?
A new release of dagger is available: v0.19.7 โ v0.19.8
To upgrade, see https://docs.dagger.io/install
https://github.com/dagger/dagger/releases/tag/v0.19.8
How can I disable update logging in the log output and prevent it from being output?
Similar to 1, this patch adds support for using the system-managed CA certificates in more places. The dagger engine then takes care of adding user-supplied CA certs to the container's system CA stores.
Been working on fixing https://github.com/dagger/dagger/issues/8265, which has been an issue since forever but seems to have become much easier to trigger recently (I'd highly suspect due to the boltdb fix making race conditions requiring tight time windows much easier to hit now).
- I'm hoping the problems w/ overlapping overlays is actually impacting us and the cause of some of the strange missing file errors we flake out on in CI sometimes. But it's also impossible to know whether it's ...
Go modules are generating dagger APIs under an internal package.
This means that any code written in a given module cannot be used directly anywhere else.
This will introduce a way to import APIs as dagger.io/dagger.
(this is 98% claude code generated so far, just seeing whether it actually works in CI infra on a first try, needs some human cleanup)
eBPF was crucial in debugging https://github.com/dagger/dagger/pull/11545 and has quite a bit of potential for future debugging, monitoring, performance analysis, and possibly even user facing features in terms of tracing (?)
Running it as a sidecar on my machine was very tedious, it's much nicer to have it in the engine itself. For the previous debuggin...
What is the issue?
While working on dagger project, I discovered a vulnerability related to Container Networking Plugins. This issue occurs when the portmap plugin is configured to use the nftables backend. Due to improper handling of traffic rules, the plugin forwards all incoming traffic on a specified port, regardless of its intended destination IP.
[CVE Report](https://vulert.com/vuln-scan/list/a947760d-64f0-4cc6-bddd-025c41b91c5b?sort_or...
What is the issue?
The issue is that multiple files content are being swapped when files are passed to a module function in parallel. Although the trace indicates that the files are correct, the contents of the files is incorrect.
Dagger version
dagger v0.19.7 (image://registry.dagger.io/engine:v0.19.7) darwin/arm64/v8
Steps to reproduce
This issue can be reproduced my demo repo.
The my-module-tests modul...
What are you trying to do?
TL/DR:
Please add support of custom-proxy variables in the engine.json setup file:
https://docs.dagger.io/reference/configuration/engine#custom-proxy
Why is this important to you?
Without internet connection the dagger engine fails to run.
To access the internet, corporations usually have some kind of proxy. Usually this is set using the environment variables (http_proxy, https_proxy, no_proxy, so on and so forth). This setting can vary between clients โ...
What is the issue?
Hello!
I've been having issues with DefaultPath since forever (see my comment here).
Basically, it doesn't work neither in @function or as an @object_type attribute.
I've tried:
@object_type
class ResearchDagger:
root_dir: Annotated[Directory, DefaultPath(".")]
@object_type
class ResearchDagger:
@function
def build(self, root_dir: Annotated[Directory, De...
What is the issue?
I'm observing that pulling large container images through Dagger takes approximately twice as long as pulling the same images directly with docker pull or podman pull.
Both tests were performed on the same machine with the same network conditions, pulling from the same registry.
Environment:
- Dagger version: v0.19.8
- OS: EndeavourOS, Linux 6.12.61-1-lts
- Container runtime: Podman 5.7.0
Notes:
I'm not certain this is a bug - it may be expected beh...
Problem
Container.WithMountedDirectory with the owner parameter seems to face a performance regression since v0.19.6 (time of its dagop-ification).
A user reported mounting a directory with 5000 files going from ~4 seconds to ~3+ minutes
Root cause
My current debugging seems to isolate one culprit:
- Commit
27af6d5f4changed from LLB-based chown (single operation) toDirectory.Chownwhich uses `file...
Debugging the tsconfig.json not found flakes in our CI. For an embarrassingly long time I thought it was an ENOENT error (indicating some filesystem related bug) but finally realized there's a custom error string for not found that we are hitting in the contenthash checksum code.
Highly suspect there's some long-standing bug in the checksum code's ref management that's just become more apparent lately, but trying to sus out what exactly is happening. Can't repro locally either unfort...
Fixes #11556
This is an attempt to speed up the directory and file chown implementation
Problem
The dagopified Chown walked and lchowned every entry: on overlayfs each lchown copies file data into the upper before changing ownership, so 100k files went from ~25s (v0.18.5) to ~3m30s (v0.19.x).
Proposed solution
In the new flow, I create a child snapshot parented on the source, mount src (ro) and dst (rw), and copy the target with WithChown + hardlink optimization...
Looked into the chown perf regression with ebpf and found that each chown was causing overlay to call fsync on every file (within its copy-up internal functions), each of which took ~8ms on my laptop. 8ms isn't a lot to a human but when you are serially chowning 100k files it adds up quickly. Syscalls like this shouldn't be that slow generally, especially for the test case where each file is only 1 byte.
It's not entirely clear to me why ove...
Lazify git whilst keeping the nice DX. This is the foundation to a faster git implementation.
It currently reconstructs the ID, open to just rely on dagql query construction if easier to debug / grasp
Making the PR public to run have some CI runs and estimate the completion / coverage
Kind of a big complicated feature. Opening this draft POC for discussion and testing.
Background
Toolchains are great standalone utilities for specific parts of a project. They work best with a small well defined scope. For example, a go toolchain will provide functions like build, test, lint, generate, but it would not assume to know how to run your services or push a production image.
To accomplish more complex tasks, we still require some composition between toolchains. Some ex...
Fix typo.
Podman => Docker
Bumps the sdk-java group in /sdk/java with 1 update: org.mockito:mockito-core.
Updates org.mockito:mockito-core from 5.20.0 to 5.21.0
Release notes
Sourced from org.mockito:mockito-core's releases.
v5.21.0
Changelog generated by Shipkit Changelog Gradle Plugin
5.21.0
2025-12-09 - 17 commit(s) by Giulio Longfils, Joshua Selbo, Woongi9, Zylox, dependabot[bot]
Bump graalvm/setup-graalvm from 1.4.3 to 1.4.4 (#3768)
Bump graalvm/s...
Bumps the sdk-typescript group in /sdk/typescript with 8 updates:
| Package | From | To |
|---|---|---|
| @grpc/grpc-js | 1.14.2 |
1.14.3 |
| graphql-request | 7.3.5 |
7.4.0 |
| @otel-test-runner/mocha-test | 0.1.0 |
0.1.3 |
| @types/node | 24.10.1 |
25.0.2 |
| [@typescript-es... |
Bumps the docs group in /docs with 6 updates:
| Package | From | To |
|---|---|---|
| posthog-js | 1.302.2 |
1.306.1 |
| react | 19.2.1 |
19.2.3 |
| react-dom | 19.2.1 |
19.2.3 |
| sass | 1.94.2 |
1.96.0 |
| [@types/node](https://github.com/DefinitelyTyped/DefinitelyT... |
Bumps the sdk-elixir group in /sdk/elixir with 1 update: ex_doc.
Updates ex_doc from 0.39.2 to 0.39.3
Changelog
Sourced from ex_doc's changelog.
v0.39.3 (2025-12-09)
Enhancements
Add the option to trim down the footer
Commits
a359f56 Release v0.39.3
94134e0 Add the option to trim down the footer
08482c0 Bump js-yaml from 4.1.0 to 4.1.1 in /assets (#2170)
See full diff in compare view
[
[pylint] Detect subclasses of builtin exceptions (PLW0133) (#21382)
Bug fixes
Fix comment placement in lambda parameters...
What are you trying to do?
Sometimes, console commands return error codes >127. However, the ReturnType enum only accept exit codes from [1,127]. Some tools, such as aws-cli, return error codes greater than the maximum of that range.
Below is example code that would fail with exit code 254 causing dagger to throw.
@function
async def test_ecr_check_pattern(
self,
aws_config_dir: Annotated[dagger.Directory, Doc("AWS config dir (~/.aws)")],
) -> st...
Allow to use non local module sources (like git).
Before:
$ dagger -m github.com/eunomie/daggerverse/java-module functions
โ connect 0.2s
โ load module: github.com/eunomie/daggerverse/java-module 2.0s ERROR
โ initializing module โบ ModuleSource.asModule โบ module SDK: load runtime โบ JavaSdk.moduleRuntime(
โ modSource: no(digest: "xxh3:3dd78c6074651c8d")
โ introspectionJson: no(
โ โ digest: "sha256:43b0a4f1c4c794521babdba89f153bfb899a9b1bafd1311b475ca76dc44e97e2"
...
When using the python SDK, the cache parameters exposed in the 0.19.4 release are not visible in the python type overrides. https://docs.dagger.io/extending/function-caching/ says the cache ought to be exposed but the way the overrides are written it isn't according to pyright.
What is the issue?
The python SDK does not expose the cache parameter in its type stubs. I tried to submit an MR but CI lit up like a Christmas tree in #11571 so I'll make an issue instead! ๐
Even though the underlying python sdk func has a cache parameter, it's not exposed in the type hint overloads:
@overload
def function(
self,
func: Func[P, R],
*,
name: APIName | None = None,
doc: str | None = None,
deprecated: str ...
What is the issue?
It was expected to run normally without errors, I don't know why the mounted directory is causing the problem
Dagger version
dagger v0.19.8 (image://registry.dagger.io/engine:v0.19.8) linux/amd64
Steps to reproduce
`func Run(
ctx context.Context,
container *dagger.Container,
supportBash, supportExit bool,
commands []string,
) (*dagger.Container, error) {
container = container.WithNewFile(scriptTmpPath, buildForPipefailScript(commands, supportExit),
d...
I am using dagger engine v.0.19.8.
When running dagger call command for a module written in TypeScript the installation of the dependencies does not consider the current lockfile anymore (seems to affect all package managers: npm, yarn and pnpm).
This worked in v0.19.4.
Why this is relevant? Installing the dependencies freezed in the lockfile allows module developers to control what is being installed and make sure the module works as expected.
Digging into the code it seems li...
This fixes a file caching bug, reported in #11552, which resulted from an incorrect Digest() override, which ignored the file Source (contents).
Removing the override will cause the digest to use the entire args struct, which includes the Source field, which contains a digest of the file being copied in, e.g. Source:File@xxh3:97e0aa643fe2496b
For PARC users (remote engines), computing the version was slow because we were transferring the entire .git directory, including objects/pack/ which can be 100s of MBs.
The fix is to exclude pack files and adapt git operations to work without them. Since Tree() needs pack files to checkout, we instead mount the lightweight .git metadata directly and let git read from it. For tag lookup, we parse packed-refs ourselves rather than shelling out.
Since git.Head().Tree() needs pack ...
changes := firstChanges.WithChanges(extraChanges)
In case of a conflict (file modified in both, or modified and deleted, etc) an error is raised.
It's still possible to force it to continue with the following flag:
continueOnConflicts: true
If the flag is applied, it's a last write wins strategy.
Fixes: #11189
This is a follow up to #11570 adding a test to ensure we can call a Java module using a git ref.
The test requires https://github.com/eunomie/dagger/pull/new/test-java-module-git to be merged before
This is required for https://github.com/dagger/dagger/pull/11515
Also potentially solves some hidden caching issues?
Summary
This PR is follow-up (nยฐ1/N) of #11232. Skipping the git pack files didn't appear to be fruitful in its current state.
The alternative, is to go [all-in with the Dagger Git API and the changeset implementation](#1450576067935993928 message).
Problem: the current implementation is very slow and could benefit some perf tweaks / improvement.
This is one of such...
What are you trying to do?
Hi !
At the moment it is not possible to load user defaults values declared in an .env file from the value of an environment variable.
At this stage it seems that only secrets are supported with the env:// syntax (see https://github.com/dagger/dagger/pull/11034 )
Example with the *dagger.Socket for SSH :
env file
TEST_SSHSOCKET=env://SSH_AUTH_SOCK
Module code
func (m *NbiDiary) Test(ctx context.Context, sshSocket *dagger....
Signed-off-by: Marcos Lilljedahl
this is a follow-up for #11582. We're now also disabling this for the
pushes to main
Signed-off-by: Marcos Lilljedahl
Signed-off-by: Marcos Lilljedahl
This should fix #11328, which can easily happen when a remote cache is defined
Problem
dagger -M -c '.exit 20' exits with code 1 instead of 20 when using the TUI, but works correctly with --progress=plain.
Why this happened
The shell wraps exit codes in ExitError to tell the TUI what code to use. But this wrapping happened after the TUI already stored the raw error. When the TUI later checked for an ExitError, it didn't find one, so it defaulted to exit code 1.
The fix
Move the ExitError wrapping to happen before the TUI stores the ...
Bumps the sdk-java group in /sdk/java with 2 updates: io.vertx:vertx-web-client and org.codehaus.mojo:exec-maven-plugin.
Updates io.vertx:vertx-web-client from 4.5.22 to 4.5.23
Commits
8e74a04 Releasing 4.5.23
98a1c78 feat: Adding support for SSE on the WebClient (#2795)
89206b4 Implement WebClient HttpRequest#uri() for UriTemplate.
877978c Refactor StaticHandlerTest (#2817) (#2818)
7c0c376 Set next ...
Bumps the sdk-typescript group with 9 updates in the /sdk/typescript directory:
| Package | From | To |
|---|---|---|
| @grpc/grpc-js | 1.14.2 |
1.14.3 |
| graphql-request | 7.3.5 |
7.4.0 |
| @otel-test-runner/mocha-test | 0.1.0 |
0.2.4 |
| @types/node | 24.10.1 |
25.0.3 |
| [... |
Bumps the docs group in /docs with 3 updates: posthog-js, sass and @types/node.
Updates posthog-js from 1.306.1 to 1.309.1
Release notes
Sourced from posthog-js's releases.
posthog-js@1.309.1
1.309.1
Patch Changes
Updated dependencies [6b0aabf]:
@โposthog/core@โ1.8.1
posthog-js@1.309.0
1.309.0
Minor Changes
#2783 0163c71 Thanks @โ...
Bumps the engine group with 25 updates in the / directory:
| Package | From | To |
|---|---|---|
| github.com/99designs/gqlgen | 0.17.81 |
0.17.85 |
| github.com/alecthomas/chroma/v2 | 2.20.0 |
2.21.1 |
| github.com/anthropics/anthropic-sdk-go | 1.14.0 |
1.19.0 |
| github.com/aws/aws-sdk-go-v2 | 1.39.3 |
`... |
Description
Calling .stdout() on Container objects in the Dagger TypeScript SDK consistently fails with:
Encountered an unknown error while requesting data via graphql
Caused by: Can only call URLSearchParams.toJSON on instances of URLSearchParams
This appears to be a GraphQL serialization bug where URLSearchParams instances are incorrectly serialized during SDK-to-engine communication.
Environment
- Dagger Version: 0.19.8
- SDK: TypeScript (@dagger.io/dagger)
- Runtime: ...
Signed-off-by: Yves Brissaud
What is the issue?
While Dagger now has support for using MCP servers (Dagger as a MCP Client)
https://dagger.io/blog/dagger-0-19
I don't see any explanation or some examples. So, it would be useful if we can have this page updated with some basic guidance on how to configure MCP Server (maybe with example on using withMCPServer)
https://docs.dagger.io/features/llm/#mcp
Fixes a tiny UI quirk that causes the UI to render .foo instead of Parent.foo when the Parent was actually beneath another span preceding foo (like "load Parent").
What is the issue?
The withAnnotation method on Container has a documentation typo:
- Retrieves this container plus the given OCI anotation.
+ Retrieves this container plus the given OCI annotation.
This has propogated to a few other places in the documentation.
Dagger version
dagger v0.19.8 (image://registry.dagger.io/engine:v0.19.8) darwin/arm64/v8
Steps to reproduce
No response
Log output
No response
Fixes #11597.
I used dagger call generate to propogate the changes from core/schema/container.go to the rest of the codebase. However, I was not able to run the linting and testing commands from the contribution documentation.
Fixes #11352
Module object
Leverage the :deprecated metadata key of the @moduledoc attribute:
@moduledoc deprecated: "..."
defmodule Foo do
use Dagger.Mod.Object, name: "Foo"
@moduledoc deprecated: "deprecation reason"
@moduledoc """
...
"""
...
end
Object field
Use deprecated: "..." in opts keyword list of a field
defmodule Foo do
use Dagger.Mod.Object, name: "Foo"
object do
field(:f1, String.t(), deprecated: "reas...
Bumps the sdk-typescript group in /sdk/typescript with 4 updates: @otel-test-runner/mocha-test, @typescript-eslint/eslint-plugin, @typescript-eslint/parser and typescript-eslint.
Upd...
Bumps the docs group in /docs with 1 update: posthog-js.
Updates posthog-js from 1.309.1 to 1.310.1
Release notes
Sourced from posthog-js's releases.
posthog-js@1.310.1
1.310.1
Patch Changes
#2797 8b1a39a Thanks @โadboio! - product tours: support custom appearance, clean up animations
(2025-12-23)
posthog-js@1.310.0
1.310.0
Minor Changes
#2770 6851061 Thanks @โdaibhin! - feat: allow exception autocapture to be programatically enabled / disable...
Bumps the sdk-elixir group in /sdk/elixir with 1 update: credo.
Updates credo from 1.7.14 to 1.7.15
Release notes
Sourced from credo's releases.
v1.7.15
Check it out on Hex: https://hex.pm/packages/credo/1.7.15
Improve performance on large projects
Parse token_metadata for source files
Credo.Check.Warning.ExpensiveEmptyEnumCheck have better issue messages
Credo.Check.Refactor.MatchInCondition add new param :allow_operators
Credo.Check.Refactor.MatchInC...
Bumps the engine group with 26 updates in the / directory:
| Package | From | To |
|---|---|---|
| github.com/99designs/gqlgen | 0.17.81 |
0.17.85 |
| github.com/alecthomas/chroma/v2 | 2.20.0 |
2.21.1 |
| github.com/anthropics/anthropic-sdk-go | 1.14.0 |
1.19.0 |
| github.com/aws/aws-sdk-go-v2 | 1.39.3 |
`... |
What are you trying to do?
I am running Dagger in a centralized "Build Service" where a CLI triggers remote builds. I connect to the Dagger Engine via the Go SDK and pipe the raw log stream directly back to the user's terminal using dagger.Connect(ctx, dagger.WithLogOutput(http.ResponseWriter), ...).
I want to present this log stream to developers without them seeing prominent red ERROR logs when Dagger essentially hits a "cache miss" (404) while checking for existing image layers in th...
Fixes #11595
I have added some documentation on using LLM.withMCPServer based on the example codes on #10907
Some systems do not allow the engine to set SELinux xattrs when copying a file. The engine ignores these in many places, but it's easy to miss. This change updates the default behavior of copying to be ignoring these errors so we don't have to squash it everywhere all the time.
What is the issue?
Dagger Engine fails to start on systems running Linux kernel 6.17+ where CONFIG_NETFILTER_XTABLES_LEGACY is disabled.
Error Message
dagger-engine: failed to create engine: failed to create network providers: CNI setup error:
plugin type="bridge" failed (add): failed to list chains: running [/usr/sbin/iptables -t nat -S --wait]:
exit status 3: iptables v1.8.11 (legacy): can't initialize iptables table `nat': Table does not exist
(do you need to insmod?)
Perh...
Summary
Fix Dagger Engine failing on Linux kernel 6.17+ where CONFIG_NETFILTER_XTABLES_LEGACY is disabled.
Fixes #11607
Changes
- Switch from
iptablestoiptables-nftpackage in Wolfi base image (uses nftables kernel API) - Add runtime detection for legacy xtables availability
- Configure CNI bridge plugin to use
nftablesbackend when legacy unavailable
Technical Details
Background
Starting with Linux kernel 6.17, CONFIG_NETFILTER_XTABLES_LEGACY defaults to disab...
problem
cache manager can't calculate disk usage for snapshots with deeply nested directories. hits ENAMETOOLONG when walking filesystem.
level=ERROR msg="failed to calculate size" error="lstat .../node_modules/.old-57CC/.../node_modules/.old-5AB6/.../astro-opengraph-images/...: file name too long"
seen with npm packages like astro-opengraph-images that create circular/deeply nested node_modules structures.
impact
- size set to 0 instead of actual usage
- breaks LRU cache e...
Fixes #11609
Changes
Adds safe filesystem walker with protections against deeply nested/circular directory structures that cause ENAMETOOLONG errors during cache size calculation.
New functions:
safeDiskUsage()- walks filesystem with max depth (1024), inode tracking for circular refs, ENAMETOOLONG handlingsafeSnapshotUsage()- calculates usage from snapshot mounts using safe walkerisFileNameTooLongError()- detects ENAMETOOLONG errors
Modified:
size()method ...
Summary
This PR fixes #11604
Changes
dagql/dagui/spans.go
plain output was showing more information that it should when using the
default verbosity level.
Fixes #11604
Signed-off-by: Marcos Lilljedahl
Currently, telemetry only includes objects passed as arguments as inputs to the DAG call.
That case is far less frequent than the case of calling a field on an object. When we receive a span for that, it would be nice to know which object ID the field was called against, so that we can incrementally load the call payload from its corresponding span.
This should have no behavioral effect - the method is only used in core/telemetry.go where it gets turned into a span attribute.
Reverts dagger/dagger#11612
Breaks test-split:test-interface: https://dagger.cloud/dagger/traces/f5a8ab7949cf0eb527bd0e39f8fa5662?span=0820bcd428347e20
I think we need to handle this elsewhere, not at span ingestion time
Debugging the file not found flake seen in module runtime tests (based on https://github.com/dagger/dagger/pull/11548)
Fixes #11554
Changes
- Add integration test to verify DefaultPath works on constructor fields without dagger.field()
- Fix trailing whitespace in existing test (minor style fix)
The test verifies that when a constructor field uses Annotated[dagger.Directory, DefaultPath(".")] without dagger.field(), the DefaultPath is properly registered with the engine and the parameter becomes optional with the default path from context.
What are you trying to do?
With env vars, I can attach them both as single vars or a set of vars from a file. In Kubernetes, I specify both env vars and secrets as env, using both line items and from file. Dagger is missing the SecretFile from the { Env, Secret } x { Var, File } cross-product.
Why is this important to you?
No response
How are you currently working around this?
No response
this was accidentally reverted from in #11614
Signed-off-by: Marcos Lilljedahl
What is the issue?
Summary
When I copy/paste the Dagger CLI example from the "Key Concepts" page, it fails with unknown flag: --directory.
Where in the docs
Getting started โ Concepts (Key Concepts) page.
The example uses:
dagger core container ... with-directory --path=/src --directory=...
Reproduction
- Copy the
with-directoryCLI example from the Key Concepts page. - Run it with Dagger
v0.19.8:dagger version # dagger v0.19.8 (image://registry.da...
What:
- Replace --directory with --source in dagger core container with-directory CLI examples.
Why:
- On dagger v0.19.8, with-directory expects --source Directory (and --directory is an unknown flag), so the current docs examples fail when copied.
Notes: Other pages in the docs already use --source=... for Directory arguments, so this aligns the getting-started example with the current CLI behavior. e.g. https://docs.dagger.io/getting-started/types/directory/
Fixes #11619
allows Dagger to "just work" with its default configuration on enterprise machines that have http(s) proxies on localhost, e.g.
HTTPS_PROXY=http://localhost:8080 dagger
will spawn an engine container with HTTPS_PROXY=http://host.docker.internal:8080.
on my work machine, for instance, this keeps me from needing to manage my own engine container
for nerdctl we could use host.lima.internal i...
Hi, I'm using Dagger as a CI/CD tool, and would like to add the ability to set up custom Wolfi repositories when using the wolfi module. I have been working on adding this in a fork, would such a contribution be accepted upstream?
Bumps the sdk-typescript group in /sdk/typescript with 1 update: @trivago/prettier-plugin-sort-imports.
Updates @trivago/prettier-plugin-sort-imports from 6.0.0 to 6.0.1
Release notes
Sourced from @โtrivago/prettier-plugin-sort-imports's releases.
v6.0.1
What's Changed
ignore eslint errors due to undefined export variables by @โvladislavarsenev in trivago/prettier-plugin-sort-imports#391
Full Changelog: https://github.com/triva...
sure, feel free to open a PR so we can review it!
This patch adds two new options to the Alpine and Wolfi modules:
ExtraRepositories, which allows the user to configure additional repositories for their Wolfi/Alpine container, andExtraKeyURLs, which allows the user to add the required public keys to validate the provided repositories.
This allows for easy integration of extra repositories.
[dagger/dagger] Pull request opened: #11625 Support for tracking content digest separate from recipe
For a while now we've needed support for multiple cache keys per ID:
- Most recently, I realized we needed this to fix one of our CI flakes where we get a
ENOENTduring filesync functions (which ended up being that filesyncs were happening from the wrong place due to corner case overlaps in files/dirs synced between different clients) - A lot of cases where
Missingshows up in telemetry are related to this
This PR adds support for a separate content-based digest in addition to the ex...
What are you trying to do?
I want to be able to fetch all fields defined on an item an create a secret for each.
Why is this important to you?
This is useful if fields are environment variables: grouped together AWS_SECRET_ACCESS_KEY, AWS_ACCESS_KEY_ID, AWS_REGION and others.
How are you currently working around this?
Using the 1password Python SDK to get the list of the fields first
Rewrites the README to align with the new homepage positioning while
keeping it technical and appropriate for system engineers.
Changes:
- New intro: "agent-ready platform for end-to-end testing"
- Explains why agents need trusted feedback (the bottleneck is no longer
code changes, it's repeatable test results) - Five technical sections: Repeatable, Local-first, Programmable,
Observable, Open - Adds code example showing what "programmable" means in practice
- Removes marketing-style lang...
Fixes: #8638
I've added a test that passes the RepoRootForImportDynamic for vcs.RepoRootForImportPath. I don't know if this is acceptable in this way but this was the only way for me to make this testable.
What is the issue?
I am using dagger connected to Amazon Bedrock through the bedrock-access-gateway (https://github.com/aws-samples/bedrock-access-gateway) when I submit a promo in the the run prompt mode in the dagger interactive shell I am getting the following error:
โ 0.0s ERROR
! received error while streaming: {"message":"500: Parameter validation failed:\nInvalid length for parameter toolConfig.tools[12].toolSpec.description, value: 0, valid min length: 1"}
The raw requ...
For toolchains, this returns the source of the toolchain where the check is defined. Otherwise, it coincides with the source of the module where the check is being run in.
Check has a private Module field, but this commit adds an exported ModuleSource field.
Bumps glob from 10.4.5 to 10.5.0.
Commits
56774ef 10.5.0
1e4e297 bin: Do not expose filenames to shell expansion
See full diff in compare view
Bumps node-forge from 1.3.1 to 1.3.3.
Changelog
Sourced from node-forge's changelog.
1.3.3 - 2025-12-02
Fixed
[pkcs12] Make digestAlgorithm parameters optional to fix PKCS#12/PFX issues
introduced in 1.3.2.
1.3.2 - 2025-11-25
Security
HIGH: ASN.1 Validator Desynchronization
An Interpretation Conflict (CWE-436) vulnerability in node-forge versions
1.3.1 and below enables remote, unauthenticated attackers to craft ASN.1
structures to desynchronize...
Bumps glob from 10.4.5 to 10.5.0.
Commits
56774ef 10.5.0
1e4e297 bin: Do not expose filenames to shell expansion
See full diff in compare view
Bumps glob from 10.4.5 to 10.5.0.
Commits
56774ef 10.5.0
1e4e297 bin: Do not expose filenames to shell expansion
See full diff in compare view
Bumps node-forge from 1.3.1 to 1.3.3.
Changelog
Sourced from node-forge's changelog.
1.3.3 - 2025-12-02
Fixed
[pkcs12] Make digestAlgorithm parameters optional to fix PKCS#12/PFX issues
introduced in 1.3.2.
1.3.2 - 2025-11-25
Security
HIGH: ASN.1 Validator Desynchronization
An Interpretation Conflict (CWE-436) vulnerability in node-forge versions
1.3.1 and below enables remote, unauthenticated attackers to craft ASN.1
structures to desynchronize...
Bumps node-forge from 1.3.1 to 1.3.3.
Changelog
Sourced from node-forge's changelog.
1.3.3 - 2025-12-02
Fixed
[pkcs12] Make digestAlgorithm parameters optional to fix PKCS#12/PFX issues
introduced in 1.3.2.
1.3.2 - 2025-11-25
Security
HIGH: ASN.1 Validator Desynchronization
An Interpretation Conflict (CWE-436) vulnerability in node-forge versions
1.3.1 and below enables remote, unauthenticated attackers to craft ASN.1
structures to desynchronize...
This is my first attempt at a nushell SDK, i'm not a software engineer and I vibe coded this together with claude code, I will assume there's a ton of things wrong, but this is meant as a starting point perhaps :)
cc @subtle heart any clues on this one?
Bumps node-forge from 1.3.1 to 1.3.3.
Changelog
Sourced from node-forge's changelog.
1.3.3 - 2025-12-02
Fixed
[pkcs12] Make digestAlgorithm parameters optional to fix PKCS#12/PFX issues
introduced in 1.3.2.
1.3.2 - 2025-11-25
Security
HIGH: ASN.1 Validator Desynchronization
An Interpretation Conflict (CWE-436) vulnerability in node-forge versions
1.3.1 and below enables remote, unauthenticated attackers to craft ASN.1
structures to desynchronize...
so the object description isn't being populated in the llm tool description, which I dont think is expected (cc @woeful tendon ), but I haven't looked at this stuff in a while and I'm thinking the object description doesn't matter since the objects functions are exposed. So I'm not sure why the object itself is listed as a function?
Commit 52cd3ce3231 from PR #11497 regressed cross compilation.
This commit fixes it.
What happened? What did you expect to happen?
No response
This is an alternative to https://github.com/dagger/dagger/pull/11561
This introduces the concept of extending a module. If you extend a module, you will inherit all of its functions, but you can override any of them. Here's an example:
We have a HelloSimple toolchain here:
package main
type HelloSimple struct{}
func (m *HelloSimple) Message() string {
return "hello from simple"
}
func (m *HelloSimple) Goodbye() string {
return "goodbye from simple"
}
Th...
Bumps node-forge to 1.3.3 and updates ancestor dependency react-scripts. These dependencies need to be updated together.
Updates node-forge from 0.10.0 to 1.3.3
Changelog
Sourced from node-forge's changelog.
1.3.3 - 2025-12-02
Fixed
[pkcs12] Make digestAlgorithm parameters optional to fix PKCS#12/PFX issues
introduced in 1.3.2.
1.3.2 - 2025-11-25
Security
HIGH: AS...
isn't the module exposed as a top level function and when the model selects it it's only then when its underlying functions get also exposed? don't really remember the details on how this works in prompt mode ๐ค
Feature: MCP Tool Support
Request
Add MCP (Model Context Protocol) support to enable AI-driven pipeline creation and management.
Use Cases
- AI-assisted CI/CD pipeline creation
- Natural language pipeline modifications
- Automated debugging
- Documentation generation
What is MCP?
Industry standard for AI-tool integration (Anthropic, OpenAI, Linux Foundation).
Resources
- https://modelcontextprotocol.io
- https://github.com/PurpleSquirrelMedia (9 production MCP serve...
The overlay approach prevents false positives from gitignored files and empty directories that exist locally but not in git.
PS: It's a stopgap, as we should rely more on dagger's core API to express that need
Expose checks on current environment.
Add a current-env function for dagger shell
cc @shykes
At the moment there is no clean way for a dagger function to behave differently depending on the current git context.
By "git context" I mean:
- What's the current commit?
- Is it a clean commit?
- Is it a tag?
- What is the current branch?
The motivation for this would be deployments. A deploy() function might deploy to production, or to a dev sandbox, depending on the git context.
In the absence of this capability, an external system must decide when to call which dagger ...
Today we discussed the idea of a "ship function", in the same vein as "check" and "generate" functions.
- A check function is to check your project
- A generate function is to generate source-controlled assets in your project
- A ship function is to ship to external systems from your project.
Definition of "ship"
De define shipping as "changing an external system". So any function that has a side effect could be covered. This includes:
- Publishing an artifact at a mu...
- Optimize
GenerateClientto not use any container when generating files. - Update tsconfig updater to not create aliases for generated client, but instead respect existing aliases.
- Update packageJSON updater to not remove @dagger.io/dagger as dependency
- No longer use
locallib location when generating client. - Simplify Lib generator functions to take more context inside the constructor instead of arguments
- Update integrations tests and add a test for multiple generated client.
The Python SDK's code analysis has been migrated from runtime-based to AST-based analysis. This allows types to be available before dependencies are fetched, enabling static analysis without executing user code.
Files Created
| File | Purpose |
|--------------------------------------------|--------------------------...
What is the issue?
When using the .Changes(...).Layer() on a directory, for example
layer := ctr.
//
// ...add/modify/delete some files
//
Directory("/usr/local").
Changes(ctr.Directory("/usr/local").
Layer()
You would expect the layer to container entries from just /usr/local. However, it seems to take a diff of the entire filesystem (from /), not just the scoped directory.
Note: it looks like AsPatch does not have this issue though.
...
[dagger/dagger] Pull request opened: #11657 Remove deprecated "arguments" field from our dagger.json
Signed-off-by: Solomon Hykes
Problem
As shown in this discord thread, dagger develop --recursive was spawning unbounded goroutines for all module dependencies simultaneously.
For repos with many modules (20+), this caused memory to spike faster than work could complete, leading to OOM kills.
Solution
Add a semaphore to limit concurrent module development to runtime.NumCPU():
sem := semaphore.NewWeighted(int64(runtime.N...
What is the issue?
Hi,
After updating from v0.19.8 to v0.19.9, my pipeline doesn't work anymore, I don't know what changed exactly.
It's after I export a file, I have an error "failed to open file: open /tmp/buildkit-mountXXX"
Downgrade to v0.19.8 fixed my issue.
Dagger version
dagger v0.19.9 (image://registry.dagger.io/engine:v0.19.9) darwin/arm64/v8
Steps to reproduce
No response
Log output
94 : โ โ File.export(path: "upload-1768084086542105213-5665"): String!
95...
Bumps the sdk-java group in /sdk/java with 4 updates: com.palantir.javapoet:javapoet, com.github.javaparser:javaparser-core, org.junit:junit-bom and io.opentelemetry:opentelemetry-bom.
Updates com.palantir.javapoet:javapoet from 0.9.0 to 0.10.0
Release notes
Sourced from com.palantir.javapoet:javapoet's...
Bumps the sdk-typescript group in /sdk/typescript with 11 updates:
| Package | From | To |
|---|---|---|
| @opentelemetry/core | 2.2.0 |
2.3.0 |
| @opentelemetry/exporter-jaeger | 2.2.0 |
2.3.0 |
| @opentelemetry/exporter-trace-otlp-http | 0.208.0 |
0.209.0 |
| [@opentelemetry/sdk-metrics](https://github.com/open-t... |
Bumps the docs group in /docs with 4 updates: posthog-js, sass, typedoc and @types/node.
Updates posthog-js from 1.313.0 to 1.318.1
Release notes
Sourced from posthog-js's releases.
posthog-js@1.318.1
1.318.1
Patch Changes
#2862 9337928 Thanks @โadboio! - add position options to modal and survey ...
Bumps the sdk-elixir group in /sdk/elixir with 1 update: req.
Updates req from 0.5.16 to 0.5.17
Changelog
Sourced from req's changelog.
CHANGELOG
HEAD
[retry]: Use default delay if retry-after is "negative"
Previously, we were only handling "negative" retry-after in "http date"
format and slept for zero seconds. We were crashing on retry-after with
negative seconds.
Now, we're using the default delay (1s, 2s, 4s, ...) i...
Bumps the sdk-python-docker group with 1 update in the /modules/ruff/build directory: astral-sh/ruff.
Updates astral-sh/ruff from 0.14.10 to 0.14.11
Release notes
Sourced from astral-sh/ruff's releases.
0.14.11
Release Notes
Released on 2026-01-08.
Preview features
Consolidate diagnostics for matched disable/enable suppression comments (#22099)
Report diagnostics for invalid/unmatched range suppression comments (#21908)
[airflow] Passing positional a...
Summary
Allow ReturnType.ANY and ReturnType.FAILURE to accept exit codes 192โ255, while preserving signal-related exclusions (128โ191).
Testing
dagger call engine-dev test --pkg "./core/integration" --run "^TestReturnCodes$"
dagger call go lint
What is the issue?
ยกHola! Starting version 0.19.9 my pipeling pulling from GCP's pkg.dev started to fail.
0.19.9 output
โ โ โฐโด$ 4dffc0a93cac759f Container@xxh3:6142b3636448fd5f.from(
โ โ โ โ address: "us-east4-docker.pkg.dev/chapauy-20251216/prod/data:latest@sha256:5104aa2c7264732002383a4d51cc8234cb4666773c9d4e770dba906718f7df1a"
โ โ โ ): Container! = xxh3:b394e37c28b0735c 0.0s CACHED
โ โ โโดโ 2bed6ad3d1d9c928 resolving us-east4-docker.pkg.dev/chapau...
Updates the SDK and dev toolchain to use 8.5 images.
Doesn't achieve much on it's own. But allows for some nice refactoring in places.
I noticed that all PR were failing because of the checkGenerated so I updated
the protobuff generated files.
- docs: align intro with README and homepage. Refocus on software delivery
- Docs: downgrade "build an AI agent" quickstart from the docs, since it seems to confuse people.
This converts file.WithName to dagop, and additionally fixes #11660
In the confusion of https://github.com/dagger/dagger/pull/11648 needing a new workflow to bump CI runners for most workflows, I missed a couple that still needed bumps in the few remaining yamls here
Following up here since we've had significant progress outside this thread:
- we now have toolchain customizations https://github.com/dagger/dagger/pull/11480
- we have a draft for overlays https://github.com/dagger/dagger/pull/11561
- we have a draft for extending toolchains https://github.com/dagger/dagger/pull/11642
The previously merged support for volatile settings on overlay dirs did not end up handling the case where the engine exited ungracefully (OOM, machine crash, engine panic, etc.). The incompat/volatile dir was cleaned up on unmount but not at engine start.
This could leave snapshots with that incompat/volatile dir laying around and make them unusable until the cache was cleared.
This adds support to the engine for cleaning those snapshots up at engine start time.
This is quite tric...
Fixes #11667
PR https://github.com/dagger/dagger/pull/11403 seems to have introduced a regression.
The theory is :
Before (v0.19.8): Directory.Directory() used StatLLB โ bk.Solve() โ proper session handling
After (v0.19.9): Directory.Directory() uses new Stat() โ MountRef(ctx, immutableRef, nil, ...) โ nil session
The Bug Chain
Directory.Directory("/app/db")callsdir.Stat(ctx, srv, ".", false)Stat()callsMountRef(ctx, immutableRef, nil, ...)withnilsessio...
What are you trying to do?
In our organization, we use Dagger as the CI engine for our software factory, deployed as a DaemonSet in our Kubernetes cluster. We recently added support for custom sidecar containers (via #10814) to collect metrics from runc containers spawned by Dagger (using BuildKit SDK). However, our sidecar containers need access to the process namespace of the main Dagger engine container to effectively monitor and collect ...
We have ignoreChecks available within the toolchains configuration in dagger.json, however @TomChv and I discovered the need for a top level one: when you're developing a toolchain that provides checks, but those checks dont make sense to run in the toolchain's own CI. I think thats basically the only use case for this but it is important
In a live discussion yesterday with @kpenfound, @sipsma, @alexcb, @tiborvass, @TomChv, @grouville, @eunomie, a few possible alternative verbs were proposed:
publishpushdeploy
No consensus emerged - more of a general brainstorm.
FYI @vito
This adds more cross linking, cleans up some language, and adds mention of checks in the CI quickstart
Add configurable engine.shareProcessNamespace option to enable process namespace sharing between containers. This allows sidecar containers (e.g., Datadog agents, security scanners) to access processes running in the main engine container for monitoring and observability.
Defaults to false for backward compatibility.
IMHO publish is the most recognizable, deploy may mean a lot more than publishing.
Creates a pytest_otel python library that exposes tests run to otel. This library is using pytest as the test runner.
The library is not (yet?) published, it's embedded in the container running pytest.
A python toolchain is created, containing a test function that automatically runs tests using pytest and this pytest_otel library. As the library is injected in the container, no configuration is required to the developer. The toolchain can be directly used on python project.
...
I was also thinking about export, that could cover the intent of publishing some data on an external system. This could work either for an artefact (like an OCI image we push) or a notification for instance. Deploying, especially if we think about promoting an existing artefact, could also be covered by the idea of export.
Just some random thoughts, to add even more options to the table.
We have check functions, soon generate, ship (or any other name).
Let's discuss up functions.
- A
checkfunction is to check your project - A
generatefunction is to generate source-controlled assets in your project - A
shipfunction is to ship to external systems from your project. - A
upfunction is to expose a service on the current host
Definition
As part of the development lifecycle, it might be necessa...
Summary
Move telemetry logic into @dagger.io/telemetry and import it in @dagger.io/dagger
The release process is decouple from @dagger.io/dagger, there's a new check in the ts SDK that verify that we correctly bump the package version when we update that package so later we can automatically release it.
When we build a dagger engine, we use the local telemetry package so we are always up to date and it makes tests always using the latest changes.
List of changes
...
While we're throwing options out there: effect