Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
7155508
Update the README file
harendra-kumar Feb 20, 2026
049b549
Update cabal file, hide String, Uniq modules
harendra-kumar Feb 20, 2026
8cf4f79
Add flake.nix
harendra-kumar Feb 20, 2026
6d3f090
Replace Switch with Bool
harendra-kumar Feb 20, 2026
759c6e5
Break FileTest module and overhaul it
harendra-kumar Feb 20, 2026
6c3f271
Add the ability to pass FilePath in predicates
harendra-kumar Mar 4, 2026
9ecfa7e
Rename apply to testGeneral
harendra-kumar Mar 4, 2026
b2d1894
Rename predicate etc to withStatus etc.
harendra-kumar Mar 4, 2026
5eaac73
Swap the order of arguments in ComparedTo preds
harendra-kumar Mar 5, 2026
6797a1d
Fix posix isReadable, isWritable, isExecutable
harendra-kumar Mar 4, 2026
a8aafd3
Fix the predicates in the Windows module
harendra-kumar Mar 4, 2026
47c2497
Do not use the deprecated "isExisting" function
harendra-kumar Mar 5, 2026
72e0a15
Expose mode based access checks
harendra-kumar Mar 5, 2026
b0a1177
Expose some covenient size, time combinators
harendra-kumar Mar 6, 2026
11063b7
Use isWritableByMode in Rm implementation
harendra-kumar Mar 6, 2026
032d569
Make small documentation updates
harendra-kumar Mar 6, 2026
6ca2a54
Rename modifiedAfter/before to newerThan/olderThan
harendra-kumar Mar 6, 2026
ff02584
Add modifiedSinceLastAccess
harendra-kumar Mar 6, 2026
4761977
Add accessTime and metadataChangeTime
harendra-kumar Mar 6, 2026
61c383e
Implement sameFileAs
harendra-kumar Mar 6, 2026
3cc7bdc
Add isTerminalFd
harendra-kumar Mar 6, 2026
f26828e
Update .packcheck.ignore, add flake, remove stale entries
harendra-kumar Mar 6, 2026
6c85030
Remove GHC 8.6, 8.8 CIs
harendra-kumar Mar 6, 2026
8a3d576
fixup: .packcheck.ignore
harendra-kumar Mar 6, 2026
5ec5eb4
Add GHC 9.10, 9.12, 9.14 CIs
harendra-kumar Mar 6, 2026
e37fee3
Remove streamly master cabal project file
harendra-kumar Mar 6, 2026
a21f68f
Sync up github ci file with latest packcheck ci file
harendra-kumar Mar 6, 2026
796c274
Disable streamly master branch build
harendra-kumar Mar 6, 2026
8a723ae
fixup: github ci
harendra-kumar Mar 6, 2026
1b8b958
Update appveyor.yaml
harendra-kumar Mar 6, 2026
a4a0f80
fixup: github ci
harendra-kumar Mar 6, 2026
4751567
fixup: stack ghc version in github ci
harendra-kumar Mar 6, 2026
b6750e7
fixup: github ci, update docspec url
harendra-kumar Mar 6, 2026
4d9c604
Disable stack upgrade in appveyor.yaml
harendra-kumar Mar 6, 2026
77cb6e0
Disable hlint CI for now in github ci
harendra-kumar Mar 6, 2026
e54673f
fixup: github ci
harendra-kumar Mar 6, 2026
d4bc948
fixup: github ci
harendra-kumar Mar 8, 2026
54f8d77
fixup: appveyor ci
harendra-kumar Mar 8, 2026
91db631
fixup: appveyor sync with packcheck
harendra-kumar Mar 8, 2026
d126450
fixup: cleanup github ci config
harendra-kumar Mar 8, 2026
54f8378
fixup: appv
harendra-kumar Mar 8, 2026
f68bc50
fixup: sync github ci with streamly
harendra-kumar Mar 11, 2026
c98e19e
fixup: appveyor
harendra-kumar Mar 11, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
315 changes: 212 additions & 103 deletions .github/workflows/haskell.yml
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
# packcheck-0.6.0
# packcheck-0.7.1
# You can use any of the options supported by packcheck as environment
# variables here. See https://github.com/composewell/packcheck for all
# options and their explanation.

name: packcheck
name: tests

#-----------------------------------------------------------------------------
# Events on which the build should be triggered
Expand All @@ -15,160 +15,269 @@ on:
- master
pull_request:


#-----------------------------------------------------------------------------
# Build matrix
#-----------------------------------------------------------------------------

jobs:
build:
name: ${{ matrix.name }}
name: >-
${{ matrix.runner }}
${{ matrix.command }}
${{ matrix.ghc_version }}
${{ matrix.name }}
env:
# ------------------------------------------------------------------------
# Common options
# ------------------------------------------------------------------------
# GHC_OPTIONS: "-Werror"
CABAL_REINIT_CONFIG: y
LC_ALL: C.UTF-8

