diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 1140052..7f4468d 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -60,6 +60,11 @@ jobs: secrets: | SECRET1 SECRET2 + preCommands: echo "*** pre command ***" + postCommands: | + echo "*** post commands ***" + wrangler build + echo "******" env: SECRET1: ${{ secrets.SECRET1 }} - SECRET2: ${{ secrets.SECRET2 }} + SECRET2: ${{ secrets.SECRET2 }} \ No newline at end of file diff --git a/README.md b/README.md index 4fc6530..7325925 100644 --- a/README.md +++ b/README.md @@ -110,6 +110,22 @@ jobs: SECRET2: ${{ secrets.SECRET2 }} ``` +If you need to run additional shell commands before or after `wrangler publish`, you can specify them as input to `preCommands` (before publish) or `postCommands` (after publish). These can include additional `wrangler` commands (i.e. `build`, `kv:key put`) or any other commands available inside the `wrangler-action` context. + +```yaml +jobs: + deploy: + steps: + uses: cloudflare/wrangler-action@1.2.0 + with: + apiToken: ${{ secrets.CF_API_TOKEN }} + preCommands: echo "*** pre command ***" + postCommands: | + echo "*** post commands ***" + wrangler kv:key put --binding=MY_KV key2 value2 + echo "******" +``` + ## Use cases ### Deploying when commits are merged to master @@ -228,4 +244,4 @@ jobs: uses: cloudflare/wrangler-action@1.2.0 with: apiToken: ${{ secrets.CF_API_TOKEN }} -``` +``` \ No newline at end of file diff --git a/action.yml b/action.yml index 57d8764..dbc4df7 100644 --- a/action.yml +++ b/action.yml @@ -22,3 +22,9 @@ inputs: secrets: description: "A new line deliminated string of environment variable names that should be configured as Worker secrets" required: false + preCommands: + description: "Commands to execute before publishing the Workers project" + required: false + postCommands: + description: "Commands to execute after publishing the Workers project" + required: false diff --git a/entrypoint.sh b/entrypoint.sh index ffa0580..6ccda21 100755 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash set -e @@ -10,6 +10,27 @@ chmod -R 770 "$HOME/.wrangler" export API_CREDENTIALS="" +# Used to execute any specified pre and post commands +execute_commands() { + COMMANDS=$1 + while IFS= read -r COMMAND; do + CHUNKS=() + + for CHUNK in $COMMAND; do + CHUNKS+=("$CHUNK") + done + + "${CHUNKS[@]}" + + CHUNKS=() + done <<< "$COMMANDS" +} + +secret_not_found() { + echo "::error::Specified secret \"$1\" not found in environment variables." + exit 1 +} + # If an API token is detected as input if [ -n "$INPUT_APITOKEN" ] then @@ -58,10 +79,11 @@ then cd "$INPUT_WORKINGDIRECTORY" fi -secret_not_found() { - echo "::error::Specified secret \"$1\" not found in environment variables." - exit 1 -} +# If precommands is detected as input +if [ -n "$INPUT_PRECOMMANDS" ] +then + execute_commands "$INPUT_PRECOMMANDS" +fi # If an environment is detected as input, for each secret specified get the value of # the matching named environment variable then configure using wrangler secret put. @@ -82,6 +104,12 @@ else done fi +# If postcommands is detected as input +if [ -n "$INPUT_POSTCOMMANDS" ] +then + execute_commands "$INPUT_POSTCOMMANDS" +fi + # If a working directory is detected as input, revert to the # original directory before continuing with the workflow if [ -n "$INPUT_WORKINGDIRECTORY" ]