Compare commits
20 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 3424d15af2 | |||
| 212d5a5125 | |||
| bc7b76075d | |||
| 176cda2c0e | |||
| 93b9408aec | |||
| 6531840e6e | |||
| f871e6782e | |||
| aab79315b4 | |||
| c511ea2eb5 | |||
| 21f14faa06 | |||
| e5fc9a726a | |||
| 4259a86a6b | |||
| aabd478947 | |||
| 3123fc538b | |||
| 1202bb2fe9 | |||
| e5160f5528 | |||
| 1e37135bae | |||
| 1c9291f9bf | |||
| 8dd9410702 | |||
| 844c30604b |
@@ -0,0 +1,91 @@
|
||||
on: push
|
||||
|
||||
jobs:
|
||||
lint:
|
||||
runs-on: ubuntu-latest
|
||||
name: Lint
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Lint shell script
|
||||
uses: azohra/shell-linter@v0.3.0
|
||||
with:
|
||||
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:
|
||||
runs-on: ubuntu-latest
|
||||
name: Publish app
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Publish app
|
||||
uses: ./
|
||||
with:
|
||||
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
|
||||
environment: "production"
|
||||
workingDirectory: 'test'
|
||||
publish_legacy_credentials:
|
||||
runs-on: ubuntu-latest
|
||||
name: Publish app with legacy credentials
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Publish app
|
||||
uses: ./
|
||||
with:
|
||||
apiKey: ${{ secrets.CLOUDFLARE_API_KEY }}
|
||||
email: ${{ secrets.CLOUDFLARE_EMAIL }}
|
||||
environment: "production"
|
||||
workingDirectory: 'test'
|
||||
publish_hardcoded_wrangler_version:
|
||||
runs-on: ubuntu-latest
|
||||
name: Publish app with hardcoded Wrangler version
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Publish app
|
||||
uses: ./
|
||||
with:
|
||||
apiKey: ${{ secrets.CLOUDFLARE_API_KEY }}
|
||||
email: ${{ secrets.CLOUDFLARE_EMAIL }}
|
||||
environment: "production"
|
||||
wranglerVersion: '1.5.0'
|
||||
workingDirectory: 'test'
|
||||
publish_secrets:
|
||||
runs-on: ubuntu-latest
|
||||
name: Publish app with secrets
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Publish app
|
||||
uses: ./
|
||||
with:
|
||||
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
|
||||
environment: "production"
|
||||
workingDirectory: "test"
|
||||
secrets: |
|
||||
SECRET1
|
||||
SECRET2
|
||||
preCommands: echo "*** pre command ***"
|
||||
postCommands: |
|
||||
echo "*** post commands ***"
|
||||
echo "******"
|
||||
env:
|
||||
SECRET1: ${{ secrets.SECRET1 }}
|
||||
SECRET2: ${{ secrets.SECRET2 }}
|
||||
@@ -1,33 +0,0 @@
|
||||
on: push
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
runs-on: ubuntu-latest
|
||||
name: Deploy
|
||||
steps:
|
||||
- uses: actions/checkout@master
|
||||
- name: Lint shell script
|
||||
uses: azohra/shell-linter@v0.1.0
|
||||
with:
|
||||
path: "entrypoint.sh"
|
||||
- name: Publish app with api token
|
||||
uses: signalnerve/wrangler-action@1.1.0
|
||||
with:
|
||||
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
|
||||
environment: "production"
|
||||
workingDirectory: 'test'
|
||||
- name: Publish app with legacy credentials
|
||||
uses: signalnerve/wrangler-action@1.1.0
|
||||
with:
|
||||
apiKey: ${{ secrets.CLOUDFLARE_API_KEY }}
|
||||
email: ${{ secrets.CLOUDFLARE_EMAIL }}
|
||||
environment: "production"
|
||||
workingDirectory: 'test'
|
||||
- name: Publish app with hardcoded Wrangler version
|
||||
uses: signalnerve/wrangler-action@1.1.0
|
||||
with:
|
||||
apiKey: ${{ secrets.CLOUDFLARE_API_KEY }}
|
||||
email: ${{ secrets.CLOUDFLARE_EMAIL }}
|
||||
environment: "production"
|
||||
wranglerVersion: '1.5.0'
|
||||
workingDirectory: 'test'
|
||||
@@ -19,9 +19,9 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
name: Deploy
|
||||
steps:
|
||||
- uses: actions/checkout@master
|
||||
- uses: actions/checkout@v2
|
||||
- name: Publish
|
||||
uses: cloudflare/wrangler-action@1.1.0
|
||||
uses: cloudflare/wrangler-action@1.2.0
|
||||
with:
|
||||
apiToken: ${{ secrets.CF_API_TOKEN }}
|
||||
```
|
||||
@@ -37,7 +37,7 @@ jobs:
|
||||
deploy:
|
||||
name: Deploy
|
||||
steps:
|
||||
uses: cloudflare/wrangler-action@1.1.0
|
||||
uses: cloudflare/wrangler-action@1.2.0
|
||||
with:
|
||||
apiToken: ${{ secrets.CF_API_TOKEN }}
|
||||
```
|
||||
@@ -49,7 +49,7 @@ jobs:
|
||||
deploy:
|
||||
name: Deploy
|
||||
steps:
|
||||
uses: cloudflare/wrangler-action@1.1.0
|
||||
uses: cloudflare/wrangler-action@1.2.0
|
||||
with:
|
||||
apiKey: ${{ secrets.CF_API_KEY }}
|
||||
email: ${{ secrets.CF_EMAIL }}
|
||||
@@ -57,13 +57,13 @@ jobs:
|
||||
|
||||
## Configuration
|
||||
|
||||
If you're using Wrangler's [environments](https://github.com/cloudflare/wrangler/blob/master/docs/content/environments.md) feature, you can customize _where_ the action deploys to by passing an `environment` in the `with` block of your workflow:
|
||||
If you're using Wrangler's [environments](https://developers.cloudflare.com/workers/tooling/wrangler/configuration/environments/) feature, you can customize _where_ the action deploys to by passing an `environment` in the `with` block of your workflow:
|
||||
|
||||
```yaml
|
||||
jobs:
|
||||
deploy:
|
||||
steps:
|
||||
uses: cloudflare/wrangler-action@1.1.0
|
||||
uses: cloudflare/wrangler-action@1.2.0
|
||||
with:
|
||||
apiToken: ${{ secrets.CF_API_TOKEN }}
|
||||
environment: 'production'
|
||||
@@ -75,7 +75,7 @@ If you need to install a specific version of Wrangler to use for deployment, you
|
||||
jobs:
|
||||
deploy:
|
||||
steps:
|
||||
uses: cloudflare/wrangler-action@1.1.0
|
||||
uses: cloudflare/wrangler-action@1.2.0
|
||||
with:
|
||||
apiToken: ${{ secrets.CF_API_TOKEN }}
|
||||
wranglerVersion: '1.6.0'
|
||||
@@ -87,12 +87,58 @@ Optionally, you can also pass a `workingDirectory` key to the action. This will
|
||||
jobs:
|
||||
deploy:
|
||||
steps:
|
||||
uses: cloudflare/wrangler-action@1.1.0
|
||||
uses: cloudflare/wrangler-action@1.2.0
|
||||
with:
|
||||
apiToken: ${{ secrets.CF_API_TOKEN }}
|
||||
workingDirectory: 'subfoldername'
|
||||
```
|
||||
|
||||
[Worker secrets](https://developers.cloudflare.com/workers/tooling/wrangler/secrets/) can be optionally passed as a new line deliminated string of names in `secrets`. Each secret name must match an environment variable name specified in the `env` attribute. Creates or replaces the value for the Worker secret using the `wrangler secret put` command.
|
||||
|
||||
```yaml
|
||||
jobs:
|
||||
deploy:
|
||||
steps:
|
||||
uses: cloudflare/wrangler-action@1.2.0
|
||||
with:
|
||||
apiToken: ${{ secrets.CF_API_TOKEN }}
|
||||
secrets: |
|
||||
SECRET1
|
||||
SECRET2
|
||||
env:
|
||||
SECRET1: ${{ secrets.SECRET1 }}
|
||||
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
|
||||
|
||||
### Deploying when commits are merged to master
|
||||
@@ -112,7 +158,7 @@ jobs:
|
||||
steps:
|
||||
- uses: actions/checkout@master
|
||||
- name: Publish
|
||||
uses: cloudflare/wrangler-action@1.1.0
|
||||
uses: cloudflare/wrangler-action@1.2.0
|
||||
with:
|
||||
apiToken: ${{ secrets.CF_API_TOKEN }}
|
||||
```
|
||||
@@ -135,7 +181,7 @@ jobs:
|
||||
steps:
|
||||
- uses: actions/checkout@master
|
||||
- name: Publish app
|
||||
uses: cloudflare/wrangler-action@1.1.0
|
||||
uses: cloudflare/wrangler-action@1.2.0
|
||||
with:
|
||||
apiToken: ${{ secrets.CF_API_TOKEN }}
|
||||
```
|
||||
@@ -157,7 +203,7 @@ jobs:
|
||||
steps:
|
||||
- uses: actions/checkout@master
|
||||
- name: Publish app
|
||||
uses: cloudflare/wrangler-action@1.1.0
|
||||
uses: cloudflare/wrangler-action@1.2.0
|
||||
with:
|
||||
apiToken: ${{ secrets.CF_API_TOKEN }}
|
||||
```
|
||||
@@ -208,7 +254,7 @@ jobs:
|
||||
- name: Build site
|
||||
run: 'npm run build'
|
||||
- name: Publish
|
||||
uses: cloudflare/wrangler-action@1.1.0
|
||||
uses: cloudflare/wrangler-action@1.2.0
|
||||
with:
|
||||
apiToken: ${{ secrets.CF_API_TOKEN }}
|
||||
```
|
||||
```
|
||||
+18
-6
@@ -1,11 +1,11 @@
|
||||
name: 'Deploy to Cloudflare Workers with Wrangler'
|
||||
name: "Deploy to Cloudflare Workers with Wrangler"
|
||||
branding:
|
||||
icon: 'upload-cloud'
|
||||
color: 'orange'
|
||||
description: 'Deploy your Cloudflare Workers applications and sites directly from GitHub, using Wrangler'
|
||||
icon: "upload-cloud"
|
||||
color: "orange"
|
||||
description: "Deploy your Cloudflare Workers applications and sites directly from GitHub, using Wrangler"
|
||||
runs:
|
||||
using: 'docker'
|
||||
image: 'Dockerfile'
|
||||
using: "docker"
|
||||
image: "Dockerfile"
|
||||
inputs:
|
||||
apiKey:
|
||||
description: "(Legacy) Your Cloudflare API Key"
|
||||
@@ -19,3 +19,15 @@ inputs:
|
||||
description: "The relative path which Wrangler commands should be run from"
|
||||
wranglerVersion:
|
||||
description: "The version of Wrangler you'd like to use to publish your Workers project"
|
||||
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
|
||||
publish:
|
||||
description: "Set to false to skip publishing your Worker project and secrets. Defaults to true."
|
||||
required: false
|
||||
+54
-18
@@ -1,27 +1,36 @@
|
||||
#!/bin/sh
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
export HOME="/github/workspace"
|
||||
export NVM_DIR="/github/workspace/nvm"
|
||||
export WRANGLER_HOME="/github/workspace"
|
||||
|
||||
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.0/install.sh | bash
|
||||
|
||||
# Comments beginning with "shellcheck" use shellcheck, a shell script linter.
|
||||
# The below comments ignore shellcheck linting on the instructions provided
|
||||
# by NVM.
|
||||
|
||||
# shellcheck source=/dev/null
|
||||
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
|
||||
# shellcheck source=/dev/null
|
||||
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"
|
||||
|
||||
mkdir -p "$HOME/.wrangler"
|
||||
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
|
||||
|
||||
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 [ -n "$INPUT_APITOKEN" ]
|
||||
then
|
||||
@@ -70,12 +79,39 @@ then
|
||||
cd "$INPUT_WORKINGDIRECTORY"
|
||||
fi
|
||||
|
||||
# If an environment is detected as input
|
||||
if [ -z "$INPUT_ENVIRONMENT" ]
|
||||
# If precommands is detected as input
|
||||
if [ -n "$INPUT_PRECOMMANDS" ]
|
||||
then
|
||||
wrangler publish
|
||||
else
|
||||
wrangler publish -e "$INPUT_ENVIRONMENT"
|
||||
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.
|
||||
# Skip if publish is set to false.
|
||||
if [ "$INPUT_PUBLISH" != "false" ]
|
||||
then
|
||||
if [ -z "$INPUT_ENVIRONMENT" ]
|
||||
then
|
||||
wrangler publish
|
||||
|
||||
for SECRET in $INPUT_SECRETS; do
|
||||
VALUE=$(printenv "$SECRET") || secret_not_found "$SECRET"
|
||||
echo "$VALUE" | wrangler secret put "$SECRET"
|
||||
done
|
||||
else
|
||||
wrangler publish -e "$INPUT_ENVIRONMENT"
|
||||
|
||||
for SECRET in $INPUT_SECRETS; do
|
||||
VALUE=$(printenv "$SECRET") || secret_not_found "$SECRET"
|
||||
echo "$VALUE" | wrangler secret put "$SECRET" --env "$INPUT_ENVIRONMENT"
|
||||
done
|
||||
fi
|
||||
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
|
||||
|
||||
@@ -4,7 +4,7 @@ import { getAssetFromKV, mapRequestToAsset } from '@cloudflare/kv-asset-handler'
|
||||
* The DEBUG flag will do two things that help during development:
|
||||
* 1. we will skip caching on the edge, which makes it easier to
|
||||
* debug.
|
||||
* 2. we will return an error message on exception in your Response rather
|
||||
* 2. we will return an error message on exception in your response rather
|
||||
* than the default 404.html page.
|
||||
*/
|
||||
const DEBUG = false
|
||||
@@ -34,6 +34,14 @@ async function handleEvent(event) {
|
||||
*/
|
||||
// options.mapRequestToAsset = handlePrefix(/^\/docs/)
|
||||
|
||||
// Path to test secrets passed through Wrangler Action. Create SECRET1 and SECRET2 secrets
|
||||
// in the Action repo to something innocuous like "Hello" and "World!".
|
||||
if (url.pathname === "/secret") {
|
||||
let sec1 = (typeof SECRET1 !== 'undefined') ? SECRET1 : ""
|
||||
let sec2 = (typeof SECRET2 !== 'undefined') ? SECRET2 : ""
|
||||
return new Response(`${sec1} ${sec2}`)
|
||||
}
|
||||
|
||||
try {
|
||||
if (DEBUG) {
|
||||
// customize caching
|
||||
|
||||
Reference in New Issue
Block a user