Merge branch 'srv01' into 'master'
Fix build in CI and locally on e.g. srv01 See merge request fradrive/fradrive!17
This commit is contained in:
commit
3e46d13f11
@ -10,7 +10,7 @@ workflow:
|
|||||||
|
|
||||||
default:
|
default:
|
||||||
image:
|
image:
|
||||||
name: registry.gitlab.com/fradrive/fradrive/nix-unstable:0.1.0
|
name: registry.gitlab.com/fradrive/fradrive/nix-unstable:0.2.0
|
||||||
|
|
||||||
variables:
|
variables:
|
||||||
NIX_PATH: "nixpkgs=http://nixos.org/channels/nixos-21.05/nixexprs.tar.xz"
|
NIX_PATH: "nixpkgs=http://nixos.org/channels/nixos-21.05/nixexprs.tar.xz"
|
||||||
@ -44,6 +44,7 @@ node dependencies:
|
|||||||
- install -v -T -m 0644 "${SSH_KNOWN_HOSTS}" ~/.ssh/known_hosts
|
- install -v -T -m 0644 "${SSH_KNOWN_HOSTS}" ~/.ssh/known_hosts
|
||||||
- install -v -T -m 0400 "${SSH_DEPLOY_KEY}" ~/.ssh/deploy && echo "IdentityFile ~/.ssh/deploy" >> ~/.ssh/config;
|
- install -v -T -m 0400 "${SSH_DEPLOY_KEY}" ~/.ssh/deploy && echo "IdentityFile ~/.ssh/deploy" >> ~/.ssh/config;
|
||||||
- install -v -T -m 0644 "${FONTAWESOME_NPM_AUTH_FILE}" /etc/fontawesome-token
|
- install -v -T -m 0644 "${FONTAWESOME_NPM_AUTH_FILE}" /etc/fontawesome-token
|
||||||
|
- install -v -T -m 0644 "${NIX_NETRC}" /etc/nix/netrc
|
||||||
- |
|
- |
|
||||||
if [ -n "${REGISTRY_AUTHFILE}" ]; then
|
if [ -n "${REGISTRY_AUTHFILE}" ]; then
|
||||||
mkdir -p ~/.docker
|
mkdir -p ~/.docker
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
sandbox = true
|
sandbox = true
|
||||||
experimental-features = nix-command flakes ca-references
|
experimental-features = nix-command flakes
|
||||||
substituters = https://hydra.iohk.io https://cache.nixos.org/
|
substituters = https://cache.iog.io https://cache.nixos.org/
|
||||||
trusted-public-keys = hydra.iohk.io:f/Ea+s+dFdN+3Y/G+FDgSq+a5NEWhJGzdjvKNGv0/EQ= cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=
|
trusted-public-keys = hydra.iohk.io:f/Ea+s+dFdN+3Y/G+FDgSq+a5NEWhJGzdjvKNGv0/EQ= cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=
|
||||||
require-sigs = true
|
require-sigs = true
|
||||||
@ -1,6 +1,6 @@
|
|||||||
sandbox = true
|
sandbox = true
|
||||||
experimental-features = nix-command flakes ca-references
|
experimental-features = nix-command flakes
|
||||||
substituters = https://hydra.iohk.io https://cache.nixos.org/ s3://nix-cache?scheme=http&endpoint=minio-gitlab-runner-cache
|
substituters = https://cache.iog.io https://cache.nixos.org/ s3://nix-cache?scheme=http&endpoint=minio-gitlab-runner-cache
|
||||||
trusted-public-keys = hydra.iohk.io:f/Ea+s+dFdN+3Y/G+FDgSq+a5NEWhJGzdjvKNGv0/EQ= cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= minio-gitlab-runner-cache:ZN5neq93MHqpnieHSBlxGgWvCL0WKrZ2S9QS+U5Bnro=
|
trusted-public-keys = hydra.iohk.io:f/Ea+s+dFdN+3Y/G+FDgSq+a5NEWhJGzdjvKNGv0/EQ= cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= minio-gitlab-runner-cache:ZN5neq93MHqpnieHSBlxGgWvCL0WKrZ2S9QS+U5Bnro=
|
||||||
require-sigs = true
|
require-sigs = true
|
||||||
post-build-hook = /etc/nix/upload-to-cache.sh
|
post-build-hook = /etc/nix/upload-to-cache.sh
|
||||||
5
.mailmap
5
.mailmap
@ -1,5 +1,6 @@
|
|||||||
Gregor Kleen <gregor.kleen@ifi.lmu.de> <kleen@cip.ifi.lmu.de>
|
Gregor Kleen <gregor@kleen.consulting> <gregor.kleen@ifi.lmu.de>
|
||||||
Gregor Kleen <gregor.kleen@ifi.lmu.de> <gkleen@yggdrasil.li>
|
Gregor Kleen <gregor@kleen.consulting> <kleen@cip.ifi.lmu.de>
|
||||||
|
Gregor Kleen <gregor@kleen.consulting> <gkleen@yggdrasil.li>
|
||||||
Felix Hamann <felix.hamann@campus.lmu.de> <felix.hamann@satellytes.com>
|
Felix Hamann <felix.hamann@campus.lmu.de> <felix.hamann@satellytes.com>
|
||||||
Steffen Jost <jost@tcs.ifi.lmu.de> <jost@tcs.ifi.lmu.de>
|
Steffen Jost <jost@tcs.ifi.lmu.de> <jost@tcs.ifi.lmu.de>
|
||||||
Sarah Vaupel <vaupel.sarah@campus.lmu.de> <vaupel@cip.ifi.lmu.de>
|
Sarah Vaupel <vaupel.sarah@campus.lmu.de> <vaupel@cip.ifi.lmu.de>
|
||||||
|
|||||||
98
flake.lock
98
flake.lock
@ -154,11 +154,11 @@
|
|||||||
"docker-nixpkgs": {
|
"docker-nixpkgs": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1631525111,
|
"lastModified": 1678089139,
|
||||||
"narHash": "sha256-dJKw280B1Hp0f6tSkBtkY0nrMT0DR/bmerrS3cQdBjI=",
|
"narHash": "sha256-cK0RDcxR4eWMrdZIcqNVqnjo9k2LwVmNZO3qj1ctDXU=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "docker-nixpkgs",
|
"repo": "docker-nixpkgs",
|
||||||
"rev": "df7f64139a0b2384fb2448dc2a406815f8d03867",
|
"rev": "2205fb4968adf683324e6d0401b74b9d250d8f56",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@ -202,6 +202,25 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"flake-utils": {
|
"flake-utils": {
|
||||||
|
"inputs": {
|
||||||
|
"systems": "systems"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1681202837,
|
||||||
|
"narHash": "sha256-H+Rh19JDwRtpVPAWp64F+rlEtxUWBAQW28eAi3SRSzg=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"rev": "cfacdce06f30d2b68473a46042957675eebb3401",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"ref": "main",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"flake-utils_2": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1623875721,
|
"lastModified": 1623875721,
|
||||||
"narHash": "sha256-A8BU7bjS5GirpAUv4QA+QnJ4CceLHkcXdRp4xITDB0s=",
|
"narHash": "sha256-A8BU7bjS5GirpAUv4QA+QnJ4CceLHkcXdRp4xITDB0s=",
|
||||||
@ -216,18 +235,6 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"fontawesome-token": {
|
|
||||||
"flake": false,
|
|
||||||
"locked": {
|
|
||||||
"narHash": "sha256-XABvCxD/7zXRyyR01dr5IvK+8A0VoibiVUS5ZAU+f+o=",
|
|
||||||
"path": "/etc/fontawesome-token",
|
|
||||||
"type": "path"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"path": "/etc/fontawesome-token",
|
|
||||||
"type": "path"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"ghc-8.6.5-iohk": {
|
"ghc-8.6.5-iohk": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
@ -267,7 +274,7 @@
|
|||||||
"cabal-32": "cabal-32",
|
"cabal-32": "cabal-32",
|
||||||
"cabal-34": "cabal-34",
|
"cabal-34": "cabal-34",
|
||||||
"cardano-shell": "cardano-shell",
|
"cardano-shell": "cardano-shell",
|
||||||
"flake-utils": "flake-utils",
|
"flake-utils": "flake-utils_2",
|
||||||
"ghc-8.6.5-iohk": "ghc-8.6.5-iohk",
|
"ghc-8.6.5-iohk": "ghc-8.6.5-iohk",
|
||||||
"hackage": "hackage",
|
"hackage": "hackage",
|
||||||
"hpc-coveralls": "hpc-coveralls",
|
"hpc-coveralls": "hpc-coveralls",
|
||||||
@ -441,6 +448,22 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"nixpkgs-recent": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1669833724,
|
||||||
|
"narHash": "sha256-/HEZNyGbnQecrgJnfE8d0WC5c1xuPSD2LUpB6YXlg4c=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "4d2b37a84fad1091b9de401eb450aae66f1a741e",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "22.11",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"nixpkgs-unstable": {
|
"nixpkgs-unstable": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1628785280,
|
"lastModified": 1628785280,
|
||||||
@ -457,6 +480,22 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"nixpkgs_2": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1622516815,
|
||||||
|
"narHash": "sha256-ZjBd81a6J3TwtlBr3rHsZspYUwT9OdhDk+a/SgSEf7I=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "7e9b0dff974c89e070da1ad85713ff3c20b0ca97",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "21.05",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"old-ghc-nix": {
|
"old-ghc-nix": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
@ -484,19 +523,13 @@
|
|||||||
"docker-nixpkgs": "docker-nixpkgs",
|
"docker-nixpkgs": "docker-nixpkgs",
|
||||||
"encoding": "encoding",
|
"encoding": "encoding",
|
||||||
"esqueleto": "esqueleto",
|
"esqueleto": "esqueleto",
|
||||||
"flake-utils": [
|
"flake-utils": "flake-utils",
|
||||||
"haskell-nix",
|
|
||||||
"flake-utils"
|
|
||||||
],
|
|
||||||
"fontawesome-token": "fontawesome-token",
|
|
||||||
"haskell-nix": "haskell-nix",
|
"haskell-nix": "haskell-nix",
|
||||||
"ldap-client": "ldap-client",
|
"ldap-client": "ldap-client",
|
||||||
"memcached-binary": "memcached-binary",
|
"memcached-binary": "memcached-binary",
|
||||||
"minio-hs": "minio-hs",
|
"minio-hs": "minio-hs",
|
||||||
"nixpkgs": [
|
"nixpkgs": "nixpkgs_2",
|
||||||
"haskell-nix",
|
"nixpkgs-recent": "nixpkgs-recent",
|
||||||
"nixpkgs-unstable"
|
|
||||||
],
|
|
||||||
"serversession": "serversession",
|
"serversession": "serversession",
|
||||||
"xss-sanitize": "xss-sanitize",
|
"xss-sanitize": "xss-sanitize",
|
||||||
"yesod": "yesod",
|
"yesod": "yesod",
|
||||||
@ -536,6 +569,21 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"systems": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1681028828,
|
||||||
|
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"xss-sanitize": {
|
"xss-sanitize": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
|
|||||||
183
flake.nix
183
flake.nix
@ -1,80 +1,97 @@
|
|||||||
# SPDX-FileCopyrightText: 2022 Gregor Kleen <gregor.kleen@ifi.lmu.de>,Steffen Jost <jost@cip.ifi.lmu.de>
|
# SPDX-FileCopyrightText: 2022-2023 Gregor Kleen <gregor@kleen.consulting>, Sarah Vaupel <sarah.vaupel@uniworx.de>
|
||||||
#
|
#
|
||||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
|
|
||||||
{
|
{
|
||||||
inputs.haskell-nix.url = "github:input-output-hk/haskell.nix";
|
inputs = {
|
||||||
inputs.nixpkgs.follows = "haskell-nix/nixpkgs-unstable";
|
haskell-nix = {
|
||||||
inputs.flake-utils.follows = "haskell-nix/flake-utils";
|
url = "github:input-output-hk/haskell.nix";
|
||||||
|
};
|
||||||
|
|
||||||
inputs.docker-nixpkgs = {
|
nixpkgs = {
|
||||||
url = "github:nix-community/docker-nixpkgs";
|
type = "github";
|
||||||
flake = false;
|
owner = "NixOS";
|
||||||
|
repo = "nixpkgs";
|
||||||
|
# ref = "6525bbc06a39f26750ad8ee0d40000ddfdc24acb";
|
||||||
|
ref = "21.05";
|
||||||
|
};
|
||||||
|
nixpkgs-recent = {
|
||||||
|
type = "github";
|
||||||
|
owner = "NixOS";
|
||||||
|
repo = "nixpkgs";
|
||||||
|
ref = "22.11";
|
||||||
|
};
|
||||||
|
flake-utils = {
|
||||||
|
type = "github";
|
||||||
|
owner = "numtide";
|
||||||
|
repo = "flake-utils";
|
||||||
|
ref = "main";
|
||||||
|
};
|
||||||
|
|
||||||
|
docker-nixpkgs = {
|
||||||
|
url = "github:nix-community/docker-nixpkgs";
|
||||||
|
flake = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
encoding = {
|
||||||
|
url = "git+https://gitlab.ifi.lmu.de/uni2work/haskell/encoding.git?ref=uni2work";
|
||||||
|
flake = false;
|
||||||
|
};
|
||||||
|
memcached-binary = {
|
||||||
|
url = "git+https://gitlab.ifi.lmu.de/uni2work/haskell/memcached-binary.git?ref=uni2work";
|
||||||
|
flake = false;
|
||||||
|
};
|
||||||
|
conduit-resumablesink = {
|
||||||
|
url = "git+https://gitlab.ifi.lmu.de/uni2work/haskell/conduit-resumablesink.git?ref=uni2work";
|
||||||
|
flake = false;
|
||||||
|
};
|
||||||
|
HaskellNet-SSL = {
|
||||||
|
url = "git+https://gitlab.ifi.lmu.de/uni2work/haskell/HaskellNet-SSL.git?ref=uni2work";
|
||||||
|
flake = false;
|
||||||
|
};
|
||||||
|
ldap-client = {
|
||||||
|
url = "git+https://gitlab.ifi.lmu.de/uni2work/haskell/ldap-client.git?ref=uni2work";
|
||||||
|
flake = false;
|
||||||
|
};
|
||||||
|
serversession = {
|
||||||
|
url = "git+https://gitlab.ifi.lmu.de/uni2work/haskell/serversession.git?ref=uni2work";
|
||||||
|
flake = false;
|
||||||
|
};
|
||||||
|
xss-sanitize = {
|
||||||
|
url = "git+https://gitlab.ifi.lmu.de/uni2work/haskell/xss-sanitize.git?ref=uni2work";
|
||||||
|
flake = false;
|
||||||
|
};
|
||||||
|
colonnade = {
|
||||||
|
url = "git+https://gitlab.ifi.lmu.de/uni2work/haskell/colonnade.git?ref=uni2work";
|
||||||
|
flake = false;
|
||||||
|
};
|
||||||
|
minio-hs = {
|
||||||
|
url = "git+https://gitlab.ifi.lmu.de/uni2work/haskell/minio-hs.git?ref=uni2work";
|
||||||
|
flake = false;
|
||||||
|
};
|
||||||
|
cryptoids = {
|
||||||
|
url = "git+https://gitlab.ifi.lmu.de/uni2work/haskell/cryptoids.git?ref=uni2work";
|
||||||
|
flake = false;
|
||||||
|
};
|
||||||
|
zip-stream = {
|
||||||
|
url = "git+https://gitlab.ifi.lmu.de/uni2work/haskell/zip-stream.git?ref=uni2work";
|
||||||
|
flake = false;
|
||||||
|
};
|
||||||
|
yesod = {
|
||||||
|
url = "git+https://gitlab.ifi.lmu.de/uni2work/haskell/yesod.git?ref=uni2work";
|
||||||
|
flake = false;
|
||||||
|
};
|
||||||
|
cryptonite = {
|
||||||
|
url = "git+https://gitlab.ifi.lmu.de/uni2work/haskell/cryptonite.git?ref=uni2work";
|
||||||
|
flake = false;
|
||||||
|
};
|
||||||
|
esqueleto = {
|
||||||
|
url = "git+https://gitlab.ifi.lmu.de/uni2work/haskell/esqueleto.git?ref=uni2work";
|
||||||
|
flake = false;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
inputs.encoding = {
|
outputs = inputs@{ self, nixpkgs, nixpkgs-recent, docker-nixpkgs, flake-utils, haskell-nix, ... }: flake-utils.lib.eachSystem ["x86_64-linux"]
|
||||||
url = "git+https://gitlab.ifi.lmu.de/uni2work/haskell/encoding.git?ref=uni2work";
|
|
||||||
flake = false;
|
|
||||||
};
|
|
||||||
inputs.memcached-binary = {
|
|
||||||
url = "git+https://gitlab.ifi.lmu.de/uni2work/haskell/memcached-binary.git?ref=uni2work";
|
|
||||||
flake = false;
|
|
||||||
};
|
|
||||||
inputs.conduit-resumablesink = {
|
|
||||||
url = "git+https://gitlab.ifi.lmu.de/uni2work/haskell/conduit-resumablesink.git?ref=uni2work";
|
|
||||||
flake = false;
|
|
||||||
};
|
|
||||||
inputs.HaskellNet-SSL = {
|
|
||||||
url = "git+https://gitlab.ifi.lmu.de/uni2work/haskell/HaskellNet-SSL.git?ref=uni2work";
|
|
||||||
flake = false;
|
|
||||||
};
|
|
||||||
inputs.ldap-client = {
|
|
||||||
url = "git+https://gitlab.ifi.lmu.de/uni2work/haskell/ldap-client.git?ref=uni2work";
|
|
||||||
flake = false;
|
|
||||||
};
|
|
||||||
inputs.serversession = {
|
|
||||||
url = "git+https://gitlab.ifi.lmu.de/uni2work/haskell/serversession.git?ref=uni2work";
|
|
||||||
flake = false;
|
|
||||||
};
|
|
||||||
inputs.xss-sanitize = {
|
|
||||||
url = "git+https://gitlab.ifi.lmu.de/uni2work/haskell/xss-sanitize.git?ref=uni2work";
|
|
||||||
flake = false;
|
|
||||||
};
|
|
||||||
inputs.colonnade = {
|
|
||||||
url = "git+https://gitlab.ifi.lmu.de/uni2work/haskell/colonnade.git?ref=uni2work";
|
|
||||||
flake = false;
|
|
||||||
};
|
|
||||||
inputs.minio-hs = {
|
|
||||||
url = "git+https://gitlab.ifi.lmu.de/uni2work/haskell/minio-hs.git?ref=uni2work";
|
|
||||||
flake = false;
|
|
||||||
};
|
|
||||||
inputs.cryptoids = {
|
|
||||||
url = "git+https://gitlab.ifi.lmu.de/uni2work/haskell/cryptoids.git?ref=uni2work";
|
|
||||||
flake = false;
|
|
||||||
};
|
|
||||||
inputs.zip-stream = {
|
|
||||||
url = "git+https://gitlab.ifi.lmu.de/uni2work/haskell/zip-stream.git?ref=uni2work";
|
|
||||||
flake = false;
|
|
||||||
};
|
|
||||||
inputs.yesod = {
|
|
||||||
url = "git+https://gitlab.ifi.lmu.de/uni2work/haskell/yesod.git?ref=uni2work";
|
|
||||||
flake = false;
|
|
||||||
};
|
|
||||||
inputs.cryptonite = {
|
|
||||||
url = "git+https://gitlab.ifi.lmu.de/uni2work/haskell/cryptonite.git?ref=uni2work";
|
|
||||||
flake = false;
|
|
||||||
};
|
|
||||||
inputs.esqueleto = {
|
|
||||||
url = "git+https://gitlab.ifi.lmu.de/uni2work/haskell/esqueleto.git?ref=uni2work";
|
|
||||||
flake = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
inputs.fontawesome-token = {
|
|
||||||
url = "path:/etc/fontawesome-token";
|
|
||||||
flake = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
outputs = inputs@{ self, nixpkgs, flake-utils, haskell-nix, docker-nixpkgs, ... }: flake-utils.lib.eachSystem ["x86_64-linux"]
|
|
||||||
(system:
|
(system:
|
||||||
let frontendSource = pkgs.lib.sourceByRegex ./. [
|
let frontendSource = pkgs.lib.sourceByRegex ./. [
|
||||||
"^(assets|frontend)(/.*)?$"
|
"^(assets|frontend)(/.*)?$"
|
||||||
@ -84,32 +101,34 @@
|
|||||||
"^(package|jsconfig|\.eslintrc)\.json$"
|
"^(package|jsconfig|\.eslintrc)\.json$"
|
||||||
"^\.babelrc$"
|
"^\.babelrc$"
|
||||||
];
|
];
|
||||||
|
|
||||||
backendSource = pkgs.lib.sourceByRegex ./. [
|
backendSource = pkgs.lib.sourceByRegex ./. [
|
||||||
"^(\.hlint|package|stack-flake)\.yaml$"
|
"^(\.hlint|package|stack-flake)\.yaml$"
|
||||||
"^stack\.yaml\.lock$"
|
"^stack\.yaml\.lock$"
|
||||||
"^(assets|app|hlint|load|messages|models|src|templates|test|testdata)(/.*)?$"
|
|
||||||
"^config(/(archive-types|mimetypes|personalised-sheet-files-collate|settings\.yml|submission-blacklist|test-settings\.yml|video-types|wordlist\.txt))?$"
|
"^config(/(archive-types|mimetypes|personalised-sheet-files-collate|settings\.yml|submission-blacklist|test-settings\.yml|video-types|wordlist\.txt))?$"
|
||||||
"^routes$"
|
"^routes$"
|
||||||
"^testdata(/.*)?$"
|
"^(assets|app|hlint|load|messages|models|src|templates|test|testdata)(/.*)?$"
|
||||||
];
|
];
|
||||||
|
|
||||||
pkgs = import nixpkgs {
|
pkgs = import nixpkgs {
|
||||||
inherit system overlays;
|
inherit system overlays;
|
||||||
config.allowUnfree = true;
|
config.allowUnfree = true;
|
||||||
};
|
};
|
||||||
overlays = [
|
|
||||||
# remove once https://github.com/NixOS/nix/pull/5266 has landed in nixpkgs used here (see flake.lock)
|
|
||||||
(import ./nix/aws-patch.nix)
|
|
||||||
# end remove
|
|
||||||
|
|
||||||
|
overlays = [
|
||||||
(import "${docker-nixpkgs}/overlay.nix")
|
(import "${docker-nixpkgs}/overlay.nix")
|
||||||
|
|
||||||
|
(final: prev: let
|
||||||
|
pkgs-recent = import nixpkgs-recent { inherit system; };
|
||||||
|
in { inherit (pkgs-recent) dockerTools node2nix stack glibcLocalesUtf8 tzdata chromium minio minio-client; inherit (pkgs-recent.stdenv) fetchurlBoot; })
|
||||||
|
|
||||||
(import ./nix/maildev)
|
(import ./nix/maildev)
|
||||||
haskell-nix.overlay
|
haskell-nix.overlay
|
||||||
(import ./nix/uniworx { inherit inputs frontendSource backendSource; })
|
(import ./nix/uniworx { inherit inputs frontendSource backendSource; gitRevision = if self ? rev then self.rev else null; })
|
||||||
(import ./nix/docker { inherit self; })
|
(import ./nix/docker { inherit self; })
|
||||||
(import ./nix/parse-changelog.nix {})
|
(import ./nix/parse-changelog.nix {})
|
||||||
];
|
];
|
||||||
|
|
||||||
haskellFlake = pkgs.uniworx.flake {};
|
haskellFlake = pkgs.uniworx.flake {};
|
||||||
|
|
||||||
mkPushDocker = imageName: dockerImage: pkgs.writeScriptBin "push-${dockerImage.imageName}" ''
|
mkPushDocker = imageName: dockerImage: pkgs.writeScriptBin "push-${dockerImage.imageName}" ''
|
||||||
@ -119,24 +138,28 @@
|
|||||||
[[ -n "''${1}" ]] && shift
|
[[ -n "''${1}" ]] && shift
|
||||||
${pkgs.skopeo}/bin/skopeo ''${@} --insecure-policy copy docker-archive://${dockerImage} ''${target}
|
${pkgs.skopeo}/bin/skopeo ''${@} --insecure-policy copy docker-archive://${dockerImage} ''${target}
|
||||||
'';
|
'';
|
||||||
|
|
||||||
|
inherit (pkgs.lib) recursiveUpdate;
|
||||||
in {
|
in {
|
||||||
packages = haskellFlake.packages // {
|
packages = haskellFlake.packages // {
|
||||||
inherit (pkgs) uniworxNodeDependencies uniworxWellKnown uniworxFrontend uniworxDemoDocker uniworxDocker ciDocker changelogJson;
|
inherit (pkgs) uniworxNodeDependencies uniworxWellKnown uniworxFrontend uniworxDemoDocker uniworxDocker ciDocker changelogJson;
|
||||||
};
|
};
|
||||||
|
|
||||||
apps = haskellFlake.apps // {
|
apps = haskellFlake.apps // {
|
||||||
pushUniworxDemoDocker = flake-utils.lib.mkApp { drv = mkPushDocker "uniworx-demo" pkgs.uniworxDemoDocker; };
|
pushUniworxDemoDocker = flake-utils.lib.mkApp { drv = mkPushDocker "uniworx-demo" pkgs.uniworxDemoDocker; };
|
||||||
pushUniworxDocker = flake-utils.lib.mkApp { drv = mkPushDocker "uniworx" pkgs.uniworxDocker; };
|
pushUniworxDocker = flake-utils.lib.mkApp { drv = mkPushDocker "uniworx" pkgs.uniworxDocker; };
|
||||||
pushCIDocker = flake-utils.lib.mkApp { drv = mkPushDocker "nix-unstable" pkgs.ciDocker; };
|
pushCIDocker = flake-utils.lib.mkApp { drv = mkPushDocker "nix-unstable" pkgs.ciDocker; };
|
||||||
calculateMaterializedSha = flake-utils.lib.mkApp { drv = pkgs.uniworx.stack-nix.passthru.calculateMaterializedSha; exePath = ""; };
|
calculateMaterializedSha = flake-utils.lib.mkApp { drv = pkgs.uniworx.stack-nix.passthru.calculateMaterializedSha; execPath = ""; };
|
||||||
jqChangelogJson = flake-utils.lib.mkApp { drv = pkgs.jqChangelogJson; };
|
jqChangelogJson = flake-utils.lib.mkApp { drv = pkgs.jqChangelogJson; };
|
||||||
};
|
};
|
||||||
|
|
||||||
checks = haskellFlake.checks // {
|
checks = haskellFlake.checks // {
|
||||||
uniworxFrontend = pkgs.uniworxFrontend.check;
|
uniworxFrontend = pkgs.uniworxFrontend.check;
|
||||||
};
|
};
|
||||||
|
|
||||||
devShell = import ./shell.nix { inherit pkgs; };
|
devShell = import ./shell.nix { pkgs = self.legacyPackages.${system}; nixpkgsPath = nixpkgs; };
|
||||||
|
|
||||||
legacyPackages = pkgs;
|
legacyPackages = pkgs.lib.foldr (overlay: acc: acc // recursiveUpdate (overlay self.legacyPackages.${system} pkgs) pkgs) {} overlays;
|
||||||
|
|
||||||
defaultPackage = self.packages.${system}."uniworx:exe:uniworx";
|
defaultPackage = self.packages.${system}."uniworx:exe:uniworx";
|
||||||
defaultApp = self.apps.${system}."uniworx:exe:uniworx";
|
defaultApp = self.apps.${system}."uniworx:exe:uniworx";
|
||||||
|
|||||||
@ -1,3 +1,3 @@
|
|||||||
{
|
{
|
||||||
"version": "0.1.0"
|
"version": "0.2.0"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
# SPDX-FileCopyrightText: 2022 Gregor Kleen <gregor.kleen@ifi.lmu.de>,Sarah Vaupel <sarah.vaupel@ifi.lmu.de>,Steffen Jost <jost@cip.ifi.lmu.de>,Steffen Jost <jost@tcs.ifi.lmu.de>
|
# SPDX-FileCopyrightText: 2022-2023 Gregor Kleen <gregor@kleen.consulting>, Sarah Vaupel <sarah.vaupel@ifi.lmu.de>, Steffen Jost <jost@tcs.ifi.lmu.de>
|
||||||
#
|
#
|
||||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
|
|
||||||
@ -22,29 +22,38 @@ let
|
|||||||
in (builtins.fromJSON (prev.lib.readFile versionFile)).version;
|
in (builtins.fromJSON (prev.lib.readFile versionFile)).version;
|
||||||
inherit created;
|
inherit created;
|
||||||
|
|
||||||
contents = with final; [
|
copyToRoot = prev.buildEnv {
|
||||||
uniworx.uniworx.components.exes.uniworx
|
name = "uniworx${optionalString isDemo "-demo"}-root";
|
||||||
prev.dockerTools.binSh findutils coreutils
|
paths = with final; [
|
||||||
iana-etc
|
uniworx.uniworx.components.exes.uniworx
|
||||||
# for PDF creation with Pandoc and LuaTeX
|
prev.dockerTools.binSh findutils coreutils
|
||||||
#cups # needed for interface with print center -- did not work as intended, requires lpd running
|
iana-etc
|
||||||
busybox # should provide a working lpr -- to be tested
|
# just for manual testing within the pod, may be removed for production?
|
||||||
htop
|
curl wget netcat openldap
|
||||||
pdftk # for encrypting pdfs
|
unixtools.netstat htop gnugrep
|
||||||
#texlive.combined.scheme-medium # too large for container in LMU build environment.
|
locale
|
||||||
(texlive.combine {
|
] ++ optionals isDemo [ postgresql_12 memcached uniworx.uniworx.components.exes.uniworxdb ];
|
||||||
inherit (texlive) scheme-basic
|
|
||||||
babel-german babel-english booktabs textpos
|
nativeBuildInputs = with prev; [ makeWrapper ];
|
||||||
enumitem eurosym koma-script parskip xcolor dejavu
|
postBuild = ''
|
||||||
# required fro LuaTeX
|
wrapProgram $out/bin/uniworx \
|
||||||
luatexbase lualatex-math unicode-math selnolig
|
--set-default LOCALE_ARCHIVE ${final.glibcLocalesUtf8}/lib/locale/locale-archive \
|
||||||
;
|
--set-default LOCALE_ARCHIVE_2_27 ${final.glibcLocalesUtf8}/lib/locale/locale-archive \
|
||||||
})
|
--set-default LANG en_DK.UTF-8 \
|
||||||
# just for manual testing within the pod, may be removef for production?
|
--suffix PATH : ${makeBinPath (with final; [
|
||||||
curl wget netcat openldap
|
busybox
|
||||||
unixtools.netstat htop gnugrep
|
pdftk
|
||||||
locale
|
(texlive.combine {
|
||||||
] ++ optionals isDemo [ postgresql_12 memcached uniworx.uniworx.components.exes.uniworxdb ];
|
inherit (texlive) scheme-basic
|
||||||
|
babel-german babel-english booktabs textpos
|
||||||
|
enumitem eurosym koma-script parskip xcolor dejavu
|
||||||
|
# required fro LuaTeX
|
||||||
|
luatexbase lualatex-math unicode-math selnolig
|
||||||
|
;
|
||||||
|
})
|
||||||
|
])}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
runAsRoot = ''
|
runAsRoot = ''
|
||||||
#!${final.stdenv.shell}
|
#!${final.stdenv.shell}
|
||||||
@ -134,7 +143,7 @@ let
|
|||||||
approot: "_env:APPROOT:http://localhost:8080"
|
approot: "_env:APPROOT:http://localhost:8080"
|
||||||
'';
|
'';
|
||||||
in {
|
in {
|
||||||
Cmd = [ "${entrypoint}/bin/uniworx-entrypoint" ];
|
Cmd = [ "${final.tini}/bin/tini" "${entrypoint}/bin/uniworx-entrypoint" ];
|
||||||
User = "uniworx:uniworx";
|
User = "uniworx:uniworx";
|
||||||
ExposedPorts = {
|
ExposedPorts = {
|
||||||
"8080/tcp" = {};
|
"8080/tcp" = {};
|
||||||
@ -145,6 +154,10 @@ let
|
|||||||
} // optionalAttrs isDemo {
|
} // optionalAttrs isDemo {
|
||||||
"/var/lib/postgres" = {};
|
"/var/lib/postgres" = {};
|
||||||
};
|
};
|
||||||
|
Env = [
|
||||||
|
"TINI_SUBREAPER=yes"
|
||||||
|
"TINI_VERBOSITY=2"
|
||||||
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
in
|
in
|
||||||
@ -155,11 +168,14 @@ in
|
|||||||
tag = (builtins.fromJSON (prev.lib.readFile ./ci-version.json)).version;
|
tag = (builtins.fromJSON (prev.lib.readFile ./ci-version.json)).version;
|
||||||
fromImage = prev.docker-nixpkgs.nix-unstable;
|
fromImage = prev.docker-nixpkgs.nix-unstable;
|
||||||
|
|
||||||
contents = with final; [
|
copyToRoot = prev.buildEnv {
|
||||||
bash coreutils
|
name = "uniworx-ci-root";
|
||||||
minio-client
|
paths = with final; [
|
||||||
xz
|
bash coreutils
|
||||||
];
|
minio-client
|
||||||
|
xz
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
runAsRoot = ''
|
runAsRoot = ''
|
||||||
#!${final.stdenv.shell}
|
#!${final.stdenv.shell}
|
||||||
|
|||||||
@ -1,9 +1,7 @@
|
|||||||
# SPDX-FileCopyrightText: 2022 Gregor Kleen <gregor.kleen@ifi.lmu.de>,Sarah Vaupel <sarah.vaupel@ifi.lmu.de>
|
# SPDX-FileCopyrightText: 2022-2023 Gregor Kleen <gregor@kleen.consulting>, Sarah Vaupel <sarah.vaupel@ifi.lmu.de>
|
||||||
#
|
#
|
||||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
|
|
||||||
# This file has been generated by node2nix 1.11.1. Do not edit!
|
|
||||||
|
|
||||||
{pkgs ? import <nixpkgs> {
|
{pkgs ? import <nixpkgs> {
|
||||||
inherit system;
|
inherit system;
|
||||||
}, system ? builtins.currentSystem, nodejs ? pkgs."nodejs-14_x"}:
|
}, system ? builtins.currentSystem, nodejs ? pkgs."nodejs-14_x"}:
|
||||||
@ -16,6 +14,6 @@ let
|
|||||||
};
|
};
|
||||||
in
|
in
|
||||||
import ./node-packages.nix {
|
import ./node-packages.nix {
|
||||||
inherit (pkgs) fetchurl nix-gitignore stdenv lib fetchgit;
|
inherit (pkgs) fetchurl fetchurlBoot nix-gitignore stdenv lib fetchgit;
|
||||||
inherit nodeEnv;
|
inherit nodeEnv;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,7 +1,3 @@
|
|||||||
# SPDX-FileCopyrightText: 2022 Gregor Kleen <gregor.kleen@ifi.lmu.de>,Sarah Vaupel <sarah.vaupel@ifi.lmu.de>
|
|
||||||
#
|
|
||||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
||||||
|
|
||||||
# This file originates from node2nix
|
# This file originates from node2nix
|
||||||
|
|
||||||
{lib, stdenv, nodejs, python2, pkgs, libtool, runCommand, writeTextFile, writeShellScript}:
|
{lib, stdenv, nodejs, python2, pkgs, libtool, runCommand, writeTextFile, writeShellScript}:
|
||||||
@ -169,7 +165,11 @@ let
|
|||||||
if(process.argv[2] == "development") {
|
if(process.argv[2] == "development") {
|
||||||
replaceDependencies(packageObj.devDependencies);
|
replaceDependencies(packageObj.devDependencies);
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
packageObj.devDependencies = {};
|
||||||
|
}
|
||||||
replaceDependencies(packageObj.optionalDependencies);
|
replaceDependencies(packageObj.optionalDependencies);
|
||||||
|
replaceDependencies(packageObj.peerDependencies);
|
||||||
|
|
||||||
/* Write the fixed package.json file */
|
/* Write the fixed package.json file */
|
||||||
fs.writeFileSync("package.json", JSON.stringify(packageObj, null, 2));
|
fs.writeFileSync("package.json", JSON.stringify(packageObj, null, 2));
|
||||||
@ -274,7 +274,7 @@ let
|
|||||||
|
|
||||||
# Reconstructs a package-lock file from the node_modules/ folder structure and package.json files with dummy sha1 hashes
|
# Reconstructs a package-lock file from the node_modules/ folder structure and package.json files with dummy sha1 hashes
|
||||||
reconstructPackageLock = writeTextFile {
|
reconstructPackageLock = writeTextFile {
|
||||||
name = "addintegrityfields.js";
|
name = "reconstructpackagelock.js";
|
||||||
text = ''
|
text = ''
|
||||||
var fs = require('fs');
|
var fs = require('fs');
|
||||||
var path = require('path');
|
var path = require('path');
|
||||||
@ -284,25 +284,43 @@ let
|
|||||||
var lockObj = {
|
var lockObj = {
|
||||||
name: packageObj.name,
|
name: packageObj.name,
|
||||||
version: packageObj.version,
|
version: packageObj.version,
|
||||||
lockfileVersion: 1,
|
lockfileVersion: 2,
|
||||||
requires: true,
|
requires: true,
|
||||||
|
packages: {
|
||||||
|
"": {
|
||||||
|
name: packageObj.name,
|
||||||
|
version: packageObj.version,
|
||||||
|
license: packageObj.license,
|
||||||
|
bin: packageObj.bin,
|
||||||
|
dependencies: packageObj.dependencies,
|
||||||
|
engines: packageObj.engines,
|
||||||
|
optionalDependencies: packageObj.optionalDependencies
|
||||||
|
}
|
||||||
|
},
|
||||||
dependencies: {}
|
dependencies: {}
|
||||||
};
|
};
|
||||||
|
|
||||||
function augmentPackageJSON(filePath, dependencies) {
|
function augmentPackageJSON(filePath, packages, dependencies) {
|
||||||
var packageJSON = path.join(filePath, "package.json");
|
var packageJSON = path.join(filePath, "package.json");
|
||||||
if(fs.existsSync(packageJSON)) {
|
if(fs.existsSync(packageJSON)) {
|
||||||
var packageObj = JSON.parse(fs.readFileSync(packageJSON));
|
var packageObj = JSON.parse(fs.readFileSync(packageJSON));
|
||||||
|
packages[filePath] = {
|
||||||
|
version: packageObj.version,
|
||||||
|
integrity: "sha1-000000000000000000000000000=",
|
||||||
|
dependencies: packageObj.dependencies,
|
||||||
|
engines: packageObj.engines,
|
||||||
|
optionalDependencies: packageObj.optionalDependencies
|
||||||
|
};
|
||||||
dependencies[packageObj.name] = {
|
dependencies[packageObj.name] = {
|
||||||
version: packageObj.version,
|
version: packageObj.version,
|
||||||
integrity: "sha1-000000000000000000000000000=",
|
integrity: "sha1-000000000000000000000000000=",
|
||||||
dependencies: {}
|
dependencies: {}
|
||||||
};
|
};
|
||||||
processDependencies(path.join(filePath, "node_modules"), dependencies[packageObj.name].dependencies);
|
processDependencies(path.join(filePath, "node_modules"), packages, dependencies[packageObj.name].dependencies);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function processDependencies(dir, dependencies) {
|
function processDependencies(dir, packages, dependencies) {
|
||||||
if(fs.existsSync(dir)) {
|
if(fs.existsSync(dir)) {
|
||||||
var files = fs.readdirSync(dir);
|
var files = fs.readdirSync(dir);
|
||||||
|
|
||||||
@ -318,23 +336,84 @@ let
|
|||||||
pkgFiles.forEach(function(entry) {
|
pkgFiles.forEach(function(entry) {
|
||||||
if(stats.isDirectory()) {
|
if(stats.isDirectory()) {
|
||||||
var pkgFilePath = path.join(filePath, entry);
|
var pkgFilePath = path.join(filePath, entry);
|
||||||
augmentPackageJSON(pkgFilePath, dependencies);
|
augmentPackageJSON(pkgFilePath, packages, dependencies);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
augmentPackageJSON(filePath, dependencies);
|
augmentPackageJSON(filePath, packages, dependencies);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
processDependencies("node_modules", lockObj.dependencies);
|
processDependencies("node_modules", lockObj.packages, lockObj.dependencies);
|
||||||
|
|
||||||
fs.writeFileSync("package-lock.json", JSON.stringify(lockObj, null, 2));
|
fs.writeFileSync("package-lock.json", JSON.stringify(lockObj, null, 2));
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# Script that links bins defined in package.json to the node_modules bin directory
|
||||||
|
# NPM does not do this for top-level packages itself anymore as of v7
|
||||||
|
linkBinsScript = writeTextFile {
|
||||||
|
name = "linkbins.js";
|
||||||
|
text = ''
|
||||||
|
var fs = require('fs');
|
||||||
|
var path = require('path');
|
||||||
|
|
||||||
|
var packageObj = JSON.parse(fs.readFileSync("package.json"));
|
||||||
|
|
||||||
|
var nodeModules = Array(packageObj.name.split("/").length).fill("..").join(path.sep);
|
||||||
|
|
||||||
|
if(packageObj.bin !== undefined) {
|
||||||
|
fs.mkdirSync(path.join(nodeModules, ".bin"))
|
||||||
|
|
||||||
|
if(typeof packageObj.bin == "object") {
|
||||||
|
Object.keys(packageObj.bin).forEach(function(exe) {
|
||||||
|
if(fs.existsSync(packageObj.bin[exe])) {
|
||||||
|
console.log("linking bin '" + exe + "'");
|
||||||
|
fs.symlinkSync(
|
||||||
|
path.join("..", packageObj.name, packageObj.bin[exe]),
|
||||||
|
path.join(nodeModules, ".bin", exe)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
console.log("skipping non-existent bin '" + exe + "'");
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if(fs.existsSync(packageObj.bin)) {
|
||||||
|
console.log("linking bin '" + packageObj.bin + "'");
|
||||||
|
fs.symlinkSync(
|
||||||
|
path.join("..", packageObj.name, packageObj.bin),
|
||||||
|
path.join(nodeModules, ".bin", packageObj.name.split("/").pop())
|
||||||
|
);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
console.log("skipping non-existent bin '" + packageObj.bin + "'");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(packageObj.directories !== undefined && packageObj.directories.bin !== undefined) {
|
||||||
|
fs.mkdirSync(path.join(nodeModules, ".bin"))
|
||||||
|
|
||||||
|
fs.readdirSync(packageObj.directories.bin).forEach(function(exe) {
|
||||||
|
if(fs.existsSync(path.join(packageObj.directories.bin, exe))) {
|
||||||
|
console.log("linking bin '" + exe + "'");
|
||||||
|
fs.symlinkSync(
|
||||||
|
path.join("..", packageObj.name, packageObj.directories.bin, exe),
|
||||||
|
path.join(nodeModules, ".bin", exe)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
console.log("skipping non-existent bin '" + exe + "'");
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
prepareAndInvokeNPM = {packageName, bypassCache, reconstructLock, npmFlags, production}:
|
prepareAndInvokeNPM = {packageName, bypassCache, reconstructLock, npmFlags, production}:
|
||||||
let
|
let
|
||||||
forceOfflineFlag = if bypassCache then "--offline" else "--registry http://www.example.com";
|
forceOfflineFlag = if bypassCache then "--offline" else "--registry http://www.example.com";
|
||||||
@ -381,13 +460,18 @@ let
|
|||||||
|
|
||||||
npm ${forceOfflineFlag} --nodedir=${nodeSources} ${npmFlags} ${lib.optionalString production "--production"} rebuild
|
npm ${forceOfflineFlag} --nodedir=${nodeSources} ${npmFlags} ${lib.optionalString production "--production"} rebuild
|
||||||
|
|
||||||
|
runHook postRebuild
|
||||||
|
|
||||||
if [ "''${dontNpmInstall-}" != "1" ]
|
if [ "''${dontNpmInstall-}" != "1" ]
|
||||||
then
|
then
|
||||||
# NPM tries to download packages even when they already exist if npm-shrinkwrap is used.
|
# NPM tries to download packages even when they already exist if npm-shrinkwrap is used.
|
||||||
rm -f npm-shrinkwrap.json
|
rm -f npm-shrinkwrap.json
|
||||||
|
|
||||||
npm ${forceOfflineFlag} --nodedir=${nodeSources} ${npmFlags} ${lib.optionalString production "--production"} install
|
npm ${forceOfflineFlag} --nodedir=${nodeSources} --no-bin-links --ignore-scripts ${npmFlags} ${lib.optionalString production "--production"} install
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Link executables defined in package.json
|
||||||
|
node ${linkBinsScript}
|
||||||
'';
|
'';
|
||||||
|
|
||||||
# Builds and composes an NPM package including all its dependencies
|
# Builds and composes an NPM package including all its dependencies
|
||||||
@ -446,12 +530,15 @@ let
|
|||||||
then
|
then
|
||||||
ln -s $out/lib/node_modules/.bin $out/bin
|
ln -s $out/lib/node_modules/.bin $out/bin
|
||||||
|
|
||||||
# Patch the shebang lines of all the executables
|
# Fixup all executables
|
||||||
ls $out/bin/* | while read i
|
ls $out/bin/* | while read i
|
||||||
do
|
do
|
||||||
file="$(readlink -f "$i")"
|
file="$(readlink -f "$i")"
|
||||||
chmod u+rwx "$file"
|
chmod u+rwx "$file"
|
||||||
patchShebangs "$file"
|
if isScript "$file"
|
||||||
|
then
|
||||||
|
sed -i 's/\r$//' "$file" # convert crlf to lf
|
||||||
|
fi
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
@ -1,10 +1,6 @@
|
|||||||
# SPDX-FileCopyrightText: 2022 Gregor Kleen <gregor.kleen@ifi.lmu.de>,Sarah Vaupel <sarah.vaupel@ifi.lmu.de>
|
|
||||||
#
|
|
||||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
||||||
|
|
||||||
# This file has been generated by node2nix 1.11.1. Do not edit!
|
# This file has been generated by node2nix 1.11.1. Do not edit!
|
||||||
|
|
||||||
{nodeEnv, fetchurl, fetchgit, nix-gitignore, stdenv, lib, globalBuildInputs ? []}:
|
{nodeEnv, fetchurl, fetchurlBoot, fetchgit, nix-gitignore, stdenv, lib, globalBuildInputs ? []}:
|
||||||
|
|
||||||
let
|
let
|
||||||
sources = {
|
sources = {
|
||||||
@ -1272,9 +1268,9 @@ let
|
|||||||
name = "_at_fortawesome_slash_fontawesome-pro";
|
name = "_at_fortawesome_slash_fontawesome-pro";
|
||||||
packageName = "@fortawesome/fontawesome-pro";
|
packageName = "@fortawesome/fontawesome-pro";
|
||||||
version = "6.1.1";
|
version = "6.1.1";
|
||||||
src = fetchurl {
|
src = fetchurlBoot {
|
||||||
url = "https://npm.fontawesome.com/@fortawesome/fontawesome-pro/-/6.1.1/fontawesome-pro-6.1.1.tgz";
|
url = "https://npm.fontawesome.com/@fortawesome/fontawesome-pro/-/6.1.1/fontawesome-pro-6.1.1.tgz";
|
||||||
sha512 = "0w6GM8sCXNpcBLUz4bx61JvjjoCvfEIz5wBz2KjLNw9qk1F2XiUWuifXobvLbwaA7kqPGBRPo3U8Zw7zyaJ9sA==";
|
hash = "sha256-Pq+n8YWCwwQ9B1Etfqs5sypghBMPWPAJFQ49UAlnS18=";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
"@humanwhocodes/config-array-0.9.5" = {
|
"@humanwhocodes/config-array-0.9.5" = {
|
||||||
@ -6803,6 +6799,15 @@ let
|
|||||||
sha512 = "sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==";
|
sha512 = "sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
"nth-check-1.0.2" = {
|
||||||
|
name = "nth-check";
|
||||||
|
packageName = "nth-check";
|
||||||
|
version = "1.0.2";
|
||||||
|
src = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz";
|
||||||
|
sha512 = "WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==";
|
||||||
|
};
|
||||||
|
};
|
||||||
"nth-check-2.0.1" = {
|
"nth-check-2.0.1" = {
|
||||||
name = "nth-check";
|
name = "nth-check";
|
||||||
packageName = "nth-check";
|
packageName = "nth-check";
|
||||||
@ -10128,7 +10133,7 @@ let
|
|||||||
args = {
|
args = {
|
||||||
name = "uni2work";
|
name = "uni2work";
|
||||||
packageName = "uni2work";
|
packageName = "uni2work";
|
||||||
version = "26.1.1";
|
version = "27.1.6";
|
||||||
src = ../..;
|
src = ../..;
|
||||||
dependencies = [
|
dependencies = [
|
||||||
sources."@ampproject/remapping-2.2.0"
|
sources."@ampproject/remapping-2.2.0"
|
||||||
@ -10619,7 +10624,7 @@ let
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
(sources."css-select-1.2.0" // {
|
(sources."css-select-1.2.0" // {
|
||||||
dependencies = [
|
dependencies = [
|
||||||
sources."nth-check-2.0.1"
|
sources."nth-check-1.0.2"
|
||||||
];
|
];
|
||||||
})
|
})
|
||||||
sources."css-what-2.1.3"
|
sources."css-what-2.1.3"
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
{pkgs ? import <nixpkgs> {
|
{pkgs ? import <nixpkgs> {
|
||||||
inherit system;
|
inherit system;
|
||||||
}, system ? builtins.currentSystem, nodejs ? pkgs."nodejs-12_x"}:
|
}, system ? builtins.currentSystem, nodejs ? pkgs."nodejs-14_x"}:
|
||||||
|
|
||||||
let
|
let
|
||||||
nodeEnv = import ./node-env.nix {
|
nodeEnv = import ./node-env.nix {
|
||||||
|
|||||||
@ -1,8 +1,8 @@
|
|||||||
# SPDX-FileCopyrightText: 2022 Gregor Kleen <gregor.kleen@ifi.lmu.de>,Steffen Jost <jost@cip.ifi.lmu.de>
|
# SPDX-FileCopyrightText: 2022-2023 Gregor Kleen <gregor@kleen.consulting>, Steffen Jost <jost@cip.ifi.lmu.de>
|
||||||
#
|
#
|
||||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
|
|
||||||
{ inputs, backendSource, ... }: final: prev:
|
{ inputs, backendSource, gitRevision ? null, ... }: final: prev:
|
||||||
|
|
||||||
with prev.lib;
|
with prev.lib;
|
||||||
|
|
||||||
@ -66,6 +66,9 @@ in {
|
|||||||
'';
|
'';
|
||||||
preBuild = ''
|
preBuild = ''
|
||||||
export TZDIR=${final.tzdata}/share/zoneinfo
|
export TZDIR=${final.tzdata}/share/zoneinfo
|
||||||
|
${optionalString (gitRevision != null) ''
|
||||||
|
export GIT_REVISION=${gitRevision}
|
||||||
|
''}
|
||||||
'';
|
'';
|
||||||
components.library.build-tools = with final.pkgs; [ llvm_9 ];
|
components.library.build-tools = with final.pkgs; [ llvm_9 ];
|
||||||
components.exes.uniworx.build-tools = with final.pkgs; [ llvm_9 ];
|
components.exes.uniworx.build-tools = with final.pkgs; [ llvm_9 ];
|
||||||
|
|||||||
@ -1,10 +1,10 @@
|
|||||||
# SPDX-FileCopyrightText: 2022 Gregor Kleen <gregor.kleen@ifi.lmu.de>
|
# SPDX-FileCopyrightText: 2022-2023 Gregor Kleen <gregor@kleen.consulting>
|
||||||
#
|
#
|
||||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
|
|
||||||
{ inputs, frontendSource, backendSource }: final: prev: prev.lib.composeManyExtensions [
|
{ inputs, frontendSource, backendSource, gitRevision ? null }: final: prev: prev.lib.composeManyExtensions [
|
||||||
(import ./node-dependencies.nix { inherit inputs; })
|
(import ./node-dependencies.nix { inherit inputs; })
|
||||||
(import ./well-known.nix { inherit frontendSource; })
|
(import ./well-known.nix { inherit frontendSource; })
|
||||||
(import ./frontend.nix { inherit frontendSource; })
|
(import ./frontend.nix { inherit frontendSource; })
|
||||||
(import ./backend.nix { inherit backendSource inputs; })
|
(import ./backend.nix { inherit backendSource inputs gitRevision; })
|
||||||
] final prev
|
] final prev
|
||||||
|
|||||||
@ -1,19 +1,7 @@
|
|||||||
# SPDX-FileCopyrightText: 2022 Gregor Kleen <gregor.kleen@ifi.lmu.de>
|
# SPDX-FileCopyrightText: 2022-2023 Gregor Kleen <gregor@kleen.consulting>
|
||||||
#
|
#
|
||||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
|
|
||||||
{ inputs, ... }: final: prev: {
|
{ ... }: final: prev: {
|
||||||
uniworxNodeDependencies = (prev.callPackage ../frontend {}).nodeDependencies.override (oldArgs: {
|
uniworxNodeDependencies = (prev.callPackage ../frontend {}).nodeDependencies;
|
||||||
dependencies =
|
|
||||||
let
|
|
||||||
srcOverrides = {
|
|
||||||
"tail.datetime" = inputs.tail-DateTime;
|
|
||||||
"@fortawesome/fontawesome-pro" = prev.fetchurl {
|
|
||||||
url = "https://npm.fontawesome.com/@fortawesome/fontawesome-pro/-/5.14.0/fontawesome-pro-5.14.0.tgz";
|
|
||||||
curlOpts = "-H @${prev.writeText "headers.txt" "Authorization: Bearer ${builtins.readFile inputs.fontawesome-token}"}";
|
|
||||||
hash = "sha256-jGvPrTKKL0rCWRZUEnJEmrOdHyQYs3M5709B1hjmFw4=";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
in map (dep: dep // { src = srcOverrides."${dep.packageName}" or dep.src; }) oldArgs.dependencies;
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
# SPDX-FileCopyrightText: 2022 Gregor Kleen <gregor.kleen@ifi.lmu.de>
|
# SPDX-FileCopyrightText: 2022-2023 Gregor Kleen <gregor@kleen.consulting>
|
||||||
#
|
#
|
||||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
|
|
||||||
@ -21,7 +21,6 @@
|
|||||||
'';
|
'';
|
||||||
|
|
||||||
outputHashMode = "recursive";
|
outputHashMode = "recursive";
|
||||||
outputHashAlgo = "sha256";
|
outputHash = "sha256-zntsIUu13s5doijk3C8ZniYDlDdHZ5Isbv0SQLNgt08=";
|
||||||
outputHash = "18MfdmJX3q826Q4p2F3SnwS2fCjLN0LUpIV/jqUPH4I=";
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
8
package-lock.json
generated
8
package-lock.json
generated
@ -3829,12 +3829,12 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"nth-check": {
|
"nth-check": {
|
||||||
"version": "2.0.1",
|
"version": "1.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz",
|
||||||
"integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==",
|
"integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"boolbase": "^1.0.0"
|
"boolbase": "~1.0.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,3 +1,3 @@
|
|||||||
SPDX-FileCopyrightText: 2022 Felix Hamann <felix.hamann@campus.lmu.de>,Gregor Kleen <gregor.kleen@ifi.lmu.de>,Sarah Vaupel <sarah.vaupel@ifi.lmu.de>,Sarah Vaupel <vaupel.sarah@campus.lmu.de>,Steffen Jost <jost@tcs.ifi.lmu.de>
|
SPDX-FileCopyrightText: 2022-2023 Felix Hamann <felix.hamann@campus.lmu.de>, Gregor Kleen <gregor@kleen.consulting>, Sarah Vaupel <sarah.vaupel@ifi.lmu.de>, Steffen Jost <jost@tcs.ifi.lmu.de>
|
||||||
|
|
||||||
SPDX-License-Identifier: AGPL-3.0-or-later
|
SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
|
|||||||
@ -4,7 +4,7 @@
|
|||||||
"description": "",
|
"description": "",
|
||||||
"keywords": [],
|
"keywords": [],
|
||||||
"author": "",
|
"author": "",
|
||||||
"license": "ISC",
|
"license": "AGPL-3.0-or-later",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "npm-run-all frontend:build --parallel \"frontend:build:watch\" \"yesod:start\"",
|
"start": "npm-run-all frontend:build --parallel \"frontend:build:watch\" \"yesod:start\"",
|
||||||
"test": "run-s frontend:test yesod:test i18n:test",
|
"test": "run-s frontend:test yesod:test i18n:test",
|
||||||
@ -23,7 +23,7 @@
|
|||||||
"frontend:build": "webpack --progress",
|
"frontend:build": "webpack --progress",
|
||||||
"frontend:build:watch": "webpack --watch --progress",
|
"frontend:build:watch": "webpack --watch --progress",
|
||||||
"i18n:test": "./missing-translations.sh",
|
"i18n:test": "./missing-translations.sh",
|
||||||
"prerelease": "./is-clean.sh && npm run test",
|
"prerelease": "npm run test",
|
||||||
"release": "standard-version -a",
|
"release": "standard-version -a",
|
||||||
"postrelease": "git push --follow-tags origin master",
|
"postrelease": "git push --follow-tags origin master",
|
||||||
"parse-changelog": "changelog-parser ./CHANGELOG.md > changelog.json"
|
"parse-changelog": "changelog-parser ./CHANGELOG.md > changelog.json"
|
||||||
|
|||||||
262
shell.nix
262
shell.nix
@ -1,27 +1,217 @@
|
|||||||
# SPDX-FileCopyrightText: 2022 Gregor Kleen <gregor.kleen@ifi.lmu.de>,Sarah Vaupel <sarah.vaupel@ifi.lmu.de>,Steffen Jost <jost@tcs.ifi.lmu.de>
|
# SPDX-FileCopyrightText: 2022-2023 Gregor Kleen <gregor@kleen.consulting>, Sarah Vaupel <sarah.vaupel@uniworx.de>, Steffen Jost <jost@tcs.ifi.lmu.de>
|
||||||
#
|
#
|
||||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
|
|
||||||
{ pkgs ? (import ./nixpkgs.nix {}).pkgs }:
|
{ pkgs ? (import ./nixpkgs.nix {}).pkgs, nixpkgsPath ? null }:
|
||||||
|
|
||||||
let
|
let
|
||||||
inherit (pkgs.lib) optionalString;
|
inherit (pkgs.lib) optionalString;
|
||||||
|
|
||||||
haskellPackages = pkgs.haskellPackages;
|
haskellPackages = pkgs.haskellPackages;
|
||||||
|
|
||||||
develop = pkgs.writeScriptBin "develop" (import ./nix/develop.nix { inherit pkgs; } ''
|
postgresSchema = pkgs.writeText "schema.sql" ''
|
||||||
if [ -x .develop.cmd ]; then
|
CREATE USER uniworx WITH SUPERUSER;
|
||||||
./.develop.cmd
|
CREATE DATABASE uniworx_test;
|
||||||
else
|
GRANT ALL ON DATABASE uniworx_test TO uniworx;
|
||||||
if [ -n "$ZSH_VERSION" ]; then
|
CREATE DATABASE uniworx;
|
||||||
autoload -U +X compinit && compinit
|
GRANT ALL ON DATABASE uniworx TO uniworx;
|
||||||
autoload -U +X bashcompinit && bashcompinit
|
'';
|
||||||
fi
|
|
||||||
eval "$(stack --bash-completion-script stack)"
|
|
||||||
|
|
||||||
$(getent passwd $USER | cut -d: -f 7)
|
postgresHba = pkgs.writeText "hba_file" ''
|
||||||
|
local all all trust
|
||||||
|
'';
|
||||||
|
|
||||||
|
develop = pkgs.writeScriptBin "develop" ''
|
||||||
|
#!${pkgs.zsh}/bin/zsh -e
|
||||||
|
|
||||||
|
basePath=$(pwd)
|
||||||
|
exec 4<>''${basePath}/.develop.env
|
||||||
|
|
||||||
|
flockRes=
|
||||||
|
set +e
|
||||||
|
${pkgs.util-linux}/bin/flock -en 4; flockRes=$?
|
||||||
|
set -e
|
||||||
|
if [[ ''${flockRes} -ne 0 ]]; then
|
||||||
|
echo "Could not take exclusive lock; is another develop running?" >&2
|
||||||
|
exit ''${flockRes}
|
||||||
fi
|
fi
|
||||||
'');
|
|
||||||
|
cleanup() {
|
||||||
|
set +e -x
|
||||||
|
type cleanup_postgres &>/dev/null && cleanup_postgres
|
||||||
|
type cleanup_widget_memcached &>/dev/null && cleanup_widget_memcached
|
||||||
|
type cleanup_session_memcached &>/dev/null && cleanup_session_memcached
|
||||||
|
type cleanup_cache_memcached &>/dev/null && cleanup_cache_memcached
|
||||||
|
type cleanup_minio &>/dev/null && cleanup_minio
|
||||||
|
type cleanup_maildev &>/dev/null && cleanup_maildev
|
||||||
|
|
||||||
|
[ -f "''${basePath}/.develop.env" ] && rm -vf "''${basePath}/.develop.env"
|
||||||
|
set +x
|
||||||
|
}
|
||||||
|
|
||||||
|
trap cleanup EXIT
|
||||||
|
|
||||||
|
export PORT_OFFSET=$(((16#$(sha256sum <<<"$(hostname -f):''${basePath}" | head -c 16)) % 1000))
|
||||||
|
|
||||||
|
if [[ -z "$PGHOST" ]]; then
|
||||||
|
set -xe
|
||||||
|
|
||||||
|
pgDir=$(mktemp -d --tmpdir=''${XDG_RUNTIME_DIR} postgresql.XXXXXX)
|
||||||
|
pgSockDir=$(mktemp -d --tmpdir=''${XDG_RUNTIME_DIR} postgresql.sock.XXXXXX)
|
||||||
|
pgLogFile=$(mktemp --tmpdir=''${XDG_RUNTIME_DIR} postgresql.XXXXXX.log)
|
||||||
|
initdb --no-locale -D ''${pgDir}
|
||||||
|
pg_ctl start -D ''${pgDir} -l ''${pgLogFile} -w -o "-k ''${pgSockDir} -c listen_addresses=''' -c hba_file='${postgresHba}' -c unix_socket_permissions=0700 -c max_connections=9990 -c shared_preload_libraries=pg_stat_statements -c session_preload_libraries=auto_explain -c auto_explain.log_min_duration=100ms"
|
||||||
|
psql -h ''${pgSockDir} -f ${postgresSchema} postgres
|
||||||
|
printf "Postgres logfile is %s\nPostgres socket directory is %s\n" ''${pgLogFile} ''${pgSockDir}
|
||||||
|
|
||||||
|
export PGHOST=''${pgSockDir}
|
||||||
|
export PGLOG=''${pgLogFile}
|
||||||
|
|
||||||
|
cleanup_postgres() {
|
||||||
|
set +e -x
|
||||||
|
pg_ctl stop -D ''${pgDir}
|
||||||
|
rm -rvf ''${pgDir} ''${pgSockDir} ''${pgLogFile}
|
||||||
|
set +x
|
||||||
|
}
|
||||||
|
|
||||||
|
set +xe
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -z "$WIDGET_MEMCACHED_HOST" ]]; then
|
||||||
|
set -xe
|
||||||
|
|
||||||
|
memcached -l localhost -p $(($PORT_OFFSET + 11211)) &>/dev/null &
|
||||||
|
widget_memcached_pid=$!
|
||||||
|
|
||||||
|
export WIDGET_MEMCACHED_HOST=localhost
|
||||||
|
export WIDGET_MEMCACHED_PORT=$(($PORT_OFFSET + 11211))
|
||||||
|
|
||||||
|
cleanup_widget_memcached() {
|
||||||
|
[[ -n "$widget_memcached_pid" ]] && kill $widget_memcached_pid
|
||||||
|
}
|
||||||
|
|
||||||
|
set +xe
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -z "$SESSION_MEMCACHED_HOST" ]]; then
|
||||||
|
set -xe
|
||||||
|
|
||||||
|
memcached -l localhost -p $(($PORT_OFFSET + 11212)) &>/dev/null &
|
||||||
|
session_memcached_pid=$!
|
||||||
|
|
||||||
|
export SESSION_MEMCACHED_HOST=localhost
|
||||||
|
export SESSION_MEMCACHED_PORT=$(($PORT_OFFSET + 11212))
|
||||||
|
|
||||||
|
cleanup_session_memcached() {
|
||||||
|
[[ -n "$session_memcached_pid" ]] && kill $session_memcached_pid
|
||||||
|
}
|
||||||
|
|
||||||
|
set +xe
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -z "$MEMCACHED_HOST" ]]; then
|
||||||
|
set -xe
|
||||||
|
|
||||||
|
memcached -l localhost -p $(($PORT_OFFSET + 11213)) &>/dev/null &
|
||||||
|
memcached_pid=$!
|
||||||
|
|
||||||
|
export MEMCACHED_HOST=localhost
|
||||||
|
export MEMCACHED_PORT=$(($PORT_OFFSET + 11212))
|
||||||
|
|
||||||
|
cleanup_session_memcached() {
|
||||||
|
[[ -n "$memcached_pid" ]] && kill $memcached_pid
|
||||||
|
}
|
||||||
|
|
||||||
|
set +xe
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -z "$UPLOAD_S3_HOST" ]]; then
|
||||||
|
set -xe
|
||||||
|
|
||||||
|
cleanup_minio() {
|
||||||
|
[[ -n "$minio_pid" ]] && kill $minio_pid
|
||||||
|
[[ -n "''${MINIO_DIR}" ]] && rm -rvf ''${MINIO_DIR}
|
||||||
|
[[ -n "''${MINIO_LOGFILE}" ]] && rm -rvf ''${MINIO_LOGFILE}
|
||||||
|
}
|
||||||
|
|
||||||
|
export MINIO_DIR=$(mktemp -d --tmpdir=''${XDG_RUNTIME_DIR} minio.XXXXXX)
|
||||||
|
export MINIO_LOGFILE=$(mktemp --tmpdir=''${XDG_RUNTIME_DIR} minio.XXXXXX.log)
|
||||||
|
export MINIO_ACCESS_KEY=$(${pkgs.pwgen}/bin/pwgen -s 16 1)
|
||||||
|
export MINIO_SECRET_KEY=$(${pkgs.pwgen}/bin/pwgen -s 32 1)
|
||||||
|
|
||||||
|
minio server --address localhost:$(($PORT_OFFSET + 9000)) ''${MINIO_DIR} &>''${MINIO_LOGFILE} &
|
||||||
|
minio_pid=$!
|
||||||
|
|
||||||
|
export UPLOAD_S3_HOST=localhost
|
||||||
|
export UPLOAD_S3_PORT=$(($PORT_OFFSET + 9000))
|
||||||
|
export UPLOAD_S3_SSL=false
|
||||||
|
export UPLOAD_S3_KEY_ID=''${MINIO_ACCESS_KEY}
|
||||||
|
export UPLOAD_S3_KEY=''${MINIO_SECRET_KEY}
|
||||||
|
|
||||||
|
sleep 1
|
||||||
|
|
||||||
|
set +xe
|
||||||
|
fi
|
||||||
|
|
||||||
|
${optionalString (pkgs.nodePackages ? "maildev") ''
|
||||||
|
if [[ -z "$SMTPHOST" ]]; then
|
||||||
|
set -xe
|
||||||
|
|
||||||
|
cleanup_maildev() {
|
||||||
|
[[ -n "$maildev_pid" ]] && kill $maildev_pid
|
||||||
|
}
|
||||||
|
|
||||||
|
TMPDIR=''${XDG_RUNTIME_DIR} ${pkgs.nodePackages.maildev}/bin/maildev --smtp $(($PORT_OFFSET + 1025)) --web $(($PORT_OFFSET + 8080)) --ip localhost --web-ip localhost &>/dev/null &
|
||||||
|
maildev_pid=$!
|
||||||
|
|
||||||
|
export SMTPHOST=localhost
|
||||||
|
export SMTPPORT=$(($PORT_OFFSET + 1025))
|
||||||
|
export SMTPSSL=none
|
||||||
|
|
||||||
|
set +xe
|
||||||
|
fi
|
||||||
|
''}
|
||||||
|
|
||||||
|
set -xe
|
||||||
|
|
||||||
|
cat >&4 <<EOF
|
||||||
|
PORT_OFFSET=''${PORT_OFFSET}
|
||||||
|
|
||||||
|
PGHOST=''${pgSockDir}
|
||||||
|
PGLOG=''${pgLogFile}
|
||||||
|
|
||||||
|
WIDGET_MEMCACHED_HOST=localhost
|
||||||
|
WIDGET_MEMCACHED_PORT=$(($PORT_OFFSET + 11211))
|
||||||
|
|
||||||
|
SESSION_MEMCACHED_HOST=localhost
|
||||||
|
SESSION_MEMCACHED_PORT=$(($PORT_OFFSET + 11212))
|
||||||
|
|
||||||
|
MEMCACHED_HOST=localhost
|
||||||
|
MEMCACHED_PORT=$(($PORT_OFFSET + 11212))
|
||||||
|
|
||||||
|
MINIO_DIR=''${MINIO_DIR}
|
||||||
|
MINIO_LOGFILE=''${MINIO_LOGFILE}
|
||||||
|
UPLOAD_S3_HOST=localhost
|
||||||
|
UPLOAD_S3_PORT=$(($PORT_OFFSET + 9000))
|
||||||
|
UPLOAD_S3_SSL=false
|
||||||
|
UPLOAD_S3_KEY_ID=''${MINIO_ACCESS_KEY}
|
||||||
|
UPLOAD_S3_KEY=''${MINIO_SECRET_KEY}
|
||||||
|
|
||||||
|
SMTPHOST=''${SMTPHOST}
|
||||||
|
SMTPPORT=''${SMTPPORT}
|
||||||
|
SMTPSSL=''${SMTPSSL}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
set +xe
|
||||||
|
|
||||||
|
if [ -n "$ZSH_VERSION" ]; then
|
||||||
|
autoload -U +X compinit && compinit
|
||||||
|
autoload -U +X bashcompinit && bashcompinit
|
||||||
|
fi
|
||||||
|
eval "$(stack --bash-completion-script stack)"
|
||||||
|
|
||||||
|
$(getent passwd $USER | cut -d: -f 7)
|
||||||
|
'';
|
||||||
|
|
||||||
inDevelop = pkgs.writeScriptBin "in-develop" ''
|
inDevelop = pkgs.writeScriptBin "in-develop" ''
|
||||||
#!${pkgs.zsh}/bin/zsh -e
|
#!${pkgs.zsh}/bin/zsh -e
|
||||||
@ -73,26 +263,32 @@ let
|
|||||||
git diff $(cut -d '-' -f 1 <(curl -sH 'Accept: text/plain' https://uni2work.ifi.lmu.de/version))
|
git diff $(cut -d '-' -f 1 <(curl -sH 'Accept: text/plain' https://uni2work.ifi.lmu.de/version))
|
||||||
'';
|
'';
|
||||||
in pkgs.mkShell {
|
in pkgs.mkShell {
|
||||||
name = "uni2work";
|
name = "fradrive";
|
||||||
|
shellHook = ''
|
||||||
|
${pkgs.lib.optionalString (nixpkgsPath != null) ''
|
||||||
|
export NIX_PATH=nixpkgs=${nixpkgsPath}
|
||||||
|
''}
|
||||||
|
|
||||||
|
export CHROME_BIN=${pkgs.chromium}/bin/chromium
|
||||||
|
'';
|
||||||
nativeBuildInputs = [develop inDevelop killallUni2work diffRunning]
|
nativeBuildInputs = [develop inDevelop killallUni2work diffRunning]
|
||||||
++ (with pkgs;
|
++ (with pkgs;
|
||||||
[ nodejs-14_x postgresql_12 openldap google-chrome exiftool memcached minio minio-client
|
[ stack nodejs-14_x postgresql_12 openldap exiftool memcached minio minio-client
|
||||||
gup skopeo reuse pre-commit
|
gup reuse pre-commit
|
||||||
# busybox # for print services, but interferes with build commands in develop-shell
|
node2nix
|
||||||
htop
|
# busybox # for print services, but interferes with build commands in develop-shell
|
||||||
pdftk #pdftk just for testing pdf-passwords
|
htop
|
||||||
#texlive.combined.scheme-full # works
|
pdftk # pdftk just for testing pdf-passwords
|
||||||
#texlive.combined.scheme-medium
|
# texlive.combined.scheme-full # works
|
||||||
# texlive.combined.scheme-small
|
# texlive.combined.scheme-medium
|
||||||
(texlive.combine {
|
# texlive.combined.scheme-small
|
||||||
inherit (texlive) scheme-basic
|
(texlive.combine {
|
||||||
babel-german babel-english booktabs textpos
|
inherit (texlive) scheme-basic
|
||||||
enumitem eurosym koma-script parskip xcolor dejavu
|
babel-german babel-english booktabs textpos
|
||||||
# required fro LuaTeX
|
enumitem eurosym koma-script parskip xcolor dejavu
|
||||||
luatexbase lualatex-math unicode-math selnolig
|
luatexbase lualatex-math unicode-math selnolig # required for LuaTeX
|
||||||
;
|
;
|
||||||
})
|
})
|
||||||
]
|
]
|
||||||
)
|
) ++ (with pkgs.haskellPackages; [ yesod-bin hlint cabal-install weeder profiteur ]);
|
||||||
++ (with pkgs.haskellPackages; [ stack yesod-bin hlint cabal-install weeder profiteur ]);
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
-- SPDX-FileCopyrightText: 2022 Felix Hamann <felix.hamann@campus.lmu.de>,Gregor Kleen <gregor.kleen@ifi.lmu.de>,Sarah Vaupel <sarah.vaupel@ifi.lmu.de>,Sarah Vaupel <vaupel.sarah@campus.lmu.de>,Steffen Jost <jost@tcs.ifi.lmu.de>,Winnie Ros <winnie.ros@campus.lmu.de>
|
-- SPDX-FileCopyrightText: 2022-2023 Felix Hamann <felix.hamann@campus.lmu.de>, Gregor Kleen <gregor@kleen.consulting>, Sarah Vaupel <sarah.vaupel@ifi.lmu.de>, Steffen Jost <jost@tcs.ifi.lmu.de>, Winnie Ros <winnie.ros@campus.lmu.de>
|
||||||
--
|
--
|
||||||
-- SPDX-License-Identifier: AGPL-3.0-or-later
|
-- SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
|
|
||||||
@ -43,7 +43,7 @@ pickLegalExternalLang = do
|
|||||||
getVersionR :: Handler TypedContent
|
getVersionR :: Handler TypedContent
|
||||||
getVersionR = selectRep $ do
|
getVersionR = selectRep $ do
|
||||||
provideRep $
|
provideRep $
|
||||||
return ($gitDescribe :: Text)
|
return ($(orGitRevisionEnv gitDescribe) :: Text)
|
||||||
provideRep getInfoR
|
provideRep getInfoR
|
||||||
|
|
||||||
|
|
||||||
@ -99,7 +99,7 @@ getInfoR = do
|
|||||||
knownBugs = $(i18nWidgetFile "knownBugs")
|
knownBugs = $(i18nWidgetFile "knownBugs")
|
||||||
implementation = $(i18nWidgetFile "implementation")
|
implementation = $(i18nWidgetFile "implementation")
|
||||||
gitInfo :: Text
|
gitInfo :: Text
|
||||||
gitInfo = $gitDescribe <> " (" <> $gitCommitDate <> ")"
|
gitInfo = $(orGitRevisionEnv gitDescribeDate)
|
||||||
$(widgetFile "versionHistory")
|
$(widgetFile "versionHistory")
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -1,9 +1,10 @@
|
|||||||
-- SPDX-FileCopyrightText: 2022 Gregor Kleen <gregor.kleen@ifi.lmu.de>
|
-- SPDX-FileCopyrightText: 2022-2023 Gregor Kleen <gregor@kleen.consulting>
|
||||||
--
|
--
|
||||||
-- SPDX-License-Identifier: AGPL-3.0-or-later
|
-- SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
|
|
||||||
module Handler.Info.TH
|
module Handler.Info.TH
|
||||||
( glossaryTerms
|
( glossaryTerms
|
||||||
|
, orGitRevisionEnv, gitDescribeDate
|
||||||
) where
|
) where
|
||||||
|
|
||||||
import Import
|
import Import
|
||||||
@ -15,6 +16,10 @@ import qualified Data.Char as Char
|
|||||||
import qualified Data.Map.Strict as Map
|
import qualified Data.Map.Strict as Map
|
||||||
import qualified Data.Text as Text
|
import qualified Data.Text as Text
|
||||||
|
|
||||||
|
import Development.GitRev
|
||||||
|
|
||||||
|
import System.Environment (lookupEnv)
|
||||||
|
|
||||||
|
|
||||||
glossaryTerms :: FilePath -> Q Exp
|
glossaryTerms :: FilePath -> Q Exp
|
||||||
glossaryTerms basename = do
|
glossaryTerms basename = do
|
||||||
@ -24,3 +29,9 @@ glossaryTerms basename = do
|
|||||||
where
|
where
|
||||||
unPathPiece :: Text -> String
|
unPathPiece :: Text -> String
|
||||||
unPathPiece = repack . mconcat . map (over _head Char.toUpper) . Text.splitOn "-"
|
unPathPiece = repack . mconcat . map (over _head Char.toUpper) . Text.splitOn "-"
|
||||||
|
|
||||||
|
orGitRevisionEnv :: Q Exp -> Q Exp
|
||||||
|
orGitRevisionEnv cont = maybe cont stringE =<< runIO (lookupEnv "GIT_REVISION")
|
||||||
|
|
||||||
|
gitDescribeDate :: Q Exp
|
||||||
|
gitDescribeDate = [e|$gitDescribe <> " (" <> $gitCommitDate <> ")"|]
|
||||||
|
|||||||
Reference in New Issue
Block a user