Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add template for cron jobs creation (issue 49) #118

Merged
merged 2 commits into from
Jun 26, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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/workers-assets-gen@v0.23.1 -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/workers-assets-gen@v0.23.1
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"
Loading