From 4769584a4a6563597783e381b938144219bad0f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20R=C3=B6ger?= Date: Tue, 24 Mar 2026 23:59:22 +0100 Subject: [PATCH] ci: add docker image build --- .gitea/workflows/docker.yaml | 12 ++++++++++++ flake.nix | 8 ++++++++ nix/docker.nix | 27 +++++++++++++++++++++++++++ nix/lib.nix | 9 +++++++++ 4 files changed, 56 insertions(+) create mode 100644 .gitea/workflows/docker.yaml create mode 100644 nix/docker.nix create mode 100644 nix/lib.nix diff --git a/.gitea/workflows/docker.yaml b/.gitea/workflows/docker.yaml new file mode 100644 index 0000000..1ffe101 --- /dev/null +++ b/.gitea/workflows/docker.yaml @@ -0,0 +1,12 @@ +name: Build a docker image. +on: [push] + +jobs: + build-docker-image: + runs-on: nixos + steps: + - name: Check out repository code + uses: actions/checkout@v4 + + - name: Build flake + run: nix build .#docker diff --git a/flake.nix b/flake.nix index eb8cbd6..ac3b883 100644 --- a/flake.nix +++ b/flake.nix @@ -13,6 +13,12 @@ overlays.avcpp = final: prev: { avcpp = final.callPackage ./nix/avcpp.nix {}; }; + overlays.lib = final: prev: { + lib = prev.lib.extend (_: _: + import ./nix/lib.nix { + inherit (final) lib; + }); + }; }; systems = [ "x86_64-linux" @@ -28,12 +34,14 @@ overlays = [ self.overlays.mosh-me self.overlays.avcpp + self.overlays.lib ]; config = {}; }; packages.default = pkgs.mosh-me; packages.mosh-me = pkgs.mosh-me; + packages.docker = pkgs.callPackage ./nix/docker.nix {tag = pkgs.lib.gitRevOrLastModified self;}; devShells.default = self'.devShells.mosh-me; devShells.mosh-me = pkgs.mkShell { diff --git a/nix/docker.nix b/nix/docker.nix new file mode 100644 index 0000000..1427195 --- /dev/null +++ b/nix/docker.nix @@ -0,0 +1,27 @@ +{ + buildEnv, + dockerTools, + runtimeShell, + tag ? "latest", + mosh-me, + ... +}: +dockerTools.buildImage { + name = "mosh-me"; + inherit tag; + created = "now"; + copyToRoot = buildEnv { + name = "image-root"; + paths = [mosh-me]; + pathsToLink = ["/bin"]; + }; + runAsRoot = '' + #!${runtimeShell} + mkdir -p /pwd + ''; + + config = { + Cmd = ["/bin/mosh-me"]; + WorkingDir = "/pwd"; + }; +} diff --git a/nix/lib.nix b/nix/lib.nix new file mode 100644 index 0000000..1b8f406 --- /dev/null +++ b/nix/lib.nix @@ -0,0 +1,9 @@ +{lib, ...}: let + firstNonNull = xs: lib.findFirst (x: x != null) "unknown" xs; +in { + gitRevOrLastModified = flake: + firstNonNull [ + (lib.mapNullable (r: "git-" + r) (flake.shortRev or flake.rev or null)) + (lib.mapNullable (n: "from-" + (lib.toLower n)) flake.sourceInfo.lastModifiedDate or null) + ]; +}