stdlib: io for portable I/O interfaces, os for system primitives

Signed-off-by: Solomon Hykes <sh.github.6811@hykes.org>
This commit is contained in:
Solomon Hykes 2021-05-04 18:10:58 +00:00
parent 114b777402
commit 052a623294
2 changed files with 84 additions and 41 deletions

View File

@ -1,59 +1,37 @@
package io
import (
"dagger.io/dagger"
"dagger.io/dagger/op"
)
// Standard interface for directory operations in cue
#Dir: {
from: dagger.#Artifact
path: string
// Read the tree structure (not file contents)
read: tree: {
string// FIXME: only raw 'find' output for now
#up: [
op.#FetchContainer & {
ref: "alpine" // FIXME: use alpine or docker package
},
op.#Exec & {
mount: "/data": "from": from
args: [
"sh", "-c",
#"find /data | sed 's/^\/data//' > /export.txt"#,
]
},
op.#Export & {
source: "/export.txt"
format: "string"
},
]
}
read: tree: string
...
}
// Standard interface for file operations in cue
#File: {
from: dagger.#Artifact
path: string
#Reader
#Writer
...
}
#ReadWriter: #Reader & #Writer
#Reader: {
read: {
// FIXME: support different data schemas for different formats
format: "string" | "json" | "yaml" | "lines"
data: {
string
#up: [
op.#Load & {"from": from},
op.#Export & {source: path, "format": format},
]
...
}
}
...
}
#Writer: {
write: *null | {
// FIXME: support writing in multiple formats
// FIXME: append
data: _
#up: [
op.#Load & {"from": from},
op.#WriteFile & {
dest: path
contents: data
},
]
}
...
}

65
stdlib/os/os.cue Normal file
View File

@ -0,0 +1,65 @@
package os
import (
"dagger.io/io"
"dagger.io/dagger"
"dagger.io/dagger/op"
)
#Dir: io.#Dir & {
from: dagger.#Artifact
path: string
// Read the tree structure (not file contents)
read: tree: {
string// FIXME: only raw 'find' output for now
#up: [
op.#FetchContainer & {
ref: "alpine" // FIXME: use alpine or docker package
},
op.#Exec & {
mount: "/data": "from": from
args: [
"sh", "-c",
#"find /data | sed 's/^\/data//' > /export.txt"#,
]
},
op.#Export & {
source: "/export.txt"
format: "string"
},
]
}
}
#File: {
from: dagger.#Artifact
path: string
io.#Reader & {
read: {
format: _
data: {
_
#up: [
op.#Load & {"from": from},
op.#Export & {source: path, "format": format},
]
}
}
}
io.#Writer & {
write: *null | {
data: _
#up: [
op.#Load & {"from": from},
op.#WriteFile & {
dest: path
contents: data
},
]
}
}
}