diff options
author | Galen Guyer <galen@galenguyer.com> | 2022-05-23 23:39:24 -0400 |
---|---|---|
committer | Galen Guyer <galen@galenguyer.com> | 2022-05-23 23:39:24 -0400 |
commit | c76d607abc6487be8b7adc0e97ed18b6c0b46c13 (patch) | |
tree | 652eaf6e3613168a3db9cca2407a77d80a6da1d5 | |
parent | 35baab0ec5aaadcc37e3d0cd8cd9ec98f1cf5df9 (diff) |
add debian packaging
-rw-r--r-- | .dockerignore | 1 | ||||
-rw-r--r-- | .gitignore | 5 | ||||
-rw-r--r-- | Dockerfile | 26 | ||||
-rw-r--r-- | docker-bake.hcl | 22 | ||||
-rw-r--r-- | pkg/DEBIAN/control | 9 | ||||
-rwxr-xr-x | pkg/DEBIAN/postinst | 6 | ||||
-rw-r--r-- | pkg/usr/lib/systemd/system/fdns-api.service | 14 | ||||
-rw-r--r-- | src/main.rs | 5 |
8 files changed, 86 insertions, 2 deletions
diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..b83d222 --- /dev/null +++ b/.dockerignore @@ -0,0 +1 @@ +/target/ @@ -1,2 +1,3 @@ -/target -.env
\ No newline at end of file +/target/ +/artifacts/ +.env diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..3db9a4a --- /dev/null +++ b/Dockerfile @@ -0,0 +1,26 @@ +FROM rust:1.61-bullseye AS builder +WORKDIR /src/ +RUN cargo init --bin +COPY Cargo.toml Cargo.lock /src/ +RUN cargo build --release + +COPY . /src/ +RUN cargo build --release + + +FROM scratch AS bin +COPY --from=builder /src/target/release/fdns-api /fdns-api + + +FROM debian:buster AS deb-builder +ARG VERSION +WORKDIR /root/ +COPY pkg/ /root/pkg/ +COPY --from=bin /fdns-api pkg/usr/bin/fdns-api +RUN sed -i "s/[{][{] VERSION [}][}]/$(pkg/usr/bin/fdns-api --version)/g" ./pkg/DEBIAN/control +RUN dpkg -b pkg fdns-api_"$(pkg/usr/bin/fdns-api --version)"_amd64.deb + + +FROM scratch AS deb +ARG VERSION +COPY --from=deb-builder /root/fdns-api_*_amd64.deb /
\ No newline at end of file diff --git a/docker-bake.hcl b/docker-bake.hcl new file mode 100644 index 0000000..cfa0a10 --- /dev/null +++ b/docker-bake.hcl @@ -0,0 +1,22 @@ +variable "PKGVER" { + default = "0.1.0" +} + +group "default" { + targets = ["deb"] +} + +target "bin" { + dockerfile = "Dockerfile" + target = "bin" + output = ["artifacts"] +} + +target "deb" { + dockerfile = "Dockerfile" + target = "deb" + output = ["artifacts"] + args = { + VERSION="${PKGVER}" + } +} diff --git a/pkg/DEBIAN/control b/pkg/DEBIAN/control new file mode 100644 index 0000000..3cb16c0 --- /dev/null +++ b/pkg/DEBIAN/control @@ -0,0 +1,9 @@ +Package: fdns-api +Version: {{ VERSION }} +Architecture: amd64 +Essential: no +Section: web +Priority: optional +Maintainer: Galen Guyer <galen@galenguyer.com> +Installed-Size: 96 +Description: FDNS API binary diff --git a/pkg/DEBIAN/postinst b/pkg/DEBIAN/postinst new file mode 100755 index 0000000..226526e --- /dev/null +++ b/pkg/DEBIAN/postinst @@ -0,0 +1,6 @@ +#!/bin/sh + +if [ ! -f /etc/fdns.env ]; then + echo "DATABASE_URL=" >> /etc/fdns.env + echo "JWT_SECRET=" >> /etc/fdns.env +fi diff --git a/pkg/usr/lib/systemd/system/fdns-api.service b/pkg/usr/lib/systemd/system/fdns-api.service new file mode 100644 index 0000000..502d5f8 --- /dev/null +++ b/pkg/usr/lib/systemd/system/fdns-api.service @@ -0,0 +1,14 @@ +[Unit] +Description=FDNS API +After=network.target +After=systemd-user-sessions.service +After=network-online.target + +[Service] +Type=simple +Restart=always +EnvironmentFile=/etc/fdns.env +ExecStart=/usr/bin/fdns-api + +[Install] +WantedBy=multi-user.target diff --git a/src/main.rs b/src/main.rs index d870dc1..a1fb106 100644 --- a/src/main.rs +++ b/src/main.rs @@ -22,6 +22,11 @@ async fn main() { // Load configuration from .env dotenv().ok(); + if std::env::args().nth(1) == Some("--version".to_string()) { + println!("{}", option_env!("CARGO_PKG_VERSION").unwrap_or_else(|| "unknown")); + return; + } + // Set logging levels if not already set if env::var_os("RUST_LOG").is_none() { env::set_var("RUST_LOG", "fdns_api=debug,tower_http=debug"); |