# Rust Greeter A [rust-lang](https://rust-lang.org) demo on building API using [axum](https://github.com/tokio-rs/axum). The demo application will be crossed compiled into, - [x] linux/arm64 (`aarch64-unknown-linux-musl`) - [x] linux/amd64 (`x86_64-unknown-linux-musl`) The demo uses [cargo-zigbuild](https://github.com/cargo-zigbuild) as tool for cross compilation. ## Pre-requisites - [Docker Desktop](https://www.docker.com/products/docker-desktop/) - [rust-lang](https://rust-lang.org) - [drone cli](https://docs.drone.io/cli/install/) - [Taskfile](https://taskfile.dev) ## Building Locally ```shell cargo build ``` Start the server, ```shell ./target/debug/rgreeter ``` ## Testing Open a new terminal Start the application to run integration tests, ```shell PORT=8080 cargo run ``` On another terminal run, ```shell cargo test ``` ## Testing Application Once the server is up you can try the following REST URIs, - Default `curl http://localhost:3000/` returns `Hello World!` - Greeting: `curl http://localhost:3000/greet` returns `Hello! Anonymous!` - Greeting a person: `curl http://localhost:3000/greet?name=Jack` returns `Hello! Jack!` ## Build and Push Image to Docker Registry Create a file `.env` under `$PROJECT_HOME`, >**NOTE**: You can copy the file [.env.example](./.env.example) to `.env` and update with your setting ```shell PLUGIN_USERNAME= PLUGIN_PASSWORD= PLUGIN_REPO= PLUGIN_REGISTRY= ``` e.g. ```shell PLUGIN_USERNAME=octocat PLUGIN_PASSWORD=octocat registry password PLUGIN_REPO=ghcr.io/octocat/rgreeter PLUGIN_REGISTRY=ghcr.io ``` ```shell task ci ``` Once the image is pushed run the following command, ```shell docker-compose up ``` Find the exposed port using the command `docker ps` and [test the application](#testing-application) the URIs. >> **NOTE**: If the port `8080` is not available on your machine, try using other ports.