mirror of
https://github.com/dagger/dagger-for-github.git
synced 2025-12-31 12:49:46 +11:00
Proper support for shell input (#189)
* add options for shell Signed-off-by: kpenfound <kyle@dagger.io> assemble dagger command in new step with output Signed-off-by: kpenfound <kyle@dagger.io> fixing some inline bash Signed-off-by: kpenfound <kyle@dagger.io> wrap conditional inputs in quotes Signed-off-by: kpenfound <kyle@dagger.io> use cat for heredoc script file Signed-off-by: kpenfound <kyle@dagger.io> missing space in heredoc Signed-off-by: kpenfound <kyle@dagger.io> add tab ignore and dagger shebang Signed-off-by: kpenfound <kyle@dagger.io> use toJson and jq to safely write the shell input to a file Signed-off-by: kpenfound <kyle@dagger.io> put DAGGER_COMMAND in a variable Signed-off-by: kpenfound <kyle@dagger.io> missing semicolon for the dagger command Signed-off-by: kpenfound <kyle@dagger.io> safely evaluate if shell is set Signed-off-by: kpenfound <kyle@dagger.io> extra > in shell file write Signed-off-by: kpenfound <kyle@dagger.io> add some logging Signed-off-by: kpenfound <kyle@dagger.io> strip extra newline from jq when shell is not set Signed-off-by: kpenfound <kyle@dagger.io> debugging Signed-off-by: kpenfound <kyle@dagger.io> toJSON and jq will send null instead of empty string with no input Signed-off-by: kpenfound <kyle@dagger.io> safely handle all inputs Signed-off-by: kpenfound <kyle@dagger.io> did i fix the wrong thing? Signed-off-by: kpenfound <kyle@dagger.io> change up the approach a bit for an easier diff Signed-off-by: kpenfound <kyle@dagger.io> fix shell test Signed-off-by: kpenfound <kyle@dagger.io> single quotes around shell input Signed-off-by: kpenfound <kyle@dagger.io> try with piped input Signed-off-by: kpenfound <kyle@dagger.io> try single quotes again Signed-off-by: kpenfound <kyle@dagger.io> debug Signed-off-by: kpenfound <kyle@dagger.io> debug Signed-off-by: kpenfound <kyle@dagger.io> fix shell test Signed-off-by: kpenfound <kyle@dagger.io> does shell emit a newline? Signed-off-by: kpenfound <kyle@dagger.io> remove the trailing newline if its in stdout Signed-off-by: kpenfound <kyle@dagger.io> break the trailing output test Signed-off-by: kpenfound <kyle@dagger.io> fix shell test Signed-off-by: kpenfound <kyle@dagger.io> missed ! Signed-off-by: kpenfound <kyle@dagger.io> add comment about weird test Signed-off-by: kpenfound <kyle@dagger.io> * use echo -n in shell test Signed-off-by: kpenfound <kyle@dagger.io> --------- Signed-off-by: kpenfound <kyle@dagger.io>
This commit is contained in:
parent
710906f307
commit
4e0ad19142
3 changed files with 58 additions and 7 deletions
23
.github/workflows/test.yml
vendored
23
.github/workflows/test.yml
vendored
|
|
@ -120,7 +120,6 @@ jobs:
|
|||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
version:
|
||||
runs-on: "ubuntu-latest"
|
||||
steps:
|
||||
|
|
@ -219,6 +218,27 @@ jobs:
|
|||
exit 1
|
||||
fi
|
||||
|
||||
shell:
|
||||
runs-on: "ubuntu-latest"
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: "Test shell"
|
||||
id: test-shell
|
||||
uses: ./
|
||||
with:
|
||||
shell: 'container | from alpine | with-exec echo,-n,"hello world!" | stdout'
|
||||
- name: "Test shell (check)"
|
||||
run: |
|
||||
target='${{ steps.test-shell.outputs.output }}'
|
||||
result='hello world!'
|
||||
if [[ "$target" == "$result" ]]; then
|
||||
echo "matches"
|
||||
exit 0
|
||||
else
|
||||
echo "does not match"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
nocall:
|
||||
runs-on: "ubuntu-latest"
|
||||
steps:
|
||||
|
|
@ -228,4 +248,3 @@ jobs:
|
|||
- name: "Test Install"
|
||||
run: |
|
||||
dagger core version
|
||||
|
||||
|
|
|
|||
15
README.md
15
README.md
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
## Usage Examples
|
||||
|
||||
### `dagger call` (default)
|
||||
### `dagger call`
|
||||
|
||||
```yaml
|
||||
- name: Hello
|
||||
|
|
@ -14,6 +14,16 @@
|
|||
version: "latest" # semver x.y.z
|
||||
```
|
||||
|
||||
### `dagger shell`
|
||||
|
||||
```yaml
|
||||
- name: Hello
|
||||
uses: dagger/dagger-for-github@8.0.0
|
||||
with:
|
||||
shell: container | from alpine | with-exec echo,"hello, world!" | stdout
|
||||
cloud-token: ${{ secrets.DAGGER_CLOUD_TOKEN }}
|
||||
```
|
||||
|
||||
### `dagger run`
|
||||
|
||||
```yaml
|
||||
|
|
@ -43,5 +53,6 @@ By setting the version to `latest`, this action will install the latest version
|
|||
| `cloud-token` | Dagger Cloud Token | false | '' |
|
||||
| `module` | Dagger module to call. Local or Git | false | '' |
|
||||
| `args` | Arguments to pass to CLI | false | '' |
|
||||
| `call` | Arguments to pass to CLI (Alias for args) | false | '' |
|
||||
| `call` | Arguments to pass to CLI (Alias for args with verb:call) | false | '' |
|
||||
| `shell` | Arguments to pass to CLI (Alias for args with verb:shell) | false | '' |
|
||||
| `engine-stop` | Whether to stop the Dagger Engine after this run | false | 'true' |
|
||||
|
|
|
|||
27
action.yml
27
action.yml
|
|
@ -40,6 +40,10 @@ inputs:
|
|||
description: "Function and arguments for dagger call"
|
||||
required: false
|
||||
default: ""
|
||||
shell:
|
||||
description: "Function and arguments for dagger shell"
|
||||
required: false
|
||||
default: ""
|
||||
outputs:
|
||||
output:
|
||||
description: "Job output"
|
||||
|
|
@ -75,8 +79,25 @@ runs:
|
|||
curl -fsS https://dl.dagger.io/dagger/install.sh \
|
||||
| BIN_DIR=${prefix_dir}/bin DAGGER_VERSION="$VERSION" DAGGER_COMMIT="$COMMIT" sh
|
||||
|
||||
- id: assemble
|
||||
if: inputs.call != '' || inputs.shell != '' || inputs.args != ''
|
||||
shell: bash
|
||||
env:
|
||||
INPUT_MODULE: ${{ inputs.module }}
|
||||
run: |
|
||||
verb=${{ inputs.verb }}
|
||||
shell=$(echo '${{ toJSON(inputs.shell) }}' | jq -rj .)
|
||||
if [[ -n "${{ inputs.call }}" ]]; then
|
||||
verb="call"
|
||||
elif [[ "$shell" != "" ]]; then
|
||||
verb=""
|
||||
script=$(mktemp)
|
||||
printf '%s' "$shell" > $script
|
||||
fi
|
||||
echo "script=$script" >> "$GITHUB_OUTPUT"
|
||||
echo "verb=$verb" >> "$GITHUB_OUTPUT"
|
||||
- id: exec
|
||||
if: inputs.call != '' || inputs.args != ''
|
||||
if: inputs.call != '' || inputs.shell != '' || inputs.args != ''
|
||||
shell: bash
|
||||
env:
|
||||
INPUT_MODULE: ${{ inputs.module }}
|
||||
|
|
@ -87,9 +108,9 @@ runs:
|
|||
DAGGER_CLOUD_TOKEN=${{ inputs.cloud-token }} \
|
||||
dagger \
|
||||
${{ inputs.dagger-flags }} \
|
||||
${{ inputs.verb }} \
|
||||
${{ steps.assemble.outputs.verb }} \
|
||||
${INPUT_MODULE:+-m $INPUT_MODULE} \
|
||||
${{ inputs.args || inputs.call }}; } 1> >(tee "${tmpout}") 2> >(tee "${tmperr}" >&2)
|
||||
${{ inputs.args || inputs.call || steps.assemble.outputs.script }}; } 1> >(tee "${tmpout}") 2> >(tee "${tmperr}" >&2)
|
||||
|
||||
{
|
||||
# we need a delim that doesn't appear in the output - a hash of the
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue