mirror of
https://github.com/cloudflare/wrangler-action.git
synced 2024-11-22 01:53:24 +01:00
Merge pull request #35 from bradyjoslin/pre-post-commands
Add support for running pre and post commands
This commit is contained in:
commit
3424d15af2
4 changed files with 115 additions and 19 deletions
28
.github/workflows/deploy.yml
vendored
28
.github/workflows/deploy.yml
vendored
|
@ -10,6 +10,28 @@ jobs:
|
||||||
uses: azohra/shell-linter@v0.3.0
|
uses: azohra/shell-linter@v0.3.0
|
||||||
with:
|
with:
|
||||||
path: "entrypoint.sh"
|
path: "entrypoint.sh"
|
||||||
|
build-only:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
name: Only build the app
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: Build app
|
||||||
|
uses: ./
|
||||||
|
with:
|
||||||
|
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
|
||||||
|
workingDirectory: "test"
|
||||||
|
publish: false
|
||||||
|
secrets: |
|
||||||
|
SECRET1
|
||||||
|
SECRET2
|
||||||
|
preCommands: echo "*** pre commands ***"
|
||||||
|
postCommands: |
|
||||||
|
echo "*** post commands ***"
|
||||||
|
wrangler build
|
||||||
|
echo "******"
|
||||||
|
env:
|
||||||
|
SECRET1: ${{ secrets.SECRET1 }}
|
||||||
|
SECRET2: ${{ secrets.SECRET2 }}
|
||||||
publish:
|
publish:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
name: Publish app
|
name: Publish app
|
||||||
|
@ -60,6 +82,10 @@ jobs:
|
||||||
secrets: |
|
secrets: |
|
||||||
SECRET1
|
SECRET1
|
||||||
SECRET2
|
SECRET2
|
||||||
|
preCommands: echo "*** pre command ***"
|
||||||
|
postCommands: |
|
||||||
|
echo "*** post commands ***"
|
||||||
|
echo "******"
|
||||||
env:
|
env:
|
||||||
SECRET1: ${{ secrets.SECRET1 }}
|
SECRET1: ${{ secrets.SECRET1 }}
|
||||||
SECRET2: ${{ secrets.SECRET2 }}
|
SECRET2: ${{ secrets.SECRET2 }}
|
31
README.md
31
README.md
|
@ -110,6 +110,35 @@ jobs:
|
||||||
SECRET2: ${{ secrets.SECRET2 }}
|
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 "******"
|
||||||
|
```
|
||||||
|
|
||||||
|
Set the optional `publish` input to false to skip publishing your Worker project and secrets. Useful in conjunction with pre and post commands. For example, if you only wanted to run `wrangler build` against your project:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
jobs:
|
||||||
|
deploy:
|
||||||
|
steps:
|
||||||
|
uses: cloudflare/wrangler-action@1.2.0
|
||||||
|
with:
|
||||||
|
apiToken: ${{ secrets.CF_API_TOKEN }}
|
||||||
|
publish: false
|
||||||
|
preCommands: wrangler build
|
||||||
|
```
|
||||||
|
|
||||||
## Use cases
|
## Use cases
|
||||||
|
|
||||||
### Deploying when commits are merged to master
|
### Deploying when commits are merged to master
|
||||||
|
@ -228,4 +257,4 @@ jobs:
|
||||||
uses: cloudflare/wrangler-action@1.2.0
|
uses: cloudflare/wrangler-action@1.2.0
|
||||||
with:
|
with:
|
||||||
apiToken: ${{ secrets.CF_API_TOKEN }}
|
apiToken: ${{ secrets.CF_API_TOKEN }}
|
||||||
```
|
```
|
|
@ -22,3 +22,12 @@ inputs:
|
||||||
secrets:
|
secrets:
|
||||||
description: "A new line deliminated string of environment variable names that should be configured as Worker secrets"
|
description: "A new line deliminated string of environment variable names that should be configured as Worker secrets"
|
||||||
required: false
|
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
|
||||||
|
publish:
|
||||||
|
description: "Set to false to skip publishing your Worker project and secrets. Defaults to true."
|
||||||
|
required: false
|
|
@ -1,4 +1,4 @@
|
||||||
#!/bin/sh
|
#!/bin/bash
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
|
@ -10,6 +10,27 @@ chmod -R 770 "$HOME/.wrangler"
|
||||||
|
|
||||||
export API_CREDENTIALS=""
|
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
|
||||||
|
|
||||||
|
eval "${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 an API token is detected as input
|
||||||
if [ -n "$INPUT_APITOKEN" ]
|
if [ -n "$INPUT_APITOKEN" ]
|
||||||
then
|
then
|
||||||
|
@ -58,28 +79,39 @@ then
|
||||||
cd "$INPUT_WORKINGDIRECTORY"
|
cd "$INPUT_WORKINGDIRECTORY"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
secret_not_found() {
|
# If precommands is detected as input
|
||||||
echo "::error::Specified secret \"$1\" not found in environment variables."
|
if [ -n "$INPUT_PRECOMMANDS" ]
|
||||||
exit 1
|
then
|
||||||
}
|
execute_commands "$INPUT_PRECOMMANDS"
|
||||||
|
fi
|
||||||
|
|
||||||
# If an environment is detected as input, for each secret specified get the value of
|
# 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.
|
# the matching named environment variable then configure using wrangler secret put.
|
||||||
if [ -z "$INPUT_ENVIRONMENT" ]
|
# Skip if publish is set to false.
|
||||||
|
if [ "$INPUT_PUBLISH" != "false" ]
|
||||||
then
|
then
|
||||||
wrangler publish
|
if [ -z "$INPUT_ENVIRONMENT" ]
|
||||||
|
then
|
||||||
|
wrangler publish
|
||||||
|
|
||||||
for SECRET in $INPUT_SECRETS; do
|
for SECRET in $INPUT_SECRETS; do
|
||||||
VALUE=$(printenv "$SECRET") || secret_not_found "$SECRET"
|
VALUE=$(printenv "$SECRET") || secret_not_found "$SECRET"
|
||||||
echo "$VALUE" | wrangler secret put "$SECRET"
|
echo "$VALUE" | wrangler secret put "$SECRET"
|
||||||
done
|
done
|
||||||
else
|
else
|
||||||
wrangler publish -e "$INPUT_ENVIRONMENT"
|
wrangler publish -e "$INPUT_ENVIRONMENT"
|
||||||
|
|
||||||
for SECRET in $INPUT_SECRETS; do
|
for SECRET in $INPUT_SECRETS; do
|
||||||
VALUE=$(printenv "$SECRET") || secret_not_found "$SECRET"
|
VALUE=$(printenv "$SECRET") || secret_not_found "$SECRET"
|
||||||
echo "$VALUE" | wrangler secret put "$SECRET" --env "$INPUT_ENVIRONMENT"
|
echo "$VALUE" | wrangler secret put "$SECRET" --env "$INPUT_ENVIRONMENT"
|
||||||
done
|
done
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# If postcommands is detected as input
|
||||||
|
if [ -n "$INPUT_POSTCOMMANDS" ]
|
||||||
|
then
|
||||||
|
execute_commands "$INPUT_POSTCOMMANDS"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# If a working directory is detected as input, revert to the
|
# If a working directory is detected as input, revert to the
|
||||||
|
|
Loading…
Reference in a new issue