Skip to content

Commit

Permalink
Merge pull request #118 from vhespanha/fix-issue-49
Browse files Browse the repository at this point in the history
add template for cron jobs creation (issue 49)
  • Loading branch information
syumai authored Jun 26, 2024
2 parents 6d31376 + 2a97a83 commit e5ed933
Show file tree
Hide file tree
Showing 14 changed files with 240 additions and 0 deletions.
3 changes: 3 additions & 0 deletions _templates/cloudflare/cron-go/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
build
node_modules
.wrangler
12 changes: 12 additions & 0 deletions _templates/cloudflare/cron-go/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
.PHONY: dev
dev:
wrangler dev

.PHONY: build
build:
go run github.com/syumai/workers/cmd/[email protected] -mode=go
GOOS=js GOARCH=wasm go build -o ./build/app.wasm .

.PHONY: deploy
deploy:
wrangler deploy
61 changes: 61 additions & 0 deletions _templates/cloudflare/cron-go/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
# cron-job-template-go

- A template for starting a Cloudflare Worker project with a cron job using Go.
- This template uses the [workers](https://github.com/syumai/workers) package to schedule and run cron jobs.

## Notice

- A free plan Cloudflare Workers only accepts ~1MB sized workers.
- Go Wasm binaries easily exceed this limit, so _you'll need to use a paid plan of Cloudflare Workers_ (which accepts ~5MB sized workers).
- There's also a TinyGo version of this that can be found [here](https://github.com/syumai/workers/tree/main/_templates/cloudflare/cron-tinygo).

## Usage

- `main.go` includes a simple cron job implementation. Feel free to edit this code and implement your own cron job logic.

## Requirements

- Node.js
- [wrangler](https://developers.cloudflare.com/workers/wrangler/)
- Just run `npm install -g wrangler`
- Go 1.21.0 or later

## Getting Started

- If not already installed, please install the [gonew](https://pkg.go.dev/golang.org/x/tools/cmd/gonew) command.

```console
go install golang.org/x/tools/cmd/gonew@latest
```

- Create a new project using this template.
- The second argument passed to `gonew` is the module path of your new app.

```console
gonew github.com/syumai/workers/_templates/cloudflare/cron-go your.module/my-app # e.g. github.com/syumai/my-app
cd my-app
go mod tidy
make dev # start running dev server
```

- To change the worker name, please edit the `name` property in `wrangler.toml`.

## Development

### Commands

```console
make dev # run dev server
make build # build Go Wasm binary
make deploy # deploy worker
```

### Testing the Dev Server

- To test the cron job, you can simulate the cron event by sending an HTTP request to the dev server.

```console
curl -X POST http://localhost:8787/cron
```

- You should see the scheduled time printed in the console.
7 changes: 7 additions & 0 deletions _templates/cloudflare/cron-go/go.mod
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
module github.com/syumai/workers/_templates/cloudflare/cron-go

go 1.21.3

toolchain go1.22.4

require github.com/syumai/workers v0.26.1
2 changes: 2 additions & 0 deletions _templates/cloudflare/cron-go/go.sum
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
github.com/syumai/workers v0.26.1 h1:DvhLZ4PPO/zu5leYRd85TnHELOBTkBbi/2ymkLOieSY=
github.com/syumai/workers v0.26.1/go.mod h1:ZnqmdiHNBrbxOLrZ/HJ5jzHy6af9cmiNZk10R9NrIEA=
25 changes: 25 additions & 0 deletions _templates/cloudflare/cron-go/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package main

import (
"context"
"fmt"
"log"
"time"

"github.com/syumai/workers/cloudflare/cron"
)

func task(ctx context.Context) error {
e, err := cron.NewEvent(ctx)
if err != nil {
return fmt.Errorf("failed to create cron event: %w", err)
}
log.Printf("Cron job triggered at: %s", time.Unix(e.ScheduledTime.Unix(), 0).Format(time.RFC3339))
log.Println("Executing scheduled task...")
return nil
}

func main() {
cron.ScheduleTask(task)
select {}
}
10 changes: 10 additions & 0 deletions _templates/cloudflare/cron-go/wrangler.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
name = "go-cron"
main = "./build/worker.mjs"
compatibility_date = "2023-02-24"
workers_dev = false

[triggers]
crons = ["* * * * *"]

[build]
command = "make build"
3 changes: 3 additions & 0 deletions _templates/cloudflare/cron-tinygo/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
build
node_modules
.wrangler
12 changes: 12 additions & 0 deletions _templates/cloudflare/cron-tinygo/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
.PHONY: dev
dev:
wrangler dev

.PHONY: build
build:
go run github.com/syumai/workers/cmd/[email protected]
tinygo build -o ./build/app.wasm -target wasm -no-debug ./...

.PHONY: deploy
deploy:
wrangler deploy
61 changes: 61 additions & 0 deletions _templates/cloudflare/cron-tinygo/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
# cron-tinygo

- A template for starting a Cloudflare Worker project with a cron job using Go.
- This template uses the [workers](https://github.com/syumai/workers) package to schedule and run cron jobs.

## Notice

- A free plan Cloudflare Workers only accepts ~1MB sized workers.
- TinyGo Wasm binaries probably won't exceed this limit, so you might not need to use a paid plan of Cloudflare Workers.
- There's also a Go version of this that can be found [here](https://github.com/syumai/workers/tree/main/_templates/cloudflare/cron-go).

## Usage

- `main.go` includes a simple cron job implementation. Feel free to edit this code and implement your own cron job logic.

## Requirements

- Node.js
- [wrangler](https://developers.cloudflare.com/workers/wrangler/)
- Just run `npm install -g wrangler`
- Go 1.21.0 or later

## Getting Started

- If not already installed, please install the [gonew](https://pkg.go.dev/golang.org/x/tools/cmd/gonew) command.

```console
go install golang.org/x/tools/cmd/gonew@latest
```

- Create a new project using this template.
- The second argument passed to `gonew` is the module path of your new app.

```console
gonew github.com/syumai/workers/_templates/cloudflare/cron-go your.module/my-app # e.g. github.com/syumai/my-app
cd my-app
go mod tidy
make dev # start running dev server
```

- To change the worker name, please edit the `name` property in `wrangler.toml`.

## Development

### Commands

```console
make dev # run dev server
make build # build Go Wasm binary
make deploy # deploy worker
```

### Testing the Dev Server

- To test the cron job, you can simulate the cron event by sending an HTTP request to the dev server.

```console
curl -X POST http://localhost:8787/cron
```

- You should see the scheduled time printed in the console.
7 changes: 7 additions & 0 deletions _templates/cloudflare/cron-tinygo/go.mod
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
module github.com/syumai/workers/_templates/cloudflare/cron-tinygo

go 1.21.3

toolchain go1.22.4

require github.com/syumai/workers v0.26.1
2 changes: 2 additions & 0 deletions _templates/cloudflare/cron-tinygo/go.sum
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
github.com/syumai/workers v0.26.1 h1:DvhLZ4PPO/zu5leYRd85TnHELOBTkBbi/2ymkLOieSY=
github.com/syumai/workers v0.26.1/go.mod h1:ZnqmdiHNBrbxOLrZ/HJ5jzHy6af9cmiNZk10R9NrIEA=
25 changes: 25 additions & 0 deletions _templates/cloudflare/cron-tinygo/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package main

import (
"context"
"fmt"
"log"
"time"

"github.com/syumai/workers/cloudflare/cron"
)

func task(ctx context.Context) error {
e, err := cron.NewEvent(ctx)
if err != nil {
return fmt.Errorf("failed to create cron event: %w", err)
}
log.Printf("Cron job triggered at: %s", time.Unix(e.ScheduledTime.Unix(), 0).Format(time.RFC3339))
log.Println("Executing scheduled task...")
return nil
}

func main() {
cron.ScheduleTask(task)
select {}
}
10 changes: 10 additions & 0 deletions _templates/cloudflare/cron-tinygo/wrangler.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
name = "tinygo-cron"
main = "./build/worker.mjs"
compatibility_date = "2023-02-24"
workers_dev = false

[triggers]
crons = ["* * * * *"]

[build]
command = "make build"

0 comments on commit e5ed933

Please sign in to comment.