Add PowerShell package (#1783)

Signed-off-by: Chris Hunt <114173+cdhunt@users.noreply.github.com>
This commit is contained in:
Chris Hunt 2022-03-24 20:42:27 -04:00 committed by GitHub
parent e4258683a2
commit 2018ac99f0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 136 additions and 0 deletions

View 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
}
}
}

View File

@ -0,0 +1 @@
Set-Content -Value "Hello world!" -Path "/out.txt"

View File

@ -0,0 +1,10 @@
setup() {
load '../../bats_helpers'
common_setup
}
@test "powershell" {
dagger "do" -p ./test.cue test
}

View 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"
}
}
}