# test-quarkus This project uses Quarkus, the Supersonic Subatomic Java Framework. If you want to learn more about Quarkus, please visit its website: https://quarkus.io/ . ## Building and deploying natively Build the native image with the Mandrel-based multi-stage Dockerfile and push it to a remote Docker host over an SSH tunnel. The script starts a temporary `registry:2` container on the remote (localhost only), forwards it to the build machine, pushes the image through that tunnel, then pulls and retags it on the remote Docker daemon. No external registry is required. ```shell script ./scripts/build-and-push.sh --remote deploy@prod.example.com ``` The script reads `artifactId` and `version` from `pom.xml` for the local build tag and image name, builds for `linux/amd64`, and verifies the deploy on the remote. On the remote, durable tags are only: - `:latest` — always the most recent successful push - `:vYYYY.MM.DD-HH.MM` — UTC timestamp of that push (for rollback) Older releases stay tagged by date only: the script keeps the current image (with `latest` and its date tag) and the previous date tag, and removes other tags and images (including old `1.0.x`, `sha256-*`, and third copies). Run `--cleanup` on the remote to apply the same pruning without a new push. To roll back on the remote, run a previous `v…` tag from `docker images` instead of `:latest`. The temporary registry container and SSH tunnel are removed when the script finishes. See `./scripts/build-and-push.sh --help` for all flags. To remove leftover temporary registry containers and `localhost:/...` image tags on the remote (for example after an interrupted push or manual tests): ```shell script ./scripts/build-and-push.sh --remote deploy@prod.example.com --cleanup ``` This does not rebuild or push; it only needs SSH access to the remote host. It can be invoked from any directory: by default it resolves the project root from the script's own location. Override with `--project-dir PATH` or the `PROJECT_DIR` environment variable when needed. ### SSH config aliases `--remote` accepts either an explicit `user@host[:port]` or a bare alias that is resolved from `~/.ssh/config`. The matching `Host` block supplies `HostName`, `User`, `Port` and `IdentityFile` automatically: ```text # ~/.ssh/config Host prod HostName prod.example.com User deploy Port 22 IdentityFile ~/.ssh/deploy_ed25519 ``` ```shell script ./scripts/build-and-push.sh --remote prod # Resolves to deploy@prod.example.com:22 using ~/.ssh/deploy_ed25519 ``` `--ssh-key` always overrides the config `IdentityFile`. Use `--ssh-config PATH` to point at a non-default config file. ## Running the application in dev mode You can run your application in dev mode that enables live coding using: ```shell script ./mvnw compile quarkus:dev ``` > **_NOTE:_** Quarkus now ships with a Dev UI, which is available in dev mode only at http://localhost:8080/q/dev/. ## Packaging and running the application The application can be packaged using: ```shell script ./mvnw package ``` It produces the `quarkus-run.jar` file in the `target/quarkus-app/` directory. Be aware that it’s not an _über-jar_ as the dependencies are copied into the `target/quarkus-app/lib/` directory. The application is now runnable using `java -jar target/quarkus-app/quarkus-run.jar`. If you want to build an _über-jar_, execute the following command: ```shell script ./mvnw package -Dquarkus.package.type=uber-jar ``` The application, packaged as an _über-jar_, is now runnable using `java -jar target/*-runner.jar`. ## Creating a native executable You can create a native executable using: ```shell script ./mvnw package -Dnative ``` Or, if you don't have GraalVM installed, you can run the native executable build in a container using: ```shell script ./mvnw package -Dnative -Dquarkus.native.container-build=true ``` You can then execute your native executable with: `./target/test-quarkus-1.0.0-SNAPSHOT-runner` If you want to learn more about building native executables, please consult https://quarkus.io/guides/maven-tooling. ## Related Guides - REST Jackson ([guide](https://quarkus.io/guides/rest#json-serialisation)): Jackson serialization support for Quarkus REST. This extension is not compatible with the quarkus-resteasy extension, or any of the extensions that depend on it - SmallRye Health ([guide](https://quarkus.io/guides/smallrye-health)): Monitor service health ## Provided Code ### REST Easily start your REST Web Services [Related guide section...](https://quarkus.io/guides/getting-started-reactive#reactive-jax-rs-resources) ### SmallRye Health Monitor your application's health using SmallRye Health [Related guide section...](https://quarkus.io/guides/smallrye-health)