mirror of
https://github.com/zhaofengli/attic.git
synced 2024-12-14 11:57:30 +00:00
Start migration to flake-parts
This commit is contained in:
parent
fd6e3bdbef
commit
54f4854e9f
4 changed files with 284 additions and 161 deletions
21
flake.lock
21
flake.lock
|
@ -36,6 +36,26 @@
|
|||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-parts": {
|
||||
"inputs": {
|
||||
"nixpkgs-lib": [
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1722555600,
|
||||
"narHash": "sha256-XOQkdLafnb/p9ij77byFQjDf5m5QYl9b2REiVClC+x4=",
|
||||
"owner": "hercules-ci",
|
||||
"repo": "flake-parts",
|
||||
"rev": "8471fe90ad337a8074e957b69ca4d0089218391d",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "hercules-ci",
|
||||
"repo": "flake-parts",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-utils": {
|
||||
"inputs": {
|
||||
"systems": "systems"
|
||||
|
@ -90,6 +110,7 @@
|
|||
"inputs": {
|
||||
"crane": "crane",
|
||||
"flake-compat": "flake-compat",
|
||||
"flake-parts": "flake-parts",
|
||||
"flake-utils": "flake-utils",
|
||||
"nixpkgs": "nixpkgs",
|
||||
"nixpkgs-stable": "nixpkgs-stable"
|
||||
|
|
298
flake.nix
298
flake.nix
|
@ -6,6 +6,11 @@
|
|||
nixpkgs-stable.url = "github:NixOS/nixpkgs/nixos-24.05";
|
||||
flake-utils.url = "github:numtide/flake-utils";
|
||||
|
||||
flake-parts = {
|
||||
url = "github:hercules-ci/flake-parts";
|
||||
inputs.nixpkgs-lib.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
crane = {
|
||||
url = "github:ipetkov/crane";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
|
@ -17,189 +22,160 @@
|
|||
};
|
||||
};
|
||||
|
||||
outputs = { self, nixpkgs, nixpkgs-stable, flake-utils, crane, ... }: let
|
||||
supportedSystems = flake-utils.lib.defaultSystems ++ [ "riscv64-linux" ];
|
||||
outputs = inputs @ { self, flake-parts, ... }: let
|
||||
supportedSystems = inputs.flake-utils.lib.defaultSystems ++ [ "riscv64-linux" ];
|
||||
|
||||
inherit (inputs.nixpkgs) lib;
|
||||
|
||||
makeCranePkgs = pkgs: let
|
||||
craneLib = crane.mkLib pkgs;
|
||||
craneLib = inputs.crane.mkLib pkgs;
|
||||
in pkgs.callPackage ./crane.nix { inherit craneLib; };
|
||||
in flake-utils.lib.eachSystem supportedSystems (system: let
|
||||
pkgs = import nixpkgs {
|
||||
inherit system;
|
||||
overlays = [];
|
||||
};
|
||||
cranePkgs = makeCranePkgs pkgs;
|
||||
|
||||
internalMatrix = lib.mapAttrs (_: nix: let
|
||||
cranePkgs' = cranePkgs.override { inherit nix; };
|
||||
in {
|
||||
inherit (cranePkgs') attic-tests cargoArtifacts;
|
||||
}) {
|
||||
"2.20" = pkgs.nixVersions.nix_2_20;
|
||||
"2.24" = pkgs.nixVersions.nix_2_24;
|
||||
"default" = pkgs.nix;
|
||||
};
|
||||
modules = builtins.foldl' (acc: f: f acc) ./flake [
|
||||
builtins.readDir
|
||||
(lib.filterAttrs (name: type:
|
||||
type == "regular" && lib.hasSuffix ".nix" name
|
||||
))
|
||||
(lib.mapAttrsToList (name: _:
|
||||
lib.path.append ./flake name
|
||||
))
|
||||
];
|
||||
|
||||
pkgsStable = import nixpkgs-stable {
|
||||
inherit system;
|
||||
overlays = [];
|
||||
};
|
||||
cranePkgsStable = makeCranePkgs pkgsStable;
|
||||
in flake-parts.lib.mkFlake { inherit inputs; } {
|
||||
imports = modules;
|
||||
systems = supportedSystems;
|
||||
|
||||
inherit (pkgs) lib;
|
||||
in rec {
|
||||
inherit internalMatrix;
|
||||
debug = true;
|
||||
|
||||
packages = {
|
||||
default = packages.attic;
|
||||
# old flake
|
||||
flake = inputs.flake-utils.lib.eachSystem supportedSystems (system: let
|
||||
pkgs = import inputs.nixpkgs {
|
||||
inherit system;
|
||||
overlays = [];
|
||||
};
|
||||
cranePkgs = makeCranePkgs pkgs;
|
||||
|
||||
inherit (cranePkgs) attic attic-client attic-server;
|
||||
|
||||
attic-nixpkgs = pkgs.callPackage ./package.nix { };
|
||||
|
||||
attic-ci-installer = pkgs.callPackage ./ci-installer.nix {
|
||||
inherit self;
|
||||
internalMatrix = lib.mapAttrs (_: nix: let
|
||||
cranePkgs' = cranePkgs.override { inherit nix; };
|
||||
in {
|
||||
inherit (cranePkgs') attic-tests cargoArtifacts;
|
||||
}) {
|
||||
"2.20" = pkgs.nixVersions.nix_2_20;
|
||||
"2.24" = pkgs.nixVersions.nix_2_24;
|
||||
"default" = pkgs.nix;
|
||||
};
|
||||
|
||||
book = pkgs.callPackage ./book {
|
||||
attic = packages.attic;
|
||||
pkgsStable = import inputs.nixpkgs-stable {
|
||||
inherit system;
|
||||
overlays = [];
|
||||
};
|
||||
} // (lib.optionalAttrs (system != "x86_64-darwin") {
|
||||
# Unfortunately, x86_64-darwin fails to evaluate static builds
|
||||
# TODO: Make this work with Crane
|
||||
attic-static = (pkgs.pkgsStatic.callPackage ./package.nix {
|
||||
nix = pkgs.pkgsStatic.nix.overrideAttrs (old: {
|
||||
patches = (old.patches or []) ++ [
|
||||
# To be submitted
|
||||
(pkgs.fetchpatch {
|
||||
url = "https://github.com/NixOS/nix/compare/3172c51baff5c81362fcdafa2e28773c2949c660...6b09a02536d5946458b537dfc36b7d268c9ce823.diff";
|
||||
hash = "sha256-LFLq++J2XitEWQ0o57ihuuUlYk2PgUr11h7mMMAEe3c=";
|
||||
})
|
||||
cranePkgsStable = makeCranePkgs pkgsStable;
|
||||
|
||||
inherit (pkgs) lib;
|
||||
in rec {
|
||||
inherit internalMatrix;
|
||||
|
||||
packages = {
|
||||
default = packages.attic;
|
||||
|
||||
inherit (cranePkgs) attic attic-client attic-server;
|
||||
|
||||
attic-nixpkgs = pkgs.callPackage ./package.nix { };
|
||||
|
||||
attic-ci-installer = pkgs.callPackage ./ci-installer.nix {
|
||||
inherit self;
|
||||
};
|
||||
|
||||
book = pkgs.callPackage ./book {
|
||||
attic = packages.attic;
|
||||
};
|
||||
} // (lib.optionalAttrs (system != "x86_64-darwin") {
|
||||
# Unfortunately, x86_64-darwin fails to evaluate static builds
|
||||
# TODO: Make this work with Crane
|
||||
attic-static = (pkgs.pkgsStatic.callPackage ./package.nix {
|
||||
nix = pkgs.pkgsStatic.nix.overrideAttrs (old: {
|
||||
patches = (old.patches or []) ++ [
|
||||
# To be submitted
|
||||
(pkgs.fetchpatch {
|
||||
url = "https://github.com/NixOS/nix/compare/3172c51baff5c81362fcdafa2e28773c2949c660...6b09a02536d5946458b537dfc36b7d268c9ce823.diff";
|
||||
hash = "sha256-LFLq++J2XitEWQ0o57ihuuUlYk2PgUr11h7mMMAEe3c=";
|
||||
})
|
||||
];
|
||||
});
|
||||
}).overrideAttrs (old: {
|
||||
nativeBuildInputs = (old.nativeBuildInputs or []) ++ [
|
||||
pkgs.nukeReferences
|
||||
];
|
||||
|
||||
# Read by pkg_config crate (do some autodetection in build.rs?)
|
||||
PKG_CONFIG_ALL_STATIC = "1";
|
||||
|
||||
"NIX_CFLAGS_LINK_${pkgs.pkgsStatic.stdenv.cc.suffixSalt}" = "-lc";
|
||||
RUSTFLAGS = "-C relocation-model=static";
|
||||
|
||||
postFixup = (old.postFixup or "") + ''
|
||||
rm -f $out/nix-support/propagated-build-inputs
|
||||
nuke-refs $out/bin/attic
|
||||
'';
|
||||
});
|
||||
}).overrideAttrs (old: {
|
||||
nativeBuildInputs = (old.nativeBuildInputs or []) ++ [
|
||||
pkgs.nukeReferences
|
||||
];
|
||||
|
||||
# Read by pkg_config crate (do some autodetection in build.rs?)
|
||||
PKG_CONFIG_ALL_STATIC = "1";
|
||||
attic-client-static = packages.attic-static.override {
|
||||
clientOnly = true;
|
||||
};
|
||||
}) // (lib.optionalAttrs pkgs.stdenv.isLinux {
|
||||
attic-server-image = pkgs.dockerTools.buildImage {
|
||||
name = "attic-server";
|
||||
tag = "main";
|
||||
copyToRoot = [
|
||||
# Debugging utilities for `fly ssh console`
|
||||
pkgs.busybox
|
||||
packages.attic-server
|
||||
|
||||
"NIX_CFLAGS_LINK_${pkgs.pkgsStatic.stdenv.cc.suffixSalt}" = "-lc";
|
||||
RUSTFLAGS = "-C relocation-model=static";
|
||||
|
||||
postFixup = (old.postFixup or "") + ''
|
||||
rm -f $out/nix-support/propagated-build-inputs
|
||||
nuke-refs $out/bin/attic
|
||||
'';
|
||||
# Now required by the fly.io sshd
|
||||
pkgs.dockerTools.fakeNss
|
||||
];
|
||||
config = {
|
||||
Entrypoint = [ "${packages.attic-server}/bin/atticd" ];
|
||||
Env = [
|
||||
"SSL_CERT_FILE=${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt"
|
||||
];
|
||||
};
|
||||
};
|
||||
});
|
||||
|
||||
attic-client-static = packages.attic-static.override {
|
||||
clientOnly = true;
|
||||
checks = let
|
||||
makeIntegrationTests = pkgs: import ./integration-tests {
|
||||
pkgs = import inputs.nixpkgs {
|
||||
inherit system;
|
||||
overlays = [ self.overlays.default ];
|
||||
};
|
||||
flake = self;
|
||||
};
|
||||
unstableTests = makeIntegrationTests pkgs;
|
||||
stableTests = lib.mapAttrs' (name: lib.nameValuePair "stable-${name}") (makeIntegrationTests pkgsStable);
|
||||
in lib.optionalAttrs pkgs.stdenv.isLinux (unstableTests // stableTests);
|
||||
}) // {
|
||||
overlays = {
|
||||
default = final: prev: let
|
||||
cranePkgs = makeCranePkgs final;
|
||||
in {
|
||||
inherit (cranePkgs) attic attic-client attic-server;
|
||||
};
|
||||
};
|
||||
}) // (lib.optionalAttrs pkgs.stdenv.isLinux {
|
||||
attic-server-image = pkgs.dockerTools.buildImage {
|
||||
name = "attic-server";
|
||||
tag = "main";
|
||||
copyToRoot = [
|
||||
# Debugging utilities for `fly ssh console`
|
||||
pkgs.busybox
|
||||
packages.attic-server
|
||||
|
||||
# Now required by the fly.io sshd
|
||||
pkgs.dockerTools.fakeNss
|
||||
];
|
||||
config = {
|
||||
Entrypoint = [ "${packages.attic-server}/bin/atticd" ];
|
||||
Env = [
|
||||
"SSL_CERT_FILE=${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt"
|
||||
nixosModules = {
|
||||
atticd = {
|
||||
imports = [
|
||||
./nixos/atticd.nix
|
||||
];
|
||||
|
||||
services.atticd.useFlakeCompatOverlay = false;
|
||||
|
||||
nixpkgs.overlays = [
|
||||
self.overlays.default
|
||||
];
|
||||
};
|
||||
};
|
||||
});
|
||||
|
||||
devShells = {
|
||||
default = pkgs.mkShell {
|
||||
inputsFrom = with packages; [ attic book ];
|
||||
nativeBuildInputs = with pkgs; [
|
||||
rustc
|
||||
|
||||
rustfmt clippy
|
||||
cargo-expand
|
||||
# Temporary broken: https://github.com/NixOS/nixpkgs/pull/335152
|
||||
# cargo-outdated
|
||||
cargo-edit
|
||||
tokio-console
|
||||
|
||||
sqlite-interactive
|
||||
|
||||
editorconfig-checker
|
||||
|
||||
flyctl
|
||||
|
||||
wrk
|
||||
|
||||
llvmPackages_latest.bintools
|
||||
wrangler worker-build wasm-pack wasm-bindgen-cli
|
||||
] ++ (lib.optionals pkgs.stdenv.isLinux [
|
||||
linuxPackages.perf
|
||||
]);
|
||||
|
||||
NIX_PATH = "nixpkgs=${pkgs.path}";
|
||||
RUST_SRC_PATH = "${pkgs.rustPlatform.rustcSrc}/library";
|
||||
|
||||
# See comment in `attic/build.rs`
|
||||
NIX_INCLUDE_PATH = "${lib.getDev pkgs.nix}/include";
|
||||
|
||||
ATTIC_DISTRIBUTOR = "dev";
|
||||
};
|
||||
|
||||
demo = pkgs.mkShell {
|
||||
nativeBuildInputs = [
|
||||
packages.default
|
||||
];
|
||||
|
||||
shellHook = ''
|
||||
>&2 echo
|
||||
>&2 echo '🚀 Run `atticd` to get started!'
|
||||
>&2 echo
|
||||
'';
|
||||
};
|
||||
};
|
||||
devShell = devShells.default;
|
||||
|
||||
checks = let
|
||||
makeIntegrationTests = pkgs: import ./integration-tests {
|
||||
pkgs = import nixpkgs {
|
||||
inherit system;
|
||||
overlays = [ self.overlays.default ];
|
||||
};
|
||||
flake = self;
|
||||
};
|
||||
unstableTests = makeIntegrationTests pkgs;
|
||||
stableTests = lib.mapAttrs' (name: lib.nameValuePair "stable-${name}") (makeIntegrationTests pkgsStable);
|
||||
in lib.optionalAttrs pkgs.stdenv.isLinux (unstableTests // stableTests);
|
||||
}) // {
|
||||
overlays = {
|
||||
default = final: prev: let
|
||||
cranePkgs = makeCranePkgs final;
|
||||
in {
|
||||
inherit (cranePkgs) attic attic-client attic-server;
|
||||
};
|
||||
};
|
||||
|
||||
nixosModules = {
|
||||
atticd = {
|
||||
imports = [
|
||||
./nixos/atticd.nix
|
||||
];
|
||||
|
||||
services.atticd.useFlakeCompatOverlay = false;
|
||||
|
||||
nixpkgs.overlays = [
|
||||
self.overlays.default
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
111
flake/devshells.nix
Normal file
111
flake/devshells.nix
Normal file
|
@ -0,0 +1,111 @@
|
|||
# Development shells
|
||||
|
||||
toplevel @ { lib, flake-parts-lib, ... }:
|
||||
let
|
||||
inherit (lib)
|
||||
mkOption
|
||||
types
|
||||
;
|
||||
inherit (flake-parts-lib)
|
||||
mkPerSystemOption
|
||||
;
|
||||
in
|
||||
{
|
||||
options = {
|
||||
perSystem = mkPerSystemOption {
|
||||
options.attic.devshell = {
|
||||
packageSets = mkOption {
|
||||
type = types.attrsOf (types.listOf types.package);
|
||||
default = {};
|
||||
};
|
||||
extraPackages = mkOption {
|
||||
type = types.listOf types.package;
|
||||
default = [];
|
||||
};
|
||||
extraArgs = mkOption {
|
||||
type = types.attrsOf types.unspecified;
|
||||
default = {};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
config = {
|
||||
perSystem = { self', pkgs, config, ... }: let
|
||||
cfg = config.attic.devshell;
|
||||
in {
|
||||
attic.devshell.packageSets = with pkgs; {
|
||||
rust = [
|
||||
rustc
|
||||
|
||||
cargo-expand
|
||||
# Temporary broken: https://github.com/NixOS/nixpkgs/pull/335152
|
||||
# cargo-outdated
|
||||
cargo-edit
|
||||
tokio-console
|
||||
];
|
||||
|
||||
linters = [
|
||||
clippy
|
||||
rustfmt
|
||||
|
||||
editorconfig-checker
|
||||
];
|
||||
|
||||
utils = [
|
||||
jq
|
||||
just
|
||||
];
|
||||
|
||||
ops = [
|
||||
postgresql
|
||||
sqlite-interactive
|
||||
|
||||
flyctl
|
||||
wrangler
|
||||
];
|
||||
|
||||
bench = [
|
||||
wrk
|
||||
] ++ lib.optionals pkgs.stdenv.isLinux [
|
||||
linuxPackages.perf
|
||||
];
|
||||
|
||||
wasm = [
|
||||
llvmPackages_latest.bintools
|
||||
worker-build wasm-pack wasm-bindgen-cli
|
||||
];
|
||||
};
|
||||
|
||||
devShells.default = pkgs.mkShell (lib.recursiveUpdate {
|
||||
inputsFrom = [
|
||||
self'.packages.attic
|
||||
self'.packages.book
|
||||
];
|
||||
|
||||
packages = lib.flatten (lib.attrValues cfg.packageSets);
|
||||
|
||||
env = {
|
||||
ATTIC_DISTRIBUTOR = toplevel.config.attic.distributor;
|
||||
|
||||
RUST_SRC_PATH = "${pkgs.rustPlatform.rustcSrc}/library";
|
||||
|
||||
NIX_PATH = "nixpkgs=${pkgs.path}";
|
||||
|
||||
# See comment in `attic/build.rs`
|
||||
NIX_INCLUDE_PATH = "${lib.getDev pkgs.nixVersions.nix_2_24}/include";
|
||||
};
|
||||
} cfg.extraArgs);
|
||||
|
||||
devShells.demo = pkgs.mkShell {
|
||||
packages = [ self'.packages.default ];
|
||||
|
||||
shellHook = ''
|
||||
>&2 echo
|
||||
>&2 echo '🚀 Run `atticd` to get started!'
|
||||
>&2 echo
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
15
flake/distributor.nix
Normal file
15
flake/distributor.nix
Normal file
|
@ -0,0 +1,15 @@
|
|||
{ lib, flake-parts-lib, ... }:
|
||||
let
|
||||
inherit (lib)
|
||||
mkOption
|
||||
types
|
||||
;
|
||||
in
|
||||
{
|
||||
options = {
|
||||
attic.distributor = mkOption {
|
||||
type = types.str;
|
||||
default = "dev";
|
||||
};
|
||||
};
|
||||
}
|
Loading…
Reference in a new issue