Compare commits

..

2 Commits

Author SHA1 Message Date
julian 6efa8b1bb7 Add ci for deploying docker image
Build and Deploy / deploy (push) Has been cancelled
2026-06-04 11:36:14 +02:00
julian bfd233f6c9 Use skopeo for deploy script 2026-06-04 11:35:58 +02:00
2 changed files with 40 additions and 7 deletions
+18
View File
@@ -0,0 +1,18 @@
name: Build and Deploy
on:
push:
branches:
- master
jobs:
deploy:
runs-on: nixos
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Build and Push Docker Image
env:
REGISTRY_USERNAME: ${{ secrets.CONTAINER_REGISTRY_GITEA_USERNAME }}
REGISTRY_PASSWORD: ${{ secrets.CONTAINER_REGISTRY_GITEA_PASSWORD }}
run: nix run .#deploy
+22 -7
View File
@@ -15,13 +15,26 @@
system: let
pkgs = nixpkgs.legacyPackages.${system};
deploy = pkgs.writeShellScriptBin "deploy" ''
deploy-script = pkgs.writeShellScriptBin "deploy" ''
set -e; set -o pipefail; set -x;
# 1. Build the docker image
nix build .#docker
image=$((docker load < result) | sed -n '$s/^Loaded image: //p')
docker image tag "$image" harbor.julian-mutter.de/sheetless/sheetless-server:latest
docker push harbor.julian-mutter.de/sheetless/sheetless-server:latest
# 2. Authenticate if CI environment variables are present
if [ -n "''${REGISTRY_USERNAME:-}" ] && [ -n "''${REGISTRY_PASSWORD:-}" ]; then
echo "CI Environment detected: Logging in to Harbor."
${pkgs.skopeo}/bin/skopeo login gitlab.julian-mutter.de \
--username "''${HARBOR_USERNAME}" \
--password "''${HARBOR_PASSWORD}"
else
echo "Local Environment detected: Skipping login, relying on existing auth."
fi
# 3. Upload to container registry
${pkgs.skopeo}/bin/skopeo copy \
docker-archive:result \
docker://gitlab.julian-mutter.de/julian/sheetless-server:latest
'';
in {
devShells.default = pkgs.mkShell {
@@ -30,13 +43,15 @@
gopls
go-tools
deploy
deploy-script
];
};
packages = rec {
default = sheetless-server;
deploy = deploy-script;
sheetless-server = pkgs.buildGoModule {
pname = "sheetless-server";
version = "0.1.0";
@@ -44,11 +59,11 @@
vendorHash = "sha256-jJe13G5zoUCY2SD9ZerN+6ahc/qOJ3oAhDXJgIhyuvw=";
};
docker = pkgs.dockerTools.buildImage {
docker = pkgs.dockerTools.buildLayeredImage {
name = "sheetless-server";
tag = "latest";
copyToRoot = with pkgs; [
contents = with pkgs; [
dockerTools.usrBinEnv
dockerTools.binSh
dockerTools.caCertificates