248 lines
5.6 KiB
Nix
248 lines
5.6 KiB
Nix
{
|
|
lib,
|
|
callPackage,
|
|
rustPlatform,
|
|
fetchFromGitHub,
|
|
buildNpmPackage,
|
|
bash,
|
|
cmake,
|
|
cairo,
|
|
deno,
|
|
fetchurl,
|
|
go,
|
|
lld,
|
|
makeWrapper,
|
|
nsjail,
|
|
openssl,
|
|
pango,
|
|
pixman,
|
|
giflib,
|
|
pkg-config,
|
|
python3,
|
|
rustfmt,
|
|
stdenv,
|
|
swagger-cli,
|
|
perl,
|
|
_experimental-update-script-combinators,
|
|
nix-update-script,
|
|
writeScript,
|
|
librusty_v8 ? (
|
|
callPackage ./librusty_v8.nix {
|
|
inherit (callPackage ./fetchers.nix { }) fetchLibrustyV8;
|
|
}
|
|
),
|
|
libxml2,
|
|
xmlsec,
|
|
libxslt,
|
|
flock,
|
|
powershell,
|
|
uv,
|
|
bun,
|
|
dotnet-sdk_9,
|
|
php,
|
|
procps,
|
|
cargo,
|
|
coreutils,
|
|
withEnterpriseFeatures ? false,
|
|
}:
|
|
|
|
let
|
|
pname = "windmill";
|
|
version = "1.474.0";
|
|
|
|
src = fetchFromGitHub {
|
|
owner = "windmill-labs";
|
|
repo = "windmill";
|
|
rev = "v${version}";
|
|
hash = "sha256-9BtItmqyW4NbG4istssAYn4CWlfYAv33CE1enL+5LtE=";
|
|
};
|
|
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;
|
|
};
|
|
|
|
cargoLock = {
|
|
lockFile = ./Cargo.lock;
|
|
outputHashes = {
|
|
"php-parser-rs-0.1.3" = "sha256-ZeI3KgUPmtjlRfq6eAYveqt8Ay35gwj6B9iOQRjQa9A=";
|
|
"postgres-native-tls-0.5.0" = "sha256-hhvZkdc2KnU6IkgeTHY4M2dp9//NL8DQjOIcAh3sSRM=";
|
|
"progenitor-0.3.0" = "sha256-F6XRZFVIN6/HfcM8yI/PyNke45FL7jbcznIiqj22eIQ=";
|
|
"tinyvector-0.1.0" = "sha256-NYGhofU4rh+2IAM+zwe04YQdXY8Aa4gTmn2V2HtzRfI=";
|
|
};
|
|
};
|
|
|
|
buildFeatures =
|
|
[
|
|
"embedding"
|
|
"parquet"
|
|
"prometheus"
|
|
"openidconnect"
|
|
"cloud"
|
|
"jemalloc"
|
|
"deno_core"
|
|
"license"
|
|
"http_trigger"
|
|
"zip"
|
|
"oauth2"
|
|
"kafka"
|
|
"otel"
|
|
"dind"
|
|
"php"
|
|
"mysql"
|
|
"mssql"
|
|
"bigquery"
|
|
"websocket"
|
|
"python"
|
|
"smtp"
|
|
"csharp"
|
|
"static_frontend"
|
|
# "rust" # compiler environment is incomplete
|
|
]
|
|
++ (lib.optionals withEnterpriseFeatures [
|
|
"enterprise"
|
|
"enterprise_saml"
|
|
"tantivy"
|
|
"stripe"
|
|
]);
|
|
|
|
patches = [
|
|
./download.py.config.proto.patch
|
|
./python_executor.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
|
|
./swagger-cli.patch
|
|
];
|
|
|
|
postPatch = ''
|
|
substituteInPlace windmill-common/src/utils.rs \
|
|
--replace-fail 'unknown-version' 'v${version}'
|
|
|
|
substituteInPlace windmill-worker/src/python_executor.rs \
|
|
--replace-fail 'unknown_system_python_version' '${python3.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;
|
|
|
|
# TODO; Check if the rpath is still required
|
|
# patchelf --set-rpath ${lib.makeLibraryPath [ openssl ]} $out/bin/windmill
|
|
postFixup = ''
|
|
wrapProgram "$out/bin/windmill" \
|
|
--prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ stdenv.cc.cc ]} \
|
|
--prefix PATH : ${
|
|
lib.makeBinPath [
|
|
python3 # uv searches PATH for system python
|
|
procps # bash_executor
|
|
coreutils # bash_executor
|
|
]
|
|
} \
|
|
--set PYTHON_PATH "${python3}/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-liWoAgAIgU8+J1x2mR7bGl9MOpCuGIf0Qa1nEouFnBU=";
|
|
|
|
# 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 .
|
|
'';
|
|
|
|
preBuild = ''
|
|
npm run generate-backend-client
|
|
'';
|
|
|
|
buildInputs = [
|
|
pixman
|
|
cairo
|
|
pango
|
|
];
|
|
nativeBuildInputs = [
|
|
pkg-config
|
|
];
|
|
|
|
installPhase = ''
|
|
mkdir -p $out/share
|
|
mv build $out/share/windmill-frontend
|
|
'';
|
|
};
|
|
|
|
passthru.updateScript = _experimental-update-script-combinators.sequence [
|
|
(nix-update-script {
|
|
extraArgs = [
|
|
"--subpackage"
|
|
"web-ui"
|
|
];
|
|
})
|
|
(./update-librusty.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"
|
|
];
|
|
};
|
|
})
|