feat(Profpatsch/writers): add rustSimple writers
A bunch of writer functions wrapping the `buildRustCrate` functionality of nixpkgs. Can be used to write inline rust code, or rust code read from files with `builtins.readFile`. Change-Id: I9d74e9381b858b485925e4dc3fbb7fc392877c0a Reviewed-on: https://cl.tvl.fyi/c/depot/+/2318 Reviewed-by: tazjin <mail@tazj.in> Reviewed-by: Profpatsch <mail@profpatsch.de> Tested-by: BuildkiteCI
This commit is contained in:
parent
e219c13328
commit
1261616bff
4 changed files with 110 additions and 10 deletions
1
third_party/default.nix
vendored
1
third_party/default.nix
vendored
|
@ -135,6 +135,7 @@ let
|
|||
runCommandNoCC
|
||||
rustPlatform
|
||||
rustc
|
||||
buildRustCrate
|
||||
s6-portable-utils
|
||||
sbcl
|
||||
shellcheck
|
||||
|
|
|
@ -7,7 +7,8 @@ let
|
|||
;
|
||||
};
|
||||
|
||||
python-netstring-test = imports.writers.python3 "python-netstring" {
|
||||
python-netstring-test = imports.writers.python3 {
|
||||
name = "python-netstring";
|
||||
libraries = p: [
|
||||
python-netstring
|
||||
];
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{ depot, pkgs, lib, ... }:
|
||||
let
|
||||
bins = depot.nix.getBins pkgs.coreutils ["printf" "mkdir" "cat"];
|
||||
bins = depot.nix.getBins pkgs.coreutils ["printf" "mkdir" "cat" "ln"];
|
||||
|
||||
inherit (depot.nix.yants) defun struct restrict attrs list string drv any;
|
||||
|
||||
|
@ -11,7 +11,9 @@ let
|
|||
[ "E" "W" ])
|
||||
string;
|
||||
Libraries = defun [ (attrs any) (list drv) ];
|
||||
python3 = name: {
|
||||
|
||||
python3 = {
|
||||
name,
|
||||
libraries ? (_: []),
|
||||
flakeIgnore ? []
|
||||
}: pkgs.writers.writePython3 name {
|
||||
|
@ -62,12 +64,61 @@ let
|
|||
doCheck = false;
|
||||
};
|
||||
|
||||
rustSimple = args@{name, ...}: src:
|
||||
linkTo name "${rustSimpleBin args src}/bin/${name}";
|
||||
|
||||
linkTo = name: path: depot.nix.runExecline.local name {} [
|
||||
"importas" "out" "out"
|
||||
bins.ln "-sT" path "$out"
|
||||
];
|
||||
|
||||
rustSimpleBin = {
|
||||
name,
|
||||
dependencies ? [],
|
||||
...
|
||||
}@args: src: pkgs.buildRustCrate ({
|
||||
pname = name;
|
||||
version = "1.0.0";
|
||||
crateName = name;
|
||||
crateBin = [ name ];
|
||||
dependencies = dependencies;
|
||||
src = pkgs.runCommandLocal "write-main.rs" {
|
||||
src = src;
|
||||
passAsFile = [ "src" ];
|
||||
} ''
|
||||
mkdir -p $out/src/bin
|
||||
cp "$srcPath" $out/src/bin/${name}.rs
|
||||
find $out
|
||||
'';
|
||||
} // args);
|
||||
|
||||
rustSimpleLib = {
|
||||
name,
|
||||
dependencies ? [],
|
||||
...
|
||||
}@args: src: pkgs.buildRustCrate ({
|
||||
pname = name;
|
||||
version = "1.0.0";
|
||||
crateName = name;
|
||||
dependencies = dependencies;
|
||||
src = pkgs.runCommandLocal "write-lib.rs" {
|
||||
src = src;
|
||||
passAsFile = [ "src" ];
|
||||
} ''
|
||||
mkdir -p $out/src
|
||||
cp "$srcPath" $out/src/lib.rs
|
||||
find $out
|
||||
'';
|
||||
} // args);
|
||||
|
||||
tests = import ./tests.nix {
|
||||
inherit
|
||||
depot
|
||||
pkgs
|
||||
python3
|
||||
python3Lib
|
||||
rustSimpleLib
|
||||
rustSimple
|
||||
;
|
||||
};
|
||||
|
||||
|
@ -75,6 +126,9 @@ in {
|
|||
inherit
|
||||
python3
|
||||
python3Lib
|
||||
rustSimple
|
||||
rustSimpleBin
|
||||
rustSimpleLib
|
||||
tests
|
||||
;
|
||||
}
|
||||
|
|
|
@ -1,31 +1,75 @@
|
|||
{ depot, pkgs, python3, python3Lib }:
|
||||
{ depot, pkgs, python3, python3Lib, rustSimpleLib, rustSimple }:
|
||||
|
||||
let
|
||||
transitiveLib = python3Lib {
|
||||
run = drv: depot.nix.runExecline.local "run-${drv.name}" {} [
|
||||
"if" [ drv ]
|
||||
"importas" "out" "out"
|
||||
"${pkgs.coreutils}/bin/touch" "$out"
|
||||
];
|
||||
|
||||
pythonTransitiveLib = python3Lib {
|
||||
name = "transitive";
|
||||
} ''
|
||||
def transitive(s):
|
||||
return s + " 1 2 3"
|
||||
'';
|
||||
|
||||
testLib = python3Lib {
|
||||
pythonTestLib = python3Lib {
|
||||
name = "test_lib";
|
||||
libraries = _: [ transitiveLib ];
|
||||
libraries = _: [ pythonTransitiveLib ];
|
||||
} ''
|
||||
import transitive
|
||||
def test():
|
||||
return transitive.transitive("test")
|
||||
'';
|
||||
|
||||
pythonWithLib = python3 "python-with-lib" {
|
||||
libraries = _: [ testLib ];
|
||||
pythonWithLib = run (python3 {
|
||||
name = "python-with-lib";
|
||||
libraries = _: [ pythonTestLib ];
|
||||
} ''
|
||||
import test_lib
|
||||
|
||||
assert(test_lib.test() == "test 1 2 3")
|
||||
'');
|
||||
|
||||
|
||||
rustTransitiveLib = rustSimpleLib {
|
||||
name = "transitive";
|
||||
} ''
|
||||
pub fn transitive(s: &str) -> String {
|
||||
let mut new = s.to_string();
|
||||
new.push_str(" 1 2 3");
|
||||
new
|
||||
}
|
||||
'';
|
||||
|
||||
rustTestLib = rustSimpleLib {
|
||||
name = "test_lib";
|
||||
dependencies = [ rustTransitiveLib ];
|
||||
} ''
|
||||
extern crate transitive;
|
||||
use transitive::{transitive};
|
||||
pub fn test() -> String {
|
||||
transitive("test")
|
||||
}
|
||||
'';
|
||||
|
||||
rustWithLib = run (rustSimple {
|
||||
name = "rust-with-lib";
|
||||
dependencies = [ rustTestLib ];
|
||||
} ''
|
||||
extern crate test_lib;
|
||||
|
||||
fn main() {
|
||||
assert_eq!(test_lib::test(), String::from("test 1 2 3"));
|
||||
}
|
||||
'');
|
||||
|
||||
|
||||
in {
|
||||
inherit
|
||||
pythonWithLib;
|
||||
pythonWithLib
|
||||
rustTransitiveLib
|
||||
rustWithLib
|
||||
;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue