A Rust worker example for Cloudflare Workers using Axum.
This repo is a very basic example of running an Axum-based Rust worker on Cloudflare along with Vite integration tests and working live reloading during development. I put this together to help others get started quickly.
Github and Gitlab CI configs are also included. These run linters, tests and allow manual deployments to Cloudflare as a release or preview.
I will update with more features when I get time. This will include real unit tests & implementations of Cloudflare features like D1, KV etc.
- Rust WASM worker
- Working live reload
make dev-watch - Wrangler config/vars in
/wrangler - Makefile support. Requires
make, run to view available commands. - Biome linting/formatting for TS integration tests.
- Working Vitest integration testing
- Github & Gitlab CI configs
- Local Github actions testing via Act
- Lint-staged checks (linting/formatting) via Husky
- Template rendering via Askama
- Ensure Rust, Make & Node >= 18 is installed.
- Clone.
- Create
wrangler/.dev.vars(cp wrangler/.dev.vars.sample wrangler/.dev.vars) and add your Cloudflare API Token & account ID. - Run
make depsto install node dependencies. - Run
make helpto view available commands.
Running
make devshould start a local version of the worker on port 8787http://localhost:8787 - Shows an example message produced via Axum HTML. http://localhost:8787/api - Shows an example JSON response.
For both Github and Gitlab you will need to add the environment
variables CLOUDFLARE_API_TOKEN & CLOUDFLARE_ACCOUNT_ID with
their respective values.
For Gitlab you will also need to set the path to the
.gitlab-ci.yamlfile. This is because I like to keep my file structure as clean as possible and avoid config hell.You can set the path to the path to this file under your repo's 'Settings' -> 'CI/CD' -> 'General Pipelines' -> 'CI/CD configuration file'. Set this to
.gitlab/ci-pipeline.yml
In order to actually deploy to Cloudflare via Github or Gitlab, you will need to manually run either of the two deployment example actions/jobs.
PRs welcome!