daml/nix/bazel.nix
Andreas Herrmann a1da025b78
FreePort draw from outside ephemeral port range (#10774)
* Test case for LockedFreePort not colliding with port 0

changelog_begin
changelog_end

* Discover dynamic port range on Linux

* Random port generator outside ephemeral range

* remove dev comments

* Draw FreePort from outside the ephemeral port range

Note, there is a race condition between the socket being closed and the
lock-file being created in LockedFreePort. This is not a new issue, it
was already present with the previous port 0 based implementation.

LockedFreePort handles this by attempting to find a free port and taking
a file lock multiple times.

But, it could happen that A `find`s port N, and obtains the lock, but
doesn't bind port N again, yet; then B binds port N during `find`; then
A attempts to bind port N before B could release it again and fails
because B still holds it.

* Select dynamic port range based on OS

* Detect dynamic port range on MacOS and Windows

* Import sysctl from Nix on MacOS

changelog_begin
changelog_end

* Windows line separator

* FreePort helpers visibility

* Use more informative exception types

* Use a more light weight unit test

* Add comments

* Fix Windows

* Update libs-scala/ports/src/main/scala/com/digitalasset/ports/FreePort.scala

Co-authored-by: Stefano Baghino <43749967+stefanobaghino-da@users.noreply.github.com>

* Update libs-scala/ports/src/main/scala/com/digitalasset/ports/FreePort.scala

Co-authored-by: Stefano Baghino <43749967+stefanobaghino-da@users.noreply.github.com>

* Add a comment to clarify the generated port range

* fmt

* unused import

* Split libs-scala/ports

Splits the FreePort and LockedFreePort components into a separate
library as this is only used for testing purposes.

Co-authored-by: Andreas Herrmann <andreas.herrmann@tweag.io>
Co-authored-by: Stefano Baghino <43749967+stefanobaghino-da@users.noreply.github.com>
2021-09-07 15:41:43 +02:00

174 lines
4.7 KiB
Nix
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Bazel MUST only use this file to source dependencies
#
# This allows CI to pre-build and cache the build outputs
{ system ? builtins.currentSystem
, pkgs ? import ./nixpkgs.nix { inherit system; }
}:
let shared = rec {
inherit (pkgs)
coreutils
curl
docker
gawk
gnutar
grpcurl
gzip
imagemagick
jdk8
jdk11
jekyll
jq
netcat-gnu
nodejs
openssl
gnupatch
patchelf
postgresql_9_6
protobuf3_8
python3
toxiproxy
zip
;
scala_2_12 = (pkgs.scala_2_12.override { }).overrideAttrs (attrs: {
# Something appears to be broken in nixpkgs' fixpoint which results in the
# test not having the version number we overwrite so it fails
# with a mismatch between the version in nixpkgs and the one we
# overwrite.
installCheckPhase = "";
nativeBuildInputs = attrs.nativeBuildInputs ++ [ pkgs.makeWrapper ];
installPhase = attrs.installPhase + ''
wrapProgram $out/bin/scala --add-flags "-nobootcp"
wrapProgram $out/bin/scalac --add-flags "-nobootcp"
wrapProgram $out/bin/scaladoc --add-flags "-nobootcp"
wrapProgram $out/bin/scalap --add-flags "-nobootcp"
'';
});
scala_2_13 = (pkgs.scala_2_13.override { }).overrideAttrs (attrs: {
# Something appears to be broken in nixpkgs' fixpoint which results in the
# test not having the version number we overwrite so it fails
# with a mismatch between the version in nixpkgs and the one we
# overwrite.
installCheckPhase = "";
nativeBuildInputs = attrs.nativeBuildInputs ++ [ pkgs.makeWrapper ];
installPhase = attrs.installPhase + ''
wrapProgram $out/bin/scala --add-flags "-nobootcp"
wrapProgram $out/bin/scalac --add-flags "-nobootcp"
wrapProgram $out/bin/scaladoc --add-flags "-nobootcp"
wrapProgram $out/bin/scalap --add-flags "-nobootcp"
'';
});
# We need to have a file in GOPATH that we can use as
# root_file in go_wrap_sdk.
go = pkgs.go.overrideAttrs (oldAttrs: {
doCheck = false;
postFixup = ''touch $out/share/go/ROOT'';
});
ghcPkgs = pkgs.haskell.packages.integer-simple.ghc8104;
ghc = ghcPkgs.ghc;
# Deliberately not taken from ghcPkgs. This is a fully
# static executable so it doesnt pull in another GHC
# and upstream nixpkgs does not cache packages for
# integer-simple.
hlint = pkgs.hlint;
# Java 8 development
mvn = pkgs.writeScriptBin "mvn" ''
exec ${pkgs.maven}/bin/mvn ''${MVN_SETTINGS:+-s "$MVN_SETTINGS"} "$@"
'';
# rules_nodejs expects nodejs in a subdirectory of a repository rule.
# We use a linkFarm to fulfill this requirement.
nodejsNested = pkgs.linkFarm "nodejs" [ { name = "node_nix"; path = pkgs.nodejs; }];
sass = pkgs.sass;
sphinx-copybutton = pkgs.python3Packages.buildPythonPackage rec {
pname = "sphinx-copybutton";
version = "0.2.12";
src = pkgs.python3Packages.fetchPypi {
inherit pname version;
sha256 = "0p1yls8pplfg59wzmb96m3pjcyr3202an1rcr5wn2jwqhqvqi4ll";
};
doCheck = false;
buildInputs = [sphinx183];
} ;
# sphinx 2.2.2 causes build failures of //docs:pdf-docs.
# We override here rather than in nixpkgs.nix since GHC depends on sphinx
# and we dont want to rebuild that unnecessarily.
sphinx183 = pkgs.python3Packages.sphinx.overridePythonAttrs (attrs: rec {
version = "1.8.3";
doCheck = false;
src = pkgs.fetchFromGitHub {
owner = "sphinx-doc";
repo = "sphinx";
rev = "v${version}";
sha256 = "1hkqi5kzs85idv1w85qdl1bb2fwh7ccmgp6m860kzpkrl55149y8";
};
});
sphinx183-exts = sphinx183.overridePythonAttrs (attrs: rec {
propagatedBuildInputs = attrs.propagatedBuildInputs ++ [sphinx-copybutton];
});
sysctl = pkgs.unixtools.sysctl;
# Custom combination of latex packages for our latex needs
texlive = pkgs.texlive.combine {
inherit (pkgs.texlive)
bera
capt-of
collection-fontsrecommended
collection-luatex
datetime
enumitem
environ
epigraph
eqparbox
eulervm
fancyhdr
fmtcount
fncychap
footmisc
footnotebackref
framed
latexmk
lipsum
mathpartir
mathpazo
mnsymbol
multirow
needspace
palatino
scheme-small
tabulary
threeparttable
tikzsymbols
titlesec
tocbibind
todonotes
transparent
trimspaces
varwidth
wrapfig
xargs
;
};
z3 = pkgs.z3;
bazel-cc-toolchain = pkgs.callPackage ./tools/bazel-cc-toolchain {};
};
in shared // (if pkgs.stdenv.isLinux then {
inherit (pkgs)
glibcLocales
;
} else {})