STACK_UPGRADE: "y"
# ------------------------------------------------------------------------
# What to build
# ------------------------------------------------------------------------
# DISABLE_TEST: "y"
# DISABLE_BENCH: "y"
# DISABLE_DOCS: "y"
# DISABLE_SDIST_BUILD: "y"
# DISABLE_SDIST_GIT_CHECK: "y"
# DISABLE_DIST_CHECKS: "y"

# ------------------------------------------------------------------------
# Selecting tool versions
# ------------------------------------------------------------------------
# For updating see: https://downloads.haskell.org/~ghcup/
GHCUP_VERSION: 0.1.50.2
GHCVER: ${{ matrix.ghc_version }}

# ------------------------------------------------------------------------
# stack options (if using stack builds)
# ------------------------------------------------------------------------
# Note requiring a specific version of stack using STACKVER may fail due to
# github API limit while checking and upgrading/downgrading to the specific
# version.
#STACKVER: "1.6.5"
#STACK_UPGRADE: "y"
STACK_YAML: "stack.yaml"

# ------------------------------------------------------------------------
# cabal options
# ------------------------------------------------------------------------
CABAL_CHECK_RELAX: y
CABAL_HACKAGE_MIRROR: hackage.haskell.org:http://hackage.fpcomplete.com

PACKCHECK_LOCAL_PATH: "./packcheck.sh"
# ------------------------------------------------------------------------
# Location of packcheck.sh (the shell script invoked to perform CI tests ).
# ------------------------------------------------------------------------
# You can either commit the packcheck.sh script at this path in your repo or
# you can use it by specifying the PACKCHECK_REPO_URL option below in which
# case it will be automatically copied from the packcheck repo to this path
# during CI tests. In any case it is finally invoked from this path.
PACKCHECK: "./packcheck.sh"
# If you have not committed packcheck.sh in your repo at PACKCHECK
# then it is automatically pulled from this URL.
PACKCHECK_GITHUB_URL: "https://raw.githubusercontent.com/composewell/packcheck"
PACKCHECK_GITHUB_COMMIT: "v0.6.0"
PACKCHECK_GITHUB_COMMIT: "3fe7607137c571fead0c77a3b2d2d333f7ef28e8"

BUILD: ${{ matrix.build }}
GHCVER: ${{ matrix.ghc_version }}
#RESOLVER: ${{ matrix.resolver }}
#CABAL_BUILD_OPTIONS: ${{ matrix.cabal_build_options }}
CABAL_PROJECT: ${{ matrix.cabal_project }}
#DISABLE_DOCS: ${{ matrix.disable_docs }}
#DISABLE_SDIST_BUILD: ${{ matrix.disable_sdist_build }}
#DISABLE_SDIST_BUILD: "y"
HLINT_OPTIONS: ${{ matrix.hlint_options }}
HLINT_TARGETS: ${{ matrix.hlint_targets }}
DOCTEST: ${{ matrix.doctest }}
# ------------------------------------------------------------------------
# Final build variables
# ------------------------------------------------------------------------
PACKCHECK_COMMAND: ${{ matrix.command }} ${{ matrix.pack_options }}

# ubuntu seems to have better support than debian on CI systems
runs-on: ${{ matrix.runner }}
#continue-on-error: ${{ matrix.ignore_error }}
strategy:
fail-fast: false
matrix:

# The order of jobs is important to optimize fail-fast.

# This section is to order the important jobs first especially for
# "fail-fast" so that these are the ones started first.
name:
- werror-fusion

# The name of the CI is built using the name and other info from CI,
# therefore, the "name" field can be same for all tests here.
#
# The reason we have an explicit "name" field here is to force
# an additional config instead of adding to an existing config
# while adding additional configs.
# Look at <https://docs.github.com/en/free-pro-team@latest/actions/reference/workflow-syntax-for-github-actions#jobsjob_idstrategymatrix>
# for more info about adding matrix elements.
# Adding any element to the list will increase the number of matrix
# elements proportional to the cross product.
include:

- name: 9.8.1-Werror
ghc_version: 9.8.1
build: cabal-v2
- name: ci
runner: ubuntu-latest
cabal-version: 3.10.1.0
cabal_project: cabal.project.d/master-Werror
command: cabal
ghc_version: head
# The URL may change, to find a working URL go to https://gitlab.haskell.org/ghc/ghc/-/jobs/
# Find a debian10/11/12 job, click on a passed/failed status, at the
# end of the output you will find the tar.xz name, put that tar
# name after "raw/", and put the job name after "job=".
# Also see https://github.com/mpickering/ghc-artefact-nix/blob/master/gitlab-artifact.nix
#
# May also use ghcup for installing ghc head version, use the
# version "LatestNightly", and the following config:
# ghcup config add-release-channel https://ghc.gitlab.haskell.org/ghcup-metadata/ghcup-nightlies-0.0.7.yaml
pack_options: >-
GHCUP_GHC_OPTIONS="-u https://gitlab.haskell.org/ghc/ghc/-/jobs/artifacts/master/raw/ghc-x86_64-linux-deb10-int_native-validate.tar.xz?job=x86_64-linux-deb10-int_native-validate"
CABAL_PROJECT=cabal.project.ghc-head
DISABLE_SDIST_BUILD="y"

