Merge pull request #47 from syumai/move-templates

move templates into workers repository
This commit is contained in:
syumai 2023-04-30 12:15:46 +09:00 committed by GitHub
commit 119ede3b02
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 222 additions and 4 deletions

View File

@ -60,8 +60,28 @@ func main() {
For concrete examples, see `examples` directory.
Currently, all examples use tinygo instead of Go due to binary size issues.
A template repository is also available.
* https://github.com/syumai/worker-template-tinygo
## Quick Start
First, please install the following tools:
* Node.js (and npm)
* [wrangler](https://developers.cloudflare.com/workers/wrangler/)
- You can install it by running `npm install -g wrangler`.
* tinygo
After installation, please run the following commands.
```console
$ 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!
```
If you want a more detailed description, please refer to the README.md file in the generated directory.
## FAQ
@ -73,9 +93,9 @@ To deploy a Worker, the following steps are required.
* Build a Wasm binary.
* Upload a Wasm binary with a JavaScript code to load and instantiate Wasm (for entry point).
The [worker-template-tinygo](https://github.com/syumai/worker-template-tinygo) repository contains all the required files, so I recommend using this template.
The [worker-tinygo template](https://github.com/syumai/workers/tree/main/_templates/cloudflare/worker-tinygo) contains all the required files, so I recommend using this template.
The [worker-template-go](https://github.com/syumai/worker-template-go) repository (using regular Go, not tinygo) is also available, but it requires a paid plan of Cloudflare Workers (due to the large binary size).
The [worker-go template](https://github.com/syumai/workers/tree/main/_templates/cloudflare/worker-go) (using regular Go, not tinygo) is also available, but it requires a paid plan of Cloudflare Workers (due to the large binary size).
### Where can I have discussions about contributions, or ask questions about how to use the library?

View File

@ -0,0 +1 @@
build

View File

@ -0,0 +1,12 @@
.PHONY: dev
dev:
wrangler dev
.PHONY: build
build:
go run github.com/syumai/workers/cmd/workers-assets-gen@latest -mode=go
GOOS=js GOARCH=wasm go build -o ./build/app.wasm .
.PHONY: publish
publish:
wrangler publish

View File

@ -0,0 +1,58 @@
# worker-template-go
- A template for starting a Cloudflare Worker project with Go.
- This template uses [`workers`](https://github.com/syumai/workers) package to run an HTTP server.
## Notice
- A free plan Cloudflare Workers only accepts ~1MB sized workers.
- Go Wasm binaries easily exceeds this limit, so **you'll need to use a paid plan of Cloudflare Workers** (which accepts ~5MB sized workers).
## 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`
- Go
## Getting Started
```
$ wrangler generate my-app syumai/workers/_templates/cloudflare/worker-go
$ 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
```

View File

@ -0,0 +1,24 @@
package main
import (
"bytes"
"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) {
b, err := io.ReadAll(req.Body)
if err != nil {
panic(err)
}
io.Copy(w, bytes.NewReader(b))
})
workers.Serve(nil) // use http.DefaultServeMux
}

View File

@ -0,0 +1,9 @@
name = "go-worker"
main = "./build/worker.mjs"
compatibility_date = "2022-11-19"
compatibility_flags = [
"streams_enable_constructors"
]
[build]
command = "make build"

View File

@ -0,0 +1 @@
build

View File

@ -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

View File

@ -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
```

View File

@ -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
}

View File

@ -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"