From 8978b3b2b09cd945255b0b2abf10baacb90ed1be Mon Sep 17 00:00:00 2001 From: syumai Date: Sun, 30 Apr 2023 11:52:54 +0900 Subject: [PATCH] add worker-tinygo template --- .../cloudflare/worker-tinygo/.gitignore | 1 + _templates/cloudflare/worker-tinygo/Makefile | 12 +++++ _templates/cloudflare/worker-tinygo/README.md | 53 +++++++++++++++++++ _templates/cloudflare/worker-tinygo/main.go | 19 +++++++ .../cloudflare/worker-tinygo/wrangler.toml | 9 ++++ 5 files changed, 94 insertions(+) create mode 100644 _templates/cloudflare/worker-tinygo/.gitignore create mode 100644 _templates/cloudflare/worker-tinygo/Makefile create mode 100644 _templates/cloudflare/worker-tinygo/README.md create mode 100644 _templates/cloudflare/worker-tinygo/main.go create mode 100644 _templates/cloudflare/worker-tinygo/wrangler.toml diff --git a/_templates/cloudflare/worker-tinygo/.gitignore b/_templates/cloudflare/worker-tinygo/.gitignore new file mode 100644 index 0000000..c795b05 --- /dev/null +++ b/_templates/cloudflare/worker-tinygo/.gitignore @@ -0,0 +1 @@ +build \ No newline at end of file diff --git a/_templates/cloudflare/worker-tinygo/Makefile b/_templates/cloudflare/worker-tinygo/Makefile new file mode 100644 index 0000000..f185118 --- /dev/null +++ b/_templates/cloudflare/worker-tinygo/Makefile @@ -0,0 +1,12 @@ +.PHONY: dev +dev: + wrangler dev + +.PHONY: build +build: + go run github.com/syumai/workers/cmd/workers-assets-gen@latest + tinygo build -o ./build/app.wasm -target wasm ./... + +.PHONY: publish +publish: + wrangler publish diff --git a/_templates/cloudflare/worker-tinygo/README.md b/_templates/cloudflare/worker-tinygo/README.md new file mode 100644 index 0000000..7299824 --- /dev/null +++ b/_templates/cloudflare/worker-tinygo/README.md @@ -0,0 +1,53 @@ +# worker-template-tinygo + +- A template for starting a Cloudflare Worker project with tinygo. +- This template uses [`workers`](https://github.com/syumai/workers) package to run an HTTP server. + +## Usage + +- `main.go` includes simple HTTP server implementation. Feel free to edit this code and implement your own HTTP server. + +## Requirements + +- Node.js +- [wrangler](https://developers.cloudflare.com/workers/wrangler/) + - just run `npm install -g wrangler` +- tinygo + +## Getting Started + +``` +$ wrangler generate my-app syumai/workers/_templates/cloudflare/worker-tinygo +$ cd my-app +$ go mod init +$ go mod tidy +$ make dev # start running dev server +$ curl http://localhost:8787/hello +Hello! +``` + +- To change worker name, please edit `name` property in `wrangler.toml`. + +## Development + +### Commands + +``` +make dev # run dev server +make build # build Go Wasm binary +make publish # publish worker +``` + +### Testing dev server + +- Just send HTTP request using some tools like curl. + +``` +$ curl http://localhost:8787/hello +Hello! +``` + +``` +$ curl -X POST -d "test message" http://localhost:8787/echo +test message +``` diff --git a/_templates/cloudflare/worker-tinygo/main.go b/_templates/cloudflare/worker-tinygo/main.go new file mode 100644 index 0000000..936aa9c --- /dev/null +++ b/_templates/cloudflare/worker-tinygo/main.go @@ -0,0 +1,19 @@ +package main + +import ( + "io" + "net/http" + + "github.com/syumai/workers" +) + +func main() { + http.HandleFunc("/hello", func(w http.ResponseWriter, req *http.Request) { + msg := "Hello!" + w.Write([]byte(msg)) + }) + http.HandleFunc("/echo", func(w http.ResponseWriter, req *http.Request) { + io.Copy(w, req.Body) + }) + workers.Serve(nil) // use http.DefaultServeMux +} diff --git a/_templates/cloudflare/worker-tinygo/wrangler.toml b/_templates/cloudflare/worker-tinygo/wrangler.toml new file mode 100644 index 0000000..e5a3bdc --- /dev/null +++ b/_templates/cloudflare/worker-tinygo/wrangler.toml @@ -0,0 +1,9 @@ +name = "tinygo-worker" +main = "./build/worker.mjs" +compatibility_date = "2022-05-13" +compatibility_flags = [ + "streams_enable_constructors" +] + +[build] +command = "make build"