From 4b3eb18705ac1bf420418be684c4448d44997838 Mon Sep 17 00:00:00 2001 From: Michael Arndt Date: Sun, 5 May 2024 23:07:00 +0200 Subject: [PATCH 1/6] Try multi arch --- .github/workflows/publish-chart.yaml | 23 +++++++++++++++---- devenv/nix/containerImageAArch64.nix | 23 +++++++++++++++++++ ...ainerImage.nix => containerImageAmd64.nix} | 0 flake.nix | 17 ++++++++++---- 4 files changed, 54 insertions(+), 9 deletions(-) create mode 100644 devenv/nix/containerImageAArch64.nix rename devenv/nix/{containerImage.nix => containerImageAmd64.nix} (100%) diff --git a/.github/workflows/publish-chart.yaml b/.github/workflows/publish-chart.yaml index 0d6b1d3..79ffd4c 100644 --- a/.github/workflows/publish-chart.yaml +++ b/.github/workflows/publish-chart.yaml @@ -32,13 +32,26 @@ jobs: flakes: .#csi-rclone-container-layerd script: | export TAG=$(echo ${GITHUB_REF} |cut -d/ -f3) - nix build .#csi-rclone-container-layerd && ./result | docker load - docker tag csi-rclone:latest renku/csi-rclone:latest - docker tag csi-rclone:latest renku/csi-rclone:${TAG} + + nix build .#csi-rclone-container-layerd-aarch64 && ./result | docker load + docker tag csi-rclone:latest renku/csi-rclone:latest-aarch64 + docker tag csi-rclone:latest renku/csi-rclone:${TAG}-aarch64 + + nix build .#csi-rclone-container-layerd-amd64 && ./result | docker load + docker tag csi-rclone:latest renku/csi-rclone:latest-amd64 + docker tag csi-rclone:latest renku/csi-rclone:${TAG}-amd64 + echo ${DOCKER_PASSWORD}|docker login -u ${DOCKER_USERNAME} --password-stdin - docker push renku/csi-rclone:latest - docker push renku/csi-rclone:${TAG} + docker push renku/csi-rclone:latest-aarch64 + docker push renku/csi-rclone:${TAG}-aarch64 + docker push renku/csi-rclone:latest-amd64 + docker push renku/csi-rclone:${TAG}-amd64 + + docker manifest create \ + renku/csi-rclone:${TAG} \ + --amend renku/csi-rclone:${TAG}-amd64 \ + --amend renku/csi-rclone:${TAG}-aarch64 - name: Publish chart env: GITHUB_TOKEN: ${{ secrets.RENKUBOT_GITHUB_TOKEN }} diff --git a/devenv/nix/containerImageAArch64.nix b/devenv/nix/containerImageAArch64.nix new file mode 100644 index 0000000..9c00b0e --- /dev/null +++ b/devenv/nix/containerImageAArch64.nix @@ -0,0 +1,23 @@ +{ pkgs, containerPkgs, csiDriverLinux}: + +pkgs.dockerTools.streamLayeredImage { + name = "csi-rclone"; + tag = "latest"; + architecture = "aarch64"; + + contents = [ + csiDriverLinux + + containerPkgs.bashInteractive + containerPkgs.cacert + containerPkgs.coreutils + containerPkgs.fuse3 + containerPkgs.gawk + containerPkgs.rclone + ]; + + extraCommands = '' + mkdir -p ./plugin + mkdir -p ./tmp + ''; +} diff --git a/devenv/nix/containerImage.nix b/devenv/nix/containerImageAmd64.nix similarity index 100% rename from devenv/nix/containerImage.nix rename to devenv/nix/containerImageAmd64.nix diff --git a/flake.nix b/flake.nix index c1a9cb6..9f334ea 100644 --- a/flake.nix +++ b/flake.nix @@ -8,13 +8,21 @@ let # Import pkgs (for your platform) and containerPkgs (x86_64-linux) for crosscompile on MacOS pkgs = nixpkgs.legacyPackages.${system}; - containerPkgs = import nixpkgs { localSystem = system; crossSystem = "x86_64-linux"; }; + containerPkgsAmd64 = import nixpkgs { localSystem = system; crossSystem = "x86_64-linux"; }; + containerPkgsAArch64 = import nixpkgs { localSystem = system; crossSystem = "aarch64-linux"; }; goModule = import ./devenv/nix/goModule.nix { inherit pkgs; }; inherit (goModule) csiDriver csiDriverLinux; - dockerLayerdImage = import ./devenv/nix/containerImage.nix { inherit pkgs containerPkgs csiDriverLinux; }; - + dockerLayerdImageAmd64 = import ./devenv/nix/containerImageAmd64.nix { + inherit pkgs csiDriverLinux; + containerPkgs = containerPkgsAmd64; + }; + dockerLayerdImageAArch64 = import ./devenv/nix/containerImageAArch64.nix { + inherit pkgs csiDriverLinux; + containerPkgs = containerPkgsAArch64; + }; + scripts = import ./devenv/nix/scripts.nix { inherit pkgs; }; inherit (scripts) initKindCluster deleteKindCluster getKindKubeconfig localDeployScript reloadScript; @@ -24,7 +32,8 @@ packages.csi-rclone-binary = csiDriver; packages.csi-rclone-binary-linux = csiDriverLinux; - packages.csi-rclone-container-layerd = dockerLayerdImage; + packages.csi-rclone-container-layerd-amd64 = dockerLayerdImageAmd64; + packages.csi-rclone-container-layerd-aarch64 = dockerLayerdImageAArch64; packages.deployToKind = localDeployScript; packages.reload = reloadScript; packages.initKind = initKindCluster; From a5669f60c00ff3057a7a5672a09ea56751de042f Mon Sep 17 00:00:00 2001 From: Michael Arndt Date: Mon, 6 May 2024 21:43:02 +0200 Subject: [PATCH 2/6] Try multi arch --- .github/workflows/publish-chart.yaml | 2 +- ...nerImageAArch64.nix => containerImage.nix} | 4 ++-- devenv/nix/containerImageAmd64.nix | 23 ------------------- devenv/nix/scripts.nix | 4 ++-- flake.nix | 6 +++-- 5 files changed, 9 insertions(+), 30 deletions(-) rename devenv/nix/{containerImageAArch64.nix => containerImage.nix} (80%) delete mode 100644 devenv/nix/containerImageAmd64.nix diff --git a/.github/workflows/publish-chart.yaml b/.github/workflows/publish-chart.yaml index 79ffd4c..98e369f 100644 --- a/.github/workflows/publish-chart.yaml +++ b/.github/workflows/publish-chart.yaml @@ -29,7 +29,7 @@ jobs: DOCKER_PASSWORD: ${{ secrets.RENKU_DOCKER_PASSWORD }} with: flakes-from-devshell: true - flakes: .#csi-rclone-container-layerd + flakes: .#csi-rclone-container-layerd-amd64 script: | export TAG=$(echo ${GITHUB_REF} |cut -d/ -f3) diff --git a/devenv/nix/containerImageAArch64.nix b/devenv/nix/containerImage.nix similarity index 80% rename from devenv/nix/containerImageAArch64.nix rename to devenv/nix/containerImage.nix index 9c00b0e..a0f4c10 100644 --- a/devenv/nix/containerImageAArch64.nix +++ b/devenv/nix/containerImage.nix @@ -1,9 +1,9 @@ -{ pkgs, containerPkgs, csiDriverLinux}: +{ pkgs, containerPkgs, csiDriverLinux, architecture}: pkgs.dockerTools.streamLayeredImage { name = "csi-rclone"; tag = "latest"; - architecture = "aarch64"; + architecture = architecture; contents = [ csiDriverLinux diff --git a/devenv/nix/containerImageAmd64.nix b/devenv/nix/containerImageAmd64.nix deleted file mode 100644 index 4aa587c..0000000 --- a/devenv/nix/containerImageAmd64.nix +++ /dev/null @@ -1,23 +0,0 @@ -{ pkgs, containerPkgs, csiDriverLinux}: - -pkgs.dockerTools.streamLayeredImage { - name = "csi-rclone"; - tag = "latest"; - architecture = "amd64"; - - contents = [ - csiDriverLinux - - containerPkgs.bashInteractive - containerPkgs.cacert - containerPkgs.coreutils - containerPkgs.fuse3 - containerPkgs.gawk - containerPkgs.rclone - ]; - - extraCommands = '' - mkdir -p ./plugin - mkdir -p ./tmp - ''; -} diff --git a/devenv/nix/scripts.nix b/devenv/nix/scripts.nix index 5bad94c..3e49ddb 100644 --- a/devenv/nix/scripts.nix +++ b/devenv/nix/scripts.nix @@ -41,7 +41,7 @@ let text = '' echo "Building container image" - nix build .#csi-rclone-container-layerd && ./result | docker load + nix build .#csi-rclone-container-layerd-amd64 && ./result | docker load echo "Loading container image into kind" kind load docker-image csi-rclone:latest --name csi-rclone-k8s @@ -67,7 +67,7 @@ let text = '' echo "Building container image" - nix build .#csi-rclone-container-layerd && ./result | docker load + nix build .#csi-rclone-container-layerd-amd64 && ./result | docker load echo "Loading container image into kind" kind load docker-image csi-rclone:latest --name csi-rclone-k8s diff --git a/flake.nix b/flake.nix index 9f334ea..e8f36a6 100644 --- a/flake.nix +++ b/flake.nix @@ -14,13 +14,15 @@ goModule = import ./devenv/nix/goModule.nix { inherit pkgs; }; inherit (goModule) csiDriver csiDriverLinux; - dockerLayerdImageAmd64 = import ./devenv/nix/containerImageAmd64.nix { + dockerLayerdImageAmd64 = import ./devenv/nix/containerImage.nix { inherit pkgs csiDriverLinux; containerPkgs = containerPkgsAmd64; + architecture = "amd64"; }; - dockerLayerdImageAArch64 = import ./devenv/nix/containerImageAArch64.nix { + dockerLayerdImageAArch64 = import ./devenv/nix/containerImage.nix { inherit pkgs csiDriverLinux; containerPkgs = containerPkgsAArch64; + architecture = "aarch64"; }; scripts = import ./devenv/nix/scripts.nix { inherit pkgs; }; From 337020dc546643f43c2295c2aa858a794a1e2f2c Mon Sep 17 00:00:00 2001 From: Michael Arndt Date: Mon, 6 May 2024 22:06:18 +0200 Subject: [PATCH 3/6] Try multi arch --- .github/workflows/publish-chart.yaml | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/.github/workflows/publish-chart.yaml b/.github/workflows/publish-chart.yaml index 98e369f..dc5f267 100644 --- a/.github/workflows/publish-chart.yaml +++ b/.github/workflows/publish-chart.yaml @@ -27,31 +27,33 @@ jobs: env: DOCKER_USERNAME: ${{ secrets.RENKU_DOCKER_USERNAME }} DOCKER_PASSWORD: ${{ secrets.RENKU_DOCKER_PASSWORD }} + DOCKER_REPOSITORY: ${{ secrets.RENKU_DOCKER_REPOSITORY }} with: flakes-from-devshell: true flakes: .#csi-rclone-container-layerd-amd64 script: | export TAG=$(echo ${GITHUB_REF} |cut -d/ -f3) + export DOCKER_REPOSITORY=${DOCKER_REPOSITORY:-renku/csi-rclone} nix build .#csi-rclone-container-layerd-aarch64 && ./result | docker load - docker tag csi-rclone:latest renku/csi-rclone:latest-aarch64 - docker tag csi-rclone:latest renku/csi-rclone:${TAG}-aarch64 + docker tag csi-rclone:latest $DOCKER_REPOSITORY:latest-aarch64 + docker tag csi-rclone:latest $DOCKER_REPOSITORY:${TAG}-aarch64 nix build .#csi-rclone-container-layerd-amd64 && ./result | docker load - docker tag csi-rclone:latest renku/csi-rclone:latest-amd64 - docker tag csi-rclone:latest renku/csi-rclone:${TAG}-amd64 + docker tag csi-rclone:latest $DOCKER_REPOSITORY:latest-amd64 + docker tag csi-rclone:latest $DOCKER_REPOSITORY:${TAG}-amd64 echo ${DOCKER_PASSWORD}|docker login -u ${DOCKER_USERNAME} --password-stdin - docker push renku/csi-rclone:latest-aarch64 - docker push renku/csi-rclone:${TAG}-aarch64 - docker push renku/csi-rclone:latest-amd64 - docker push renku/csi-rclone:${TAG}-amd64 + docker push $DOCKER_REPOSITORY:latest-aarch64 + docker push $DOCKER_REPOSITORY:${TAG}-aarch64 + docker push $DOCKER_REPOSITORY:latest-amd64 + docker push $DOCKER_REPOSITORY:${TAG}-amd64 docker manifest create \ - renku/csi-rclone:${TAG} \ - --amend renku/csi-rclone:${TAG}-amd64 \ - --amend renku/csi-rclone:${TAG}-aarch64 + $DOCKER_REPOSITORY:${TAG} \ + --amend $DOCKER_REPOSITORY:${TAG}-amd64 \ + --amend $DOCKER_REPOSITORY:${TAG}-aarch64 - name: Publish chart env: GITHUB_TOKEN: ${{ secrets.RENKUBOT_GITHUB_TOKEN }} From ae35a420b04a769eecbf9819ad3603f4ba61e4d1 Mon Sep 17 00:00:00 2001 From: Michael Arndt Date: Wed, 8 May 2024 22:52:54 +0200 Subject: [PATCH 4/6] Try multi arch --- .github/workflows/publish-chart.yaml | 8 ++++++++ devenv/nix/containerImage.nix | 1 + devenv/nix/goModule.nix | 4 ++-- flake.nix | 22 +++++++++++++++------- 4 files changed, 26 insertions(+), 9 deletions(-) diff --git a/.github/workflows/publish-chart.yaml b/.github/workflows/publish-chart.yaml index dc5f267..fabae2b 100644 --- a/.github/workflows/publish-chart.yaml +++ b/.github/workflows/publish-chart.yaml @@ -50,10 +50,18 @@ jobs: docker push $DOCKER_REPOSITORY:latest-amd64 docker push $DOCKER_REPOSITORY:${TAG}-amd64 + docker manifest create \ + $DOCKER_REPOSITORY:latest \ + --amend $DOCKER_REPOSITORY:latest-amd64 \ + --amend $DOCKER_REPOSITORY:latest-aarch64 docker manifest create \ $DOCKER_REPOSITORY:${TAG} \ --amend $DOCKER_REPOSITORY:${TAG}-amd64 \ --amend $DOCKER_REPOSITORY:${TAG}-aarch64 + + docker push $DOCKER_REPOSITORY:latest + docker push $DOCKER_REPOSITORY:${TAG} + - name: Publish chart env: GITHUB_TOKEN: ${{ secrets.RENKUBOT_GITHUB_TOKEN }} diff --git a/devenv/nix/containerImage.nix b/devenv/nix/containerImage.nix index a0f4c10..bdb46af 100644 --- a/devenv/nix/containerImage.nix +++ b/devenv/nix/containerImage.nix @@ -14,6 +14,7 @@ pkgs.dockerTools.streamLayeredImage { containerPkgs.fuse3 containerPkgs.gawk containerPkgs.rclone + containerPkgs.findutils ]; extraCommands = '' diff --git a/devenv/nix/goModule.nix b/devenv/nix/goModule.nix index ea48220..84db606 100644 --- a/devenv/nix/goModule.nix +++ b/devenv/nix/goModule.nix @@ -1,4 +1,4 @@ -{ pkgs}: +{ pkgs, architecture}: let csiDriver = pkgs.buildGoModule { @@ -17,7 +17,7 @@ let doCheck = false; # tests need docker and kind, which nixbld user might not have access to }; - csiDriverLinux = csiDriver.overrideAttrs (old: old // { CGO_ENABLED = 0; GOOS = "linux"; }); + csiDriverLinux = csiDriver.overrideAttrs (old: old // { CGO_ENABLED = 0; GOOS = "linux"; GOARCH=architecture; }); in { inherit csiDriver csiDriverLinux ; diff --git a/flake.nix b/flake.nix index e8f36a6..f5cac2d 100644 --- a/flake.nix +++ b/flake.nix @@ -6,21 +6,28 @@ outputs = { self, nixpkgs, flake-utils}: flake-utils.lib.eachDefaultSystem (system: let - # Import pkgs (for your platform) and containerPkgs (x86_64-linux) for crosscompile on MacOS + # Import pkgs (for your platform) and containerPkgs (x86_64-linux/aarch64-linux) for crosscompile on MacOS pkgs = nixpkgs.legacyPackages.${system}; containerPkgsAmd64 = import nixpkgs { localSystem = system; crossSystem = "x86_64-linux"; }; containerPkgsAArch64 = import nixpkgs { localSystem = system; crossSystem = "aarch64-linux"; }; - goModule = import ./devenv/nix/goModule.nix { inherit pkgs; }; - inherit (goModule) csiDriver csiDriverLinux; + goModuleAmd64 = import ./devenv/nix/goModule.nix { inherit pkgs; architecture = "amd64";}; + csiDriverAmd64 = goModuleAmd64.csiDriver; + csiDriverLinuxAmd64 = goModuleAmd64.csiDriverLinux; + + goModuleAarch64 = import ./devenv/nix/goModule.nix { inherit pkgs; architecture = "arm64";}; + csiDriverAarch64 = goModuleAarch64.csiDriver; + csiDriverLinuxAarch64 = goModuleAarch64.csiDriverLinux; dockerLayerdImageAmd64 = import ./devenv/nix/containerImage.nix { - inherit pkgs csiDriverLinux; + inherit pkgs; + csiDriverLinux = csiDriverLinuxAmd64; containerPkgs = containerPkgsAmd64; architecture = "amd64"; }; dockerLayerdImageAArch64 = import ./devenv/nix/containerImage.nix { - inherit pkgs csiDriverLinux; + inherit pkgs; + csiDriverLinux = csiDriverLinuxAarch64; containerPkgs = containerPkgsAArch64; architecture = "aarch64"; }; @@ -32,8 +39,9 @@ { devShells.default = import ./devenv/nix/shell.nix { inherit pkgs; }; - packages.csi-rclone-binary = csiDriver; - packages.csi-rclone-binary-linux = csiDriverLinux; + packages.csi-rclone-binary-amd64 = csiDriverAmd64; + packages.csi-rclone-binary-linux-amd64 = csiDriverLinuxAmd64; + packages.csi-rclone-binary-linux-aarch64 = csiDriverLinuxAarch64; packages.csi-rclone-container-layerd-amd64 = dockerLayerdImageAmd64; packages.csi-rclone-container-layerd-aarch64 = dockerLayerdImageAArch64; packages.deployToKind = localDeployScript; From 1ceb38d35feb3518b35f196bcaed24902c466526 Mon Sep 17 00:00:00 2001 From: Michael Arndt Date: Thu, 9 May 2024 09:08:49 +0200 Subject: [PATCH 5/6] Try multi arch --- .github/workflows/publish-chart.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/publish-chart.yaml b/.github/workflows/publish-chart.yaml index fabae2b..f571910 100644 --- a/.github/workflows/publish-chart.yaml +++ b/.github/workflows/publish-chart.yaml @@ -59,8 +59,8 @@ jobs: --amend $DOCKER_REPOSITORY:${TAG}-amd64 \ --amend $DOCKER_REPOSITORY:${TAG}-aarch64 - docker push $DOCKER_REPOSITORY:latest - docker push $DOCKER_REPOSITORY:${TAG} + docker manifest push $DOCKER_REPOSITORY:latest + docker manifest push $DOCKER_REPOSITORY:${TAG} - name: Publish chart env: From 6a9c110da30d034dc7b6f09c629c808f6e4c48ba Mon Sep 17 00:00:00 2001 From: Michael Arndt Date: Thu, 9 May 2024 13:01:12 +0200 Subject: [PATCH 6/6] Try multi arch --- .github/workflows/publish-chart.yaml | 2 +- devenv/nix/containerImage.nix | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/publish-chart.yaml b/.github/workflows/publish-chart.yaml index f571910..d9376ca 100644 --- a/.github/workflows/publish-chart.yaml +++ b/.github/workflows/publish-chart.yaml @@ -43,7 +43,7 @@ jobs: docker tag csi-rclone:latest $DOCKER_REPOSITORY:latest-amd64 docker tag csi-rclone:latest $DOCKER_REPOSITORY:${TAG}-amd64 - echo ${DOCKER_PASSWORD}|docker login -u ${DOCKER_USERNAME} --password-stdin + echo "${DOCKER_PASSWORD}" | docker login -u ${DOCKER_USERNAME} --password-stdin docker push $DOCKER_REPOSITORY:latest-aarch64 docker push $DOCKER_REPOSITORY:${TAG}-aarch64 diff --git a/devenv/nix/containerImage.nix b/devenv/nix/containerImage.nix index bdb46af..1712e04 100644 --- a/devenv/nix/containerImage.nix +++ b/devenv/nix/containerImage.nix @@ -20,5 +20,6 @@ pkgs.dockerTools.streamLayeredImage { extraCommands = '' mkdir -p ./plugin mkdir -p ./tmp + ln /bin/linux_*/csi-rclone-plugin /bin/csi-rclone-plugin ''; }