Skip to content

Commit

Permalink
perf: build docker image with musl
Browse files Browse the repository at this point in the history
  • Loading branch information
cpcloud committed Jan 28, 2022
1 parent f5d15e1 commit 8c21eb5
Show file tree
Hide file tree
Showing 3 changed files with 128 additions and 129 deletions.
6 changes: 5 additions & 1 deletion .github/workflows/ci.yml
Expand Up @@ -229,7 +229,11 @@ jobs:
run: |
set -euo pipefail
nix develop -c protol --in-place --create-package --python-out "$PYTHON_OUT" \
nix run '.#protoletariat' \
-- \
--in-place \
--create-package \
--python-out "$PYTHON_OUT" \
protoc \
--proto-path "$TENSORFLOW_HOME" \
$(find "$TENSORFLOW_HOME" -name '*.proto')
Expand Down
243 changes: 122 additions & 121 deletions flake.nix
Expand Up @@ -33,20 +33,20 @@
, gitignore
, nixpkgs
, pre-commit-hooks
, ...
, poetry2nix
}:
let
mkApp = { py, pkgs }: {
name = "protoletariat${py}";
value = (pkgs.mkPoetry2Nix pkgs."python${py}Optimized").mkPoetryApplication {
value = pkgs.poetry2nix.mkPoetryApplication {
python = pkgs."python${py}Optimized";

projectDir = ./.;
src = pkgs.gitignoreSource ./.;

buildInputs = [ pkgs.sqlite ];
propagatedBuildInputs = with pkgs; [ protobuf ];

overrides = (pkgs.mkPoetry2Nix pkgs."python${py}Optimized").overrides.withDefaults (
overrides = pkgs.poetry2nix.overrides.withDefaults (
import ./poetry-overrides.nix { }
);

Expand All @@ -68,10 +68,10 @@
};
mkEnv = { py, pkgs }: {
name = "protoletariatDevEnv${py}";
value = (pkgs.mkPoetry2Nix pkgs."python${py}").mkPoetryEnv {
value = pkgs.poetry2nix.mkPoetryEnv {
python = pkgs."python${py}";
projectDir = ./.;
overrides = (pkgs.mkPoetry2Nix pkgs."python${py}").overrides.withDefaults (
overrides = pkgs.poetry2nix.overrides.withDefaults (
import ./poetry-overrides.nix { }
);
editablePackageSources = {
Expand All @@ -83,19 +83,14 @@
{
overlay = nixpkgs.lib.composeManyExtensions [
gitignore.overlay
# poetry2nix.overlay
poetry2nix.overlay
(pkgs: super: {
prettierTOML = pkgs.writeShellScriptBin "prettier" ''
${pkgs.nodePackages.prettier}/bin/prettier \
--plugin-search-dir "${pkgs.nodePackages.prettier-plugin-toml}/lib" \
prettierTOML = pkgs.pkgsBuildBuild.writeShellScriptBin "prettier" ''
${pkgs.pkgsBuildBuild.nodePackages.prettier}/bin/prettier \
--plugin-search-dir "${pkgs.pkgsBuildBuild.nodePackages.prettier-plugin-toml}/lib" \
"$@"
'';
protoletariatDevEnv = pkgs.protoletariatDevEnv310;
mkPoetry2Nix = python: pkgs.poetry2nix.override {
poetry = pkgs.poetry.override {
inherit python;
};
};
} // (super.lib.listToAttrs (
super.lib.concatMap
(py: [
Expand Down Expand Up @@ -131,7 +126,6 @@
# tool
stripBytecode = true;
rebuildBytecode = true;

# no need for site customize in the application
includeSiteCustomize = false;
# unused in protoletariat
Expand All @@ -144,7 +138,6 @@
'' + (super.lib.optionalString (!super.stdenv.isDarwin) ''
export NIX_LDFLAGS+=" --strip-all"
'');

# remove optimized bytecode; shaves about 15MB
#
# the application will never be run with any optimization
Expand All @@ -159,114 +152,122 @@
[ "37" "38" "39" "310" ]
)))
];
} // (flake-utils.lib.eachDefaultSystem (system:
let
pkgs = import nixpkgs {
inherit system;
overlays = [ self.overlay ];
};
inherit (pkgs) lib;
in
rec {
packages.protoletariat37 = pkgs.protoletariat37;
packages.protoletariat38 = pkgs.protoletariat38;
packages.protoletariat39 = pkgs.protoletariat39;
packages.protoletariat310 = pkgs.protoletariat310;
packages.protoletariat = packages.protoletariat310;

defaultPackage = packages.protoletariat;

apps.protoletariat = flake-utils.lib.mkApp {
drv = packages.protoletariat;
exePath = "/bin/protol";
};
defaultApp = apps.protoletariat;

packages.protoletariat-image = pkgs.dockerTools.buildLayeredImage {
name = "protoletariat";
config = {
Entrypoint = [ defaultApp.program ];
Command = [ defaultApp.program ];
};
};

checks = {
pre-commit-check = pre-commit-hooks.lib.${system}.run {
src = ./.;
hooks = {
nix-linter = {
enable = true;
entry = lib.mkForce "${pkgs.nix-linter}/bin/nix-linter";
};

nixpkgs-fmt = {
enable = true;
entry = lib.mkForce "${pkgs.nixpkgs-fmt}/bin/nixpkgs-fmt --check";
};

prettier = {
enable = true;
entry = lib.mkForce "${pkgs.prettierTOML}/bin/prettier --check";
types_or = [ "json" "markdown" "toml" "yaml" ];
};

black = {
enable = true;
entry = lib.mkForce "${pkgs.protoletariatDevEnv}/bin/black --check";
types = [ "python" ];
};

isort = {
enable = true;
entry = lib.mkForce "${pkgs.protoletariatDevEnv}/bin/isort --check";
types_or = [ "pyi" "python" ];
};

flake8 = {
enable = true;
entry = "${pkgs.protoletariatDevEnv}/bin/flake8";
types = [ "python" ];
};

pyupgrade = {
enable = true;
entry = "${pkgs.protoletariatDevEnv}/bin/pyupgrade --py37-plus";
types = [ "python" ];
};

mypy = {
enable = true;
entry = "${pkgs.protoletariatDevEnv}/bin/mypy";
types = [ "python" ];
};
} // (
flake-utils.lib.eachDefaultSystem (
localSystem:
let
legacyPkgs = nixpkgs.legacyPackages.${localSystem};
attrs = {
inherit localSystem;
overlays = [ self.overlay ];
} // legacyPkgs.lib.optionalAttrs (!legacyPkgs.stdenv.isDarwin) {
crossSystem = nixpkgs.lib.systems.examples.musl64 // { useLLVM = true; };
};
pkgs = import nixpkgs attrs;
inherit (pkgs) lib;
in
rec {
packages.protoletariat37 = pkgs.protoletariat37;
packages.protoletariat38 = pkgs.protoletariat38;
packages.protoletariat39 = pkgs.protoletariat39;
packages.protoletariat310 = pkgs.protoletariat310;
packages.protoletariat = packages.protoletariat310;

defaultPackage = packages.protoletariat;

apps.protoletariat = flake-utils.lib.mkApp {
drv = packages.protoletariat;
exePath = "/bin/protol";
};
defaultApp = apps.protoletariat;

shellcheck = {
enable = true;
entry = "${pkgs.shellcheck}/bin/shellcheck";
files = "\\.sh$";
types_or = [ "file" ];
packages.protoletariat-image = pkgs.pkgsBuildBuild.dockerTools.buildLayeredImage {
name = "protoletariat";
config = {
Entrypoint = [ defaultApp.program ];
Command = [ defaultApp.program ];
};
};

shfmt = {
enable = true;
entry = "${pkgs.shfmt}/bin/shfmt -i 2 -sr -d -s -l";
files = "\\.sh$";
checks = {
pre-commit-check = pre-commit-hooks.lib.${localSystem}.run {
src = ./.;
hooks = {
nix-linter = {
enable = true;
entry = lib.mkForce "${pkgs.pkgsBuildBuild.nix-linter}/bin/nix-linter";
};

nixpkgs-fmt = {
enable = true;
entry = lib.mkForce "${pkgs.pkgsBuildBuild.nixpkgs-fmt}/bin/nixpkgs-fmt --check";
};

prettier = {
enable = true;
entry = lib.mkForce "${pkgs.pkgsBuildBuild.prettierTOML}/bin/prettier --check";
types_or = [ "json" "markdown" "toml" "yaml" ];
};

black = {
enable = true;
entry = lib.mkForce "${pkgs.protoletariatDevEnv}/bin/black --check";
types = [ "python" ];
};

isort = {
enable = true;
entry = lib.mkForce "${pkgs.protoletariatDevEnv}/bin/isort --check";
types_or = [ "pyi" "python" ];
};

flake8 = {
enable = true;
entry = "${pkgs.protoletariatDevEnv}/bin/flake8";
types = [ "python" ];
};

pyupgrade = {
enable = true;
entry = "${pkgs.protoletariatDevEnv}/bin/pyupgrade --py37-plus";
types = [ "python" ];
};

mypy = {
enable = true;
entry = "${pkgs.protoletariatDevEnv}/bin/mypy";
types = [ "python" ];
};

shellcheck = {
enable = true;
entry = "${pkgs.pkgsBuildBuild.shellcheck}/bin/shellcheck";
files = "\\.sh$";
types_or = [ "file" ];
};

shfmt = {
enable = true;
entry = "${pkgs.pkgsBuildBuild.shfmt}/bin/shfmt -i 2 -sr -d -s -l";
files = "\\.sh$";
};
};
};
};
};
};

devShell = pkgs.mkShell {
nativeBuildInputs = with pkgs; [
buf
grpc
poetry
prettierTOML
protobuf
protoletariatDevEnv
];

inherit (self.checks.${system}.pre-commit-check) shellHook;
};
}));
devShell = pkgs.pkgsBuildBuild.mkShell {
nativeBuildInputs = with pkgs.pkgsBuildBuild; [
buf
dive
grpc
poetry
prettierTOML
protobuf
protoletariatDevEnv
];

inherit (self.checks.${localSystem}.pre-commit-check) shellHook;
};
}
));
}
8 changes: 1 addition & 7 deletions poetry-overrides.nix
@@ -1,7 +1 @@
{ ... }:
self: super:
{
isort = super.isort.overridePythonAttrs (attrs: {
nativeBuildInputs = (attrs.nativeBuildInputs or [ ]) ++ [ self.poetry ];
});
}
{ ... }: _: _: { }

0 comments on commit 8c21eb5

Please sign in to comment.