mirror of
https://github.com/tahoe-lafs/tahoe-lafs.git
synced 2025-04-27 06:20:25 +00:00
Merge pull request #668 from tahoe-lafs/nix-packaging
Add Nix packaging Fixes: ticket:3266
This commit is contained in:
commit
78aa51d718
.circleci
newsfragments
nix
@ -25,6 +25,8 @@ workflows:
|
||||
|
||||
- "slackware-14.2"
|
||||
|
||||
- "nixos-19.09"
|
||||
|
||||
# Test against PyPy 2.7/7.1.1
|
||||
- "pypy2.7-7.1"
|
||||
|
||||
@ -322,6 +324,31 @@ jobs:
|
||||
- store_artifacts: *STORE_OTHER_ARTIFACTS
|
||||
- run: *SUBMIT_COVERAGE
|
||||
|
||||
nixos-19.09:
|
||||
docker:
|
||||
# Run in a highly Nix-capable environment.
|
||||
- image: "nixorg/nix:circleci"
|
||||
|
||||
environment:
|
||||
NIX_PATH: "nixpkgs=https://github.com/NixOS/nixpkgs-channels/archive/nixos-19.09-small.tar.gz"
|
||||
|
||||
steps:
|
||||
- "checkout"
|
||||
- "run":
|
||||
name: "Build and Test"
|
||||
command: |
|
||||
# CircleCI build environment looks like it has a zillion and a
|
||||
# half cores. Don't let Nix autodetect this high core count
|
||||
# because it blows up memory usage and fails the test run. Pick a
|
||||
# number of cores that suites the build environment we're paying
|
||||
# for (the free one!).
|
||||
#
|
||||
# Also, let it run more than one job at a time because we have to
|
||||
# build a couple simple little dependencies that don't take
|
||||
# advantage of multiple cores and we get a little speedup by doing
|
||||
# them in parallel.
|
||||
nix-build --cores 3 --max-jobs 2 nix/
|
||||
|
||||
# Generate up-to-date data for the dependency graph visualizer.
|
||||
build-porting-depgraph:
|
||||
# Get a system in which we can easily install Tahoe-LAFS and all its
|
||||
|
1
newsfragments/3266.other
Normal file
1
newsfragments/3266.other
Normal file
@ -0,0 +1 @@
|
||||
NixOS is now a supported Tahoe-LAFS platform.
|
7
nix/default.nix
Normal file
7
nix/default.nix
Normal file
@ -0,0 +1,7 @@
|
||||
# This is the main entrypoint for the Tahoe-LAFS derivation.
|
||||
{ pkgs ? import <nixpkgs> { } }:
|
||||
# Add our Python packages to nixpkgs to simplify the expression for the
|
||||
# Tahoe-LAFS derivation.
|
||||
let pkgs' = pkgs.extend (import ./overlays.nix);
|
||||
# Evaluate the expression for our Tahoe-LAFS derivation.
|
||||
in pkgs'.python2.pkgs.callPackage ./tahoe-lafs.nix { }
|
27
nix/eliot.nix
Normal file
27
nix/eliot.nix
Normal file
@ -0,0 +1,27 @@
|
||||
{ lib, buildPythonPackage, fetchPypi, zope_interface, pyrsistent, boltons
|
||||
, hypothesis, testtools, pytest }:
|
||||
buildPythonPackage rec {
|
||||
pname = "eliot";
|
||||
version = "1.7.0";
|
||||
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
sha256 = "0ylyycf717s5qsrx8b9n6m38vyj2k8328lfhn8y6r31824991wv8";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
substituteInPlace setup.py \
|
||||
--replace "boltons >= 19.0.1" boltons
|
||||
# depends on eliot.prettyprint._main which we don't have here.
|
||||
rm eliot/tests/test_prettyprint.py
|
||||
'';
|
||||
|
||||
checkInputs = [ testtools pytest hypothesis ];
|
||||
propagatedBuildInputs = [ zope_interface pyrsistent boltons ];
|
||||
|
||||
meta = with lib; {
|
||||
homepage = https://github.com/itamarst/eliot/;
|
||||
description = "Logging library that tells you why it happened";
|
||||
license = licenses.asl20;
|
||||
};
|
||||
}
|
45
nix/nevow.nix
Normal file
45
nix/nevow.nix
Normal file
@ -0,0 +1,45 @@
|
||||
{ stdenv, buildPythonPackage, fetchPypi, isPy3k, twisted }:
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "Nevow";
|
||||
version = "0.14.5";
|
||||
name = "${pname}-${version}";
|
||||
disabled = isPy3k;
|
||||
|
||||
src = fetchPypi {
|
||||
inherit pname;
|
||||
inherit version;
|
||||
sha256 = "1wr3fai01h1bcp4qpia6indg4qmxvywwv3q1iibm669mln2vmdmg";
|
||||
};
|
||||
|
||||
propagatedBuildInputs = [ twisted ];
|
||||
|
||||
checkInputs = [ twisted ];
|
||||
|
||||
checkPhase = ''
|
||||
trial formless nevow
|
||||
'';
|
||||
|
||||
meta = with stdenv.lib; {
|
||||
description = "Nevow, a web application construction kit for Python";
|
||||
longDescription = ''
|
||||
Nevow - Pronounced as the French "nouveau", or "noo-voh", Nevow
|
||||
is a web application construction kit written in Python. It is
|
||||
designed to allow the programmer to express as much of the view
|
||||
logic as desired in Python, and includes a pure Python XML
|
||||
expression syntax named stan to facilitate this. However it
|
||||
also provides rich support for designer-edited templates, using
|
||||
a very small XML attribute language to provide bi-directional
|
||||
template manipulation capability.
|
||||
|
||||
Nevow also includes formless, a declarative syntax for
|
||||
specifying the types of method parameters and exposing these
|
||||
methods to the web. Forms can be rendered automatically, and
|
||||
form posts will be validated and input coerced, rendering error
|
||||
pages if appropriate. Once a form post has validated
|
||||
successfully, the method will be called with the coerced values.
|
||||
'';
|
||||
homepage = https://github.com/twisted/nevow;
|
||||
license = licenses.mit;
|
||||
};
|
||||
}
|
12
nix/overlays.nix
Normal file
12
nix/overlays.nix
Normal file
@ -0,0 +1,12 @@
|
||||
self: super: {
|
||||
python27 = super.python27.override {
|
||||
packageOverrides = python-self: python-super: {
|
||||
# eliot is not part of nixpkgs at all at this time.
|
||||
eliot = python-self.callPackage ./eliot.nix { };
|
||||
# The packaged version of Nevow is very slightly out of date but also
|
||||
# conflicts with the packaged version of Twisted. Supply our own
|
||||
# slightly newer version.
|
||||
nevow = python-super.callPackage ./nevow.nix { };
|
||||
};
|
||||
};
|
||||
}
|
66
nix/tahoe-lafs.nix
Normal file
66
nix/tahoe-lafs.nix
Normal file
@ -0,0 +1,66 @@
|
||||
{ fetchFromGitHub, lib
|
||||
, nettools, python
|
||||
, twisted, foolscap, nevow, zfec
|
||||
, setuptools, setuptoolsTrial, pyasn1, zope_interface
|
||||
, service-identity, pyyaml, magic-wormhole, treq, appdirs
|
||||
, beautifulsoup4, eliot, autobahn, cryptography
|
||||
, html5lib
|
||||
}:
|
||||
python.pkgs.buildPythonPackage rec {
|
||||
version = "1.14.0.dev";
|
||||
name = "tahoe-lafs-${version}";
|
||||
src = lib.cleanSource ../.;
|
||||
|
||||
postPatch = ''
|
||||
# Chroots don't have /etc/hosts and /etc/resolv.conf, so work around
|
||||
# that.
|
||||
for i in $(find src/allmydata/test -type f)
|
||||
do
|
||||
sed -i "$i" -e"s/localhost/127.0.0.1/g"
|
||||
done
|
||||
|
||||
# Some tests are flaky or fail to skip when dependencies are missing.
|
||||
# This list is over-zealous because it's more work to disable individual
|
||||
# tests with in a module.
|
||||
|
||||
# test_system is a lot of integration-style tests that do a lot of real
|
||||
# networking between many processes. They sometimes fail spuriously.
|
||||
rm src/allmydata/test/test_system.py
|
||||
|
||||
# Many of these tests don't properly skip when i2p or tor dependencies are
|
||||
# not supplied (and we are not supplying them).
|
||||
rm src/allmydata/test/test_i2p_provider.py
|
||||
rm src/allmydata/test/test_connections.py
|
||||
rm src/allmydata/test/cli/test_create.py
|
||||
rm src/allmydata/test/test_client.py
|
||||
rm src/allmydata/test/test_runner.py
|
||||
|
||||
# Some eliot code changes behavior based on whether stdout is a tty or not
|
||||
# and fails when it is not.
|
||||
rm src/allmydata/test/test_eliotutil.py
|
||||
'';
|
||||
|
||||
|
||||
propagatedNativeBuildInputs = [
|
||||
nettools
|
||||
];
|
||||
|
||||
propagatedBuildInputs = with python.pkgs; [
|
||||
twisted foolscap nevow zfec appdirs
|
||||
setuptoolsTrial pyasn1 zope_interface
|
||||
service-identity pyyaml magic-wormhole treq
|
||||
eliot autobahn cryptography setuptools
|
||||
];
|
||||
|
||||
checkInputs = with python.pkgs; [
|
||||
hypothesis
|
||||
testtools
|
||||
fixtures
|
||||
beautifulsoup4
|
||||
html5lib
|
||||
];
|
||||
|
||||
checkPhase = ''
|
||||
${python}/bin/python -m twisted.trial -j $NIX_BUILD_CORES allmydata
|
||||
'';
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user