#github-feed

1 messages ยท Page 18 of 1

vivid lintelBOT
#

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...
vivid lintelBOT
vivid lintelBOT
#

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...

vivid lintelBOT
#

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...

vivid lintelBOT
ornate vigilBOT
#

Thanks for starting this!

  1. As you know I love the idea of splitting the SDK interface into smaller entrypoints with a simpler relationship between them.

  2. I notice your proposed schema has moduleClientGen and generateClient, 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.

vivid lintelBOT
#

This issue is tracking follow-up improvements to #11034 .

  • [ ] Allow expanding system env variables (currently disabled because of a caching issue)
  • [ ] dagger --env-file to select an alternative filename
  • [ ] dagger --no-env-file to 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...
vivid lintelBOT
#

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.

ornate vigilBOT
ornate vigilBOT
vivid lintelBOT
#

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?

ornate vigilBOT
vivid lintelBOT
#

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...

vivid lintelBOT
#

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...

vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
#

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...

vivid lintelBOT
#

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...
vivid lintelBOT
#

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/container v0.5.0 features like optimized Named Volumes for persistent, f...
vivid lintelBOT
vivid lintelBOT
#

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...
vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
#

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....
vivid lintelBOT
vivid lintelBOT
#

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!"

vivid lintelBOT
#

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...

vivid lintelBOT
vivid lintelBOT
#

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.

vivid lintelBOT
#

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...

vivid lintelBOT
vivid lintelBOT
#

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 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...

vivid lintelBOT
vivid lintelBOT
#

This if a follow up to #11229

  • rename schemaJSON to introspectionSchemaJSON: more verbose, but it is exactly what we are providing here
  • in addition to module, expose the introspectionSchemaJSON to moduleSource

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...

vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
#

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...
vivid lintelBOT
#

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...
vivid lintelBOT
vivid lintelBOT
#

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 build
  • dagger call npm lint
  • ...

To install blueprints, I can first dagger init --blueprint , and then later dagger blueprint add to add ...

vivid lintelBOT
vivid lintelBOT
#

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...

vivid lintelBOT
#

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...

vivid lintelBOT
#

๐Ÿ˜ข

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...
vivid lintelBOT
vivid lintelBOT
#

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-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...

vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
#

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   โ”‚
  ...
vivid lintelBOT
#
  • 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...
vivid lintelBOT
vivid lintelBOT
#

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.

vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
#

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.

  • generateClient was somehow accidentally creating files in sdk/php/sdk/php instead of just sdk/php. We fix the path manipulation, and now get the right path.
  • generateDocs was comparing an empty directory, making the changeset think that all these file...
vivid lintelBOT
vivid lintelBOT
#

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

vivid lintelBOT
#

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...

vivid lintelBOT
#

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
vivid lintelBOT
vivid lintelBOT
#

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:

  1. 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...
vivid lintelBOT
vivid lintelBOT
#

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 ...

vivid lintelBOT
#

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 []...
vivid lintelBOT
#

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...

vivid lintelBOT
#

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...
vivid lintelBOT
vivid lintelBOT
#

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 ...

vivid lintelBOT
#

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...

vivid lintelBOT
#

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...

vivid lintelBOT
vivid lintelBOT
#

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)
...

vivid lintelBOT
#

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 ...

vivid lintelBOT
#

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
โ”‚ย ย  โ”‚...
vivid lintelBOT
vivid lintelBOT
#

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.

vivid lintelBOT
#

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...
vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
#

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.

vivid lintelBOT
#

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

vivid lintelBOT
vivid lintelBOT
#

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...
vivid lintelBOT
#

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 ...

vivid lintelBOT
#

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...

vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
#

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...
vivid lintelBOT
#

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.

vivid lintelBOT
#

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: ...
vivid lintelBOT
vivid lintelBOT
#

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...

vivid lintelBOT
vivid lintelBOT
#

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...

vivid lintelBOT
#

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 ๐Ÿค”
vivid lintelBOT
#

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...

vivid lintelBOT
#

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...

vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
#

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...

vivid lintelBOT
#

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-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...

vivid lintelBOT
#

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.

vivid lintelBOT
vivid lintelBOT
#

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:

  1. Just add a debug: true field -->
 {
    "name": "dagger-dev",
    "engineVersion": "v0.19.4",
    "sdk": {
     "source": "go",
    "debug": true
  }
}
  1. Then, call any dagger function (any return types will work). You will j...
vivid lintelBOT
#

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...

