Compare commits

..

28 Commits

Author SHA1 Message Date
Adam Janiš 6f62debcf8 Merge pull request #56 from ItalyPaleAle/patch-1
Update Node.js to 16
2022-03-15 12:30:29 +01:00
Kristian Freeman 006366c1ae Merge pull request #46 from whoabuddy/patch-1
Update README.md release version
2021-07-19 10:19:25 -05:00
Alessandro (Ale) Segala 95ac136231 Update Node.js to 16 2021-05-12 22:21:56 -07:00
Jason Schrader a33b48c9fe Update README.md release version
This change updates the release version for cloudflare/wrangler-action in all examples from `1.2.0` to `1.3.0`.

It also corrects a typo on the last example changing `TOML` to `YAML` based on the code below it.
2020-11-13 07:56:23 -07:00
Kristian Freeman 60c377d0bf Merge pull request #42 from Indigenuity/master
Suggest workflow_dispatch for manual deploys
2020-09-16 12:46:23 -05:00
Kristian Freeman 39c3d279a1 Merge pull request #43 from chromy/patch-1
Update Readme to reference v1.3.0
2020-09-16 12:45:29 -05:00
Hector Dearman 8df5ab90b3 Update Readme to reference v1.3.0
The readme mentions v1.2.0 but some of the commands (for example publish)
are only present in v1.3.0. Update readme to use v1.3.0 instead.
2020-09-11 22:05:51 +01:00
JD Kemsley f4e53e2753 Suggest workflow_dispatch for manual deploys 2020-09-11 12:53:43 -05:00
Kristian Freeman 3424d15af2 Merge pull request #35 from bradyjoslin/pre-post-commands
Add support for running pre and post commands
2020-08-21 11:31:16 -05:00
Brady Joslin 212d5a5125 eval the input command 2020-08-13 00:12:47 -05:00
Joslin, Brady W (Brady) bc7b76075d update explanation of publish option 2020-08-11 22:53:34 -05:00
Joslin, Brady W (Brady) 176cda2c0e add ability to skip publish 2020-08-11 22:46:42 -05:00
Joslin, Brady W (Brady) 93b9408aec pre-post-commands 2020-08-07 16:36:37 -05:00
Avery Harnish 6531840e6e Merge pull request #32 from jbampton/fix-word-case
Fix word case
2020-07-02 10:07:55 -05:00
John Bampton f871e6782e Fix word case 2020-07-02 17:17:05 +10:00
Kristian Freeman aab79315b4 Merge pull request #30 from bradyjoslin/patch-1
update secrets example in readme
2020-06-29 09:29:28 -05:00
Brady Joslin c511ea2eb5 Update README.md 2020-06-27 10:38:37 -05:00
Kristian Freeman 21f14faa06 Bump version in README 2020-06-22 10:32:48 -05:00
Kristian Freeman e5fc9a726a Merge pull request #28 from bradyjoslin/master
add secrets publishing
2020-06-22 10:27:18 -05:00
Brady Joslin 4259a86a6b Update deploy.yml 2020-06-22 10:02:00 -05:00
Joslin, Brady W (Brady) aabd478947 update test worker for testing secrets 2020-06-22 09:35:46 -05:00
Joslin, Brady W (Brady) 3123fc538b add secrets publishing 2020-06-15 23:09:55 -05:00
Jason Gill 1202bb2fe9 Remove nvm to speed build time
The Dockerfile already pulls the node:12 image, so there's no need for NVM to be downloaded and installed as well. Removing this speeds up the image build time (making Github Actions go faster)
2020-05-05 13:31:27 -05:00
Kristian Freeman e5160f5528 Merge pull request #14 from cloudflare/kristian/workflow
re-add GitHub Actions workflow
2020-05-05 13:01:29 -05:00
Kristian Freeman 1e37135bae Update workflow and separate into multiple jobs 2020-05-05 12:52:41 -05:00
Kristian Freeman 1c9291f9bf Merge pull request #23 from mscoutermarsh/patch-1
Improvements to the readme
2020-04-06 10:59:14 -05:00
Mike Coutermarsh 8dd9410702 Improvements to the readme
Setting checkout to V2 and fixing the environment link
2020-04-04 20:57:36 -07:00
Kristian Freeman 844c30604b Add workflow 2019-12-13 15:29:17 -06:00
7 changed files with 241 additions and 96 deletions
+91
View File
@@ -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 }}
-33
View File
@@ -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'
+1 -1
View File
@@ -1,4 +1,4 @@
FROM node:12
FROM node:16
ENV XDG_CONFIG_HOME /github/workspace
ENV WRANGLER_HOME /github/workspace
COPY entrypoint.sh /entrypoint.sh
+68 -37
View File
@@ -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.3.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.3.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.3.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.3.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.3.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.3.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.3.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.3.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.3.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.3.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.3.0
with:
apiToken: ${{ secrets.CF_API_TOKEN }}
```
@@ -144,12 +190,16 @@ If you need help defining the correct cron syntax, check out [crontab.guru](http
### Deploying on a "dispatched" event
If you need to trigger a deployment at-will, you can use GitHub's API to fire a `repository_dispatch` event on your repository. By setting your workflow to trigger on that event, you'll be able to deploy your application via an API call:
If you need to trigger a workflow at-will, you can use GitHub's `workflow_dispatch` [event](https://docs.github.com/en/actions/reference/events-that-trigger-workflows#workflow_dispatch) in your workflow file. By setting your workflow to trigger on that event, you'll be able to deploy your application via the GitHub UI. The UI also accepts inputs that can be used to configure the action :
```yaml
on:
repository_dispatch:
workflow_dispatch:
inputs:
environment:
description: 'Choose an environment to deploy to: <dev|staging|prod>'
required: true
default: 'dev'
jobs:
deploy:
runs-on: ubuntu-latest
@@ -157,32 +207,13 @@ jobs:
steps:
- uses: actions/checkout@master
- name: Publish app
uses: cloudflare/wrangler-action@1.1.0
uses: cloudflare/wrangler-action@1.3.0
with:
apiToken: ${{ secrets.CF_API_TOKEN }}
environment: ${{ github.event.inputs.environment }}
```
To make the GitHub API request, you can deploy a custom [Cloudflare Workers](https://workers.cloudflare.com) function, which will send a `POST` request to GitHub's API and trigger a new deploy:
```js
const headers = {
Accept: 'application/vnd.github.everest-preview+json',
Authorization: 'Bearer $token',
}
const body = JSON.stringify({ event_type: 'repository_dispatch' })
const url = `https://api.github.com/repos/$owner/$repo/dispatches`
const handleRequest = async evt => {
await fetch(url, { method: 'POST', headers, body })
return new Response('OK')
}
addEventListener('fetch', handleRequest)
```
Note that `$token` in this code sample is a GitHub "Personal Access Token". For information on how to generate this token, see the [GitHub documentation on "repository_dispatch"](https://developer.github.com/v3/repos/#create-a-repository-dispatch-event).
For more advanced usage or to programmatically trigger the workflow from scripts, check out [the docs](https://docs.github.com/en/rest/reference/actions#create-a-workflow-dispatch-event) for making API calls
## Troubleshooting
@@ -196,7 +227,7 @@ No problem! Check out the [Quick Start guide](https://developers.cloudflare.com/
To deploy static sites and frontend applications to Workers, check out the documentation for [Workers Sites](https://developers.cloudflare.com/workers/sites).
Note that this action makes no assumptions about _how_ your project is built! **If you need to run a pre-publish step, like building your application, you need to specify a build step in your Workflow.** For instance, if I have an NPM command called `build`, my workflow TOML might resemble the following:
Note that this action makes no assumptions about _how_ your project is built! **If you need to run a pre-publish step, like building your application, you need to specify a build step in your Workflow.** For instance, if I have an NPM command called `build`, my workflow YAML might resemble the following:
```yaml
jobs:
@@ -208,7 +239,7 @@ jobs:
- name: Build site
run: 'npm run build'
- name: Publish
uses: cloudflare/wrangler-action@1.1.0
uses: cloudflare/wrangler-action@1.3.0
with:
apiToken: ${{ secrets.CF_API_TOKEN }}
```
+18 -6
View File
@@ -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
View File
@@ -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
+9 -1
View File
@@ -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