- name: 9.6.3-macos
ghc_version: 9.6.3
build: cabal-v2
- name: ci
runner: ubuntu-latest
command: cabal
ghc_version: 9.14.1
#pack_options: >-
#CABAL_PROJECT=cabal.project.d/master

- name: ci
runner: macos-latest
cabal-version: 3.10.1.0
cabal_project: cabal.project.d/master
command: cabal
ghc_version: 9.12.2
#pack_options: >-
#CABAL_PROJECT=cabal.project.d/master

- name: 9.4.4
ghc_version: 9.4.4
build: cabal-v2
- name: werror-fusion
runner: ubuntu-latest
cabal-version: 3.8.1.0
cabal_project: cabal.project.d/master
command: cabal
ghc_version: 9.10.3
pack_options: >-
CABAL_BUILD_OPTIONS="--flag fusion-plugin"
CABAL_PROJECT=cabal.project.d/master-Werror

- name: 9.2.7+fusion-plugin
ghc_version: 9.2.7
build: cabal-v2
- name: ci
runner: ubuntu-latest
cabal-build-options: --flag fusion-plugin
cabal-version: 3.6
cabal_project: cabal.project.d/master
command: stack
ghc_version: 9.10.3
pack_options: >-
STACK_UPGRADE="y"
DISABLE_SDIST_BUILD="y"
#CABAL_PROJECT=cabal.project

- name: 9.0.2+doctest
ghc_version: 9.0.2
build: cabal-v2
- name: ci
runner: ubuntu-latest
cabal-version: 3.2
doctest: "y"
cabal_project: cabal.project.d/master
command: cabal
ghc_version: 9.8.4
#pack_options: >-
#CABAL_PROJECT=cabal.project.d/master

- name: 8.10.7+macOS
ghc_version: 8.10.7
build: cabal-v2
runner: macos-latest
cabal-version: 3.2
cabal_project: cabal.project.d/master
- name: ci
runner: ubuntu-latest
command: cabal
ghc_version: 9.6.3
#pack_options: >-
#CABAL_PROJECT=cabal.project.d/master

- name: 8.8.4
ghc_version: 8.8.4
build: cabal-v2
- name: ci
runner: ubuntu-latest
cabal-version: 3.2
cabal_project: cabal.project.d/master
command: cabal
ghc_version: 9.4.7
#pack_options: >-
#CABAL_PROJECT=cabal.project.d/master

- name: 8.6.5
ghc_version: 8.6.5
build: cabal-v2
- name: ci
runner: ubuntu-latest
cabal-version: 3.2
cabal_project: cabal.project.d/master
command: cabal
ghc_version: 9.2.8
#pack_options: >-
#CABAL_PROJECT=cabal.project.d/master

- name: hlint
- name: no-docs
runner: ubuntu-latest
command: cabal
ghc_version: 8.10.7
build: cabal-v2
hlint_options: "lint"
hlint_targets: "src test Benchmark"
pack_options: >-
DISABLE_DOCS="y"
#CABAL_PROJECT=cabal.project.d/master

- name: ci
runner: windows-latest
command: cabal
ghc_version: 9.10.3

- name: ci
runner: ubuntu-latest
cabal-version: 3.2
cabal_project: cabal.project.d/master
command: hlint
pack_options: >-
HLINT_VERSION=3.6.1
HLINT_OPTIONS="lint"
HLINT_TARGETS="src test Benchmark"
#CABAL_PROJECT=cabal.project.d/master

steps:
- uses: actions/checkout@v2
- name: docspec
runner: ubuntu-latest
command: cabal
ghc_version: 9.12.2
pack_options: >-
ENABLE_DOCSPEC="y"
DOCSPEC_URL=https://github.com/phadej/cabal-extras/releases/download/cabal-docspec-0.0.0.20250606/cabal-docspec-0.0.0.20250606-x86_64-linux.xz
DOCSPEC_OPTIONS="--timeout 60"
#CABAL_PROJECT=cabal.project.d/master

- uses: haskell/actions/setup@v1
with:
ghc-version: ${{ matrix.ghc_version }}
steps:
- uses: actions/checkout@v4

