add file ops

Signed-off-by: Tony Worm <tony@hofstadter.io>
This commit is contained in:
Tony Worm 2021-03-15 08:23:24 -04:00 committed by Solomon Hykes
parent 472070d7f8
commit 0e32bc68f8
3 changed files with 205 additions and 0 deletions

72
stdlib/file/file.cue Normal file
View File

@ -0,0 +1,72 @@
package file
import (
"strings"
"dagger.io/dagger"
)
#Create: {
filename: !=""
permissions: int | *0o644
contents: string | bytes
#compute: [
dagger.#WriteFile & { dest: filename, content: contents, mode: permissions}
]
}
#Append: {
filename: !=""
permissions: int | *0o644
contents: string | bytes
from: dagger.#Artifact
orig: (#read & { path: filename, "from": from }).data
#compute: [
dagger.#WriteFile & { dest: filename, content: "\(orig)\(contents)", mode: permissions}
]
}
#Read: {
filename: !=""
from: dagger.#Artifact
contents: (#read & { path: filename, "from": from }).data
}
#read: {
path: !=""
from: dagger.#Artifact
data: {
string
#compute: [
dagger.#Load & {"from": from},
dagger.#Export & { source: path }
]
}
}
#Glob: {
glob: !=""
filenames: [...string]
from: dagger.#Artifact
files: (_#glob & { "glob": glob, "from": from }).data
// trim suffix because ls always ends with newline
filenames: strings.Split(strings.TrimSuffix(files, "\n"), "\n")
}
_#glob: {
glob: !=""
from: dagger.#Artifact
data: {
string
_tmppath: "/tmp/ls.out"
#compute: [
dagger.#Load & {"from": from},
dagger.#Exec & {
args: ["sh", "-c", "ls \(glob) > \(_tmppath)"]
},
dagger.#Export & { source: _tmppath }
]
}
}

131
tests/stdlib/file/file.cue Normal file
View File

@ -0,0 +1,131 @@
package f
import (
"dagger.io/dagger"
"dagger.io/alpine"
"dagger.io/file"
)
TestCreate: {
_content: "hello world"
write: file.#Create & {
filename: "/file.txt"
contents: _content
}
test: #compute: [
dagger.#Load & {from: alpine.#Image},
dagger.#Exec & {
args: [
"sh",
"-ec",
"""
test "$(cat /file.txt)" = "hello world"
""",
]
mount: "/file.txt": {
from: write
path: "/file.txt"
}
},
]
}
TestRead: {
read: file.#Read & {
filename: "/etc/alpine-release"
from: alpine.#Image & { version: "3.10.6" }
}
test: #compute: [
dagger.#Load & {from: alpine.#Image},
dagger.#Exec & {
args: [
"sh",
"-ec",
"""
test "\(read.contents)" = "3.10.6\n"
""",
]
},
]
}
TestRead2: {
write: file.#Create & {
_content: "hello world"
filename: "/file.txt"
contents: _content
}
read: file.#Read & {
filename: "/file.txt"
from: write
}
test: #compute: [
dagger.#Load & {from: alpine.#Image},
dagger.#Exec & {
args: [
"sh",
"-ec",
"""
test "\(read.contents)" = "hello world"
""",
]
},
]
}
TestAppend: {
content1: "hello world"
content2: "foo bar"
write: file.#Create & {
filename: "/file.txt"
contents: content1
}
append: file.#Append & {
filename: "/file.txt"
contents: content2
from: write
}
orig: append.orig
read: file.#Read & {
filename: "/file.txt"
from: append
}
new: read.contents
test: new & "hello worldfoo bar"
//test: #compute: [
//dagger.#Load & {from: alpine.#Image},
//dagger.#Exec & {
//args: [
//"sh",
//"-ec",
//"""
//test "$(cat /file.txt)" = "hello worldfoo bar"
//""",
//]
//mount: "/file.txt": {
//from: append
//path: "/file.txt"
//}
//},
//]
}
TestGlob: {
list: file.#Glob & {
glob: "/etc/r*"
from: alpine.#Image
}
test: list.filenames & ["/etc/resolv.conf"]
}

View File

@ -27,6 +27,8 @@ test::stdlib() {
"$dagger" "${DAGGER_BINARY_ARGS[@]}" compute "$d"/stdlib/yarn --input-dir TestData="$d"/stdlib/yarn/testdata
test::one "stdlib: go" \
"$dagger" "${DAGGER_BINARY_ARGS[@]}" compute "$d"/stdlib/go --input-dir TestData="$d"/stdlib/go/testdata
test::one "stdlib: file" \
"$dagger" "${DAGGER_BINARY_ARGS[@]}" compute "$d"/stdlib/file
}
test::compute(){