Migrate to haskell.nix for everything (#46)

* Migrate to haskell.nix for everything

* Fixed build (?)

* Fixed build

* build frontend with ghcjs

* Updated Makefile

* Uglified js

* Made frontend actually work (:

* Increase swap

* Added checkout back in (:

* Updated VS Code settings

* formatted cabal.project

* cleaned up nix
This commit is contained in:
iko 2021-07-13 11:53:53 +03:00
parent 3919687c13
commit cbcd09f114
21 changed files with 239 additions and 696 deletions

View File

@ -38,12 +38,16 @@ jobs:
steps:
- uses: actions/checkout@v2
- uses: cachix/install-nix-action@v12
with:
extra_nix_config: |
trusted-public-keys = hydra.iohk.io:f/Ea+s+dFdN+3Y/G+FDgSq+a5NEWhJGzdjvKNGv0/EQ= cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=
substituters = https://hydra.iohk.io https://cache.nixos.org/
- uses: cachix/cachix-action@v8
with:
name: octopod
signingKey: "${{ secrets.CACHIX_SIGNING_KEY }}"
- name: Build
run: nix-build nix/octo.nix
run: nix-build -A projectCross.musl64.hsPkgs.octo-cli.components.exes.octo
- uses: actions/upload-artifact@v2
with:
name: octo-cli-linux
@ -53,10 +57,25 @@ jobs:
runs-on: ubuntu-latest
timeout-minutes: 600
steps:
- name: Increase swap
run: |
free -h
sudo swapoff /mnt/swapfile
sudo fallocate -l 8G /mnt/swapfile
sudo mkswap /mnt/swapfile
sudo swapon /mnt/swapfile
free -h - uses: actions/checkout@v2
- uses: actions/checkout@v2
- name: Install Nix
uses: cachix/install-nix-action@v12
with:
extra_nix_config: |
trusted-public-keys = hydra.iohk.io:f/Ea+s+dFdN+3Y/G+FDgSq+a5NEWhJGzdjvKNGv0/EQ= cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=
substituters = https://hydra.iohk.io https://cache.nixos.org/
- name: Login to Cachix
uses: cachix/cachix-action@v8

View File

@ -1,3 +1,3 @@
{
"nixEnvSelector.nixShellConfig": "${workspaceRoot}/shell.nix"
}
"nixEnvSelector.nixFile": "${workspaceRoot}/shell.nix"
}

View File

@ -12,7 +12,7 @@ reverse_proxy /api/* localhost:3002
rewrite @production /octopod-css/production/{http.regexp.production.1}
rewrite /config.json /dev/config.json
rewrite * /frontend-result/bin/frontend.jsexe/{path}
rewrite * /frontend-result/{path}
@3003 {

View File

@ -1,45 +1,37 @@
.PHONY: build-backend build-octo-cli build-frontend docs backend-docs frontend-docs repl shell shell-ghcjs ghcid ghcid-cli ghcid-frontend push-octopod run-backend-dev run-frontend-dev
.PHONY: build-backend build-octo-cli build-frontend backend-docs repl shell ghcid ghcid-cli ghcid-frontend push-octopod run-backend-dev run-frontend-dev
build-backend:
nix-build . -A ghc.octopod-backend -j auto
nix-build . -A octopod-backend.components.exes.octopod-exe -j auto
build-octo-cli:
nix-build . -A ghc.octo-cli -j auto
nix-build . -A octo-cli.components.exes.octo -j auto
build-frontend:
nix-build . -A ghcjs.octopod-frontend -o frontend-result -j auto
docs: backend-docs frontend-docs
nix-build . -A octopod-frontend-pretty -o frontend-result -j auto
backend-docs:
nix-build . -A ghc.octopod-backend.doc -j auto
frontend-docs:
nix-build . -A ghcjs.octopod-frontend.doc -j auto
nix-build . -A octopod-backend.components.library.doc -j auto
repl:
nix-shell . -A shells.ghc --run "cabal repl lib:octopod-backend" -j auto
nix-shell --run "cabal repl lib:octopod-backend" -j auto
shell:
nix-shell . -A shells.ghc -j auto
shell-ghcjs:
nix-shell . -A shells.ghcjs -j auto
nix-shell -j auto
ghcid-backend:
nix-shell . -A shells.ghc --run 'ghcid -c "cabal new-repl octopod-backend"' -j auto
nix-shell --run 'ghcid -c "cabal new-repl octopod-backend"' -j auto
ghcid-cli:
nix-shell . -A shells.ghc --run 'ghcid -c "cabal new-repl octo-cli"' -j auto
nix-shell --run 'ghcid -c "cabal new-repl octo-cli"' -j auto
ghcid-frontend:
nix-shell . -A shells.ghc --run 'ghcid -c "cabal new-repl octopod-frontend -fdevelopment --ghc-options=-Wwarn" --warnings --test 'Main.main'' -j auto
nix-shell --run 'ghcid -c "cabal new-repl octopod-frontend -fdevelopment --ghc-options=-Wwarn" --warnings --test 'Main.main'' -j auto
push-octopod:
./build.sh build-and-push latest
run-backend-dev: dev/certs/server_cert.pem dev/certs/server_key.pem
./dev/dev_backend.sh `nix-build . -A ghc.octopod-backend`
./dev/dev_backend.sh `nix-build -A octopod-backend.components.exes.octopod-exe -j auto`
run-frontend-dev: build-frontend
caddy run

View File

@ -3,16 +3,11 @@
set -e
build_octo_cli_docker_image() {
nix build nixpkgs.octo-cli-container \
-I nixpkgs=nix \
-o "$1"
nix-build ./nix -A octo-cli-container -o "$1"
}
build_octopod_server_docker_image() {
nix build nixpkgs.octopod-server-container \
--arg migrations "$1" \
-I nixpkgs=nix \
-o "$2"
nix-build ./nix -A octopod-server-container --arg migrations "$1" -o "$2"
}
push_docker_images() {
@ -41,26 +36,25 @@ export octo_cli_docker="octo-docker"
export octopod_server_docker="octopod-server-docker"
case "$1" in
build-and-push)
echo "$1 mode"
build-and-push)
echo "$1 mode"
if test -z "$2"
then
echo "Please provide a tag to upload to"
exit 1
fi
build_docker_images
push_docker_images $2
;;
build)
echo "$1 mode"
build_docker_images
;;
*)
echo "usage:"
echo " $0 build Builds the docker images."
echo " $0 build-and-push <tag> Builds the docker images and uploads it to Docker Hub under the tag <tag>."
if test -z "$2"; then
echo "Please provide a tag to upload to"
exit 1
;;
fi
build_docker_images
push_docker_images $2
;;
build)
echo "$1 mode"
build_docker_images
;;
*)
echo "usage:"
echo " $0 build Builds the docker images."
echo " $0 build-and-push <tag> Builds the docker images and uploads it to Docker Hub under the tag <tag>."
exit 1
;;
esac

View File

@ -4,3 +4,32 @@ packages:
octopod-backend/
octopod-common/
octopod-frontend/
allow-newer:
servant-reflex:servant,
servant-reflex:servant-auth,
servant-reflex:reflex
source-repository-package
type: git
location: https://github.com/ilyakooo0/obelisk
tag: e3c45d230bfc60351c82e8674bc190349fcfae3a
subdir: lib/route
--sha256: 1syczkabq8yz7fw5jpmax15770bbb12wgdmm3lbgvh4m9qvfmblg
source-repository-package
type: git
location: https://github.com/obsidiansystems/obelisk
tag: 7ad33cbe3e84b209e83c505ce25486445bbd602e
subdir: lib/tabulation
--sha256: 0dlk8y6rxc87crw7764zq2py7nqn38lw496ca1y893m9gdq8qdkz
source-repository-package
type: git
location: https://github.com/obsidiansystems/obelisk
tag: 7ad33cbe3e84b209e83c505ce25486445bbd602e
subdir: lib/executable-config/lookup
--sha256: 0dlk8y6rxc87crw7764zq2py7nqn38lw496ca1y893m9gdq8qdkz
package reflex-dom
flags: +use-warp

View File

@ -1,38 +1,23 @@
{ sources ? import ./nix/sources.nix
, reflex-platform ? sources.reflex-platform
, hls ? false
, haskellNix ? import sources.haskellNix { }
, pkgs ? import haskellNix.sources.nixpkgs-2105 haskellNix.nixpkgsArgs
}:
(import reflex-platform { }).project ({ pkgs, ... }:
let foldOs = pkgs.lib.foldl' pkgs.lib.composeExtensions (self: super: { });
in
{
useWarp = true;
packages = {
octopod-common = ./octopod-common;
octopod-frontend = ./octopod-frontend;
octopod-backend = ./octopod-backend;
octo-cli = ./octo-cli;
octopod-api = ./octopod-api;
let
hsPkgs = pkgs.haskell-nix.cabalProject {
src = pkgs.haskell-nix.haskellLib.cleanGit {
name = "octopod";
src = ./.;
};
overrides = foldOs [
(import ./nix/haskell-language-server-overrides.nix {
inherit (pkgs.haskell) lib;
inherit sources;
}
)
(import ./nix/octopod-overrides.nix {
inherit (pkgs.haskell) lib;
inherit sources;
}
)
];
shellToolOverrides = ghc: super:
if hls then { inherit (ghc) haskell-language-server; }
else { };
shells = {
ghc = [ "octopod-common" "octopod-backend" "octopod-frontend" "octopod-api" "octo-cli" ];
ghcjs = [ "octopod-common" "octopod-frontend" ];
};
})
index-state = "2021-07-02T00:00:00Z";
compiler-nix-name = "ghc8105";
};
in
hsPkgs // {
octopod-frontend-pretty =
pkgs.runCommand "octopod-frontend-pretty"
{ } ''
mkdir $out
cp ${./octopod-frontend/index.html} $out/index.html
cp ${hsPkgs.projectCross.ghcjs.hsPkgs.octopod-frontend.components.exes.frontend}/bin/frontend.jsexe/all.js $out/all.js
'';
}

View File

@ -1,122 +1,112 @@
{ sources ? import ./sources.nix
, octopod-css ? ../octopod-css
, migrations ? "please use '--arg migration <value>'"
}:
with {
overlay = _: pkgs:
with pkgs; rec {
octo-cli = haskellPackages.octo-cli-static;
octopod-backend = haskellPackages.octopod-server-static;
octopod-frontend = haskellPackages.octopod-frontend-static;
let
hsPkgs = import ./.. { };
cacert' = cacert.overrideAttrs (o: {
fixupPhase = ''
cat $out/etc/ssl/certs/* > $out/etc/ssl/certs/ca-certificates.crt
'';
});
pkgs = hsPkgs.pkgs;
octopod-server-container = dockerTools.buildImage {
name = "octopod-server-container-slim";
contents = [
octopod-backend
octopod-frontend
git
coreutils
bash
openssh
gnugrep
cacert'
shadow
findutils
];
octo-cli = hsPkgs.octo-cli.components.exes.octo;
octopod-backend = hsPkgs.octopod-backend.components.exes.octopod-exe;
runAsRoot = ''
mkdir /tmp
chmod 777 /tmp
terser = (import sources.nixpkgs { }).nodePackages.terser;
mkdir -p /home/octopod
useradd octopod -d /home/octopod
chown octopod.octopod /home/octopod
octopod-frontend-ugly = pkgs.runCommand "octopod-frontend-ugly"
{ } ''
mkdir $out
cp ${hsPkgs.octopod-frontend-pretty}/index.html $out/index.html
mkdir /app
cp -av ${octopod-backend}/bin/octopod-exe /app/octopod-exe
${terser}/bin/terser ${hsPkgs.octopod-frontend-pretty}/all.js -o $out/all.js -mangle -c
'';
mkdir -p /migrations/{deploy,revert,verify}
cp -av ${migrations}/* /migrations/
cacert' = pkgs.cacert.overrideAttrs (o: {
fixupPhase = ''
cat $out/etc/ssl/certs/* > $out/etc/ssl/certs/ca-certificates.crt
'';
});
mkdir /tls /tls_store
octopod-server-container = pkgs.dockerTools.buildImage {
name = "octopod-server-container-slim";
contents = with pkgs; [
octopod-backend
octopod-frontend-ugly
git
coreutils
bash
openssh
gnugrep
cacert'
shadow
findutils
];
mkdir -p /www/static/{images,styles,vendors/outline}
cp -av ${octopod-frontend}/bin/frontend.jsexe/* /www/
cp -av ${octopod-css}/production/images/* /www/static/images/
cp -av ${octopod-css}/production/styles/* /www/static/styles/
cp -av ${octopod-css}/production/vendors/outline/* /www/static/vendors/outline/
cp -av ${octopod-css}/favicons/* /www/
'';
runAsRoot = ''
mkdir /tmp
chmod 777 /tmp
config = {
Entrypoint = [ "/app/octopod-exe" ];
Cmd = [
"--port"
"4443"
"--ui-port"
"4000"
"--ws-port"
"4020"
"--db"
"host='127.0.0.1' port=5432 user='octopod' password='octopod'"
"--db-pool-size"
"10"
"--tls-cert-path"
"/tls/server_cert.pem"
"--tls-key-path"
"/tls/server_key.pem"
"--tls-store-path"
"/tls_store"
];
Env = [
"PATH=/utils:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
"USER=octopod"
];
};
};
mkdir -p /home/octopod
useradd octopod -d /home/octopod
chown octopod.octopod /home/octopod
octo-cli-container = dockerTools.buildImage {
name = "octo-cli-container-slim";
contents = [ octo-cli coreutils bash ];
mkdir /app
cp -av ${octopod-backend}/bin/octopod-exe /app/octopod-exe
runAsRoot = ''
mkdir /app
cp -av ${octo-cli}/bin/octo /app/octo
'';
mkdir -p /migrations/{deploy,revert,verify}
cp -av ${migrations}/* /migrations/
config = {
Entrypoint = [ "/app/octo" ];
Env = [ "EDITOR=${vim}/bin/vim" ];
};
};
mkdir /tls /tls_store
niv = import sources.niv { };
mkdir -p /www/static/{images,styles,vendors/outline}
cp -av ${octopod-frontend-ugly}/* /www/
cp -av ${octopod-css}/production/images/* /www/static/images/
cp -av ${octopod-css}/production/styles/* /www/static/styles/
cp -av ${octopod-css}/production/vendors/outline/* /www/static/vendors/outline/
cp -av ${octopod-css}/favicons/* /www/
'';
haskellPackages = pkgs.haskellPackages.override {
overrides = hself: hsuper: {
octo-cli-static = haskell.lib.justStaticExecutables
(hsuper.callPackage ../default.nix { }).ghc.octo-cli;
octopod-server-static = haskell.lib.justStaticExecutables
(hsuper.callPackage ../default.nix { }).ghc.octopod-backend;
octopod-frontend-static = haskell.lib.justStaticExecutables
(hsuper.callPackage ../default.nix { }).ghcjs.octopod-frontend;
};
};
config = {
Entrypoint = [ "/app/octopod-exe" ];
Cmd = [
"--port"
"4443"
"--ui-port"
"4000"
"--ws-port"
"4020"
"--db"
"host='127.0.0.1' port=5432 user='octopod' password='octopod'"
"--db-pool-size"
"10"
"--tls-cert-path"
"/tls/server_cert.pem"
"--tls-key-path"
"/tls/server_key.pem"
"--tls-store-path"
"/tls_store"
];
Env = [
"PATH=/utils:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
"USER=octopod"
];
};
};
import
sources.nixpkgs # and use them again!
};
octo-cli-container = pkgs.dockerTools.buildImage {
name = "octo-cli-container-slim";
contents = with pkgs; [ octo-cli coreutils bash ];
runAsRoot = ''
mkdir /app
cp -av ${octo-cli}/bin/octo /app/octo
'';
config = {
Entrypoint = [ "/app/octo" ];
Env = [ "EDITOR=${pkgs.vim}/bin/vim" ];
};
};
in
{
overlays = [ overlay ];
config = { };
inherit octo-cli-container octopod-server-container octopod-frontend-ugly;
}

View File

@ -1,288 +0,0 @@
{ lib, sources ? import ./sources.nix }: hself: hsuper:
{
haskell-language-server = lib.dontCheck (hsuper.callCabal2nix "haskell-language-server" (sources.haskell-language-server) { });
hls-hlint-plugin = hsuper.callCabal2nix "hls-hlint-plugin" (sources.haskell-language-server + "/plugins/hls-hlint-plugin") { };
hls-explicit-imports-plugin = hsuper.callCabal2nix "hls-explicit-imports-plugin" (sources.haskell-language-server + "/plugins/hls-explicit-imports-plugin") { };
hls-retrie-plugin = hsuper.callCabal2nix "hls-retrie-plugin" (sources.haskell-language-server + "/plugins/hls-retrie-plugin") { };
hls-plugin-api = hsuper.callCabal2nix "hls-plugin-api" (sources.haskell-language-server + "/hls-plugin-api") { };
hls-tactics-plugin = hsuper.callCabal2nix "hls-tactics-plugin" (sources.haskell-language-server + "/plugins/hls-tactics-plugin") { };
hls-class-plugin = hsuper.callCabal2nix "hls-class-plugin" (sources.haskell-language-server + "/plugins/hls-class-plugin") { };
hls-eval-plugin = hsuper.callCabal2nix "hls-eval-plugin" (sources.haskell-language-server + "/plugins/hls-eval-plugin") { };
hls-haddock-comments-plugin = hsuper.callCabal2nix "hls-haddock-comments-plugin" (sources.haskell-language-server + "/plugins/hls-haddock-comments-plugin") { };
hls-splice-plugin = hsuper.callCabal2nix "hls-splice-plugin" (sources.haskell-language-server + "/plugins/hls-splice-plugin") { };
shake-bench = hsuper.callCabal2nix "shake-bench" (sources.haskell-language-server + "/shake-bench") { };
ghcide = lib.dontCheck (hsuper.callCabal2nix "ghcide" (sources.haskell-language-server + "/ghcide") { });
hie-compat = hsuper.callCabal2nix "hie-compat" (sources.haskell-language-server + "/hie-compat") { };
hls-exactprint-utils = hsuper.callCabal2nix "hls-exactprint-utils" (sources.haskell-language-server + "/hls-exactprint-utils") { };
with-utf8 = (hsuper.callHackageDirect
{
pkg = "with-utf8";
ver = "1.0.2.1";
sha256 = "1hpqc0ljk1c1vl4671zb290hbvdcjpg66bcxmf1cz8h0vb382xp7";
} { }
);
hiedb = lib.dontCheck (hsuper.callHackageDirect
{
pkg = "hiedb";
ver = "0.3.0.1";
sha256 = "0n6m13lybnb6vl0lh69i2v6xykcd0bl5svkk18964k4wza8a5b12";
} { }
);
algebraic-graphs = (hsuper.callHackageDirect
{
pkg = "algebraic-graphs";
ver = "0.5";
sha256 = "0z8mgzdis72a9zd9x9f185phqr4bx8s06piggis4rlih1rly61nr";
} { }
);
inspection-testing = (hsuper.callHackageDirect
{
pkg = "inspection-testing";
ver = "0.4.2.4";
sha256 = "01mgxxjayv41cdmdm8dxmap3c7i289jw72sfa1gmi6v1bd8mbzh8";
} { }
);
fourmolu = lib.doJailbreak (hsuper.callHackageDirect
{
pkg = "fourmolu";
ver = "0.3.0.0";
sha256 = "sha256-SFBwhkXfDArITiBSxGSp2qf8gl+yBpWHglBB5aKeaBU=";
} { }
);
heapsize = lib.doJailbreak (hsuper.callHackageDirect
{
pkg = "heapsize";
ver = "0.3.0.1";
sha256 = "0c8lqndpbx9ahjrqyfxjkj0z4yhm1zlcn8al0ir4ldlahql2xv3r";
} { }
);
opentelemetry = hsuper.callHackageDirect
{
pkg = "opentelemetry";
ver = "0.6.1";
sha256 = "08k71z7bns0i6r89nmxqsl00kyksicq619rqy6pf5m7hq1r4zs9m";
} { };
ghc-trace-events = hsuper.callHackageDirect
{
pkg = "ghc-trace-events";
ver = "0.1.2.1";
sha256 = "10vrm7hmg97fn8xf0r79d9vfph0j2s105lsgm0hgqay1qz1x7sp7";
} { };
haskell-lsp = hsuper.callHackageDirect
{
pkg = "haskell-lsp";
ver = "0.23.0.0";
sha256 = "0d9bk1cqkk41frm81j683h2vd1hghl4hlvj8g17690d2qk5pq3c0";
} { };
haskell-lsp-types = hsuper.callHackageDirect
{
pkg = "haskell-lsp-types";
ver = "0.23.0.0";
sha256 = "17mfc2zxkbwipxiy0g3qwqnyp8ds4mrg0z1v7jchcm89hnf8mmmq";
} { };
ormolu =
hsuper.callHackageDirect
{
pkg = "ormolu";
ver = "0.1.4.1";
sha256 = "07gfag591dsys33q2i80f3afxjqny2zpiq4z35d1ajyp7di73m7z";
} { };
ghc-check =
hsuper.callHackageDirect
{
pkg = "ghc-check";
ver = "0.5.0.1";
sha256 = "1zlbss7h6infzhhpilvkpk50gxypkb2li8fspi69jlll5l7wqi3d";
} { };
implicit-hie-cradle =
hsuper.callHackageDirect
{
pkg = "implicit-hie-cradle";
ver = "0.3.0.2";
sha256 = "1fhc8zccd7g7ixka05cba3cd4qf5jvq1zif29bhn593dfkzy89lz";
} { };
implicit-hie =
hsuper.callHackageDirect
{
pkg = "implicit-hie";
ver = "0.1.2.5";
sha256 = "1l0rz4r4hamvmqlb68a7y4s3n73y6xx76zyprksd0pscd9axznnv";
} { };
lsp-test = lib.dontCheck (hsuper.callHackageDirect
{
pkg = "lsp-test";
ver = "0.12.0.0";
sha256 = "1v6zg2pvjw31645129sbj2qss0zf1npk7m25dv0iiiq3gw0wqls4";
} { }
);
floskell = lib.dontCheck (
hsuper.callHackageDirect
{
pkg = "floskell";
ver = "0.10.4";
sha256 = "0n1gy6yf7lzzh9l67712rr7bjliyifi9xjnc6i9rppiv5adj2xyf";
} { }
);
monad-dijkstra = lib.dontCheck (lib.doJailbreak (
hsuper.callHackageDirect
{
pkg = "monad-dijkstra";
ver = "0.1.1.2";
sha256 = "1vyw7az18yy5s9jwi3icq76zvi9myr0y9gja3jaywlykcdn6frsz";
} { }
));
HsYAML-aeson = lib.doJailbreak (
hsuper.callHackageDirect
{
pkg = "HsYAML-aeson";
ver = "0.2.0.0";
sha256 = "0zgcp93y93h7rsg9dv202hf3l6sqr95iadd67lmfclb0npfs640m";
} { }
);
ghc-lib-parser-ex =
hsuper.callHackageDirect
{
pkg = "ghc-lib-parser-ex";
ver = "8.10.0.16";
sha256 = "0dp8plj708ss3im6rmp41kpj0df71kjzpw1kqkpn0dhms9yr1g0x";
} { };
retrie = lib.doJailbreak (lib.dontCheck (
hsuper.callHackageDirect
{
pkg = "retrie";
ver = "0.1.1.1";
sha256 = "0gnp6j35jnk1gcglrymvvn13sawir0610vh0z8ya6599kyddmw7l";
} { }
));
ghc-lib =
hsuper.callHackageDirect
{
pkg = "ghc-lib";
ver = "8.10.2.20200916";
sha256 = "1gx0ijay9chachmd1fbb61md3zlvj24kk63fk3dssx8r9c2yp493";
} { };
ghc-lib-parser =
hsuper.callHackageDirect
{
pkg = "ghc-lib-parser";
ver = "8.10.2.20200916";
sha256 = "1apm9zn484sm6b8flbh6a2kqnv1wjan4l58b81cic5fc1jsqnyjk";
} { };
parser-combinators =
hsuper.callHackageDirect
{
pkg = "parser-combinators";
ver = "1.2.1";
sha256 = "1990d6c1zm2wq4w9521bx7l3arg4ly02hq1ass9n19gs273bxx5h";
} { };
regex-tdfa =
hsuper.callHackageDirect
{
pkg = "regex-tdfa";
ver = "1.3.1.0";
sha256 = "1a0l7kdjzp98smfp969mgkwrz60ph24xy0kh2dajnymnr8vd7b8g";
} { };
regex-posix =
hsuper.callHackageDirect
{
pkg = "regex-posix";
ver = "0.96.0.0";
sha256 = "0js977ahpz10642sbpb55mw9h01pilai6z201wgkncgkg2d69hl3";
} { };
ansi-terminal =
hsuper.callHackageDirect
{
pkg = "ansi-terminal";
ver = "0.10.3";
sha256 = "1aa8lh7pl054kz7i59iym49s8w473nhdqgc3pq16cp5v4358hw5k";
} { };
ghc-exactprint =
hsuper.callHackageDirect
{
pkg = "ghc-exactprint";
ver = "0.6.3.2";
sha256 = "0l9piqqgdi8xd46nj1jizp0r0v526d7f61y05xm8k4aamjaj59d0";
} { };
stylish-haskell =
hsuper.callHackageDirect
{
pkg = "stylish-haskell";
ver = "0.12.2.0";
sha256 = "1ck8i550rvzbvzrm7dvgir73slai8zmvfppg3n5v4igi7y3jy0mr";
} { };
shake = lib.dontCheck (
hsuper.callHackageDirect
{
pkg = "shake";
ver = "0.19.2";
sha256 = "03p5hq0sg13ii39j9hf3nvy8v20mkh8czb59djn6zrg7fypy9ivv";
} { }
);
regex-base =
hsuper.callHackageDirect
{
pkg = "regex-base";
ver = "0.94.0.0";
sha256 = "0x2ip8kn3sv599r7yc9dmdx7hgh5x632m45ga99ib5rnbn6kvn8x";
} { };
quickcheck-instances =
hsuper.callHackageDirect
{
pkg = "quickcheck-instances";
ver = "0.3.22";
sha256 = "05mam3x4x7c881bqbq8lcbclmz914yziqh6s04icxzp12zq7c7ks";
} { };
apply-refact = lib.doJailbreak (hsuper.callHackageDirect
{
pkg = "apply-refact";
ver = "0.9.0.0";
sha256 = "1vxxzfajg248lk4s6lh1jjkn1rym8x6zs5985i5kpz989k6cpyx5";
} { }
);
hlint =
hsuper.callHackageDirect
{
pkg = "hlint";
ver = "3.2.3";
sha256 = "1ka150d227ssyzg7ahj0q69svdsviszh65jv8yg6yybwz0in8kgi";
} { };
Diff =
hsuper.callHackageDirect
{
pkg = "Diff";
ver = "0.4.0";
sha256 = "1phz4cz7i53jx3d1bj0xnx8vpkk482g4ph044zv5c6ssirnzq3ng";
} { };
refinery = lib.dontCheck (
hsuper.callHackageDirect
{
pkg = "refinery";
ver = "0.3.0.0";
sha256 = "08s5pw6j3ncz96zfc2j0cna2zbf4vy7045d6jpzmq2sa161qnpgi";
} { }
);
hie-bios = lib.dontCheck (
hsuper.callHackageDirect
{
pkg = "hie-bios";
ver = "0.7.1";
sha256 = "137f1dy0fmlrzngwcmgnxghcih7f2rfq5bdnizbwy9534dn4dr42";
} { }
);
megaparsec =
hsuper.callHackageDirect
{
pkg = "megaparsec";
ver = "9.0.1";
sha256 = "1279c0snq1w13scikiakdm25ybpnvbpm7khjq4wyy0gj1vvh8r6z";
} { };
test-framework = lib.doJailbreak hsuper.test-framework;
aeson = lib.dontCheck hsuper.aeson;
tree-diff = lib.doJailbreak hsuper.tree-diff;
brittany = hsuper.callHackageDirect
{
pkg = "brittany";
ver = "0.13.1.0";
sha256 = "172mg0ch2awfzhz8vzvjrfdjylfzawrbgfr5z82l1qzjh6g9z295";
} { };
}

View File

@ -1,35 +0,0 @@
{ sources ? import ./sources.nix
, compiler ? "ghc865"
, pkgs-expr ? sources.nixpkgs
, static-haskell-nix ? sources.static-haskell-nix
}:
let
foldOs = normalPkgs.lib.foldl' normalPkgs.lib.composeExtensions (self: super: { });
normalPkgs = import pkgs-expr {
overlays = [
(self: super: {
haskell = super.haskell // {
packages = super.haskell.packages // {
"${compiler}" = super.haskell.packages."${compiler}".override {
overrides =
foldOs [
(import ./octopod-overrides.nix {
inherit (normalPkgs.haskell) lib;
inherit sources;
}
)
(hself: hsuper: {
octo-cli = hsuper.callCabal2nix "octo-cli" ../octo-cli { };
octopod-api = hsuper.callCabal2nix "octopod-api" ../octopod-api { };
octopod-common = hsuper.callCabal2nix "octopod-common" ../octopod-common { };
})
];
};
};
};
})
];
};
static-haskell = import "${static-haskell-nix}/survey" { inherit normalPkgs compiler; };
in
static-haskell.haskellPackages.octo-cli

View File

@ -1,110 +0,0 @@
{ lib, sources ? import ./sources.nix }: hself: hsuper:
{
tabulation = hsuper.callCabal2nix "tabulation" "${sources.obelisk}/lib/tabulation" { };
obelisk-executable-config-lookup = hsuper.callCabal2nix "obelisk-executable-config-lookup" "${sources.obelisk}/lib/executable-config/lookup" { };
obelisk-route = hsuper.callCabal2nix "obelisk-route" "${sources.obelisk}/lib/route" { };
hspec-webdriver = hsuper.callCabal2nix "hspec-webdriver" sources.hspec-webdriver-clone { };
servant-reflex = lib.doJailbreak (hsuper.callHackageDirect
{
pkg = "servant-reflex";
ver = "0.3.5";
sha256 = "1cj5b7hl4jhsqxfg8vdw50z8zvfxkj42f41hmyx217w6bv3s3fdb";
} { }
);
servant = hsuper.callHackageDirect
{
pkg = "servant";
ver = "0.18.2";
sha256 = "0l2k895nxvw2ngr9201g3br6s9zab7mk5mhpjibyg8mxfbv75a8y";
} { };
servant-client-core = hsuper.callHackageDirect
{
pkg = "servant-client-core";
ver = "0.18.2";
sha256 = "1hazxk1laklpm2c65zgkk2gn8mvlp682437071s04bqggk9b59sx";
} { };
servant-server = hsuper.callHackageDirect
{
pkg = "servant-server";
ver = "0.18.2";
sha256 = "1kynxl7qg5z45bhi0k61sxn79xkgnq1z97ccqqs39wjyf45fj5yy";
} { };
servant-client = hsuper.callHackageDirect
{
pkg = "servant-client";
ver = "0.18.2";
sha256 = "0yip2s63ivrlrpficdipq60j2a6czg8agn18lpkkaxf3n55j4jr3";
} { };
servant-websockets = hsuper.callHackageDirect
{
pkg = "servant-websockets";
ver = "2.0.0";
sha256 = "01bmwg3ysj8gijcqghykxfsd62sqz1pfby2irpzh5ybwyh285pvg";
} { };
deriving-aeson = hsuper.callHackageDirect
{
pkg = "deriving-aeson";
ver = "0.2.3";
sha256 = "0ckwdi9pr4aqp9psag4mdbx30nygxkkpdf21rg9rfz16cz8079j7";
} { };
table-layout = hsuper.callHackageDirect
{
pkg = "table-layout";
ver = "0.9.0.1";
sha256 = "12nllfnh6b5mjda9qxfy192v0r0sx181w9zc9j70kvjdn7hgrb0y";
} { };
data-default-instances-base = hsuper.callHackageDirect
{
pkg = "data-default-instances-base";
ver = "0.1.0.1";
sha256 = "18basdy4qjn246phw008ll9zbi3rpdn6bh2dk0i81a60gsmyn58q";
} { };
postgresql-simple = hsuper.callHackageDirect
{
pkg = "postgresql-simple";
ver = "0.6.3";
sha256 = "16kk1bc23gc23cd79c2iy90zh03x5n6b9r2kinjspy7hl9jlzs2a";
} { };
concurrent-output = hsuper.callHackageDirect
{
pkg = "concurrent-output";
ver = "1.10.12";
sha256 = "1ysvahlf6frjfxpv6lwzxn05ps6b4zy1f5xb0yg6z688wbw1f6a7";
} { };
hspec-wai = hsuper.callHackageDirect
{
pkg = "hspec-wai";
ver = "0.11.0";
sha256 = "1kqbk2by70smhd9p1zff6ilimvvxc54dkh2l0wpn03zqvydjnwl2";
} { };
patch = lib.doJailbreak (hsuper.callHackageDirect
{
pkg = "patch";
ver = "0.0.3.2";
sha256 = "10alg64zwx72lz42z9i5hfwdpk0r79zfli57l41akyznj4pwrvgh";
} { }
);
path = hsuper.callHackageDirect
{
pkg = "path";
ver = "0.8.0";
sha256 = "0isldidz2gypw2pz399g6rn77x9mppd1mvj5h6ify4pj4mpla0pb";
} { };
path-io = hsuper.callHackageDirect
{
pkg = "path-io";
ver = "1.6.2";
sha256 = "1s7cahx8cf85kwz9l8cm6x6kvjwsv0spwv78pybsspb1ap5q287p";
} { };
extra =
hsuper.callHackageDirect
{
pkg = "extra";
ver = "1.7.9";
sha256 = "0q64x7qiw0zsi8dv958nrqidjlgv9w20wva1y73affq8470m28vh";
} { };
reflex = lib.dontCheck (lib.doJailbreak hsuper.reflex);
reflex-dom-core = lib.dontCheck hsuper.reflex-dom-core;
chronos = lib.doJailbreak hsuper.chronos;
hedgehog = lib.doJailbreak hsuper.hedgehog;
}

View File

@ -1,26 +1,14 @@
{
"haskell-language-server": {
"haskellNix": {
"branch": "master",
"description": "Integration point for ghcide and haskell-ide-engine. One IDE to rule them all.",
"homepage": "",
"owner": "haskell",
"repo": "haskell-language-server",
"rev": "9c40dcff1b989b14e05b5aebe96f3da78c6ea25c",
"sha256": "0i17ssfmcgh6z1b8q7cy3x46xi81x5z82ngik86h8d5cb6w98lsn",
"description": "Alternative Haskell Infrastructure for Nixpkgs",
"homepage": "https://input-output-hk.github.io/haskell.nix",
"owner": "input-output-hk",
"repo": "haskell.nix",
"rev": "920ac43ee13d95f56d7539bece1f5ee41b10c8a9",
"sha256": "0px60yvag24ayj9zl82cbnpixm41slj2wqw4p2vgbwnbz125hgsx",
"type": "tarball",
"url": "https://github.com/haskell/haskell-language-server/archive/9c40dcff1b989b14e05b5aebe96f3da78c6ea25c.tar.gz",
"url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz"
},
"hspec-webdriver-clone": {
"branch": "master",
"description": "Clone of hspec-webdriver, as the original source is inaccesible",
"homepage": null,
"owner": "dfordivam",
"repo": "hspec-webdriver-clone",
"rev": "0d748b7bb7cd74dce0a55a1ec86b01dbb8a71cd8",
"sha256": "1criynifhvmnqwhrshmzylikqkvlgq98xf72w9cdd2zpjw539qf0",
"type": "tarball",
"url": "https://github.com/dfordivam/hspec-webdriver-clone/archive/0d748b7bb7cd74dce0a55a1ec86b01dbb8a71cd8.tar.gz",
"url": "https://github.com/input-output-hk/haskell.nix/archive/920ac43ee13d95f56d7539bece1f5ee41b10c8a9.tar.gz",
"url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz"
},
"niv": {
@ -36,51 +24,15 @@
"url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz"
},
"nixpkgs": {
"branch": "63ad5ab28ee380a4c6a974c9f70639f81a15f6ad",
"description": "A read-only mirror of NixOS/nixpkgs tracking the released channels. Send issues and PRs to",
"homepage": "https://github.com/NixOS/nixpkgs",
"branch": "master",
"description": "Nix Packages collection",
"homepage": "",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "63ad5ab28ee380a4c6a974c9f70639f81a15f6ad",
"sha256": "1lppx6rsr52hdd1bp25ni4d6c8b76ip6lvr0iphfv0d1jjdf9r4h",
"rev": "eb93bf6eed08d06bc4eb08b534e544b1f9b4e966",
"sha256": "0sm6n0m396szc5wzrkmyqff26qlf3vi9naykyj5vb0lzm485r99n",
"type": "tarball",
"url": "https://github.com/NixOS/nixpkgs/archive/63ad5ab28ee380a4c6a974c9f70639f81a15f6ad.tar.gz",
"url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz"
},
"obelisk": {
"branch": "master",
"description": "Functional reactive web and mobile applications, with batteries included.",
"homepage": "https://reflex-frp.org",
"owner": "obsidiansystems",
"repo": "obelisk",
"rev": "11beb6e8cd2419b2429925b76a98f24035e40985",
"sha256": "0b4m33b7yyzsbkvfz2kwg4v9hlnvbjlmjikbvwd7pg52vy84and0",
"type": "tarball",
"url": "https://github.com/obsidiansystems/obelisk/archive/11beb6e8cd2419b2429925b76a98f24035e40985.tar.gz",
"url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz"
},
"reflex-platform": {
"branch": "rc/0.6.0.0",
"description": "A curated package set and set of tools that let you build Haskell packages so they can run on a variety of platforms. reflex-platform is built on top of the nix package manager.",
"homepage": "https://reflex-frp.org",
"owner": "reflex-frp",
"repo": "reflex-platform",
"rev": "8d421e9e06b0477cbc065346aaf596c9db6cc387",
"sha256": "06fy5b0mk5k2ps1h78yihf4j76cb855r86y9p4jv5d91nfyl2dck",
"type": "tarball",
"url": "https://github.com/reflex-frp/reflex-platform/archive/8d421e9e06b0477cbc065346aaf596c9db6cc387.tar.gz",
"url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz"
},
"static-haskell-nix": {
"branch": "master",
"description": "easily build most Haskell programs into fully static Linux executables",
"homepage": "",
"owner": "nh2",
"repo": "static-haskell-nix",
"rev": "382150290ba43b6eb41981c1ab3b32aa31798140",
"sha256": "0zsyplzf1k235rl26irm27y5ljd8ciayw80q575msxa69a9y2nvd",
"type": "tarball",
"url": "https://github.com/nh2/static-haskell-nix/archive/382150290ba43b6eb41981c1ab3b32aa31798140.tar.gz",
"url": "https://github.com/NixOS/nixpkgs/archive/eb93bf6eed08d06bc4eb08b534e544b1f9b4e966.tar.gz",
"url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz"
}
}

View File

@ -36,7 +36,7 @@ executable octo
OverloadedLabels
build-depends:
aeson,
base ^>=4.12.0.0,
base,
bytestring,
chronos,
connection,

View File

@ -6,7 +6,6 @@ Description : octo CLI arguments parser utils.
module Octopod.CLI.Args where
import Common.Types
import Data.Semigroup ((<>))
import Data.Text
import Options.Applicative

View File

@ -32,7 +32,7 @@ library
TypeApplications
TypeOperators
build-depends:
base ^>=4.12.0.0,
base,
servant,
octopod-common,
if !impl(ghcjs)

View File

@ -34,7 +34,7 @@ library
, ScopedTypeVariables
, TypeApplications
, TypeOperators
build-depends: base >=4.12 && <4.13
build-depends: base
, aeson
, bytestring
, deriving-aeson

View File

@ -0,0 +1,11 @@
<!DOCTYPE html>
<html>
<head>
</head>
<body>
</body>
<script language="javascript" src="all.js"></script>
</html>

View File

@ -15,6 +15,7 @@ extra-source-files: CHANGELOG.md
cabal-version: >=1.10
flag development
default: False
description: mock host
@ -40,6 +41,7 @@ executable frontend
-Werror
-Wno-missing-home-modules
-Wno-error=missing-home-modules
-threaded
default-extensions: BlockArguments
, ConstraintKinds
, DataKinds
@ -70,7 +72,7 @@ executable frontend
, OverloadedLabels
-- other-extensions:
build-depends: aeson
, base >=4.12 && <4.13
, base
, bytestring
, containers
, deriving-aeson

View File

@ -3,7 +3,6 @@ module Reflex.MultiEventWriter.Class
) where
import Control.Monad.Reader (ReaderT, lift)
import Data.Semigroup (Semigroup)
import Data.Type.Equality
import Reflex.Dom

View File

@ -1 +1,11 @@
(import ./default.nix { hls = true; }).shells.ghc
(import ./default.nix { }).shellFor {
tools = {
cabal = "3.2.0.0";
hlint = "latest";
haskell-language-server = "latest";
ghcid = "latest";
};
withHoogle = true;
exactDeps = true;
}

View File

@ -1,4 +1,4 @@
resolver: lts-14.27
resolver: lts-18.2
packages:
- octo-cli
@ -7,12 +7,6 @@ packages:
- octopod-common
extra-deps:
- deriving-aeson-0.2.3
- servant-websockets-2.0.0
- postgresql-error-codes-1.0.1
- table-layout-0.9.0.1
- table-layout-0.9.1.0
- data-default-instances-base-0.1.0.1
- servant-0.18.2
- servant-client-0.18.2
- servant-client-core-0.18.2
- servant-server-0.18.2