Skip to content

Commit

Permalink
quarto: use deno version 1
Browse files Browse the repository at this point in the history
  • Loading branch information
detroyejr committed Oct 23, 2024
1 parent efc1c32 commit 9c5c005
Show file tree
Hide file tree
Showing 12 changed files with 257 additions and 1 deletion.
5 changes: 4 additions & 1 deletion pkgs/development/libraries/quarto/default.nix
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
{ stdenv
, lib
, callPackage
, pandoc
, typst
, esbuild
, deno
, fetchurl
, dart-sass
, rWrapper
Expand All @@ -17,6 +17,9 @@
, sysctl
}:

let
deno = callPackage ./deno.nix {};
in
stdenv.mkDerivation (final: {
pname = "quarto";
version = "1.5.57";
Expand Down
125 changes: 125 additions & 0 deletions pkgs/development/libraries/quarto/deno.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
{
stdenv,
lib,
callPackage,
fetchFromGitHub,
rustPlatform,
cmake,
protobuf,
installShellFiles,
libiconv,
darwin,
librusty_v8 ? callPackage ./librusty_v8.nix {
inherit (callPackage ./fetchers.nix { }) fetchLibrustyV8;
},
}:
rustPlatform.buildRustPackage rec {
pname = "deno";
version = "1.46.3";

src = fetchFromGitHub {
owner = "denoland";
repo = "deno";
rev = "refs/tags/v${version}";
hash = "sha256-AM6SjcIHo6Koxcnznhkv3cXoKaMy2TEVpiWe/bczDuA=";
};

cargoHash = "sha256-D+CZpb6OTzM5Il0k8GQB7qSONy4myE5yKlaSkLLqHT8=";

postPatch = ''
# upstream uses lld on aarch64-darwin for faster builds
# within nix lld looks for CoreFoundation rather than CoreFoundation.tbd and fails
substituteInPlace .cargo/config.toml --replace "-fuse-ld=lld " ""
'';

# uses zlib-ng but can't dynamically link yet
# https://github.com/rust-lang/libz-sys/issues/158
nativeBuildInputs = [
# required by libz-ng-sys crate
cmake
# required by deno_kv crate
protobuf
installShellFiles
];
buildInputs = lib.optionals stdenv.isDarwin (
[
libiconv
darwin.libobjc
]
++ (with darwin.apple_sdk_11_0.frameworks; [
Security
CoreServices
Metal
MetalPerformanceShaders
Foundation
QuartzCore
])
);

buildAndTestSubdir = "cli";

# work around "error: unknown warning group '-Wunused-but-set-parameter'"
env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.cc.isClang "-Wno-unknown-warning-option";
# The v8 package will try to download a `librusty_v8.a` release at build time to our read-only filesystem
# To avoid this we pre-download the file and export it via RUSTY_V8_ARCHIVE
env.RUSTY_V8_ARCHIVE = librusty_v8;

# Tests have some inconsistencies between runs with output integration tests
# Skipping until resolved
doCheck = false;

preInstall = ''
find ./target -name libswc_common${stdenv.hostPlatform.extensions.sharedLibrary} -delete
'';

postInstall = lib.optionalString (stdenv.buildPlatform.canExecute stdenv.hostPlatform) ''
installShellCompletion --cmd deno \
--bash <($out/bin/deno completions bash) \
--fish <($out/bin/deno completions fish) \
--zsh <($out/bin/deno completions zsh)
'';

doInstallCheck = true;
installCheckPhase = ''
runHook preInstallCheck
$out/bin/deno --help
$out/bin/deno --version | grep "deno ${version}"
runHook postInstallCheck
'';

passthru.tests = callPackage ./tests { };

meta = with lib; {
homepage = "https://deno.land/";
changelog = "https://github.com/denoland/deno/releases/tag/v${version}";
description = "Secure runtime for JavaScript and TypeScript";
longDescription = ''
Deno aims to be a productive and secure scripting environment for the modern programmer.
Deno will always be distributed as a single executable.
Given a URL to a Deno program, it is runnable with nothing more than the ~15 megabyte zipped executable.
Deno explicitly takes on the role of both runtime and package manager.
It uses a standard browser-compatible protocol for loading modules: URLs.
Among other things, Deno is a great replacement for utility scripts that may have been historically written with
bash or python.
'';
license = licenses.mit;
mainProgram = "deno";
maintainers = with maintainers; [ jk ];
knownVulnerabilities = [
(lib.concatStringsSep " " [
"Quarto requires deno version ${version} which is EOL. See"
"https://github.com/NixOS/nixpkgs/issues/349444#issuecomment-2431231202"
"for more details."
])
];
platforms = [
"x86_64-linux"
"aarch64-linux"
"x86_64-darwin"
"aarch64-darwin"
];
# NOTE: `aligned_alloc` error on darwin SDK < 10.15. Can't do usual overrideSDK with rust toolchain in current implementation.
# Should be fixed with darwin SDK refactor and can be revisited.
badPlatforms = [ "x86_64-darwin" ];
};
}
21 changes: 21 additions & 0 deletions pkgs/development/libraries/quarto/fetchers.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# not a stable interface, do not reference outside the deno package but make a
# copy if you need
{
lib,
stdenv,
fetchurl,
}:

{
fetchLibrustyV8 =
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.gz";
sha256 = args.shas.${stdenv.hostPlatform.system};
meta = {
inherit (args) version;
sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
};
};
}
12 changes: 12 additions & 0 deletions pkgs/development/libraries/quarto/librusty_v8.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# auto-generated file -- DO NOT EDIT!
{ fetchLibrustyV8 }:

fetchLibrustyV8 {
version = "0.105.0";
shas = {
x86_64-linux = "sha256-9yON4DNPxm4IUZSLZp9VZtzSRPPWX1tEuQLVJmN8cLs=";
aarch64-linux = "sha256-5vAjw2vimjCHKPxjIp5vcwMCWUUDYVlk4QyOeEI0DLY=";
x86_64-darwin = "sha256-o4WRkg4ptiJTNMkorn5K+P8xOJwpChM5PqkZCjP076g=";
aarch64-darwin = "sha256-ZuWBnvxu1PgDtjtguxtj3BhFO01AChlbjAS0kZUws3A=";
};
}
1 change: 1 addition & 0 deletions pkgs/development/libraries/quarto/tests/basic.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
console.log(1 + 1)
79 changes: 79 additions & 0 deletions pkgs/development/libraries/quarto/tests/default.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
{
deno,
runCommand,
lib,
testers,
}:
let
testDenoRun =
name:
{
args ? "",
dir ? ./. + "/${name}",
file ? "index.ts",
expected ? "",
expectFailure ? false,
}:
let
command = "deno run ${args} ${dir}/${file}";
in
runCommand "deno-test-${name}"
{
nativeBuildInputs = [ deno ];
meta.timeout = 60;
}
''
HOME=$(mktemp -d)
if output=$(${command} 2>&1); then
if [[ $output =~ '${expected}' ]]; then
echo "Test '${name}' passed"
touch $out
else
echo -n ${lib.escapeShellArg command} >&2
echo " output did not match what was expected." >&2
echo "The expected was:" >&2
echo '${expected}' >&2
echo "The output was:" >&2
echo "$output" >&2
exit 1
fi
else
if [[ "${toString expectFailure}" == "1" ]]; then
echo "Test '${name}' failed as expected"
touch $out
exit 0
fi
echo -n ${lib.escapeShellArg command} >&2
echo " returned a non-zero exit code." >&2
echo "$output" >&2
exit 1
fi
'';
in
(lib.mapAttrs testDenoRun {
basic = {
dir = ./.;
file = "basic.ts";
expected = "2";
};
import-json = {
expected = "hello from JSON";
};
import-ts = {
expected = "hello from ts";
};
read-file = {
args = "--allow-read";
expected = "hello from a file";
};
fail-read-file = {
expectFailure = true;
dir = ./read-file;
};
})
// {
version = testers.testVersion {
package = deno;
command = "deno --version";
};
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{ "msg": "hello from JSON" }
2 changes: 2 additions & 0 deletions pkgs/development/libraries/quarto/tests/import-json/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
import file from "./data.json" assert { type: "json" };
console.log(file.msg);
3 changes: 3 additions & 0 deletions pkgs/development/libraries/quarto/tests/import-ts/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import { sayHello } from "./lib.ts"

sayHello("ts")
3 changes: 3 additions & 0 deletions pkgs/development/libraries/quarto/tests/import-ts/lib.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export function sayHello(thing: string) {
console.log(`hello from ${thing}`);
}
1 change: 1 addition & 0 deletions pkgs/development/libraries/quarto/tests/read-file/data.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
hello from a file
5 changes: 5 additions & 0 deletions pkgs/development/libraries/quarto/tests/read-file/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
// trim 'file://' prefix
const thisDir = Deno.mainModule.substring(7, Deno.mainModule.length);
const getParent = (path: string) => path.substring(0, path.lastIndexOf("/"))
const text = await Deno.readTextFile(getParent(thisDir) + "/data.txt");
console.log(text);

0 comments on commit 9c5c005

Please sign in to comment.