From 164ff546e8260e50b96ab6bc2bba956ce5ed8641 Mon Sep 17 00:00:00 2001 From: James Santucci Date: Sat, 6 Jun 2026 16:45:33 -0700 Subject: [PATCH 1/4] nix: Make project config consistent * declare outputs for (almost) all libraries in flake * make example dependencies consistent with non-example dependencies --- .gitignore | 3 +- examples/examples.cabal | 2 +- flake.lock | 112 ++++++++++++++++++++++++++++++++++++++++ flake.nix | 104 +++++++++++++++++++++++++++++++------ 4 files changed, 201 insertions(+), 20 deletions(-) create mode 100644 flake.lock diff --git a/.gitignore b/.gitignore index 607f2e4a..ada5d0b5 100644 --- a/.gitignore +++ b/.gitignore @@ -28,7 +28,6 @@ dataframe_benchmark/ bin/ coverage-html .DS_Store -flake.lock tags __pycache__ venv @@ -45,4 +44,4 @@ Cargo.lock # (transient; the committed *.db fixtures themselves stay tracked). *.db-wal *.db-shm -*.db-journal \ No newline at end of file +*.db-journal diff --git a/examples/examples.cabal b/examples/examples.cabal index 400005e0..d1bb86c1 100644 --- a/examples/examples.cabal +++ b/examples/examples.cabal @@ -142,7 +142,7 @@ executable examples cassava >= 0.1 && < 1, containers >= 0.6.7 && < 0.9, directory >= 1.3.0.0 && < 2, - granite ^>= 0.6, + granite >= 0.6 && < 1, hashable >= 1.2 && < 2, hasktorch, http-conduit, diff --git a/flake.lock b/flake.lock new file mode 100644 index 00000000..2b42c650 --- /dev/null +++ b/flake.lock @@ -0,0 +1,112 @@ +{ + "nodes": { + "flake-utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "granite": { + "flake": false, + "locked": { + "lastModified": 1782949848, + "narHash": "sha256-oPoDjgrep4DgOTH+UatooiUdVDMBjMRv+ai3fIvulTE=", + "owner": "mchav", + "repo": "granite", + "rev": "3d62c7ce2f02f73b1c0614e3721b7af27147f110", + "type": "github" + }, + "original": { + "owner": "mchav", + "repo": "granite", + "type": "github" + } + }, + "network-run": { + "flake": false, + "locked": { + "lastModified": 1763529229, + "narHash": "sha256-j3Pkvn/eXiciQQIIc+SkWiFSLqbVyAc0SfLyIRZUsv8=", + "owner": "kazu-yamamoto", + "repo": "network-run", + "rev": "f49d0eeafcecce3e26e66edb3209a04cba30defa", + "type": "github" + }, + "original": { + "owner": "kazu-yamamoto", + "repo": "network-run", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1780243769, + "narHash": "sha256-x5UQuRsH3MqI0U9afaXSNqzTPSeZlRLvFAav2Ux1pNw=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "331800de5053fcebacf6813adb5db9c9dca22a0c", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "pinch": { + "flake": false, + "locked": { + "lastModified": 1763952216, + "narHash": "sha256-rpk7mqi4C77UFIRTDVWykE30jd5OY5K4l9LWiGo46f8=", + "owner": "abhinav", + "repo": "pinch", + "rev": "0bf7dddf7c3203d3c04aedb709a1c774f99ff796", + "type": "github" + }, + "original": { + "owner": "abhinav", + "repo": "pinch", + "type": "github" + } + }, + "root": { + "inputs": { + "flake-utils": "flake-utils", + "granite": "granite", + "network-run": "network-run", + "nixpkgs": "nixpkgs", + "pinch": "pinch" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix index b5e3f8e4..c3d683a5 100644 --- a/flake.nix +++ b/flake.nix @@ -4,42 +4,111 @@ inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; flake-utils.url = "github:numtide/flake-utils"; + pinch = { + url = "github:abhinav/pinch"; + flake = false; + }; + network-run = { + url = "github:kazu-yamamoto/network-run"; + flake = false; + }; + granite = { + url = "github:mchav/granite"; + flake = false; + }; }; - outputs = { self, nixpkgs, flake-utils }: - flake-utils.lib.eachDefaultSystem (system: + outputs = + inputs@{ + self, + nixpkgs, + flake-utils, + ... + }: + flake-utils.lib.eachDefaultSystem ( + system: let pkgs = nixpkgs.legacyPackages.${system}; - granitePkg = pkgs.fetchFromGitHub { - repo = "granite"; - owner = "mchav"; - rev = "main"; - hash = "sha256-Z/o8gxMOBltKiaL0NEjMUyOvUljRvKErWeM6Ul3GM9k="; - }; - hsPkgs = pkgs.haskellPackages.extend (self: super: { - granite = self.callCabal2nix "granite" granitePkg { }; - dataframe-fastcsv = self.callCabal2nix "dataframe-fastcsv" ./dataframe-fastcsv { }; - dataframe-persistent = self.callCabal2nix "dataframe-persistent" ./dataframe-persistent { }; - dataframe-hasktorch = self.callCabal2nix "dataframe-hasktorch" ./dataframe-hasktorch { }; - dataframe = self.callCabal2nix "dataframe" ./. { }; - }); + hsPkgs = pkgs.haskellPackages.extend ( + self: super: { + network-run = self.callCabal2nix "network-run" inputs.network-run { }; + dataframe-arrow = self.callCabal2nix "dataframe-arrow" ./dataframe-arrow { }; + dataframe-core = self.callCabal2nix "dataframe-core" ./dataframe-core { }; + dataframe-csv = self.callCabal2nix "dataframe-csv" ./dataframe-csv { }; + dataframe-csv-th = self.callCabal2nix "dataframe-csv-th" ./dataframe-csv-th { }; + dataframe-expr-serializer = + self.callCabal2nix "dataframe-expr-serializer" ./dataframe-expr-serializer + { }; + dataframe-fastcsv = self.callCabal2nix "dataframe-fastcsv" ./dataframe-fastcsv { }; + # dataframe-fusion = self.callCabal2nix "dataframe-fusion" ./dataframe-fusion { }; + dataframe-hasktorch = self.callCabal2nix "dataframe-hasktorch" ./dataframe-hasktorch { }; + dataframe-huggingface = self.callCabal2nix "dataframe-huggingface" ./dataframe-huggingface { }; + dataframe-json = self.callCabal2nix "dataframe-json" ./dataframe-json { }; + dataframe-lazy = self.callCabal2nix "dataframe-lazy" ./dataframe-lazy { }; + dataframe-learn = self.callCabal2nix "dataframe-learn" ./dataframe-learn { + parallel = pkgs.haskell.lib.dontCheck (self.callHackage "parallel" "3.3.0.0" { }); + }; + dataframe-operations = self.callCabal2nix "dataframe-operations" ./dataframe-operations { }; + dataframe-parquet = self.callCabal2nix "dataframe-parquet" ./dataframe-parquet { + pinch = self.callCabal2nix "pinch" inputs.pinch { }; + }; + dataframe-parquet-th = self.callCabal2nix "dataframe-parquet-th" ./dataframe-parquet-th { }; + dataframe-parsing = self.callCabal2nix "dataframe-parsing" ./dataframe-parsing { }; + dataframe-persistent = self.callCabal2nix "dataframe-persistent" ./dataframe-persistent { }; + dataframe-th = self.callCabal2nix "dataframe-th" ./dataframe-th { }; + dataframe-viz = self.callCabal2nix "dataframe-viz" ./dataframe-viz { + granite = self.callCabal2nix "granite" inputs.granite { }; + }; + dataframe = self.callCabal2nix "dataframe" ./. { }; + } + ); in { packages = { default = hsPkgs.dataframe; dataframe = hsPkgs.dataframe; + dataframe-arrow = hsPkgs.dataframe-arrow; + dataframe-core = hsPkgs.dataframe-core; + dataframe-csv = hsPkgs.dataframe-csv; + dataframe-csv-th = hsPkgs.dataframe-csv-th; dataframe-fastcsv = hsPkgs.dataframe-fastcsv; + # dataframe-fusion = hsPkgs.dataframe-fusion; dataframe-hasktorch = hsPkgs.dataframe-hasktorch; + dataframe-json = hsPkgs.dataframe-json; + dataframe-lazy = hsPkgs.dataframe-lazy; + dataframe-learn = hsPkgs.dataframe-learn; + dataframe-operations = hsPkgs.dataframe-operations; + dataframe-parquet = hsPkgs.dataframe-parquet; + dataframe-parquet-th = hsPkgs.dataframe-parquet-th; + dataframe-parsing = hsPkgs.dataframe-parsing; dataframe-persistent = hsPkgs.dataframe-persistent; + dataframe-th = hsPkgs.dataframe-th; + dataframe-viz = hsPkgs.dataframe-viz; }; devShells.default = hsPkgs.shellFor { packages = ps: [ ps.dataframe + ps.dataframe-arrow + ps.dataframe-core + ps.dataframe-csv + ps.dataframe-csv-th + ps.dataframe-expr-serializer ps.dataframe-fastcsv - ps.dataframe-persistent + # ps.dataframe-fusion ps.dataframe-hasktorch + ps.dataframe-huggingface + ps.dataframe-json + ps.dataframe-lazy + ps.dataframe-learn + ps.dataframe-operations + ps.dataframe-parquet + ps.dataframe-parquet-th + ps.dataframe-parsing + ps.dataframe-persistent + ps.dataframe-th + ps.dataframe-viz ]; nativeBuildInputs = with hsPkgs; [ ghc @@ -48,5 +117,6 @@ ]; withHoogle = true; }; - }); + } + ); } From e6e831ffde881db1a35791e8152a212693005386 Mon Sep 17 00:00:00 2001 From: James Santucci Date: Mon, 6 Jul 2026 12:30:48 -0700 Subject: [PATCH 2/4] Regenerate haskell-ci.yml with flake-locked haskell-ci --- .github/workflows/haskell-ci.yml | 240 +++++++++++++++++++------------ flake.lock | 84 ++++++++++- flake.nix | 5 + nix/haskell-ci-flake/flake.lock | 78 ++++++++++ nix/haskell-ci-flake/flake.nix | 44 ++++++ 5 files changed, 361 insertions(+), 90 deletions(-) create mode 100644 nix/haskell-ci-flake/flake.lock create mode 100644 nix/haskell-ci-flake/flake.nix diff --git a/.github/workflows/haskell-ci.yml b/.github/workflows/haskell-ci.yml index 21d672bb..8dd04afe 100644 --- a/.github/workflows/haskell-ci.yml +++ b/.github/workflows/haskell-ci.yml @@ -1,6 +1,6 @@ # This GitHub workflow config has been generated by a script via # -# haskell-ci 'github' 'dataframe.cabal' +# haskell-ci 'github' 'cabal.project.ci' # # To regenerate the script (for example after adjusting tested-with) run # @@ -8,48 +8,20 @@ # # For more information, see https://github.com/haskell-CI/haskell-ci # -# version: 0.19.20250917 +# version: 0.19.20260624 # -# REGENDATA ("0.19.20250917",["github","dataframe.cabal"]) +# REGENDATA ("0.19.20260624",["github","cabal.project.ci"]) # name: Haskell-CI on: - push - pull_request - merge_group + - workflow_dispatch jobs: - fourmolu: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: haskell-actions/run-fourmolu@v11 - with: - version: "0.17.0.0" - # Keep in sync with .fourmolu-ignore and presubmit.yml. These four - # CPP-gated meta-package wrappers crash fourmolu's ghc-lib-parser. - pattern: | - **/*.hs - **/*.hs-boot - !src/DataFrame.hs - !src/DataFrame/TH.hs - !src/DataFrame/Typed.hs - !src/DataFrame/Typed/TH.hs - hlint: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - name: 'Set up HLint' - uses: haskell-actions/hlint-setup@v2 - with: - version: '3.8' - - name: Run HLint - uses: haskell-actions/hlint-run@v2 - with: - path: '["src/", "app/", "benchmark/", "examples/", "ffi/", "dataframe-arrow/", "dataframe-core/", "dataframe-csv/", "dataframe-csv-th/", "dataframe-fastcsv/", "dataframe-fusion/", "dataframe-hasktorch/", "dataframe-huggingface/", "dataframe-json/", "dataframe-lazy/", "dataframe-learn/", "dataframe-operations/", "dataframe-parquet/", "dataframe-parquet-th/", "dataframe-parsing/", "dataframe-persistent/", "dataframe-th/", "dataframe-viz/"]' - fail-on: warning linux: name: Haskell-CI - Linux - ${{ matrix.compiler }} - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 timeout-minutes: 60 container: @@ -173,7 +145,7 @@ jobs: chmod a+x $HOME/.cabal/bin/cabal-plan cabal-plan --version - name: checkout - uses: actions/checkout@v5 + uses: actions/checkout@v7 with: path: source - name: initial cabal.project for sdist @@ -193,7 +165,6 @@ jobs: echo "packages: $GITHUB_WORKSPACE/source/dataframe-learn" >> cabal.project echo "packages: $GITHUB_WORKSPACE/source/dataframe-lazy" >> cabal.project echo "packages: $GITHUB_WORKSPACE/source/dataframe-fastcsv" >> cabal.project - echo "packages: $GITHUB_WORKSPACE/source/dataframe-huggingface" >> cabal.project cat cabal.project - name: sdist run: | @@ -207,67 +178,136 @@ jobs: run: | PKGDIR_dataframe="$(find "$GITHUB_WORKSPACE/unpacked" -maxdepth 1 -type d -regex '.*/dataframe-[0-9.]*')" echo "PKGDIR_dataframe=${PKGDIR_dataframe}" >> "$GITHUB_ENV" - PKGDIR_core="$(find "$GITHUB_WORKSPACE/unpacked" -maxdepth 1 -type d -regex '.*/dataframe-core-[0-9.]*')" - echo "PKGDIR_core=${PKGDIR_core}" >> "$GITHUB_ENV" - PKGDIR_parsing="$(find "$GITHUB_WORKSPACE/unpacked" -maxdepth 1 -type d -regex '.*/dataframe-parsing-[0-9.]*')" - echo "PKGDIR_parsing=${PKGDIR_parsing}" >> "$GITHUB_ENV" - PKGDIR_operations="$(find "$GITHUB_WORKSPACE/unpacked" -maxdepth 1 -type d -regex '.*/dataframe-operations-[0-9.]*')" - echo "PKGDIR_operations=${PKGDIR_operations}" >> "$GITHUB_ENV" - PKGDIR_csv="$(find "$GITHUB_WORKSPACE/unpacked" -maxdepth 1 -type d -regex '.*/dataframe-csv-[0-9.]*')" - echo "PKGDIR_csv=${PKGDIR_csv}" >> "$GITHUB_ENV" - PKGDIR_csv_th="$(find "$GITHUB_WORKSPACE/unpacked" -maxdepth 1 -type d -regex '.*/dataframe-csv-th-[0-9.]*')" - echo "PKGDIR_csv_th=${PKGDIR_csv_th}" >> "$GITHUB_ENV" - PKGDIR_json="$(find "$GITHUB_WORKSPACE/unpacked" -maxdepth 1 -type d -regex '.*/dataframe-json-[0-9.]*')" - echo "PKGDIR_json=${PKGDIR_json}" >> "$GITHUB_ENV" - PKGDIR_parquet="$(find "$GITHUB_WORKSPACE/unpacked" -maxdepth 1 -type d -regex '.*/dataframe-parquet-[0-9.]*')" - echo "PKGDIR_parquet=${PKGDIR_parquet}" >> "$GITHUB_ENV" - PKGDIR_parquet_th="$(find "$GITHUB_WORKSPACE/unpacked" -maxdepth 1 -type d -regex '.*/dataframe-parquet-th-[0-9.]*')" - echo "PKGDIR_parquet_th=${PKGDIR_parquet_th}" >> "$GITHUB_ENV" - PKGDIR_th="$(find "$GITHUB_WORKSPACE/unpacked" -maxdepth 1 -type d -regex '.*/dataframe-th-[0-9.]*')" - echo "PKGDIR_th=${PKGDIR_th}" >> "$GITHUB_ENV" - PKGDIR_viz="$(find "$GITHUB_WORKSPACE/unpacked" -maxdepth 1 -type d -regex '.*/dataframe-viz-[0-9.]*')" - echo "PKGDIR_viz=${PKGDIR_viz}" >> "$GITHUB_ENV" - PKGDIR_learn="$(find "$GITHUB_WORKSPACE/unpacked" -maxdepth 1 -type d -regex '.*/dataframe-learn-[0-9.]*')" - echo "PKGDIR_learn=${PKGDIR_learn}" >> "$GITHUB_ENV" - PKGDIR_lazy="$(find "$GITHUB_WORKSPACE/unpacked" -maxdepth 1 -type d -regex '.*/dataframe-lazy-[0-9.]*')" - echo "PKGDIR_lazy=${PKGDIR_lazy}" >> "$GITHUB_ENV" - PKGDIR_fastcsv="$(find "$GITHUB_WORKSPACE/unpacked" -maxdepth 1 -type d -regex '.*/dataframe-fastcsv-[0-9.]*')" - echo "PKGDIR_fastcsv=${PKGDIR_fastcsv}" >> "$GITHUB_ENV" - PKGDIR_huggingface="$(find "$GITHUB_WORKSPACE/unpacked" -maxdepth 1 -type d -regex '.*/dataframe-huggingface-[0-9.]*')" - echo "PKGDIR_huggingface=${PKGDIR_huggingface}" >> "$GITHUB_ENV" + PKGDIR_dataframe_core="$(find "$GITHUB_WORKSPACE/unpacked" -maxdepth 1 -type d -regex '.*/dataframe-core-[0-9.]*')" + echo "PKGDIR_dataframe_core=${PKGDIR_dataframe_core}" >> "$GITHUB_ENV" + PKGDIR_dataframe_parsing="$(find "$GITHUB_WORKSPACE/unpacked" -maxdepth 1 -type d -regex '.*/dataframe-parsing-[0-9.]*')" + echo "PKGDIR_dataframe_parsing=${PKGDIR_dataframe_parsing}" >> "$GITHUB_ENV" + PKGDIR_dataframe_operations="$(find "$GITHUB_WORKSPACE/unpacked" -maxdepth 1 -type d -regex '.*/dataframe-operations-[0-9.]*')" + echo "PKGDIR_dataframe_operations=${PKGDIR_dataframe_operations}" >> "$GITHUB_ENV" + PKGDIR_dataframe_csv="$(find "$GITHUB_WORKSPACE/unpacked" -maxdepth 1 -type d -regex '.*/dataframe-csv-[0-9.]*')" + echo "PKGDIR_dataframe_csv=${PKGDIR_dataframe_csv}" >> "$GITHUB_ENV" + PKGDIR_dataframe_csv_th="$(find "$GITHUB_WORKSPACE/unpacked" -maxdepth 1 -type d -regex '.*/dataframe-csv-th-[0-9.]*')" + echo "PKGDIR_dataframe_csv_th=${PKGDIR_dataframe_csv_th}" >> "$GITHUB_ENV" + PKGDIR_dataframe_json="$(find "$GITHUB_WORKSPACE/unpacked" -maxdepth 1 -type d -regex '.*/dataframe-json-[0-9.]*')" + echo "PKGDIR_dataframe_json=${PKGDIR_dataframe_json}" >> "$GITHUB_ENV" + PKGDIR_dataframe_parquet="$(find "$GITHUB_WORKSPACE/unpacked" -maxdepth 1 -type d -regex '.*/dataframe-parquet-[0-9.]*')" + echo "PKGDIR_dataframe_parquet=${PKGDIR_dataframe_parquet}" >> "$GITHUB_ENV" + PKGDIR_dataframe_parquet_th="$(find "$GITHUB_WORKSPACE/unpacked" -maxdepth 1 -type d -regex '.*/dataframe-parquet-th-[0-9.]*')" + echo "PKGDIR_dataframe_parquet_th=${PKGDIR_dataframe_parquet_th}" >> "$GITHUB_ENV" + PKGDIR_dataframe_th="$(find "$GITHUB_WORKSPACE/unpacked" -maxdepth 1 -type d -regex '.*/dataframe-th-[0-9.]*')" + echo "PKGDIR_dataframe_th=${PKGDIR_dataframe_th}" >> "$GITHUB_ENV" + PKGDIR_dataframe_viz="$(find "$GITHUB_WORKSPACE/unpacked" -maxdepth 1 -type d -regex '.*/dataframe-viz-[0-9.]*')" + echo "PKGDIR_dataframe_viz=${PKGDIR_dataframe_viz}" >> "$GITHUB_ENV" + PKGDIR_dataframe_learn="$(find "$GITHUB_WORKSPACE/unpacked" -maxdepth 1 -type d -regex '.*/dataframe-learn-[0-9.]*')" + echo "PKGDIR_dataframe_learn=${PKGDIR_dataframe_learn}" >> "$GITHUB_ENV" + PKGDIR_dataframe_lazy="$(find "$GITHUB_WORKSPACE/unpacked" -maxdepth 1 -type d -regex '.*/dataframe-lazy-[0-9.]*')" + echo "PKGDIR_dataframe_lazy=${PKGDIR_dataframe_lazy}" >> "$GITHUB_ENV" + PKGDIR_dataframe_fastcsv="$(find "$GITHUB_WORKSPACE/unpacked" -maxdepth 1 -type d -regex '.*/dataframe-fastcsv-[0-9.]*')" + echo "PKGDIR_dataframe_fastcsv=${PKGDIR_dataframe_fastcsv}" >> "$GITHUB_ENV" rm -f cabal.project cabal.project.local touch cabal.project touch cabal.project.local echo "packages: ${PKGDIR_dataframe}" >> cabal.project - echo "packages: ${PKGDIR_core}" >> cabal.project - echo "packages: ${PKGDIR_parsing}" >> cabal.project - echo "packages: ${PKGDIR_operations}" >> cabal.project - echo "packages: ${PKGDIR_csv}" >> cabal.project - echo "packages: ${PKGDIR_csv_th}" >> cabal.project - echo "packages: ${PKGDIR_json}" >> cabal.project - echo "packages: ${PKGDIR_parquet}" >> cabal.project - echo "packages: ${PKGDIR_parquet_th}" >> cabal.project - echo "packages: ${PKGDIR_th}" >> cabal.project - echo "packages: ${PKGDIR_viz}" >> cabal.project - echo "packages: ${PKGDIR_learn}" >> cabal.project - echo "packages: ${PKGDIR_lazy}" >> cabal.project - echo "packages: ${PKGDIR_fastcsv}" >> cabal.project - echo "packages: ${PKGDIR_huggingface}" >> cabal.project + echo "packages: ${PKGDIR_dataframe_core}" >> cabal.project + echo "packages: ${PKGDIR_dataframe_parsing}" >> cabal.project + echo "packages: ${PKGDIR_dataframe_operations}" >> cabal.project + echo "packages: ${PKGDIR_dataframe_csv}" >> cabal.project + echo "packages: ${PKGDIR_dataframe_csv_th}" >> cabal.project + echo "packages: ${PKGDIR_dataframe_json}" >> cabal.project + echo "packages: ${PKGDIR_dataframe_parquet}" >> cabal.project + echo "packages: ${PKGDIR_dataframe_parquet_th}" >> cabal.project + echo "packages: ${PKGDIR_dataframe_th}" >> cabal.project + echo "packages: ${PKGDIR_dataframe_viz}" >> cabal.project + echo "packages: ${PKGDIR_dataframe_learn}" >> cabal.project + echo "packages: ${PKGDIR_dataframe_lazy}" >> cabal.project + echo "packages: ${PKGDIR_dataframe_fastcsv}" >> cabal.project echo "package dataframe" >> cabal.project echo " ghc-options: -Werror=missing-methods -Werror=missing-fields" >> cabal.project + echo "package dataframe-core" >> cabal.project + echo " ghc-options: -Werror=missing-methods -Werror=missing-fields" >> cabal.project + echo "package dataframe-parsing" >> cabal.project + echo " ghc-options: -Werror=missing-methods -Werror=missing-fields" >> cabal.project + echo "package dataframe-operations" >> cabal.project + echo " ghc-options: -Werror=missing-methods -Werror=missing-fields" >> cabal.project + echo "package dataframe-csv" >> cabal.project + echo " ghc-options: -Werror=missing-methods -Werror=missing-fields" >> cabal.project + echo "package dataframe-csv-th" >> cabal.project + echo " ghc-options: -Werror=missing-methods -Werror=missing-fields" >> cabal.project + echo "package dataframe-json" >> cabal.project + echo " ghc-options: -Werror=missing-methods -Werror=missing-fields" >> cabal.project + echo "package dataframe-parquet" >> cabal.project + echo " ghc-options: -Werror=missing-methods -Werror=missing-fields" >> cabal.project + echo "package dataframe-parquet-th" >> cabal.project + echo " ghc-options: -Werror=missing-methods -Werror=missing-fields" >> cabal.project + echo "package dataframe-th" >> cabal.project + echo " ghc-options: -Werror=missing-methods -Werror=missing-fields" >> cabal.project + echo "package dataframe-viz" >> cabal.project + echo " ghc-options: -Werror=missing-methods -Werror=missing-fields" >> cabal.project + echo "package dataframe-learn" >> cabal.project + echo " ghc-options: -Werror=missing-methods -Werror=missing-fields" >> cabal.project + echo "package dataframe-lazy" >> cabal.project + echo " ghc-options: -Werror=missing-methods -Werror=missing-fields" >> cabal.project + echo "package dataframe-fastcsv" >> cabal.project + echo " ghc-options: -Werror=missing-methods -Werror=missing-fields" >> cabal.project echo "package dataframe" >> cabal.project echo " ghc-options: -Werror=unused-packages" >> cabal.project + echo "package dataframe-core" >> cabal.project + echo " ghc-options: -Werror=unused-packages" >> cabal.project + echo "package dataframe-parsing" >> cabal.project + echo " ghc-options: -Werror=unused-packages" >> cabal.project + echo "package dataframe-operations" >> cabal.project + echo " ghc-options: -Werror=unused-packages" >> cabal.project + echo "package dataframe-csv" >> cabal.project + echo " ghc-options: -Werror=unused-packages" >> cabal.project + echo "package dataframe-csv-th" >> cabal.project + echo " ghc-options: -Werror=unused-packages" >> cabal.project + echo "package dataframe-json" >> cabal.project + echo " ghc-options: -Werror=unused-packages" >> cabal.project + echo "package dataframe-parquet" >> cabal.project + echo " ghc-options: -Werror=unused-packages" >> cabal.project + echo "package dataframe-parquet-th" >> cabal.project + echo " ghc-options: -Werror=unused-packages" >> cabal.project + echo "package dataframe-th" >> cabal.project + echo " ghc-options: -Werror=unused-packages" >> cabal.project + echo "package dataframe-viz" >> cabal.project + echo " ghc-options: -Werror=unused-packages" >> cabal.project + echo "package dataframe-learn" >> cabal.project + echo " ghc-options: -Werror=unused-packages" >> cabal.project + echo "package dataframe-lazy" >> cabal.project + echo " ghc-options: -Werror=unused-packages" >> cabal.project + echo "package dataframe-fastcsv" >> cabal.project + echo " ghc-options: -Werror=unused-packages" >> cabal.project echo "package dataframe" >> cabal.project echo " ghc-options: -Werror=incomplete-patterns -Werror=incomplete-uni-patterns" >> cabal.project + echo "package dataframe-core" >> cabal.project + echo " ghc-options: -Werror=incomplete-patterns -Werror=incomplete-uni-patterns" >> cabal.project + echo "package dataframe-parsing" >> cabal.project + echo " ghc-options: -Werror=incomplete-patterns -Werror=incomplete-uni-patterns" >> cabal.project + echo "package dataframe-operations" >> cabal.project + echo " ghc-options: -Werror=incomplete-patterns -Werror=incomplete-uni-patterns" >> cabal.project + echo "package dataframe-csv" >> cabal.project + echo " ghc-options: -Werror=incomplete-patterns -Werror=incomplete-uni-patterns" >> cabal.project + echo "package dataframe-csv-th" >> cabal.project + echo " ghc-options: -Werror=incomplete-patterns -Werror=incomplete-uni-patterns" >> cabal.project + echo "package dataframe-json" >> cabal.project + echo " ghc-options: -Werror=incomplete-patterns -Werror=incomplete-uni-patterns" >> cabal.project + echo "package dataframe-parquet" >> cabal.project + echo " ghc-options: -Werror=incomplete-patterns -Werror=incomplete-uni-patterns" >> cabal.project + echo "package dataframe-parquet-th" >> cabal.project + echo " ghc-options: -Werror=incomplete-patterns -Werror=incomplete-uni-patterns" >> cabal.project + echo "package dataframe-th" >> cabal.project + echo " ghc-options: -Werror=incomplete-patterns -Werror=incomplete-uni-patterns" >> cabal.project + echo "package dataframe-viz" >> cabal.project + echo " ghc-options: -Werror=incomplete-patterns -Werror=incomplete-uni-patterns" >> cabal.project + echo "package dataframe-learn" >> cabal.project + echo " ghc-options: -Werror=incomplete-patterns -Werror=incomplete-uni-patterns" >> cabal.project + echo "package dataframe-lazy" >> cabal.project + echo " ghc-options: -Werror=incomplete-patterns -Werror=incomplete-uni-patterns" >> cabal.project + echo "package dataframe-fastcsv" >> cabal.project + echo " ghc-options: -Werror=incomplete-patterns -Werror=incomplete-uni-patterns" >> cabal.project cat >> cabal.project < network-uri -> parsec chain. - $HCPKG list --simple-output --names-only | perl -ne 'for (split /\s+/) { print "constraints: any.$_ installed\n" unless /^(text|parsec|dataframe|dataframe-(core|parsing|operations|csv|csv-th|json|parquet|parquet-th|th|viz|learn|lazy|fastcsv))$/; }' >> cabal.project.local + $HCPKG list --simple-output --names-only | perl -ne 'for (split /\s+/) { print "constraints: any.$_ installed\n" unless /^(dataframe|dataframe-core|dataframe-csv|dataframe-csv-th|dataframe-fastcsv|dataframe-json|dataframe-lazy|dataframe-learn|dataframe-operations|dataframe-parquet|dataframe-parquet-th|dataframe-parsing|dataframe-th|dataframe-viz)$/; }' >> cabal.project.local cat cabal.project cat cabal.project.local - name: dump install plan @@ -275,7 +315,7 @@ jobs: $CABAL v2-build $ARG_COMPILER $ARG_TESTS $ARG_BENCH --dry-run all cabal-plan - name: restore cache - uses: actions/cache/restore@v4 + uses: actions/cache/restore@v6 with: key: ${{ runner.os }}-${{ matrix.compiler }}-${{ github.sha }} path: ~/.cabal/store @@ -297,9 +337,31 @@ jobs: run: | cd ${PKGDIR_dataframe} || false ${CABAL} -vnormal check - - name: cabal check (dataframe-fastcsv) - run: | - cd ${PKGDIR_fastcsv} || false + cd ${PKGDIR_dataframe_core} || false + ${CABAL} -vnormal check + cd ${PKGDIR_dataframe_parsing} || false + ${CABAL} -vnormal check + cd ${PKGDIR_dataframe_operations} || false + ${CABAL} -vnormal check + cd ${PKGDIR_dataframe_csv} || false + ${CABAL} -vnormal check + cd ${PKGDIR_dataframe_csv_th} || false + ${CABAL} -vnormal check + cd ${PKGDIR_dataframe_json} || false + ${CABAL} -vnormal check + cd ${PKGDIR_dataframe_parquet} || false + ${CABAL} -vnormal check + cd ${PKGDIR_dataframe_parquet_th} || false + ${CABAL} -vnormal check + cd ${PKGDIR_dataframe_th} || false + ${CABAL} -vnormal check + cd ${PKGDIR_dataframe_viz} || false + ${CABAL} -vnormal check + cd ${PKGDIR_dataframe_learn} || false + ${CABAL} -vnormal check + cd ${PKGDIR_dataframe_lazy} || false + ${CABAL} -vnormal check + cd ${PKGDIR_dataframe_fastcsv} || false ${CABAL} -vnormal check - name: haddock run: | @@ -310,7 +372,7 @@ jobs: $CABAL v2-build $ARG_COMPILER --disable-tests --disable-benchmarks all - name: save cache if: always() - uses: actions/cache/save@v4 + uses: actions/cache/save@v6 with: key: ${{ runner.os }}-${{ matrix.compiler }}-${{ github.sha }} path: ~/.cabal/store diff --git a/flake.lock b/flake.lock index 2b42c650..27b9a15e 100644 --- a/flake.lock +++ b/flake.lock @@ -18,6 +18,24 @@ "type": "github" } }, + "flake-utils_2": { + "inputs": { + "systems": "systems_2" + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, "granite": { "flake": false, "locked": { @@ -34,6 +52,38 @@ "type": "github" } }, + "haskell-ci": { + "flake": false, + "locked": { + "lastModified": 1782299874, + "narHash": "sha256-sQNh/Zd1S0fNe/ietbCvyqg+0/tglRyCmFPb3AD/5wc=", + "owner": "haskell-CI", + "repo": "haskell-ci", + "rev": "42a102e53821381a5f47bdeeadd775cf649c76df", + "type": "github" + }, + "original": { + "owner": "haskell-CI", + "repo": "haskell-ci", + "type": "github" + } + }, + "haskell-ci-flake": { + "inputs": { + "flake-utils": "flake-utils_2", + "haskell-ci": "haskell-ci", + "nixpkgs": "nixpkgs" + }, + "locked": { + "path": "nix/haskell-ci-flake", + "type": "path" + }, + "original": { + "path": "nix/haskell-ci-flake", + "type": "path" + }, + "parent": [] + }, "network-run": { "flake": false, "locked": { @@ -51,6 +101,22 @@ } }, "nixpkgs": { + "locked": { + "lastModified": 1783224372, + "narHash": "sha256-8i/87eeoqiGE4yOTjwSA3Eh/ziJRQEmd/unYU+K27sk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "d407951447dcd00442e97087bf374aad70c04cea", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { "locked": { "lastModified": 1780243769, "narHash": "sha256-x5UQuRsH3MqI0U9afaXSNqzTPSeZlRLvFAav2Ux1pNw=", @@ -86,8 +152,9 @@ "inputs": { "flake-utils": "flake-utils", "granite": "granite", + "haskell-ci-flake": "haskell-ci-flake", "network-run": "network-run", - "nixpkgs": "nixpkgs", + "nixpkgs": "nixpkgs_2", "pinch": "pinch" } }, @@ -105,6 +172,21 @@ "repo": "default", "type": "github" } + }, + "systems_2": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } } }, "root": "root", diff --git a/flake.nix b/flake.nix index c3d683a5..bfb5a3ad 100644 --- a/flake.nix +++ b/flake.nix @@ -16,6 +16,9 @@ url = "github:mchav/granite"; flake = false; }; + haskell-ci-flake = { + url = ./nix/haskell-ci-flake; + }; }; outputs = @@ -32,6 +35,7 @@ hsPkgs = pkgs.haskellPackages.extend ( self: super: { + haskell-ci = inputs.haskell-ci-flake.packages.${system}.default; network-run = self.callCabal2nix "network-run" inputs.network-run { }; dataframe-arrow = self.callCabal2nix "dataframe-arrow" ./dataframe-arrow { }; dataframe-core = self.callCabal2nix "dataframe-core" ./dataframe-core { }; @@ -114,6 +118,7 @@ ghc cabal-install haskell-language-server + haskell-ci ]; withHoogle = true; }; diff --git a/nix/haskell-ci-flake/flake.lock b/nix/haskell-ci-flake/flake.lock new file mode 100644 index 00000000..27fc7fd6 --- /dev/null +++ b/nix/haskell-ci-flake/flake.lock @@ -0,0 +1,78 @@ +{ + "nodes": { + "flake-utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "haskell-ci": { + "flake": false, + "locked": { + "lastModified": 1782299874, + "narHash": "sha256-sQNh/Zd1S0fNe/ietbCvyqg+0/tglRyCmFPb3AD/5wc=", + "owner": "haskell-CI", + "repo": "haskell-ci", + "rev": "42a102e53821381a5f47bdeeadd775cf649c76df", + "type": "github" + }, + "original": { + "owner": "haskell-CI", + "repo": "haskell-ci", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1783224372, + "narHash": "sha256-8i/87eeoqiGE4yOTjwSA3Eh/ziJRQEmd/unYU+K27sk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "d407951447dcd00442e97087bf374aad70c04cea", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "flake-utils": "flake-utils", + "haskell-ci": "haskell-ci", + "nixpkgs": "nixpkgs" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/nix/haskell-ci-flake/flake.nix b/nix/haskell-ci-flake/flake.nix new file mode 100644 index 00000000..02b4d336 --- /dev/null +++ b/nix/haskell-ci-flake/flake.nix @@ -0,0 +1,44 @@ +{ + description = "Local haskell-ci flake to avoid cluttering main flake.nix"; + + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + flake-utils.url = "github:numtide/flake-utils"; + haskell-ci.url = "github:haskell-CI/haskell-ci"; + haskell-ci.flake = false; + }; + + outputs = + { + nixpkgs, + flake-utils, + haskell-ci, + ... + }: + flake-utils.lib.eachDefaultSystem ( + system: + let + pkgs = nixpkgs.legacyPackages.${system}; + hsPkgs = pkgs.haskellPackages.extend ( + self: super: { + haskell-ci = pkgs.haskell.lib.dontCheck ( + self.callCabal2nixWithOptions "haskell-ci" haskell-ci "--flag -ShellCheck" { + cabal-install-parsers = pkgs.haskell.lib.dontCheck ( + self.callCabal2nix "cabal-install-parsers" "${haskell-ci}/cabal-install-parsers" { + Cabal-syntax = pkgs.haskell.lib.dontCheck (self.callHackage "Cabal-syntax" "3.14.2.0" { }); + } + ); + Cabal-syntax = pkgs.haskell.lib.dontCheck (self.callHackage "Cabal-syntax" "3.14.2.0" { }); + optparse-applicative = self.callHackage "optparse-applicative" "0.19.0.0" { }; + } + ); + } + ); + in + { + packages = { + default = hsPkgs.haskell-ci; + }; + } + ); +} From 789fd161736fce7cf8fed5f44b769fba1647ea7c Mon Sep 17 00:00:00 2001 From: James Santucci Date: Mon, 6 Jul 2026 12:32:05 -0700 Subject: [PATCH 3/4] Pass format check --- dataframe-operations/src/DataFrame/Monad.hs | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/dataframe-operations/src/DataFrame/Monad.hs b/dataframe-operations/src/DataFrame/Monad.hs index 52f455c5..c047c16f 100644 --- a/dataframe-operations/src/DataFrame/Monad.hs +++ b/dataframe-operations/src/DataFrame/Monad.hs @@ -114,7 +114,7 @@ instance Functor Pipeline where fmap f (Pipeline g) = Pipeline $ \n -> let (n', w, a) = g n in (n', w, f a) instance Applicative Pipeline where - pure x = Pipeline (, [], x) + pure x = Pipeline (,[],x) Pipeline gf <*> Pipeline gx = Pipeline $ \n -> let (n1, w1, f) = gf n (n2, w2, x) = gx n1 @@ -128,7 +128,7 @@ instance Monad Pipeline where -- | Derive a column under an explicit name, returning a reference to it. letAs :: (Columnable a) => T.Text -> Expr a -> Pipeline (Expr a) -letAs nm e = Pipeline (, [(nm, UExpr e)], Col nm) +letAs nm e = Pipeline (,[(nm, UExpr e)],Col nm) -- | Derive a column under a fresh generated name. letExpr :: (Columnable a) => Expr a -> Pipeline (Expr a) @@ -138,8 +138,11 @@ letExpr e = Pipeline $ \n -> instance Show (Pipeline (Expr a)) where show p = let (_, steps, res) = unPipeline p 0 - in concatMap (\(nm, UExpr e) -> T.unpack nm ++ " = " ++ prettyPrint e ++ "\n") steps - ++ "return " ++ prettyPrint res + in concatMap + (\(nm, UExpr e) -> T.unpack nm ++ " = " ++ prettyPrint e ++ "\n") + steps + ++ "return " + ++ prettyPrint res -- | Number of column derivations the pipeline performs. pipelineSteps :: Pipeline a -> Int @@ -151,7 +154,8 @@ toFrameM p = let (_, steps, res) = unPipeline p 0 in mapM_ (\(nm, UExpr e) -> void (deriveM nm e)) steps >> pure res --- | Run a pipeline over a frame: derive its columns and return the result --- expression (a reference to the final column) and the resulting frame. +{- | Run a pipeline over a frame: derive its columns and return the result +expression (a reference to the final column) and the resulting frame. +-} runPipeline :: DataFrame -> Pipeline (Expr a) -> (Expr a, DataFrame) runPipeline df = runFrameM df . toFrameM From 46c7aaf021b9e8eb25d4648b4013180bb00337b6 Mon Sep 17 00:00:00 2001 From: James Santucci Date: Mon, 6 Jul 2026 12:57:24 -0700 Subject: [PATCH 4/4] Include expr-serializer in cabal.project.ci --- .github/workflows/haskell-ci.yml | 14 +++++++++++++- cabal.project.ci | 1 + 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/.github/workflows/haskell-ci.yml b/.github/workflows/haskell-ci.yml index 8dd04afe..edb22fe6 100644 --- a/.github/workflows/haskell-ci.yml +++ b/.github/workflows/haskell-ci.yml @@ -153,6 +153,7 @@ jobs: touch cabal.project echo "packages: $GITHUB_WORKSPACE/source/." >> cabal.project echo "packages: $GITHUB_WORKSPACE/source/dataframe-core" >> cabal.project + echo "packages: $GITHUB_WORKSPACE/source/dataframe-expr-serializer" >> cabal.project echo "packages: $GITHUB_WORKSPACE/source/dataframe-parsing" >> cabal.project echo "packages: $GITHUB_WORKSPACE/source/dataframe-operations" >> cabal.project echo "packages: $GITHUB_WORKSPACE/source/dataframe-csv" >> cabal.project @@ -180,6 +181,8 @@ jobs: echo "PKGDIR_dataframe=${PKGDIR_dataframe}" >> "$GITHUB_ENV" PKGDIR_dataframe_core="$(find "$GITHUB_WORKSPACE/unpacked" -maxdepth 1 -type d -regex '.*/dataframe-core-[0-9.]*')" echo "PKGDIR_dataframe_core=${PKGDIR_dataframe_core}" >> "$GITHUB_ENV" + PKGDIR_dataframe_expr_serializer="$(find "$GITHUB_WORKSPACE/unpacked" -maxdepth 1 -type d -regex '.*/dataframe-expr-serializer-[0-9.]*')" + echo "PKGDIR_dataframe_expr_serializer=${PKGDIR_dataframe_expr_serializer}" >> "$GITHUB_ENV" PKGDIR_dataframe_parsing="$(find "$GITHUB_WORKSPACE/unpacked" -maxdepth 1 -type d -regex '.*/dataframe-parsing-[0-9.]*')" echo "PKGDIR_dataframe_parsing=${PKGDIR_dataframe_parsing}" >> "$GITHUB_ENV" PKGDIR_dataframe_operations="$(find "$GITHUB_WORKSPACE/unpacked" -maxdepth 1 -type d -regex '.*/dataframe-operations-[0-9.]*')" @@ -209,6 +212,7 @@ jobs: touch cabal.project.local echo "packages: ${PKGDIR_dataframe}" >> cabal.project echo "packages: ${PKGDIR_dataframe_core}" >> cabal.project + echo "packages: ${PKGDIR_dataframe_expr_serializer}" >> cabal.project echo "packages: ${PKGDIR_dataframe_parsing}" >> cabal.project echo "packages: ${PKGDIR_dataframe_operations}" >> cabal.project echo "packages: ${PKGDIR_dataframe_csv}" >> cabal.project @@ -225,6 +229,8 @@ jobs: echo " ghc-options: -Werror=missing-methods -Werror=missing-fields" >> cabal.project echo "package dataframe-core" >> cabal.project echo " ghc-options: -Werror=missing-methods -Werror=missing-fields" >> cabal.project + echo "package dataframe-expr-serializer" >> cabal.project + echo " ghc-options: -Werror=missing-methods -Werror=missing-fields" >> cabal.project echo "package dataframe-parsing" >> cabal.project echo " ghc-options: -Werror=missing-methods -Werror=missing-fields" >> cabal.project echo "package dataframe-operations" >> cabal.project @@ -253,6 +259,8 @@ jobs: echo " ghc-options: -Werror=unused-packages" >> cabal.project echo "package dataframe-core" >> cabal.project echo " ghc-options: -Werror=unused-packages" >> cabal.project + echo "package dataframe-expr-serializer" >> cabal.project + echo " ghc-options: -Werror=unused-packages" >> cabal.project echo "package dataframe-parsing" >> cabal.project echo " ghc-options: -Werror=unused-packages" >> cabal.project echo "package dataframe-operations" >> cabal.project @@ -281,6 +289,8 @@ jobs: echo " ghc-options: -Werror=incomplete-patterns -Werror=incomplete-uni-patterns" >> cabal.project echo "package dataframe-core" >> cabal.project echo " ghc-options: -Werror=incomplete-patterns -Werror=incomplete-uni-patterns" >> cabal.project + echo "package dataframe-expr-serializer" >> cabal.project + echo " ghc-options: -Werror=incomplete-patterns -Werror=incomplete-uni-patterns" >> cabal.project echo "package dataframe-parsing" >> cabal.project echo " ghc-options: -Werror=incomplete-patterns -Werror=incomplete-uni-patterns" >> cabal.project echo "package dataframe-operations" >> cabal.project @@ -307,7 +317,7 @@ jobs: echo " ghc-options: -Werror=incomplete-patterns -Werror=incomplete-uni-patterns" >> cabal.project cat >> cabal.project <> cabal.project.local + $HCPKG list --simple-output --names-only | perl -ne 'for (split /\s+/) { print "constraints: any.$_ installed\n" unless /^(dataframe|dataframe-core|dataframe-csv|dataframe-csv-th|dataframe-expr-serializer|dataframe-fastcsv|dataframe-json|dataframe-lazy|dataframe-learn|dataframe-operations|dataframe-parquet|dataframe-parquet-th|dataframe-parsing|dataframe-th|dataframe-viz)$/; }' >> cabal.project.local cat cabal.project cat cabal.project.local - name: dump install plan @@ -339,6 +349,8 @@ jobs: ${CABAL} -vnormal check cd ${PKGDIR_dataframe_core} || false ${CABAL} -vnormal check + cd ${PKGDIR_dataframe_expr_serializer} || false + ${CABAL} -vnormal check cd ${PKGDIR_dataframe_parsing} || false ${CABAL} -vnormal check cd ${PKGDIR_dataframe_operations} || false diff --git a/cabal.project.ci b/cabal.project.ci index 43387fdd..2f9f1346 100644 --- a/cabal.project.ci +++ b/cabal.project.ci @@ -1,6 +1,7 @@ packages: . dataframe-core + dataframe-expr-serializer dataframe-parsing dataframe-operations dataframe-csv