uv-workspace
This module has been generated via dagger init and serves as a reference tobasic module structure as you get started with Dagger.
Two functions have been pre-created. You can modify, delete, or add to them,
as needed. They demonstrate usage of arguments and return types using simple
echo and grep commands. The functions can be called from the dagger CLI or
from one of the SDKs.
The first line in this comment block is a short description line and the
rest is a long description with more detail on the module's purpose or usage,
if appropriate. All modules should have a short description.
Installation
dagger install github.com/typesafe-ai/daggerverse/uv-workspace@65abcb72737280c16b64557ce93dde3ed7bb284bEntrypoint
Return Type
UvWorkspace !Arguments
| Name | Type | Default Value | Description |
|---|---|---|---|
| sourceDir | Directory ! | - | Source directory containing the workspace |
| baseContainer | Container ! | - | Pre-configured container (with auth, system packages, etc.) |
| workspacePath | String ! | "." | Path to workspace root (holding uv.lock and pyproject.toml) within source_dir |
Example
dagger -m github.com/typesafe-ai/daggerverse/uv-workspace@65abcb72737280c16b64557ce93dde3ed7bb284b call \
--source-dir DIR_PATH --base-container IMAGE:TAG --workspace-path stringfunc (m *MyModule) Example(sourceDir *dagger.Directory, baseContainer *dagger.Container, workspacePath string) *dagger.UvWorkspace {
return dag.
UvWorkspace(sourceDir, baseContainer, workspacePath)
}@function
def example(source_dir: dagger.Directory, base_container: dagger.Container, workspace_path: str) -> dagger.UvWorkspace:
return (
dag.uv_workspace(source_dir, base_container, workspace_path)
)@func()
example(sourceDir: Directory, baseContainer: Container, workspacePath: string): UvWorkspace {
return dag
.uvWorkspace(sourceDir, baseContainer, workspacePath)
}Types
UvWorkspace 🔗
Builds minimal project containers by parsing uv.lock to resolve local dependencies.
sourceDir() 🔗
Source directory containing the workspace
Return Type
Directory ! Example
dagger -m github.com/typesafe-ai/daggerverse/uv-workspace@65abcb72737280c16b64557ce93dde3ed7bb284b call \
--source-dir DIR_PATH --base-container IMAGE:TAG --workspace-path string source-dirfunc (m *MyModule) Example(sourceDir *dagger.Directory, baseContainer *dagger.Container, workspacePath string) *dagger.Directory {
return dag.
UvWorkspace(sourceDir, baseContainer, workspacePath).
SourceDir()
}@function
def example(source_dir: dagger.Directory, base_container: dagger.Container, workspace_path: str) -> dagger.Directory:
return (
dag.uv_workspace(source_dir, base_container, workspace_path)
.source_dir()
)@func()
example(sourceDir: Directory, baseContainer: Container, workspacePath: string): Directory {
return dag
.uvWorkspace(sourceDir, baseContainer, workspacePath)
.sourceDir()
}baseContainer() 🔗
Pre-configured container (with auth, system packages, etc.)
Return Type
Container ! Example
dagger -m github.com/typesafe-ai/daggerverse/uv-workspace@65abcb72737280c16b64557ce93dde3ed7bb284b call \
--source-dir DIR_PATH --base-container IMAGE:TAG --workspace-path string base-containerfunc (m *MyModule) Example(sourceDir *dagger.Directory, baseContainer *dagger.Container, workspacePath string) *dagger.Container {
return dag.
UvWorkspace(sourceDir, baseContainer, workspacePath).
BaseContainer()
}@function
def example(source_dir: dagger.Directory, base_container: dagger.Container, workspace_path: str) -> dagger.Container:
return (
dag.uv_workspace(source_dir, base_container, workspace_path)
.base_container()
)@func()
example(sourceDir: Directory, baseContainer: Container, workspacePath: string): Container {
return dag
.uvWorkspace(sourceDir, baseContainer, workspacePath)
.baseContainer()
}workspacePath() 🔗
Path to workspace root (holding uv.lock and pyproject.toml) within source_dir
Return Type
String ! Example
dagger -m github.com/typesafe-ai/daggerverse/uv-workspace@65abcb72737280c16b64557ce93dde3ed7bb284b call \
--source-dir DIR_PATH --base-container IMAGE:TAG --workspace-path string workspace-pathfunc (m *MyModule) Example(ctx context.Context, sourceDir *dagger.Directory, baseContainer *dagger.Container, workspacePath string) string {
return dag.
UvWorkspace(sourceDir, baseContainer, workspacePath).
WorkspacePath(ctx)
}@function
async def example(source_dir: dagger.Directory, base_container: dagger.Container, workspace_path: str) -> str:
return await (
dag.uv_workspace(source_dir, base_container, workspace_path)
.workspace_path()
)@func()
async example(sourceDir: Directory, baseContainer: Container, workspacePath: string): Promise<string> {
return dag
.uvWorkspace(sourceDir, baseContainer, workspacePath)
.workspacePath()
}withWorkspaceFiles() 🔗
Mount workspace pyproject.toml, uv.lock, and scaffold local package stubs.
Returns a container ready for uv sync — all workspace files are
in place but no dependencies are installed yet. Use this when you
need to run custom commands (e.g. pulumi install) between file
setup and dependency installation.
Return Type
Container !Arguments
| Name | Type | Default Value | Description |
|---|---|---|---|
| package | String | null | Package name; if set, only that package's transitive local deps are scaffolded |
| daggerCodegen | Boolean ! | true | Run Dagger codegen if the package has a `dagger.json`. No-op for non-Dagger projects. |
Example
dagger -m github.com/typesafe-ai/daggerverse/uv-workspace@65abcb72737280c16b64557ce93dde3ed7bb284b call \
--source-dir DIR_PATH --base-container IMAGE:TAG --workspace-path string with-workspace-files --dagger-codegen booleanfunc (m *MyModule) Example(sourceDir *dagger.Directory, baseContainer *dagger.Container, workspacePath string, daggerCodegen bool) *dagger.Container {
return dag.
UvWorkspace(sourceDir, baseContainer, workspacePath).
WithWorkspaceFiles(daggerCodegen)
}@function
def example(source_dir: dagger.Directory, base_container: dagger.Container, workspace_path: str, dagger_codegen: bool) -> dagger.Container:
return (
dag.uv_workspace(source_dir, base_container, workspace_path)
.with_workspace_files(dagger_codegen)
)@func()
example(sourceDir: Directory, baseContainer: Container, workspacePath: string, daggerCodegen: boolean): Container {
return dag
.uvWorkspace(sourceDir, baseContainer, workspacePath)
.withWorkspaceFiles(daggerCodegen)
}withRemoteDependencies() 🔗
Install remote (non-local) dependencies via uv sync --no-install-local.
Expects a container from with_workspace_files (or equivalent).
Local packages are stubbed out so this layer is stable across
source code edits.
Return Type
Container !Arguments
| Name | Type | Default Value | Description |
|---|---|---|---|
| container | Container ! | - | Container with workspace files (from with_workspace_files) |
| package | String | null | Package name; maps to `uv sync --package` |
| extra | [String ! ] | null | Extras to install; passed to `uv sync` as repeated `--extra` |
| group | [String ! ] | null | Dependency groups to install; passed to `uv sync` as repeated `--group` |
| allExtras | Boolean ! | false | Install every extra; maps to `uv sync --all-extras` |
| allGroups | Boolean ! | false | Install every dependency group; maps to `uv sync --all-groups` |
| allPackages | Boolean ! | false | Install every workspace member; maps to `uv sync --all-packages` |
Example
dagger -m github.com/typesafe-ai/daggerverse/uv-workspace@65abcb72737280c16b64557ce93dde3ed7bb284b call \
--source-dir DIR_PATH --base-container IMAGE:TAG --workspace-path string with-remote-dependencies --container IMAGE:TAG --all-extras boolean --all-groups boolean --all-packages booleanfunc (m *MyModule) Example(sourceDir *dagger.Directory, baseContainer *dagger.Container, workspacePath string, container *dagger.Container, allExtras bool, allGroups bool, allPackages bool) *dagger.Container {
return dag.
UvWorkspace(sourceDir, baseContainer, workspacePath).
WithRemoteDependencies(container, allExtras, allGroups, allPackages)
}@function
def example(source_dir: dagger.Directory, base_container: dagger.Container, workspace_path: str, container: dagger.Container, all_extras: bool, all_groups: bool, all_packages: bool) -> dagger.Container:
return (
dag.uv_workspace(source_dir, base_container, workspace_path)
.with_remote_dependencies(container, all_extras, all_groups, all_packages)
)@func()
example(sourceDir: Directory, baseContainer: Container, workspacePath: string, container: Container, allExtras: boolean, allGroups: boolean, allPackages: boolean): Container {
return dag
.uvWorkspace(sourceDir, baseContainer, workspacePath)
.withRemoteDependencies(container, allExtras, allGroups, allPackages)
}withLocalDependencies() 🔗
Copy real local source code and install local packages.
Overlays actual src/ directories for each needed local package,
then runs a final uv sync to install them. Strips the build-time
cache mount from the returned container.
Return Type
Container !Arguments
| Name | Type | Default Value | Description |
|---|---|---|---|
| container | Container ! | - | Container with remote deps installed (from with_remote_dependencies) |
| package | String | null | Package name; must match the value used in earlier phases |
| extra | [String ! ] | null | Extras to install; passed to `uv sync` as repeated `--extra` |
| group | [String ! ] | null | Dependency groups to install; passed to `uv sync` as repeated `--group` |
| allExtras | Boolean ! | false | Install every extra; maps to `uv sync --all-extras` |
| allGroups | Boolean ! | false | Install every dependency group; maps to `uv sync --all-groups` |
| allPackages | Boolean ! | false | Install every workspace member; maps to `uv sync --all-packages` |
| daggerCodegen | Boolean ! | true | Run Dagger codegen (must match with_workspace_files). |
Example
dagger -m github.com/typesafe-ai/daggerverse/uv-workspace@65abcb72737280c16b64557ce93dde3ed7bb284b call \
--source-dir DIR_PATH --base-container IMAGE:TAG --workspace-path string with-local-dependencies --container IMAGE:TAG --all-extras boolean --all-groups boolean --all-packages boolean --dagger-codegen booleanfunc (m *MyModule) Example(sourceDir *dagger.Directory, baseContainer *dagger.Container, workspacePath string, container *dagger.Container, allExtras bool, allGroups bool, allPackages bool, daggerCodegen bool) *dagger.Container {
return dag.
UvWorkspace(sourceDir, baseContainer, workspacePath).
WithLocalDependencies(container, allExtras, allGroups, allPackages, daggerCodegen)
}@function
def example(source_dir: dagger.Directory, base_container: dagger.Container, workspace_path: str, container: dagger.Container, all_extras: bool, all_groups: bool, all_packages: bool, dagger_codegen: bool) -> dagger.Container:
return (
dag.uv_workspace(source_dir, base_container, workspace_path)
.with_local_dependencies(container, all_extras, all_groups, all_packages, dagger_codegen)
)@func()
example(sourceDir: Directory, baseContainer: Container, workspacePath: string, container: Container, allExtras: boolean, allGroups: boolean, allPackages: boolean, daggerCodegen: boolean): Container {
return dag
.uvWorkspace(sourceDir, baseContainer, workspacePath)
.withLocalDependencies(container, allExtras, allGroups, allPackages, daggerCodegen)
}build() 🔗
Build a minimal container with deps installed for the given package.
Convenience method composing with_workspace_files, with_remote_dependencies,
and with_local_dependencies. For fine-grained control (e.g. running
pulumi install between file setup and dependency installation),
call the three phases individually.
Return Type
Container !Arguments
| Name | Type | Default Value | Description |
|---|---|---|---|
| package | String | null | Package name; if set, only that package's transitive local deps are installed. Maps to `uv sync --package` |
| extra | [String ! ] | null | Extras to install; passed to `uv sync` as repeated `--extra` |
| group | [String ! ] | null | Dependency groups to install; passed to `uv sync` as repeated `--group` |
| allExtras | Boolean ! | false | Install every extra; maps to `uv sync --all-extras` |
| allGroups | Boolean ! | false | Install every dependency group; maps to `uv sync --all-groups` |
| allPackages | Boolean ! | false | Install every workspace member; maps to `uv sync --all-packages`. Only meaningful in workspaces |
| daggerCodegen | Boolean ! | true | If True (default), and the package being built has a `dagger.json`, run Dagger codegen and overlay the generated SDK before `uv sync`. This makes `[tool.uv.sources]` entries pointing at the generated tree (e.g. `dagger-io = { path = "sdk" }`) install correctly even though those paths are gitignored. No-op for non-Dagger projects. Pass False to skip. |
Example
dagger -m github.com/typesafe-ai/daggerverse/uv-workspace@65abcb72737280c16b64557ce93dde3ed7bb284b call \
--source-dir DIR_PATH --base-container IMAGE:TAG --workspace-path string build --all-extras boolean --all-groups boolean --all-packages boolean --dagger-codegen booleanfunc (m *MyModule) Example(sourceDir *dagger.Directory, baseContainer *dagger.Container, workspacePath string, allExtras bool, allGroups bool, allPackages bool, daggerCodegen bool) *dagger.Container {
return dag.
UvWorkspace(sourceDir, baseContainer, workspacePath).
Build(allExtras, allGroups, allPackages, daggerCodegen)
}@function
def example(source_dir: dagger.Directory, base_container: dagger.Container, workspace_path: str, all_extras: bool, all_groups: bool, all_packages: bool, dagger_codegen: bool) -> dagger.Container:
return (
dag.uv_workspace(source_dir, base_container, workspace_path)
.build(all_extras, all_groups, all_packages, dagger_codegen)
)@func()
example(sourceDir: Directory, baseContainer: Container, workspacePath: string, allExtras: boolean, allGroups: boolean, allPackages: boolean, daggerCodegen: boolean): Container {
return dag
.uvWorkspace(sourceDir, baseContainer, workspacePath)
.build(allExtras, allGroups, allPackages, daggerCodegen)
}