# See the "cabal path" output in the CI logs to tweak the cache locations
- uses: actions/cache@v4
name: Restore cache ~/.cabal, ~/.stack, .stack-work, ~/.ghc, ~/.local
name: Cache common directories (non-Windows)
if: runner.os != 'Windows'
with:
# ghcup: ~/.ghcup (macOS), /usr/local/.ghcup (Linux)
# cabal: ~/.local/bin, ~/.local/state/cabal, ~/.local/cache/cabal
path: |
/usr/local/.ghcup
~/.cabal
~/.stack
.stack-work
~/.ghc
~/.ghcup
~/.local
key: ${{ runner.os }}-${{ matrix.name }}
~/.stack
# Bump the key version to clear the cache
# Key is same as the CI name
key: ${{ matrix.runner }}-${{ matrix.command }}-${{ matrix.ghc_version }}-${{ matrix.name }}-v1

- uses: actions/cache@v4
name: Cache common directories (Windows)
if: runner.os == 'Windows'
with:
path: |
${{ env.APPDATA }}/local
C:/ghcup
C:/cabal
key: ${{ matrix.runner }}-${{ matrix.command }}-${{ matrix.ghc_version }}-${{ matrix.name }}-v1

- name: Download packcheck
# on windows-latest GitHub Actions defaults to PowerShell
shell: bash
run: |
# If a custom stack-yaml is specified, replace the default with that
if test -e "$STACK_YAML"; then rm -f stack.yaml && ln -sv $STACK_YAML stack.yaml; else true; fi
unset STACK_YAML

# Get packcheck if needed
CURL=$(which curl)
PACKCHECK_URL=${PACKCHECK_GITHUB_URL}/${PACKCHECK_GITHUB_COMMIT}/packcheck.sh
if test ! -e "$PACKCHECK_LOCAL_PATH"; then $CURL -sL -o "$PACKCHECK_LOCAL_PATH" $PACKCHECK_URL; fi;
chmod +x $PACKCHECK_LOCAL_PATH
if test ! -e "$PACKCHECK"
then
if test -z "$PACKCHECK_GITHUB_COMMIT"
then
die "PACKCHECK_GITHUB_COMMIT env var is not specified."
fi
PACKCHECK_URL=${PACKCHECK_GITHUB_URL}/${PACKCHECK_GITHUB_COMMIT}/packcheck.sh
curl --fail -sL -o "$PACKCHECK" $PACKCHECK_URL || exit 1
chmod +x $PACKCHECK
elif test ! -x "$PACKCHECK"
then
chmod +x $PACKCHECK
fi

- name: Run packcheck
# on windows-latest GitHub Actions defaults to PowerShell
shell: bash
run: |
if test -n "$DOCTEST"
then
mkdir -p $HOME/.cabal/bin
curl -sL https://github.com/phadej/cabal-extras/releases/download/cabal-docspec-0.0.0.20210111/cabal-docspec-0.0.0.20210111.xz > cabal-docspec.xz
echo '0829bd034fba901cbcfe491d98ed8b28fd54f9cb5c91fa8e1ac62dc4413c9562 cabal-docspec.xz' | sha256sum -c -
xz -d < cabal-docspec.xz > $HOME/.cabal/bin/cabal-docspec
rm -f cabal-docspec.xz
chmod a+x $HOME/.cabal/bin/cabal-docspec
cabal update
cabal build all --project-file cabal.project.d/master
$HOME/.cabal/bin/cabal-docspec --version
$HOME/.cabal/bin/cabal-docspec --timeout 60
else
bash -c "$PACKCHECK_LOCAL_PATH $BUILD"
fi
PATH_VAR=/sbin:/usr/sbin:/bin:/usr/bin
case "$(uname)" in
CYGWIN*|MINGW*|MSYS*)
PATH_VAR="$PATH_VAR:/c/Program Files/7-Zip:/mingw64/bin"
;;
esac
# Use "bash -c" instead of invoking directly to preserve quoted
# arguments in PACKCHECK_COMMAND e.g. DOCSPEC_OPTIONS="--timeout 60".
# Direct invocation would word-split on spaces inside quoted values.
echo "DEBUG: bash -c \"$PACKCHECK $PACKCHECK_COMMAND PATH=\\\"$PATH_VAR\\\"\""
bash -c "$PACKCHECK $PACKCHECK_COMMAND PATH=\"$PATH_VAR\""
7 changes: 4 additions & 3 deletions .packcheck.ignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,10 @@
stack.yaml
.github/workflows/haskell.yml
.gitignore
default.nix
hie.yaml
cabal.project.d/master
cabal.project.d/master-Werror
cabal.project.d/streamly-0.9.0
cabal.project.d/streamly-0.10.0
flake.lock
flake.nix
test/Main.hs
benchmark/Main.hs
Loading
Loading