aboutsummaryrefslogtreecommitdiff
path: root/shell.nix
blob: 480bc349d050dba141a6696863b8666c77005f94 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
{
  system ? builtins.currentSystem,
}:

with import ./nix/common.nix;

let
  pkgs = import pkgsSrc {
    inherit system;
    overlays = [ cargo2nixOverlay ];
  };
  kaniko = (import ./nix/kaniko.nix) pkgs;
  manifest-tool = (import ./nix/manifest-tool.nix) pkgs;
  winscp = (import ./nix/winscp.nix) pkgs;

in
  {
    /* --- Rust Shell ---
     * Use it to compile Garage
     */
    rust = pkgs.mkShell {
      nativeBuildInputs = [
        #pkgs.rustPlatform.rust.rustc
        pkgs.rustPlatform.rust.cargo
        #pkgs.clippy
        pkgs.rustfmt
        #pkgs.perl
        #pkgs.protobuf
        #pkgs.pkg-config
        #pkgs.openssl
        pkgs.file
        #cargo2nix.packages.x86_64-linux.cargo2nix
      ];
    };

    /* --- Integration shell ---
     * Use it to test Garage with common S3 clients
     */
    integration = pkgs.mkShell {
      nativeBuildInputs = [
        winscp
        pkgs.s3cmd
        pkgs.awscli2
        pkgs.minio-client
        pkgs.rclone
        pkgs.socat
        pkgs.psmisc
        pkgs.which
        pkgs.openssl
        pkgs.curl
        pkgs.jq
      ];
    };

    /* --- Release shell ---
     * A shell built to make releasing easier
     */
    release = pkgs.mkShell {
      shellHook = ''
function refresh_toolchain {
  pass show deuxfleurs/nix_priv_key > /tmp/nix-signing-key.sec
  nix copy \
    --to 's3://nix?endpoint=garage.deuxfleurs.fr&region=garage&secret-key=/tmp/nix-signing-key.sec' \
    $(nix-store -qR \
      $(nix-build --no-build-output --no-out-link nix/toolchain.nix))
  rm /tmp/nix-signing-key.sec
}

function refresh_cache {
  pass show deuxfleurs/nix_priv_key > /tmp/nix-signing-key.sec
  for attr in clippy.amd64 test.amd64 pkgs.{amd64,i386,arm,arm64}.{debug,release}; do
    echo "Updating cache for ''${attr}"
    derivation=$(nix-instantiate --attr ''${attr})
    nix copy \
      --to 's3://nix?endpoint=garage.deuxfleurs.fr&region=garage&secret-key=/tmp/nix-signing-key.sec' \
      $(nix-store -qR ''${derivation%\!bin})
  done
  rm /tmp/nix-signing-key.sec
}

function to_s3 {
  aws \
      --endpoint-url https://garage.deuxfleurs.fr \
      --region garage \
    s3 cp \
      ./result-bin/bin/garage \
      s3://garagehq.deuxfleurs.fr/_releases/''${DRONE_TAG:-$DRONE_COMMIT}/''${TARGET}/garage
}

function to_docker {
  executor  \
    --force \
    --customPlatform="''${DOCKER_PLATFORM}" \
    --destination "''${CONTAINER_NAME}:''${CONTAINER_TAG}" \
    --context dir://`pwd` \
    --verbosity=debug
}

function multiarch_docker {
        manifest-tool push from-spec <(cat <<EOF
image: dxflrs/garage:''${CONTAINER_TAG}
manifests:
  -
    image: dxflrs/arm64_garage:''${CONTAINER_TAG}
    platform:
      architecture: arm64
      os: linux
  -
    image: dxflrs/amd64_garage:''${CONTAINER_TAG}
    platform:
      architecture: amd64
      os: linux
  -
    image: dxflrs/386_garage:''${CONTAINER_TAG}
    platform:
      architecture: 386
      os: linux
  -
    image: dxflrs/arm_garage:''${CONTAINER_TAG}
    platform:
      architecture: arm
      os: linux
EOF
        )
}

function refresh_index {
  aws \
      --endpoint-url https://garage.deuxfleurs.fr \
      --region garage \
    s3 ls \
      --recursive \
      s3://garagehq.deuxfleurs.fr/_releases/ \
  > aws-list.txt

  nix-build nix/build_index.nix

  aws \
      --endpoint-url https://garage.deuxfleurs.fr \
      --region garage \
    s3 cp \
      result/share/_releases.json \
      s3://garagehq.deuxfleurs.fr/

  aws \
      --endpoint-url https://garage.deuxfleurs.fr \
      --region garage \
    s3 cp \
      result/share/_releases.html \
      s3://garagehq.deuxfleurs.fr/
}
        '';
      nativeBuildInputs = [
        pkgs.awscli2
        kaniko 
        manifest-tool
      ];
    };
  }