Skip to content

Commit 85c9b52

Browse files
authored
feat: Nix Shell support (#296)
* feat(nix): add nix-shell support * chore(nix): update niv dependencies * chore(nix): update cargo dependencies * chore(web): update open-api
1 parent 3de66fc commit 85c9b52

File tree

5 files changed

+97
-71
lines changed

5 files changed

+97
-71
lines changed

Cargo.nix

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

default.nix

Lines changed: 48 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,14 @@
11
{ sources ? import ./nix/sources.nix # managed by https://github.com/nmattia/niv
22
, nixpkgs ? sources.nixpkgs
33
, pkgs ? import nixpkgs {
4-
overlays = [
5-
# gomod2nix must be imported as a nixpkgs overlay
6-
(import (sources.gomod2nix+"/overlay.nix"))
7-
];
4+
overlays = [
5+
# gomod2nix must be imported as a nixpkgs overlay
6+
(import (sources.gomod2nix+"/overlay.nix"))
7+
];
88
}
9-
, meta ? pkgs.lib.importJSON ./nix/meta.json
10-
, dockerName ? "docker.stackable.tech/sandbox/${meta.operator.name}"
11-
, dockerTag ? null
12-
}:
13-
rec {
14-
cargo = import ./Cargo.nix {
9+
, cargo ? import ./Cargo.nix {
1510
inherit nixpkgs pkgs; release = false;
1611
defaultCrateOverrides = pkgs.defaultCrateOverrides // {
17-
prost-build = attrs: {
18-
buildInputs = [ pkgs.protobuf ];
19-
};
20-
tonic-reflection = attrs: {
21-
buildInputs = [ pkgs.rustfmt ];
22-
};
23-
stackable-secret-operator = attrs: {
24-
buildInputs = [ pkgs.protobuf pkgs.rustfmt ];
25-
};
26-
krb5-sys = attrs: {
27-
nativeBuildInputs = [ pkgs.pkg-config ];
28-
buildInputs = [ (pkgs.enableDebugging pkgs.krb5) ];
29-
LIBCLANG_PATH = "${pkgs.libclang.lib}/lib";
30-
BINDGEN_EXTRA_CLANG_ARGS = "-I${pkgs.glibc.dev}/include -I${pkgs.clang.cc.lib}/lib/clang/${pkgs.lib.getVersion pkgs.clang.cc}/include";
31-
};
3212
stackable-cockpit-web = attrs: {
3313
nativeBuildInputs = [ pkgs.nodePackages.yarn pkgs.nodejs ];
3414
preConfigure =
@@ -60,7 +40,49 @@ rec {
6040
SWAGGER_UI_DOWNLOAD_URL = "file:///invalid-path/swagger-ui.zip";
6141
};
6242
};
63-
};
43+
}
44+
, meta ? pkgs.lib.importJSON ./nix/meta.json
45+
, dockerName ? "docker.stackable.tech/sandbox/${meta.operator.name}"
46+
, dockerTag ? null
47+
, web ? js2nix.buildEnv {
48+
# js2nix doesn't import peer dependencies, so we use overlays to patch them in explicitly
49+
# https://github.com/canva-public/js2nix/blob/d37912f6cc824e7f41bea7a481af1739ca195c8f/docs/usage.md#overriding
50+
package-json = ./web/package.json;
51+
yarn-lock = ./yarn.lock;
52+
overlays = [
53+
(self: super: {
54+
# TODO: remove once this https://github.com/canva-public/js2nix/issues/20 is resolved
55+
buildNodeModule = pkgs.lib.makeOverridable
56+
(args: (super.buildNodeModule args).override { doCheck = false; });
57+
})
58+
];
59+
}
60+
, goHelmWrapper ? pkgs.buildGoApplication {
61+
pname = "go-helm-wrapper";
62+
version = "0.0";
63+
src = pkgs.runCommand "go-helm-wrapper-src" {}
64+
''
65+
mkdir $out
66+
cp ${./go.mod} $out/go.mod
67+
cp ${./go.sum} $out/go.sum
68+
cp -r ${./rust/helm-sys/go-helm-wrapper} $out/go-helm-wrapper
69+
'';
70+
pwd = ./rust/helm-sys/go-helm-wrapper;
71+
modules = ./gomod2nix.toml;
72+
ldflags = "-buildmode c-archive";
73+
allowGoReference = true;
74+
postBuild =
75+
''
76+
for pkg in $(getGoDirs ""); do
77+
buildFlags="-buildmode c-archive -o $GOPATH/bin/libgo-helm-wrapper.a" buildGoDir build "$pkg"
78+
done
79+
'';
80+
}
81+
, js2nix ? pkgs.callPackage sources.js2nix { nodejs = pkgs.nodejs-18_x; }
82+
, gomod2nix ? pkgs.callPackage sources.gomod2nix {}
83+
}:
84+
rec {
85+
inherit cargo sources pkgs meta;
6486
build = cargo.workspaceMembers.stackable-cockpitd.build.override {
6587
features = [ "ui" ];
6688
};
@@ -117,45 +139,9 @@ rec {
117139

118140
# need to use vendored crate2nix because of https://github.com/kolloch/crate2nix/issues/264
119141
crate2nix = import sources.crate2nix {};
120-
js2nix = pkgs.callPackage sources.js2nix { nodejs = pkgs.nodejs-18_x; };
121-
gomod2nix = pkgs.callPackage sources.gomod2nix {};
122142
tilt = pkgs.tilt;
123143

124-
web = js2nix.buildEnv {
125-
# js2nix doesn't import peer dependencies, so we use overlays to patch them in explicitly
126-
# https://github.com/canva-public/js2nix/blob/d37912f6cc824e7f41bea7a481af1739ca195c8f/docs/usage.md#overriding
127-
package-json = ./web/package.json;
128-
yarn-lock = ./yarn.lock;
129-
overlays = [
130-
(self: super: {
131-
# TODO: remove once this https://github.com/canva-public/js2nix/issues/20 is resolved
132-
buildNodeModule = pkgs.lib.makeOverridable
133-
(args: (super.buildNodeModule args).override { doCheck = false; });
134-
})
135-
];
136-
};
137144

138-
goHelmWrapper = pkgs.buildGoApplication {
139-
pname = "go-helm-wrapper";
140-
version = "0.0";
141-
src = pkgs.runCommand "go-helm-wrapper-src" {}
142-
''
143-
mkdir $out
144-
cp ${./go.mod} $out/go.mod
145-
cp ${./go.sum} $out/go.sum
146-
cp -r ${./rust/helm-sys/go-helm-wrapper} $out/go-helm-wrapper
147-
'';
148-
pwd = ./rust/helm-sys/go-helm-wrapper;
149-
modules = ./gomod2nix.toml;
150-
ldflags = "-buildmode c-archive";
151-
allowGoReference = true;
152-
postBuild =
153-
''
154-
for pkg in $(getGoDirs ""); do
155-
buildFlags="-buildmode c-archive -o $GOPATH/bin/libgo-helm-wrapper.a" buildGoDir build "$pkg"
156-
done
157-
'';
158-
};
159145

160146
regenerateNixLockfiles = pkgs.writeScriptBin "regenerate-nix-lockfiles"
161147
''

nix/sources.json

Lines changed: 6 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

shell.nix

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
let
2+
self = import ./. {};
3+
inherit (self) sources pkgs meta;
4+
5+
cargoDependencySetOfCrate = crate: [ crate ] ++ pkgs.lib.concatMap cargoDependencySetOfCrate (crate.dependencies ++ crate.buildDependencies);
6+
cargoDependencySet = pkgs.lib.unique (pkgs.lib.flatten (pkgs.lib.mapAttrsToList (crateName: crate: cargoDependencySetOfCrate crate.build) self.cargo.workspaceMembers));
7+
in pkgs.mkShell rec {
8+
name = meta.operator.name;
9+
10+
packages = with pkgs; [
11+
## cargo et-al
12+
rustup # this breaks pkg-config if it is in the nativeBuildInputs
13+
14+
## Extra dependencies for use in a pure env (nix-shell --pure)
15+
## These are mosuly useful for maintainers of this shell.nix
16+
## to ensure all the dependencies are caught.
17+
# cacert
18+
# vim nvim nano
19+
];
20+
21+
# derivation runtime dependencies
22+
buildInputs = pkgs.lib.concatMap (crate: crate.buildInputs) cargoDependencySet;
23+
24+
# build time dependencies
25+
nativeBuildInputs = pkgs.lib.concatMap (crate: crate.nativeBuildInputs) cargoDependencySet ++ (with pkgs; [
26+
clang
27+
git
28+
# Replace llvmPackages with llvmPackages_X, where X is the latest LLVM version (at the time of writing, 16)
29+
llvmPackages.bintools
30+
rustup
31+
32+
# additions for this repo
33+
yarn
34+
typescript
35+
vite
36+
go
37+
]);
38+
39+
LIBCLANG_PATH = "${pkgs.libclang.lib}/lib";
40+
BINDGEN_EXTRA_CLANG_ARGS = "-I${pkgs.glibc.dev}/include -I${pkgs.clang}/resource-root/include";
41+
42+
}

web/src/api/schema.d.ts

Lines changed: 0 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)