nixpkgs/pkgs/by-name/wi/windmill/package.nix

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

173 lines
4.7 KiB
Nix
Raw Normal View History

2022-12-25 22:35:51 +03:00
{ lib
, rustPlatform
, fetchFromGitHub
, buildNpmPackage
, bash
2023-08-28 09:11:06 +03:00
, cmake
2022-12-25 22:35:51 +03:00
, cairo
, deno
, fetchurl
, go
, lld
, makeWrapper
, nsjail
, openssl
, pango
, pixman
2023-11-19 08:54:22 +03:00
, giflib
2022-12-25 22:35:51 +03:00
, pkg-config
, python3
, rustfmt
, stdenv
, swagger-cli
}:
let
pname = "windmill";
2024-05-20 21:35:07 +03:00
version = "1.333.2";
2022-12-25 22:35:51 +03:00
2023-12-05 03:57:37 +03:00
src = fetchFromGitHub {
2022-12-25 22:35:51 +03:00
owner = "windmill-labs";
2023-08-28 09:11:06 +03:00
repo = "windmill";
2022-12-25 22:35:51 +03:00
rev = "v${version}";
2024-05-20 21:35:07 +03:00
hash = "sha256-QwjmkKe3jxgXQjj/+WlhOdGOXZsrYdRmHtVakoNqYtI=";
2022-12-25 22:35:51 +03:00
};
pythonEnv = python3.withPackages (ps: [ ps.pip-tools ]);
frontend-build = buildNpmPackage {
2023-12-05 03:57:37 +03:00
inherit version src;
2022-12-25 22:35:51 +03:00
pname = "windmill-ui";
2023-12-05 03:57:37 +03:00
sourceRoot = "${src.name}/frontend";
2022-12-25 22:35:51 +03:00
2024-05-20 21:35:07 +03:00
npmDepsHash = "sha256-I9h2MvngsluWYaoOP44ufE82SFW+8yhNI2qQNi6oyZE=";
2023-10-18 18:02:06 +03:00
# 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";
2022-12-25 22:35:51 +03:00
preBuild = ''
npm run generate-backend-client
'';
2023-11-19 08:54:22 +03:00
buildInputs = [ pixman cairo pango giflib ];
2022-12-25 22:35:51 +03:00
nativeBuildInputs = [ python3 pkg-config ];
installPhase = ''
mkdir -p $out/share
mv build $out/share/windmill-frontend
'';
};
in
rustPlatform.buildRustPackage {
inherit pname version;
2023-12-05 03:57:37 +03:00
src = "${src}/backend";
2022-12-25 22:35:51 +03:00
2023-07-09 16:17:39 +03:00
env = {
SQLX_OFFLINE = "true";
RUSTY_V8_ARCHIVE =
let
fetch_librusty_v8 = args:
fetchurl {
name = "librusty_v8-${args.version}";
url = "https://github.com/denoland/rusty_v8/releases/download/v${args.version}/librusty_v8_release_${stdenv.hostPlatform.rust.rustcTarget}.a";
2023-07-09 16:17:39 +03:00
sha256 = args.shas.${stdenv.hostPlatform.system} or (throw "Unsupported platform ${stdenv.hostPlatform.system}");
meta = {
inherit (args) version;
sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
};
2023-07-09 16:17:39 +03:00
};
in
fetch_librusty_v8 {
2024-05-20 21:35:07 +03:00
version = "0.83.2";
2023-07-09 16:17:39 +03:00
shas = {
2024-05-20 21:35:07 +03:00
x86_64-linux = "sha256-RJNdy5jRZK3dTgrHsWuZZAHUyy1EogyNNuBekZ3Arrk=";
aarch64-linux = "sha256-mpOmuqtd7ob6xvrgH4P/6GLa/hXTS/ok0WOYo7+7ZhI=";
x86_64-darwin = "sha256-2o8CvJ3r5+4PLNGTySqPPDTqbU0piX4D1UtZMscMdHU=";
aarch64-darwin = "sha256-WHeITWSHjZxfQJndxcjsp4yIERKrKXSHFZ0UBc43p8o=";
2022-12-25 22:35:51 +03:00
};
};
2023-07-09 16:17:39 +03:00
};
2022-12-25 22:35:51 +03:00
cargoLock = {
lockFile = ./Cargo.lock;
outputHashes = {
2023-11-19 08:54:22 +03:00
"archiver-rs-0.5.1" = "sha256-ZIik0mMABmhdx/ullgbOrKH5GAtqcOKq5A6vB7aBSjk=";
"pg-embed-0.7.2" = "sha256-R/SrlzNK7aAOyXVTQ/WPkiQb6FyMg9tpsmPTsiossDY=";
2024-05-20 21:35:07 +03:00
"php-parser-rs-0.1.3" = "sha256-ZeI3KgUPmtjlRfq6eAYveqt8Ay35gwj6B9iOQRjQa9A=";
2023-12-05 03:57:37 +03:00
"progenitor-0.3.0" = "sha256-F6XRZFVIN6/HfcM8yI/PyNke45FL7jbcznIiqj22eIQ=";
2024-05-20 21:35:07 +03:00
"rustpython-ast-0.3.1" = "sha256-q9N+z3F6YICQuUMp3a10OS792tCq0GiSSlkcaLxi3Gs=";
"tiberius-0.12.2" = "sha256-s/S0K3hE+JNCrNVxoSCSs4myLHvukBYTwk2A5vZ7Ae8=";
2023-12-05 03:57:37 +03:00
"tinyvector-0.1.0" = "sha256-NYGhofU4rh+2IAM+zwe04YQdXY8Aa4gTmn2V2HtzRfI=";
2022-12-25 22:35:51 +03:00
};
};
patches = [
./swagger-cli.patch
./run.go.config.proto.patch
./run.python3.config.proto.patch
./run.bash.config.proto.patch
];
postPatch = ''
2023-10-18 18:02:06 +03:00
substituteInPlace windmill-worker/src/bash_executor.rs \
2022-12-25 22:35:51 +03:00
--replace '"/bin/bash"' '"${bash}/bin/bash"'
2023-07-09 16:17:39 +03:00
substituteInPlace windmill-api/src/lib.rs \
--replace 'unknown-version' 'v${version}'
substituteInPlace src/main.rs \
--replace 'unknown-version' 'v${version}'
2023-12-05 03:57:37 +03:00
pushd ..
mkdir -p frontend/build
cp -R ${frontend-build}/share/windmill-frontend/* frontend/build
cp ${src}/openflow.openapi.yaml .
popd
2022-12-25 22:35:51 +03:00
'';
2023-08-28 09:11:06 +03:00
buildInputs = [
openssl
rustfmt
lld
2023-11-19 08:54:22 +03:00
stdenv.cc.cc.lib
2023-08-28 09:11:06 +03:00
];
2022-12-25 22:35:51 +03:00
2023-08-28 09:11:06 +03:00
nativeBuildInputs = [
pkg-config
makeWrapper
swagger-cli
cmake # for libz-ng-sys crate
];
2022-12-25 22:35:51 +03:00
# needs a postgres database running
doCheck = false;
postFixup = ''
patchelf --set-rpath ${lib.makeLibraryPath [openssl]} $out/bin/windmill
wrapProgram "$out/bin/windmill" \
--prefix PATH : ${lib.makeBinPath [go pythonEnv deno nsjail bash]} \
2023-12-05 05:42:28 +03:00
--prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [stdenv.cc.cc.lib]} \
2022-12-25 22:35:51 +03:00
--set PYTHON_PATH "${pythonEnv}/bin/python3" \
--set GO_PATH "${go}/bin/go" \
--set DENO_PATH "${deno}/bin/deno" \
--set NSJAIL_PATH "${nsjail}/bin/nsjail"
'';
2023-08-28 09:11:06 +03:00
meta = {
2023-12-05 03:57:37 +03:00
changelog = "https://github.com/windmill-labs/windmill/blob/${src.rev}/CHANGELOG.md";
2023-08-28 09:11:06 +03:00
description = "Open-source developer platform to turn scripts into workflows and UIs";
2022-12-25 22:35:51 +03:00
homepage = "https://windmill.dev";
2023-08-28 09:11:06 +03:00
license = lib.licenses.agpl3Only;
maintainers = with lib.maintainers; [ dit7ya happysalada ];
2023-08-28 09:11:06 +03:00
mainProgram = "windmill";
2022-12-25 22:35:51 +03:00
# limited by librusty_v8
platforms = [ "x86_64-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ];
};
}