Files
nixpkgs/pkgs/by-name/wi/windmill/package.nix
Dark Steveneq 646b892680
Some checks failed
Periodic Merges (6h) / master → staging-nixos (push) Failing after 12m50s
Periodic Merges (6h) / master → staging-next (push) Failing after 12m54s
Periodic Merges (24h) / merge-base(master,staging) → haskell-updates (push) Failing after 11m54s
Periodic Merges (6h) / staging-next → staging (push) Failing after 12m13s
Periodic Merges (24h) / staging-next-25.05 → staging-25.05 (push) Failing after 13m24s
Periodic Merges (24h) / release-25.05 → staging-next-25.05 (push) Failing after 14m28s
push sheeet
2025-10-09 14:15:47 +02:00

264 lines
5.7 KiB
Nix

{
lib,
callPackage,
rustPlatform,
fetchFromGitHub,
buildNpmPackage,
bash,
cmake,
cairo,
deno,
go,
lld,
makeWrapper,
nsjail,
openssl,
pango,
pixman,
pkg-config,
python312,
rustfmt,
stdenv,
perl,
_experimental-update-script-combinators,
nix-update-script,
librusty_v8 ? (
callPackage ./librusty_v8.nix {
inherit (callPackage ./fetchers.nix { }) fetchLibrustyV8;
}
),
ui_builder ? (callPackage ./ui_builder.nix { }),
libxml2,
xmlsec,
libxslt,
flock,
powershell,
uv,
bun,
dotnet-sdk_9,
php,
procps,
cargo,
coreutils,
withEnterpriseFeatures ? false,
withClosedSourceFeatures ? false,
}:
let
pname = "windmill";
version = "1.549.1";
src = fetchFromGitHub {
owner = "windmill-labs";
repo = "windmill";
rev = "v${version}";
hash = "sha256-+4cYZCD8iqrrckYWTDCM++SogptXXahfCKN6O8E8HuE=";
};
in
rustPlatform.buildRustPackage (finalAttrs: {
inherit pname version src;
sourceRoot = "${src.name}/backend";
env = {
SQLX_OFFLINE = "true";
FRONTEND_BUILD_DIR = "${finalAttrs.passthru.web-ui}/share/windmill-frontend";
RUSTY_V8_ARCHIVE = librusty_v8;
};
cargoHash = "sha256-m7/72IRbzllAfAlbjKsjGrTaiXzpj2TufLKrTpKLbUU=";
buildFeatures = [
"agent_worker_server"
# "benchmark" # DO NOT ACTIVATE, this is for benchmark testing
#"bigquery"
"cloud"
"csharp"
"default"
"deno_core"
"dind"
#"duckdb"
"embedding"
"flow_testing"
"gcp_trigger"
"http_trigger"
#"java"
"jemalloc"
"kafka"
"license"
"loki"
"mcp"
"mqtt_trigger"
#"mssql"
#"mysql"
"nats"
#"nu"
"oauth2"
"openidconnect"
#"oracledb"
"parquet"
"php"
"postgres_trigger"
"python"
#"ruby"
#"rust" # compiler environment is incomplete
"scoped_cache"
"smtp"
"sqlx"
"sqs_trigger"
"static_frontend"
"websocket"
"zip"
]
++ (lib.optionals withEnterpriseFeatures [
"enterprise_saml"
"enterprise"
"otel"
"prometheus"
"stripe"
"tantivy"
])
++ (lib.optionals withClosedSourceFeatures [ "private" ]);
patches = [
./download.py.config.proto.patch
./python_executor.patch
./python_versions.patch
./run.ansible.config.proto.patch
./run.bash.config.proto.patch
./run.bun.config.proto.patch
./run.csharp.config.proto.patch
./run.go.config.proto.patch
./run.php.config.proto.patch
./run.powershell.config.proto.patch
./run.python3.config.proto.patch
./run.rust.config.proto.patch
./rust_executor.patch
];
postPatch = ''
substituteInPlace windmill-common/src/utils.rs \
--replace-fail 'unknown-version' 'v${version}'
'';
buildInputs = [
openssl
rustfmt
lld
(lib.getLib stdenv.cc.cc)
libxml2
xmlsec
libxslt
];
nativeBuildInputs = [
pkg-config
makeWrapper
cmake # for libz-ng-sys crate
perl
];
# needs a postgres database running
doCheck = false;
postFixup = ''
wrapProgram "$out/bin/windmill" \
--prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ stdenv.cc.cc ]} \
--prefix PATH : ${
lib.makeBinPath [
# uv searches for python on path as well!
python312
procps # bash_executor
coreutils # bash_executor
]
} \
--set PYTHON_PATH "${python312}/bin/python3" \
--set GO_PATH "${go}/bin/go" \
--set DENO_PATH "${deno}/bin/deno" \
--set NSJAIL_PATH "${nsjail}/bin/nsjail" \
--set FLOCK_PATH "${flock}/bin/flock" \
--set BASH_PATH "${bash}/bin/bash" \
--set POWERSHELL_PATH "${powershell}/bin/pwsh" \
--set BUN_PATH "${bun}/bin/bun" \
--set UV_PATH "${uv}/bin/uv" \
--set DOTNET_PATH "${dotnet-sdk_9}/bin/dotnet" \
--set DOTNET_ROOT "${dotnet-sdk_9}/share/dotnet" \
--set PHP_PATH "${php}/bin/php" \
--set CARGO_PATH "${cargo}/bin/cargo"
'';
passthru.web-ui = buildNpmPackage {
inherit version src;
pname = "windmill-ui";
sourceRoot = "${src.name}/frontend";
npmDepsHash = "sha256-2CBqPDEqKGDIGo7ARK3sxTkFNsTxIa6V1QCtSKDkj4I=";
# without these you get a
# FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
env.NODE_OPTIONS = "--max-old-space-size=8192";
postUnpack = ''
cp ${src}/openflow.openapi.yaml .
'';
# WORKS
npmFlags = [
# Skip "postinstall" script that attempts to download and unpack ui-builder (patching out the url with nix-store path doesn't work)
"--ignore-scripts"
];
preBuild = ''
npm run generate-backend-client
'';
buildInputs = [
pixman
cairo
pango
];
nativeBuildInputs = [
pkg-config
];
installPhase = ''
mkdir -p $out/share
mv build $out/share/windmill-frontend
mkdir -p $out/share/windmill-frontend/static
ln -s ${ui_builder} $out/share/windmill-frontend/static/ui_builder
'';
};
passthru.updateScript = _experimental-update-script-combinators.sequence [
(nix-update-script {
extraArgs = [
"--subpackage"
"web-ui"
];
})
./update-librusty.sh
./update-ui_builder.sh
];
meta = {
changelog = "https://github.com/windmill-labs/windmill/blob/${src.rev}/CHANGELOG.md";
description = "Open-source developer platform to turn scripts into workflows and UIs";
homepage = "https://windmill.dev";
license = lib.licenses.agpl3Only;
maintainers = with lib.maintainers; [
dit7ya
happysalada
];
mainProgram = "windmill";
# limited by librusty_v8
# nsjail not available on darwin
platforms = [
"x86_64-linux"
"aarch64-linux"
];
};
})