Desktop: Improve Nix build times with more caching (#4007)
This commit is contained in:
parent
211111a01f
commit
0eb440db14
|
|
@ -643,7 +643,7 @@ jobs:
|
||||||
run: sudo rm -rf /usr/share/dotnet /usr/local/lib/android /opt/ghc /opt/hostedtoolcache
|
run: sudo rm -rf /usr/share/dotnet /usr/local/lib/android /opt/ghc /opt/hostedtoolcache
|
||||||
|
|
||||||
- name: 📦 Build Nix package
|
- name: 📦 Build Nix package
|
||||||
run: nix build .#graphite${{ inputs.debug && '-dev' || '' }} --no-link --print-out-paths
|
run: nix build .#graphite${{ inputs.debug && '-dev' || '' }} --no-link --print-out-paths --print-build-logs
|
||||||
|
|
||||||
- name: 📤 Push to Nix cache
|
- name: 📤 Push to Nix cache
|
||||||
env:
|
env:
|
||||||
|
|
@ -653,8 +653,16 @@ jobs:
|
||||||
nix run nixpkgs#cachix -- authtoken $NIX_CACHE_AUTH_TOKEN
|
nix run nixpkgs#cachix -- authtoken $NIX_CACHE_AUTH_TOKEN
|
||||||
nix build .#graphite${{ inputs.debug && '-dev' || '' }} --no-link --print-out-paths | nix run nixpkgs#cachix -- push $NIX_CACHE_NAME
|
nix build .#graphite${{ inputs.debug && '-dev' || '' }} --no-link --print-out-paths | nix run nixpkgs#cachix -- push $NIX_CACHE_NAME
|
||||||
|
|
||||||
|
- name: 📤 Push Dependencies to dev Nix cache
|
||||||
|
env:
|
||||||
|
NIX_CACHE_AUTH_TOKEN: ${{ secrets.NIX_CACHE_AUTH_TOKEN_DEV }}
|
||||||
|
NIX_CACHE_NAME: graphite-dev
|
||||||
|
run: |
|
||||||
|
nix run nixpkgs#cachix -- authtoken $NIX_CACHE_AUTH_TOKEN
|
||||||
|
nix build .#graphite${{ inputs.debug && '-dev' || '' }}.deps --no-link --print-out-paths | nix run nixpkgs#cachix -- push $NIX_CACHE_NAME
|
||||||
|
|
||||||
- name: 🏗 Build Linux bundle
|
- name: 🏗 Build Linux bundle
|
||||||
run: nix build .#graphite${{ inputs.debug && '-dev' || '' }}-bundle.tar.xz && cp ./result ./graphite-linux-bundle.tar.xz
|
run: nix build .#graphite-bundle${{ inputs.debug && '-dev' || '' }}.tar.xz && cp ./result ./graphite-linux-bundle.tar.xz
|
||||||
|
|
||||||
- name: 📦 Upload Linux bundle
|
- name: 📦 Upload Linux bundle
|
||||||
uses: actions/upload-artifact@v6
|
uses: actions/upload-artifact@v6
|
||||||
|
|
@ -692,7 +700,7 @@ jobs:
|
||||||
|
|
||||||
- name: 🏗 Build Flatpak
|
- name: 🏗 Build Flatpak
|
||||||
run: |
|
run: |
|
||||||
nix build .#graphite${{ inputs.debug && '-dev' || '' }}-flatpak-manifest
|
nix build .#graphite-flatpak-manifest${{ inputs.debug && '-dev' || '' }}
|
||||||
|
|
||||||
rm -rf .flatpak
|
rm -rf .flatpak
|
||||||
mkdir -p .flatpak
|
mkdir -p .flatpak
|
||||||
|
|
|
||||||
|
|
@ -35,3 +35,11 @@ jobs:
|
||||||
raster_nodes_shaders_entrypoint.wgsl \
|
raster_nodes_shaders_entrypoint.wgsl \
|
||||||
"${{ github.sha }} raster_nodes_shaders_entrypoint.wgsl" \
|
"${{ github.sha }} raster_nodes_shaders_entrypoint.wgsl" \
|
||||||
${{ secrets.ARTIFACTS_REPO_TOKEN }}
|
${{ secrets.ARTIFACTS_REPO_TOKEN }}
|
||||||
|
|
||||||
|
- name: 📤 Push shaders to dev Nix cache
|
||||||
|
env:
|
||||||
|
NIX_CACHE_AUTH_TOKEN: ${{ secrets.NIX_CACHE_AUTH_TOKEN_DEV }}
|
||||||
|
NIX_CACHE_NAME: graphite-dev
|
||||||
|
run: |
|
||||||
|
nix run nixpkgs#cachix -- authtoken $NIX_CACHE_AUTH_TOKEN
|
||||||
|
nix build .#graphite-raster-nodes-shaders --no-link --print-out-paths | nix run nixpkgs#cachix -- push $NIX_CACHE_NAME
|
||||||
|
|
|
||||||
|
|
@ -60,9 +60,9 @@ in
|
||||||
graphite-raster-nodes-shaders = lib.call ./pkgs/graphite-raster-nodes-shaders.nix;
|
graphite-raster-nodes-shaders = lib.call ./pkgs/graphite-raster-nodes-shaders.nix;
|
||||||
graphite-branding = lib.call ./pkgs/graphite-branding.nix;
|
graphite-branding = lib.call ./pkgs/graphite-branding.nix;
|
||||||
graphite-bundle = (lib.call ./pkgs/graphite-bundle.nix) { };
|
graphite-bundle = (lib.call ./pkgs/graphite-bundle.nix) { };
|
||||||
graphite-dev-bundle = (lib.call ./pkgs/graphite-bundle.nix) { graphite = graphite-dev; };
|
graphite-bundle-dev = (lib.call ./pkgs/graphite-bundle.nix) { graphite = graphite-dev; };
|
||||||
graphite-flatpak-manifest = (lib.call ./pkgs/graphite-flatpak-manifest.nix) { };
|
graphite-flatpak-manifest = (lib.call ./pkgs/graphite-flatpak-manifest.nix) { };
|
||||||
graphite-dev-flatpak-manifest = (lib.call ./pkgs/graphite-flatpak-manifest.nix) { graphite-bundle = graphite-dev-bundle; };
|
graphite-flatpak-manifest-dev = (lib.call ./pkgs/graphite-flatpak-manifest.nix) { graphite-bundle = graphite-bundle-dev; };
|
||||||
|
|
||||||
# TODO: graphene-cli = lib.call ./pkgs/graphene-cli.nix;
|
# TODO: graphene-cli = lib.call ./pkgs/graphene-cli.nix;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,28 @@
|
||||||
{ pkgs, inputs, ... }:
|
{
|
||||||
|
pkgs,
|
||||||
|
inputs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
{
|
{
|
||||||
lib = inputs.crane.mkLib pkgs;
|
lib = (inputs.crane.mkLib pkgs) // {
|
||||||
|
vendorCargoDepsFlatten =
|
||||||
|
src:
|
||||||
|
pkgs.stdenvNoCC.mkDerivation (finalAttrs: {
|
||||||
|
name = "graphite-cargo-vendored";
|
||||||
|
inherit src;
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
cp -rL --no-preserve=mode "$src" "$out"
|
||||||
|
chmod -R u+w "$out"
|
||||||
|
find "$out" -type f -print0 | xargs -r -0 sed -i "s|$src|$out|g"
|
||||||
|
'';
|
||||||
|
|
||||||
|
disallowedReferences = [ finalAttrs.src ];
|
||||||
|
|
||||||
|
dontUnpack = true;
|
||||||
|
dontConfigure = true;
|
||||||
|
dontBuild = true;
|
||||||
|
});
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,16 +1,16 @@
|
||||||
{ info, deps, ... }:
|
{
|
||||||
|
info,
|
||||||
|
deps,
|
||||||
|
self,
|
||||||
|
system,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
(deps.crane.lib.overrideToolchain (_: deps.rustGPU.toolchain)).buildPackage {
|
(deps.crane.lib.overrideToolchain (_: deps.rustGPU.toolchain)).buildPackage {
|
||||||
pname = "raster-nodes-shaders";
|
pname = "graphite-raster-nodes-shaders";
|
||||||
inherit (info) version src;
|
inherit (info) version src;
|
||||||
|
|
||||||
cargoVendorDir = deps.crane.lib.vendorMultipleCargoDeps {
|
inherit (self.packages.${system}.graphite) cargoVendorDir cargoArtifacts;
|
||||||
inherit (deps.crane.lib.findCargoFiles (deps.crane.lib.cleanCargoSource info.src)) cargoConfigs;
|
|
||||||
cargoLockList = [
|
|
||||||
"${info.src}/Cargo.lock"
|
|
||||||
"${deps.rustGPU.toolchain.availableComponents.rust-src}/lib/rustlib/src/rust/library/Cargo.lock"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
strictDeps = true;
|
strictDeps = true;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -14,12 +14,70 @@
|
||||||
|
|
||||||
let
|
let
|
||||||
branding = self.packages.${system}.graphite-branding;
|
branding = self.packages.${system}.graphite-branding;
|
||||||
cargoVendorDir = deps.crane.lib.vendorCargoDeps { inherit (info) src; };
|
libs = [
|
||||||
resourcesCommon = {
|
pkgs.wayland
|
||||||
pname = "${info.pname}-resources";
|
pkgs.vulkan-loader
|
||||||
inherit (info) version src;
|
pkgs.libGL
|
||||||
inherit cargoVendorDir;
|
pkgs.openssl
|
||||||
|
pkgs.libraw
|
||||||
|
# X11 Support
|
||||||
|
pkgs.libxkbcommon
|
||||||
|
pkgs.libXcursor
|
||||||
|
pkgs.libxcb
|
||||||
|
pkgs.libX11
|
||||||
|
];
|
||||||
|
|
||||||
|
common = {
|
||||||
|
inherit (info) pname version src;
|
||||||
|
cargoVendorDir = deps.crane.lib.vendorCargoDepsFlatten (
|
||||||
|
deps.crane.lib.vendorMultipleCargoDeps {
|
||||||
|
inherit (deps.crane.lib.findCargoFiles (deps.crane.lib.cleanCargoSource info.src)) cargoConfigs;
|
||||||
|
cargoLockList = [
|
||||||
|
"${info.src}/Cargo.lock"
|
||||||
|
"${deps.rustGPU.toolchain.availableComponents.rust-src}/lib/rustlib/src/rust/library/Cargo.lock"
|
||||||
|
];
|
||||||
|
}
|
||||||
|
);
|
||||||
|
buildInputs = libs;
|
||||||
strictDeps = true;
|
strictDeps = true;
|
||||||
|
doCheck = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
cargoArtifacts = deps.crane.lib.buildDepsOnly (
|
||||||
|
common
|
||||||
|
// {
|
||||||
|
nativeBuildInputs = [
|
||||||
|
pkgs.pkg-config
|
||||||
|
pkgs.lld
|
||||||
|
];
|
||||||
|
env = deps.cef.env;
|
||||||
|
buildPhase =
|
||||||
|
let
|
||||||
|
profile = if dev then "dev" else "release";
|
||||||
|
in
|
||||||
|
''
|
||||||
|
cargo check --profile ${profile} --locked -p graphite-desktop-platform-linux
|
||||||
|
cargo build --profile ${profile} --locked -p graphite-desktop-platform-linux
|
||||||
|
|
||||||
|
cargo check --profile ${profile} --target wasm32-unknown-unknown --locked -p graphite-wasm-wrapper --no-default-features --features native
|
||||||
|
cargo build --profile ${profile} --target wasm32-unknown-unknown --locked -p graphite-wasm-wrapper --no-default-features --features native
|
||||||
|
|
||||||
|
cargo check --locked -p third-party-licenses --features desktop
|
||||||
|
cargo build --locked -p third-party-licenses --features desktop
|
||||||
|
|
||||||
|
cargo check --profile ${profile} --locked -p graphite-desktop-bundle
|
||||||
|
cargo build --profile ${profile} --locked -p graphite-desktop-bundle
|
||||||
|
'';
|
||||||
|
}
|
||||||
|
);
|
||||||
|
in
|
||||||
|
|
||||||
|
deps.crane.lib.buildPackage (
|
||||||
|
common
|
||||||
|
// {
|
||||||
|
inherit cargoArtifacts;
|
||||||
|
|
||||||
|
buildInputs = libs;
|
||||||
nativeBuildInputs = [
|
nativeBuildInputs = [
|
||||||
pkgs.pkg-config
|
pkgs.pkg-config
|
||||||
pkgs.lld
|
pkgs.lld
|
||||||
|
|
@ -29,110 +87,34 @@ let
|
||||||
pkgs.wasm-bindgen-cli_0_2_100
|
pkgs.wasm-bindgen-cli_0_2_100
|
||||||
pkgs.wasm-pack
|
pkgs.wasm-pack
|
||||||
pkgs.cargo-about
|
pkgs.cargo-about
|
||||||
];
|
|
||||||
buildInputs = [ pkgs.openssl ];
|
|
||||||
env.CARGO_PROFILE = if dev then "dev" else "release";
|
|
||||||
cargoExtraArgs = "--target wasm32-unknown-unknown -p graphite-wasm-wrapper --no-default-features --features native";
|
|
||||||
doCheck = false;
|
|
||||||
};
|
|
||||||
resources = deps.crane.lib.buildPackage (
|
|
||||||
resourcesCommon
|
|
||||||
// {
|
|
||||||
cargoArtifacts = deps.crane.lib.buildDepsOnly resourcesCommon;
|
|
||||||
|
|
||||||
npmDeps = pkgs.importNpmLock {
|
|
||||||
npmRoot = "${info.src}/frontend";
|
|
||||||
};
|
|
||||||
|
|
||||||
npmRoot = "frontend";
|
|
||||||
npmConfigScript = "setup";
|
|
||||||
makeCacheWritable = true;
|
|
||||||
|
|
||||||
nativeBuildInputs = [
|
|
||||||
pkgs.importNpmLock.npmConfigHook
|
|
||||||
pkgs.removeReferencesTo
|
|
||||||
]
|
|
||||||
++ resourcesCommon.nativeBuildInputs;
|
|
||||||
|
|
||||||
prePatch = ''
|
|
||||||
mkdir branding
|
|
||||||
cp -r ${branding}/* branding
|
|
||||||
cp ${info.src}/.branding branding/.branding
|
|
||||||
'';
|
|
||||||
|
|
||||||
buildPhase = ''
|
|
||||||
export HOME="$TMPDIR"
|
|
||||||
|
|
||||||
pushd frontend
|
|
||||||
npm run native:build-${if dev then "dev" else "production"}
|
|
||||||
popd
|
|
||||||
'';
|
|
||||||
|
|
||||||
installPhase = ''
|
|
||||||
mkdir -p $out
|
|
||||||
cp -r frontend/dist/* $out/
|
|
||||||
'';
|
|
||||||
|
|
||||||
postFixup = ''
|
|
||||||
find "$out" -type f -exec remove-references-to -t "${cargoVendorDir}" '{}' +
|
|
||||||
'';
|
|
||||||
}
|
|
||||||
);
|
|
||||||
libs = [
|
|
||||||
pkgs.wayland
|
|
||||||
pkgs.vulkan-loader
|
|
||||||
pkgs.libGL
|
|
||||||
pkgs.openssl
|
|
||||||
pkgs.libraw
|
|
||||||
|
|
||||||
# X11 Support
|
|
||||||
pkgs.libxkbcommon
|
|
||||||
pkgs.libXcursor
|
|
||||||
pkgs.libxcb
|
|
||||||
pkgs.libX11
|
|
||||||
];
|
|
||||||
common = {
|
|
||||||
inherit (info) pname version src;
|
|
||||||
inherit cargoVendorDir;
|
|
||||||
strictDeps = true;
|
|
||||||
buildInputs = libs;
|
|
||||||
nativeBuildInputs = [
|
|
||||||
pkgs.pkg-config
|
|
||||||
pkgs.cargo-about
|
|
||||||
pkgs.removeReferencesTo
|
pkgs.removeReferencesTo
|
||||||
|
pkgs.importNpmLock.npmConfigHook
|
||||||
];
|
];
|
||||||
env = deps.cef.env // {
|
|
||||||
CARGO_PROFILE = if dev then "dev" else "release";
|
|
||||||
};
|
|
||||||
cargoExtraArgs = "-p graphite-desktop";
|
|
||||||
doCheck = false;
|
|
||||||
};
|
|
||||||
in
|
|
||||||
|
|
||||||
deps.crane.lib.buildPackage (
|
|
||||||
common
|
|
||||||
// {
|
|
||||||
cargoArtifacts = deps.crane.lib.buildDepsOnly common;
|
|
||||||
|
|
||||||
env = common.env // {
|
|
||||||
RASTER_NODES_SHADER_PATH = self.packages.${system}.graphite-raster-nodes-shaders;
|
|
||||||
EMBEDDED_RESOURCES = resources;
|
|
||||||
GRAPHITE_GIT_COMMIT_HASH = self.rev or "unknown";
|
|
||||||
GRAPHITE_GIT_COMMIT_DATE = self.lastModified or "unknown";
|
|
||||||
};
|
|
||||||
|
|
||||||
npmDeps = pkgs.importNpmLock {
|
npmDeps = pkgs.importNpmLock {
|
||||||
npmRoot = "${info.src}/frontend";
|
npmRoot = "${info.src}/frontend";
|
||||||
};
|
};
|
||||||
npmRoot = "frontend";
|
npmRoot = "frontend";
|
||||||
nativeBuildInputs = [
|
npmConfigScript = "setup";
|
||||||
pkgs.importNpmLock.npmConfigHook
|
makeCacheWritable = true;
|
||||||
pkgs.nodePackages.npm
|
|
||||||
]
|
env = deps.cef.env // {
|
||||||
++ common.nativeBuildInputs;
|
RASTER_NODES_SHADER_PATH = self.packages.${system}.graphite-raster-nodes-shaders;
|
||||||
|
GRAPHITE_GIT_COMMIT_HASH = self.rev or "unknown";
|
||||||
|
GRAPHITE_GIT_COMMIT_DATE = self.lastModified or "unknown";
|
||||||
|
};
|
||||||
|
|
||||||
|
postPatch = ''
|
||||||
|
mkdir branding
|
||||||
|
cp -r ${branding}/* branding
|
||||||
|
cp ${info.src}/.branding branding/.branding
|
||||||
|
'';
|
||||||
|
|
||||||
preBuild = ''
|
preBuild = ''
|
||||||
${lib.getExe self.packages.${system}.tools.third-party-licenses}
|
# Prevent `package-installer.js` from trying to update npm dependencies
|
||||||
|
touch -r frontend/package-lock.json -d '+1 year' frontend/node_modules/.install-timestamp
|
||||||
|
|
||||||
|
export HOME="$TMPDIR"
|
||||||
''
|
''
|
||||||
+ (
|
+ (
|
||||||
if self ? rev then
|
if self ? rev then
|
||||||
|
|
@ -143,6 +125,10 @@ deps.crane.lib.buildPackage (
|
||||||
""
|
""
|
||||||
);
|
);
|
||||||
|
|
||||||
|
buildPhaseCargoCommand = "cargo run build desktop${if dev then " debug" else ""}";
|
||||||
|
|
||||||
|
doNotPostBuildInstallCargoBinaries = true;
|
||||||
|
|
||||||
installPhase = ''
|
installPhase = ''
|
||||||
mkdir -p $out/bin
|
mkdir -p $out/bin
|
||||||
cp target/${if dev then "debug" else "release"}/graphite $out/bin/graphite
|
cp target/${if dev then "debug" else "release"}/graphite $out/bin/graphite
|
||||||
|
|
@ -161,12 +147,14 @@ deps.crane.lib.buildPackage (
|
||||||
'';
|
'';
|
||||||
|
|
||||||
postFixup = ''
|
postFixup = ''
|
||||||
remove-references-to -t "${cargoVendorDir}" $out/bin/graphite
|
remove-references-to -t "${common.cargoVendorDir}" $out/bin/graphite
|
||||||
|
|
||||||
patchelf \
|
patchelf \
|
||||||
--set-rpath "${pkgs.lib.makeLibraryPath libs}:${deps.cef.env.CEF_PATH}" \
|
--set-rpath "${pkgs.lib.makeLibraryPath libs}:${deps.cef.env.CEF_PATH}" \
|
||||||
--add-needed libGL.so \
|
--add-needed libGL.so \
|
||||||
$out/bin/graphite
|
$out/bin/graphite
|
||||||
'';
|
'';
|
||||||
|
|
||||||
|
passthru.deps = cargoArtifacts;
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue