Add PowerShell package (#1783)
Signed-off-by: Chris Hunt <114173+cdhunt@users.noreply.github.com>
This commit is contained in:
parent
e4258683a2
commit
2018ac99f0
54
pkg/universe.dagger.io/powershell/powershell.cue
Normal file
54
pkg/universe.dagger.io/powershell/powershell.cue
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
// Helpers to run PowerShell commands in containers
|
||||||
|
package powershell
|
||||||
|
|
||||||
|
import (
|
||||||
|
"dagger.io/dagger"
|
||||||
|
"universe.dagger.io/docker"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Run a PowerShell (pwsh) script in a Docker container
|
||||||
|
// This does not suppore Windows containers or Windows PowerShell.
|
||||||
|
// Since this is a thin wrapper over docker.#Run, we embed it.
|
||||||
|
// Whether to embed or wrap is a case-by-case decision, like in Go.
|
||||||
|
#Run: {
|
||||||
|
// The script to execute
|
||||||
|
script: {
|
||||||
|
// A directory containing one or more PowerShell scripts
|
||||||
|
directory: dagger.#FS
|
||||||
|
|
||||||
|
// Name of the file to execute
|
||||||
|
filename: string
|
||||||
|
|
||||||
|
_directory: directory
|
||||||
|
_filename: filename
|
||||||
|
} | {
|
||||||
|
// Script contents
|
||||||
|
contents: string
|
||||||
|
|
||||||
|
_filename: "run.ps1"
|
||||||
|
_write: dagger.#WriteFile & {
|
||||||
|
input: dagger.#Scratch
|
||||||
|
path: _filename
|
||||||
|
"contents": contents
|
||||||
|
}
|
||||||
|
_directory: _write.output
|
||||||
|
}
|
||||||
|
|
||||||
|
// Arguments to the script
|
||||||
|
args: [...string]
|
||||||
|
|
||||||
|
// Where in the container to mount the scripts directory
|
||||||
|
_mountpoint: "/powershell/scripts"
|
||||||
|
|
||||||
|
docker.#Run & {
|
||||||
|
command: {
|
||||||
|
name: "pwsh"
|
||||||
|
"args": args
|
||||||
|
flags: "-File": "\(_mountpoint)/\(script._filename)"
|
||||||
|
}
|
||||||
|
mounts: "Pwsh scripts": {
|
||||||
|
contents: script._directory
|
||||||
|
dest: _mountpoint
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
1
pkg/universe.dagger.io/powershell/test/data/hello.ps1
Normal file
1
pkg/universe.dagger.io/powershell/test/data/hello.ps1
Normal file
@ -0,0 +1 @@
|
|||||||
|
Set-Content -Value "Hello world!" -Path "/out.txt"
|
10
pkg/universe.dagger.io/powershell/test/test.bats
Normal file
10
pkg/universe.dagger.io/powershell/test/test.bats
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
setup() {
|
||||||
|
load '../../bats_helpers'
|
||||||
|
|
||||||
|
common_setup
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "powershell" {
|
||||||
|
dagger "do" -p ./test.cue test
|
||||||
|
}
|
||||||
|
|
71
pkg/universe.dagger.io/powershell/test/test.cue
Normal file
71
pkg/universe.dagger.io/powershell/test/test.cue
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
package powershell
|
||||||
|
|
||||||
|
import (
|
||||||
|
"dagger.io/dagger"
|
||||||
|
|
||||||
|
"universe.dagger.io/docker"
|
||||||
|
"universe.dagger.io/powershell"
|
||||||
|
)
|
||||||
|
|
||||||
|
dagger.#Plan & {
|
||||||
|
actions: test: {
|
||||||
|
|
||||||
|
_pull: docker.#Pull & {
|
||||||
|
source: "mcr.microsoft.com/powershell"
|
||||||
|
}
|
||||||
|
_image: _pull.output
|
||||||
|
|
||||||
|
// Run a script from source directory + filename
|
||||||
|
runFile: {
|
||||||
|
|
||||||
|
dir: _load.output
|
||||||
|
_load: dagger.#Source & {
|
||||||
|
path: "./data"
|
||||||
|
include: ["*.ps1"]
|
||||||
|
}
|
||||||
|
|
||||||
|
run: powershell.#Run & {
|
||||||
|
input: _image
|
||||||
|
export: files: "/out.txt": _
|
||||||
|
script: {
|
||||||
|
directory: dir
|
||||||
|
filename: "hello.ps1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
output: run.export.files."/out.txt" & "Hello world!\n"
|
||||||
|
}
|
||||||
|
|
||||||
|
// Run a script from string
|
||||||
|
runString: {
|
||||||
|
run: powershell.#Run & {
|
||||||
|
input: _image
|
||||||
|
export: files: "/output.txt": _
|
||||||
|
script: contents: "Set-Content -Value 'Hello inline world!' -Path '/output.txt'"
|
||||||
|
}
|
||||||
|
output: run.export.files."/output.txt" & "Hello inline world!\n"
|
||||||
|
}
|
||||||
|
|
||||||
|
// Test args from string
|
||||||
|
runStringArg: {
|
||||||
|
run: powershell.#Run & {
|
||||||
|
input: _image
|
||||||
|
export: files: "/output.txt": _
|
||||||
|
script: contents: "Set-Content -Value 'Hello arg world!' -Path $($args[0])"
|
||||||
|
args: ["/output.txt"]
|
||||||
|
}
|
||||||
|
output: run.export.files."/output.txt" & "Hello arg world!\n"
|
||||||
|
}
|
||||||
|
|
||||||
|
// Test 2 args from string
|
||||||
|
runString2Arg: {
|
||||||
|
run: powershell.#Run & {
|
||||||
|
input: _image
|
||||||
|
export: files: "/output.txt": _
|
||||||
|
script: contents: "Set-Content -Value \"Hello args $($args[0])\" -Path $($args[1])"
|
||||||
|
args: ["world!", "/output.txt"]
|
||||||
|
}
|
||||||
|
output: run.export.files."/output.txt" & "Hello args world!\n"
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user