From 1721a2b6e8dbbaf5cf9315904de06df508c74e72 Mon Sep 17 00:00:00 2001 From: frectonz Date: Mon, 25 Nov 2024 07:34:15 +0300 Subject: [PATCH] feat: build docker images for all supported postgres versions --- flake.nix | 131 +++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 100 insertions(+), 31 deletions(-) diff --git a/flake.nix b/flake.nix index b0aaf5e..2c99f06 100644 --- a/flake.nix +++ b/flake.nix @@ -63,49 +63,118 @@ packages = forAllSystems ( pkgs: let - postgresql = pkgs.postgresql.dev; cargo-pgrx = import ./nix/pgrx.nix { inherit pkgs; }; pname = "pglite-fusion"; version = "0.0.2"; - postgres = pkgs.dockerTools.pullImage { - imageName = "postgres"; - imageDigest = "sha256:026d0ab72b34310b68160ab9299aa1add5544e4dc3243456b94f83cb1c119c2c"; - sha256 = "sha256-Bwd07vmTNRS1Ntd2sKvYXx/2GGaEVmGGjKukDmuSfD0="; - }; + buildPgliteFusionImage = + { + imageDigest, + imageSha256, + postgresDev, + }: + let + postgresMajor = pkgs.lib.versions.major postgresDev.version; - extension = pkgs.stdenv.mkDerivation { - inherit pname version; + postgresImage = pkgs.dockerTools.pullImage { + imageName = "postgres"; + imageDigest = imageDigest; + sha256 = imageSha256; + }; - src = import ./nix/build.nix { inherit pkgs cargo-pgrx postgresql; }; + extension = pkgs.stdenv.mkDerivation { + pname = "${pname}-pg${postgresMajor}-extension"; + inherit version; - buildPhase = '' - install --directory $out/usr/share/postgresql/16/extension - cp -r $src/nix/store/wc1a06ip2fajrjkfbw7cvxzw1c949a6g-postgresql-16.4/share/postgresql/extension/* $out/usr/share/postgresql/16/extension - install --directory $out/usr/lib/postgresql/16/lib - cp -r $src/nix/store/wc1a06ip2fajrjkfbw7cvxzw1c949a6g-postgresql-16.4/lib/* $out/usr/lib/postgresql/16/lib - ''; - }; - in - rec { - image = pkgs.dockerTools.buildLayeredImage { - name = pname; - fromImage = postgres; - - contents = [ extension ]; - config = { - Env = [ "POSTGRES_HOST_AUTH_METHOD=trust" ]; - - Expose = 5432; - Cmd = [ "postgres" ]; - Entrypoint = [ "docker-entrypoint.sh" ]; + src = import ./nix/build.nix { + inherit pkgs cargo-pgrx; + postgresql = postgresDev; + }; + + buildPhase = '' + install --directory $out/usr/share/postgresql/${postgresMajor}/extension + cp -r $src/nix/store/*/share/postgresql/extension/* $out/usr/share/postgresql/${postgresMajor}/extension + install --directory $out/usr/lib/postgresql/${postgresMajor}/lib + cp -r $src/nix/store/*/lib/* $out/usr/lib/postgresql/${postgresMajor}/lib + ''; + }; + in + pkgs.dockerTools.buildLayeredImage { + name = "${pname}-pg${postgresMajor}"; + fromImage = postgresImage; + + contents = [ extension ]; + config = { + Env = [ "POSTGRES_HOST_AUTH_METHOD=trust" ]; + + Expose = 5432; + Cmd = [ "postgres" ]; + Entrypoint = [ "docker-entrypoint.sh" ]; + }; }; + + pg12 = buildPgliteFusionImage { + imageDigest = "sha256:ee9f333b422b396016648289933a8f2d3ffa79703510b2e0641e3a4a125b96b6"; + imageSha256 = "sha256-f+OkqB6mW8UP0Z6fCCfAB257ztQAtaPQ2T2SVlu8MmY="; + postgresDev = pkgs.postgresql_12.dev; + }; + pg13 = buildPgliteFusionImage { + imageDigest = "sha256:80ff9e2086e68aef09839045df1f07016b869d94cbd12c6462a4b300878cfdac"; + imageSha256 = "sha256-iaUdJa/l0rgNkZR/FUoJ4bzmW/2CRWyk+eMHibBqIus="; + postgresDev = pkgs.postgresql_13.dev; + }; + pg14 = buildPgliteFusionImage { + imageDigest = "sha256:78b9deeca08fa9749a00e9d30bc879f8f8d021af854c73e2c339b752cb6d708a"; + imageSha256 = "sha256-LV2V6kuctIjN4gMxfopZSdivFtz7ks+AGmYQ4ets8b0="; + postgresDev = pkgs.postgresql_14.dev; + }; + pg15 = buildPgliteFusionImage { + imageDigest = "sha256:a35b3c0190dac5a82ec1778b34cb4963bdd9d161f80381a6297be6e2c3c13a7c"; + imageSha256 = "sha256-ZK6eBPA50mY99uSF3+UdT4eBm/3komc6sfWb1qw1N7k="; + postgresDev = pkgs.postgresql_15.dev; }; + pg16 = buildPgliteFusionImage { + imageDigest = "sha256:5d65b8bdb20369ea902b987aa63cfe4983130bc8cd2c25830d126636b80b608d"; + imageSha256 = "sha256-5JhtZaCLj6SnJzjhC5A2yrP6fipuaQKHSxm3jhxSfNg="; + postgresDev = pkgs.postgresql_16.dev; + }; + pg17 = buildPgliteFusionImage { + imageDigest = "sha256:994cc3113ce004ae73df11f0dbc5088cbe6bb0da1691dd7e6f55474202a4f211"; + imageSha256 = "sha256-OzqtbX89/lBP2mzhSccuad5suUz/uw/gBgeIW3BTbdc="; + postgresDev = pkgs.postgresql_17.dev; + }; + in + { + inherit + pg12 + pg13 + pg14 + pg15 + pg16 + pg17 + ; deploy = pkgs.writeShellScriptBin "deploy" '' - ${pkgs.skopeo}/bin/skopeo --insecure-policy copy docker-archive:${image} docker://docker.io/frectonz/${pname}:pg16-${version} --dest-creds="frectonz:$ACCESS_TOKEN" - ${pkgs.skopeo}/bin/skopeo --insecure-policy copy docker://docker.io/frectonz/${pname}:pg16-${version} docker://docker.io/frectonz/${pname}:latest --dest-creds="frectonz:$ACCESS_TOKEN" + ${pkgs.skopeo}/bin/skopeo --insecure-policy copy docker-archive:${pg12} docker://docker.io/frectonz/${pname}:pg12-${version} --dest-creds="frectonz:$ACCESS_TOKEN" + ${pkgs.skopeo}/bin/skopeo --insecure-policy copy docker://docker.io/frectonz/${pname}:pg12-${version} docker://docker.io/frectonz/${pname}:pg12 --dest-creds="frectonz:$ACCESS_TOKEN" + + ${pkgs.skopeo}/bin/skopeo --insecure-policy copy docker-archive:${pg13} docker://docker.io/frectonz/${pname}:pg13-${version} --dest-creds="frectonz:$ACCESS_TOKEN" + ${pkgs.skopeo}/bin/skopeo --insecure-policy copy docker://docker.io/frectonz/${pname}:pg13-${version} docker://docker.io/frectonz/${pname}:pg13 --dest-creds="frectonz:$ACCESS_TOKEN" + + ${pkgs.skopeo}/bin/skopeo --insecure-policy copy docker-archive:${pg14} docker://docker.io/frectonz/${pname}:pg14-${version} --dest-creds="frectonz:$ACCESS_TOKEN" + ${pkgs.skopeo}/bin/skopeo --insecure-policy copy docker://docker.io/frectonz/${pname}:pg14-${version} docker://docker.io/frectonz/${pname}:pg14 --dest-creds="frectonz:$ACCESS_TOKEN" + + ${pkgs.skopeo}/bin/skopeo --insecure-policy copy docker-archive:${pg15} docker://docker.io/frectonz/${pname}:pg15-${version} --dest-creds="frectonz:$ACCESS_TOKEN" + ${pkgs.skopeo}/bin/skopeo --insecure-policy copy docker://docker.io/frectonz/${pname}:pg15-${version} docker://docker.io/frectonz/${pname}:pg15 --dest-creds="frectonz:$ACCESS_TOKEN" + + ${pkgs.skopeo}/bin/skopeo --insecure-policy copy docker-archive:${pg16} docker://docker.io/frectonz/${pname}:pg16-${version} --dest-creds="frectonz:$ACCESS_TOKEN" + ${pkgs.skopeo}/bin/skopeo --insecure-policy copy docker://docker.io/frectonz/${pname}:pg16-${version} docker://docker.io/frectonz/${pname}:pg16 --dest-creds="frectonz:$ACCESS_TOKEN" + + ${pkgs.skopeo}/bin/skopeo --insecure-policy copy docker-archive:${pg17} docker://docker.io/frectonz/${pname}:pg17-${version} --dest-creds="frectonz:$ACCESS_TOKEN" + ${pkgs.skopeo}/bin/skopeo --insecure-policy copy docker://docker.io/frectonz/${pname}:pg17-${version} docker://docker.io/frectonz/${pname}:pg17 --dest-creds="frectonz:$ACCESS_TOKEN" + + ${pkgs.skopeo}/bin/skopeo --insecure-policy copy docker://docker.io/frectonz/${pname}:pg17 docker://docker.io/frectonz/${pname}:latest --dest-creds="frectonz:$ACCESS_TOKEN" ''; } );