summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGalen Guyer <galen@galenguyer.com>2022-05-23 23:39:24 -0400
committerGalen Guyer <galen@galenguyer.com>2022-05-23 23:39:24 -0400
commitc76d607abc6487be8b7adc0e97ed18b6c0b46c13 (patch)
tree652eaf6e3613168a3db9cca2407a77d80a6da1d5
parent35baab0ec5aaadcc37e3d0cd8cd9ec98f1cf5df9 (diff)
add debian packaging
-rw-r--r--.dockerignore1
-rw-r--r--.gitignore5
-rw-r--r--Dockerfile26
-rw-r--r--docker-bake.hcl22
-rw-r--r--pkg/DEBIAN/control9
-rwxr-xr-xpkg/DEBIAN/postinst6
-rw-r--r--pkg/usr/lib/systemd/system/fdns-api.service14
-rw-r--r--src/main.rs5
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/
diff --git a/.gitignore b/.gitignore
index 0b745e2..37b8b81 100644
--- a/.gitignore
+++ b/.gitignore
@@ -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");