vivid lintelBOT
#

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.

vivid lintelBOT
vivid lintelBOT
#

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...
vivid lintelBOT
vivid lintelBOT
#

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 ...

vivid lintelBOT
vivid lintelBOT
#

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...

vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
#

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

vivid lintelBOT
#

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...
vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
#

This is it! The last layer of the onion. Let's break up our CI monolith into cleanly decoupled toolchains.

Goals:

  1. Faster CI
  2. Simpler CI
  3. 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...
vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
#

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 ...

vivid lintelBOT
#

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'...

vivid lintelBOT
#

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-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...

vivid lintelBOT
vivid lintelBOT
#

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) โ€“ A TextIO object 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 ...

vivid lintelBOT
vivid lintelBOT
#

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...

vivid lintelBOT
vivid lintelBOT
#

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:...
vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
#

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... ๐Ÿ˜ญ

vivid lintelBOT
#

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...

vivid lintelBOT
#

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...
vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
#

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...

vivid lintelBOT
#

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/checkTidy check has a dep on a Go container 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
  • goimports sees undeclared dag and auto-imports dagger.io/dagger/dag which breaks everything - very annoying
  • Not always ...
vivid lintelBOT
#

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 ...

vivid lintelBOT
#

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...

vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
#

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:

  1. While working on this PR I found out that `cl...
vivid lintelBOT
#

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...

vivid lintelBOT
#

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....
vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
#

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.

vivid lintelBOT
#

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?
vivid lintelBOT
vivid lintelBOT
#

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...

vivid lintelBOT
#

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.

vivid lintelBOT
#

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...

vivid lintelBOT
#

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...
vivid lintelBOT
#

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.
...

vivid lintelBOT
#

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...
vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
#

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.

  1. investigating/improving slow performance when filesyncing to cloud engines
  2. fixing flakey filesync errors caused by inconsistencies between client/server views of filesystems
  3. simplifying the server-side filesync code, which current...
vivid lintelBOT
#

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 "...
vivid lintelBOT
#

Was looking into a run of test-sdks that was hanging and noticed some low hanging fruit:

  1. We were running all tests and lints twice (in parallel) due to some vestigial looking code
  2. 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/...
vivid lintelBOT
#

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/...
vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
#

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.

#

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...

vivid lintelBOT
#

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...

vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
#

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...

vivid lintelBOT
vivid lintelBOT
#

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:

  1. If a ra...
#

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.

#...

vivid lintelBOT
#

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...

vivid lintelBOT
#

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-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...

vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
#

We were publishing engine images for:

  1. (default) alpine
  2. (-gpu) ubuntu
  3. (`-wolfi) wolfi w/out gpu
  4. (`-wolfi-gpu) wolfi w/ gpu

This change simplifies everything to be just:

  1. (default) wolfi w/out gpu
  2. (-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...

vivid lintelBOT
vivid lintelBOT
#

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

vivid lintelBOT
vivid lintelBOT
#

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...

vivid lintelBOT
#

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...

vivid lintelBOT
vivid lintelBOT
#

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...
vivid lintelBOT
#

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...

vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
#

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...

vivid lintelBOT
#

๐Ÿšง 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
  • ...

generator

Annotate a function with +generator pragma. This pragma takes an optional argument describing the target files.

For instance:

// +...
vivid lintelBOT
#

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 ...

vivid lintelBOT
vivid lintelBOT
#

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...

vivid lintelBOT
vivid lintelBOT
#

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...

vivid lintelBOT
ornate vigilBOT
#

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...

ornate vigilBOT
#

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...

ornate vigilBOT
ornate vigilBOT
#

Not yet. A few ideas:

  • Override the default container in the npm:test function 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...
vivid lintelBOT
vivid lintelBOT
ornate vigilBOT
vivid lintelBOT
vivid lintelBOT
#

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.

vivid lintelBOT
vivid lintelBOT
#

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

vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
#

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

vivid lintelBOT
#

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
vivid lintelBOT
vivid lintelBOT
#

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...

vivid lintelBOT
#

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-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 ...

vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
#

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 ...
vivid lintelBOT
vivid lintelBOT
#

(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...

vivid lintelBOT
#

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...

vivid lintelBOT
#

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...

vivid lintelBOT
#

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 โ€“...

vivid lintelBOT
vivid lintelBOT
#

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...

vivid lintelBOT
#

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 27af6d5f4 changed from LLB-based chown (single operation) to Directory.Chown which uses `file...
vivid lintelBOT
#

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...

vivid lintelBOT
#

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...

vivid lintelBOT
#

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...

vivid lintelBOT
vivid lintelBOT
#

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...

vivid lintelBOT
vivid lintelBOT
#

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-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

[![Dependabot compatibility score](https://dependa...

#

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.8 to 0.14.9

Release notes
Sourced from astral-sh/ruff's releases.

0.14.9
Release Notes
Released on 2025-12-11.
Preview features

[ruff] New RUF100 diagnostics for unused range suppressions (#21783)
[pylint] Detect subclasses of builtin exceptions (PLW0133) (#21382)

Bug fixes

Fix comment placement in lambda parameters...

vivid lintelBOT
#

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...
vivid lintelBOT
#

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"
 ...
vivid lintelBOT
vivid lintelBOT
#

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 ...
vivid lintelBOT
#

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...

vivid lintelBOT
#

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

vivid lintelBOT
#

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 ...

vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
#

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...

vivid lintelBOT
#

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....
vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
#

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 ...

vivid lintelBOT
#

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 ...

vivid lintelBOT
#

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: ...
vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
#

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

vivid lintelBOT
vivid lintelBOT
#

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...
vivid lintelBOT
#

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...

vivid lintelBOT
#

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...

vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
#

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...
vivid lintelBOT
#

Summary

Fix Dagger Engine failing on Linux kernel 6.17+ where CONFIG_NETFILTER_XTABLES_LEGACY is disabled.

Fixes #11607

Changes

  1. Switch from iptables to iptables-nft package in Wolfi base image (uses nftables kernel API)
  2. Add runtime detection for legacy xtables availability
  3. Configure CNI bridge plugin to use nftables backend when legacy unavailable

Technical Details

Background

Starting with Linux kernel 6.17, CONFIG_NETFILTER_XTABLES_LEGACY defaults to disab...

vivid lintelBOT
#

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 handling
  • safeSnapshotUsage() - calculates usage from snapshot mounts using safe walker
  • isFileNameTooLongError() - detects ENAMETOOLONG errors

Modified:

  • size() method ...
vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
#

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.

vivid lintelBOT
#

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.

vivid lintelBOT
#

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

vivid lintelBOT
vivid lintelBOT
#

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

  1. Copy the with-directory CLI example from the Key Concepts page.
  2. 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

vivid lintelBOT
#

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...

ornate vigilBOT
vivid lintelBOT
#

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...

ornate vigilBOT
vivid lintelBOT
vivid lintelBOT
#

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 ENOENT during 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 Missing shows up in telemetry are related to this

This PR adds support for a separate content-based digest in addition to the ex...

vivid lintelBOT
#

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

vivid lintelBOT
#

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...
vivid lintelBOT
vivid lintelBOT
#

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...

vivid lintelBOT
vivid lintelBOT
#

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...

#

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...

vivid lintelBOT
radiant rover
vivid lintelBOT
#

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...

subtle heart
# radiant rover cc <@135620352201064448> any clues on this one?

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?

vivid lintelBOT
vivid lintelBOT
#

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...

radiant rover
vivid lintelBOT
#

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

vivid lintelBOT
vivid lintelBOT
ornate vigilBOT
#

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 ...

ornate vigilBOT
#

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...
vivid lintelBOT
#
  • Optimize GenerateClient to 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 local lib 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.
vivid lintelBOT
vivid lintelBOT
#

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.

...

vivid lintelBOT
vivid lintelBOT
#

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...
vivid lintelBOT
#

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...

vivid lintelBOT
#

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...

vivid lintelBOT
vivid lintelBOT
#

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...
vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
vivid lintelBOT
ornate vigilBOT
vivid lintelBOT
#

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...

vivid lintelBOT
#

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

  1. Directory.Directory("/app/db") calls dir.Stat(ctx, srv, ".", false)
  2. Stat() calls MountRef(ctx, immutableRef, nil, ...) with nil sessio...
vivid lintelBOT
#

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 ...

vivid lintelBOT
#

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

ornate vigilBOT
vivid lintelBOT
ornate vigilBOT
vivid lintelBOT
#

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.

...

ornate vigilBOT
#

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.

ornate vigilBOT
#

We have check functions, soon generate, ship (or any other name).
Let's discuss up 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.
  • A up function is to expose a service on the current host

Definition

As part of the development lifecycle, it might be necessa...

vivid lintelBOT
#

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

...

ornate vigilBOT