build: add basic dagger pipeline

This commit is contained in:
Tomáš Mládek 2026-01-25 01:58:49 +01:00
parent adfbe04d30
commit 96274de3ed
8 changed files with 130 additions and 0 deletions

1
.dagger/.gitattributes vendored Normal file
View file

@ -0,0 +1 @@
/sdk/** linguist-generated

4
.dagger/.gitignore vendored Normal file
View file

@ -0,0 +1,4 @@
/sdk
/**/node_modules/**
/**/.pnpm-store/**
/.env

25
.dagger/package-lock.json generated Normal file
View file

@ -0,0 +1,25 @@
{
"name": ".dagger",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"dependencies": {
"typescript": "5.9.3"
}
},
"node_modules/typescript": {
"version": "5.9.3",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
"integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
"license": "Apache-2.0",
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
},
"engines": {
"node": ">=14.17"
}
}
}
}

3
.dagger/package.json Normal file
View file

@ -0,0 +1,3 @@
{
"type": "module"
,"dependencies":{"typescript":"5.9.3"}}

68
.dagger/src/index.ts Normal file
View file

@ -0,0 +1,68 @@
import {
dag,
Container,
Directory,
File,
object,
func,
argument,
} from "@dagger.io/dagger";
const RUST_IMAGE = "rust:1.85";
const WORKDIR = "/workspace";
@object()
export class LineAndSurface {
private baseRust(source: Directory): Container {
return dag
.container()
.from(RUST_IMAGE)
.withEnvVariable("CARGO_HOME", "/root/.cargo")
.withMountedCache("/root/.cargo", dag.cacheVolume("cargo-cache"))
.withMountedCache(
`${WORKDIR}/target`,
dag.cacheVolume("cargo-target"),
)
.withWorkdir(WORKDIR)
.withDirectory(WORKDIR, source)
.withExec(["cargo", "fetch", "--locked"]);
}
/**
* Build the native desktop binary (release).
*/
@func()
async nativeBuild(
@argument({
defaultPath: "/",
ignore: [".git/**", ".dagger/**", "target/**", "node_modules/**"],
})
source: Directory,
): Promise<File> {
const ctr = this.baseRust(source)
.withExec(["cargo", "build", "--release"])
.withExec(["mkdir", "-p", "/out"])
.withExec(["cp", "-v", `${WORKDIR}/target/release/las`, "/out/las"]);
return ctr.file("/out/las");
}
/**
* Build the web (wasm) bundle using Trunk.
*/
@func()
async webBuild(
@argument({
defaultPath: "/",
ignore: [".git/**", ".dagger/**", "target/**", "node_modules/**"],
})
source: Directory,
): Promise<Directory> {
const ctr = this.baseRust(source)
.withExec(["rustup", "target", "add", "wasm32-unknown-unknown"])
.withExec(["cargo", "install", "trunk"])
.withExec(["trunk", "build", "--release", "--dist", "/out"]);
return ctr.directory("/out");
}
}

13
.dagger/tsconfig.json Normal file
View file

@ -0,0 +1,13 @@
{
"compilerOptions": {
"target": "ES2022",
"moduleResolution": "Node",
"experimentalDecorators": true,
"strict": true,
"skipLibCheck": true,
"paths": {
"@dagger.io/dagger": ["./sdk/index.ts"],
"@dagger.io/dagger/telemetry": ["./sdk/telemetry.ts"]
}
}
}

8
.dagger/yarn.lock Normal file
View file

@ -0,0 +1,8 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1
typescript@5.9.3:
version "5.9.3"
resolved "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz"
integrity sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==

8
dagger.json Normal file
View file

@ -0,0 +1,8 @@
{
"name": "line-and-surface",
"engineVersion": "v0.19.10",
"sdk": {
"source": "typescript"
},
"source": ".dagger"
}