Skip to content

Commit

Permalink
chore: remove Stack
Browse files Browse the repository at this point in the history
We can build without Stack and it feels nice to not be dependent on
another tool built on top of another tool etc.

Massage some versions of dependencies and some datetime formatting code
to make everything work with the versions of the dependencies installed.

Use `haskell-ci` to generate GitHub workflow that works with cabal.
  • Loading branch information
Rembane authored and Jassob committed Sep 27, 2023
1 parent 176c75c commit a5ba650
Show file tree
Hide file tree
Showing 9 changed files with 224 additions and 72 deletions.
4 changes: 0 additions & 4 deletions .dir-locals.el

This file was deleted.

189 changes: 189 additions & 0 deletions .github/workflows/haskell-ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,189 @@
# This GitHub workflow config has been generated by a script via
#
# haskell-ci 'github' 'mat-chalmers.cabal'
#
# To regenerate the script (for example after adjusting tested-with) run
#
# haskell-ci regenerate
#
# For more information, see https://github.com/haskell-CI/haskell-ci
#
# version: 0.16.6
#
# REGENDATA ("0.16.6",["github","mat-chalmers.cabal"])
#
name: Haskell-CI
on:
- push
- pull_request
jobs:
linux:
name: Haskell-CI - Linux - ${{ matrix.compiler }}
runs-on: ubuntu-20.04
timeout-minutes:
60
container:
image: buildpack-deps:bionic
continue-on-error: ${{ matrix.allow-failure }}
strategy:
matrix:
include:
- compiler: ghc-9.4.5
compilerKind: ghc
compilerVersion: 9.4.5
setup-method: ghcup
allow-failure: false
fail-fast: false
steps:
- name: apt
run: |
apt-get update
apt-get install -y --no-install-recommends gnupg ca-certificates dirmngr curl git software-properties-common libtinfo5
mkdir -p "$HOME/.ghcup/bin"
curl -sL https://downloads.haskell.org/ghcup/0.1.19.2/x86_64-linux-ghcup-0.1.19.2 > "$HOME/.ghcup/bin/ghcup"
chmod a+x "$HOME/.ghcup/bin/ghcup"
"$HOME/.ghcup/bin/ghcup" install ghc "$HCVER" || (cat "$HOME"/.ghcup/logs/*.* && false)
"$HOME/.ghcup/bin/ghcup" install cabal 3.10.1.0 || (cat "$HOME"/.ghcup/logs/*.* && false)
env:
HCKIND: ${{ matrix.compilerKind }}
HCNAME: ${{ matrix.compiler }}
HCVER: ${{ matrix.compilerVersion }}
- name: Set PATH and environment variables
run: |
echo "$HOME/.cabal/bin" >> $GITHUB_PATH
echo "LANG=C.UTF-8" >> "$GITHUB_ENV"
echo "CABAL_DIR=$HOME/.cabal" >> "$GITHUB_ENV"
echo "CABAL_CONFIG=$HOME/.cabal/config" >> "$GITHUB_ENV"
HCDIR=/opt/$HCKIND/$HCVER
HC=$HOME/.ghcup/bin/$HCKIND-$HCVER
echo "HC=$HC" >> "$GITHUB_ENV"
echo "HCPKG=$HOME/.ghcup/bin/$HCKIND-pkg-$HCVER" >> "$GITHUB_ENV"
echo "HADDOCK=$HOME/.ghcup/bin/haddock-$HCVER" >> "$GITHUB_ENV"
echo "CABAL=$HOME/.ghcup/bin/cabal-3.10.1.0 -vnormal+nowrap" >> "$GITHUB_ENV"
HCNUMVER=$(${HC} --numeric-version|perl -ne '/^(\d+)\.(\d+)\.(\d+)(\.(\d+))?$/; print(10000 * $1 + 100 * $2 + ($3 == 0 ? $5 != 1 : $3))')
echo "HCNUMVER=$HCNUMVER" >> "$GITHUB_ENV"
echo "ARG_TESTS=--enable-tests" >> "$GITHUB_ENV"
echo "ARG_BENCH=--enable-benchmarks" >> "$GITHUB_ENV"
echo "HEADHACKAGE=false" >> "$GITHUB_ENV"
echo "ARG_COMPILER=--$HCKIND --with-compiler=$HC" >> "$GITHUB_ENV"
echo "GHCJSARITH=0" >> "$GITHUB_ENV"
env:
HCKIND: ${{ matrix.compilerKind }}
HCNAME: ${{ matrix.compiler }}
HCVER: ${{ matrix.compilerVersion }}
- name: env
run: |
env
- name: write cabal config
run: |
mkdir -p $CABAL_DIR
cat >> $CABAL_CONFIG <<EOF
remote-build-reporting: anonymous
write-ghc-environment-files: never
remote-repo-cache: $CABAL_DIR/packages
logs-dir: $CABAL_DIR/logs
world-file: $CABAL_DIR/world
extra-prog-path: $CABAL_DIR/bin
symlink-bindir: $CABAL_DIR/bin
installdir: $CABAL_DIR/bin
build-summary: $CABAL_DIR/logs/build.log
store-dir: $CABAL_DIR/store
install-dirs user
prefix: $CABAL_DIR
repository hackage.haskell.org
url: http://hackage.haskell.org/
EOF
cat >> $CABAL_CONFIG <<EOF
program-default-options
ghc-options: $GHCJOBS +RTS -M3G -RTS
EOF
cat $CABAL_CONFIG
- name: versions
run: |
$HC --version || true
$HC --print-project-git-commit-id || true
$CABAL --version || true
- name: update cabal index
run: |
$CABAL v2-update -v
- name: install cabal-plan
run: |
mkdir -p $HOME/.cabal/bin
curl -sL https://github.com/haskell-hvr/cabal-plan/releases/download/v0.7.3.0/cabal-plan-0.7.3.0-x86_64-linux.xz > cabal-plan.xz
echo 'f62ccb2971567a5f638f2005ad3173dba14693a45154c1508645c52289714cb2 cabal-plan.xz' | sha256sum -c -
xz -d < cabal-plan.xz > $HOME/.cabal/bin/cabal-plan
rm -f cabal-plan.xz
chmod a+x $HOME/.cabal/bin/cabal-plan
cabal-plan --version
- name: checkout
uses: actions/checkout@v3
with:
path: source
- name: initial cabal.project for sdist
run: |
touch cabal.project
echo "packages: $GITHUB_WORKSPACE/source/." >> cabal.project
cat cabal.project
- name: sdist
run: |
mkdir -p sdist
$CABAL sdist all --output-dir $GITHUB_WORKSPACE/sdist
- name: unpack
run: |
mkdir -p unpacked
find sdist -maxdepth 1 -type f -name '*.tar.gz' -exec tar -C $GITHUB_WORKSPACE/unpacked -xzvf {} \;
- name: generate cabal.project
run: |
PKGDIR_mat_chalmers="$(find "$GITHUB_WORKSPACE/unpacked" -maxdepth 1 -type d -regex '.*/mat-chalmers-[0-9.]*')"
echo "PKGDIR_mat_chalmers=${PKGDIR_mat_chalmers}" >> "$GITHUB_ENV"
rm -f cabal.project cabal.project.local
touch cabal.project
touch cabal.project.local
echo "packages: ${PKGDIR_mat_chalmers}" >> cabal.project
echo "package mat-chalmers" >> cabal.project
echo " ghc-options: -Werror=missing-methods" >> cabal.project
cat >> cabal.project <<EOF
EOF
$HCPKG list --simple-output --names-only | perl -ne 'for (split /\s+/) { print "constraints: $_ installed\n" unless /^(mat-chalmers)$/; }' >> cabal.project.local
cat cabal.project
cat cabal.project.local
- name: dump install plan
run: |
$CABAL v2-build $ARG_COMPILER $ARG_TESTS $ARG_BENCH --dry-run all
cabal-plan
- name: restore cache
uses: actions/cache/restore@v3
with:
key: ${{ runner.os }}-${{ matrix.compiler }}-${{ github.sha }}
path: ~/.cabal/store
restore-keys: ${{ runner.os }}-${{ matrix.compiler }}-
- name: install dependencies
run: |
$CABAL v2-build $ARG_COMPILER --disable-tests --disable-benchmarks --dependencies-only -j2 all
$CABAL v2-build $ARG_COMPILER $ARG_TESTS $ARG_BENCH --dependencies-only -j2 all
- name: build w/o tests
run: |
$CABAL v2-build $ARG_COMPILER --disable-tests --disable-benchmarks all
- name: build
run: |
$CABAL v2-build $ARG_COMPILER $ARG_TESTS $ARG_BENCH all --write-ghc-environment-files=always
- name: tests
run: |
$CABAL v2-test $ARG_COMPILER $ARG_TESTS $ARG_BENCH all --test-show-details=direct
- name: cabal check
run: |
cd ${PKGDIR_mat_chalmers} || false
${CABAL} -vnormal check
- name: haddock
run: |
$CABAL v2-haddock --disable-documentation --haddock-all $ARG_COMPILER --with-haddock $HADDOCK $ARG_TESTS $ARG_BENCH all
- name: unconstrained build
run: |
rm -f cabal.project.local
$CABAL v2-build $ARG_COMPILER --disable-tests --disable-benchmarks all
- name: save cache
uses: actions/cache/save@v3
if: always()
with:
key: ${{ runner.os }}-${{ matrix.compiler }}-${{ github.sha }}
path: ~/.cabal/store
28 changes: 0 additions & 28 deletions .github/workflows/haskell.yml

This file was deleted.

1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,4 @@ cabal.sandbox.config
.*.swp
*.log
*.dump-hi
dist-newstyle/
10 changes: 5 additions & 5 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
FROM haskell:8.10
FROM haskell:9.4.5
RUN mkdir -p /app/user
WORKDIR /app/user
COPY stack.yaml *.cabal ./
COPY *.cabal ./

RUN export PATH=$(stack path --local-bin):$PATH
RUN stack build --dependencies-only
RUN cabal v2-update
RUN cabal v2-build --dependencies-only

COPY . /app/user
RUN stack install
RUN cabal v2-install

ENV LANG C.UTF-8
CMD /root/.local/bin/mat-chalmers
Expand Down
3 changes: 1 addition & 2 deletions app/Main.hs
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ import Data.IORef ( IORef
)
import Data.Time.Format ( defaultTimeLocale
, formatTime
, iso8601DateFormat
)
import Lens.Micro.Platform ( set
, view
Expand Down Expand Up @@ -97,7 +96,7 @@ main = (reifyConfig . getOpt Permute opts <$> getArgs) >>= \case
(runReaderT (refresh viewRef upd) (ClientContext cfg mgr))
( logCallback
. renderWithTimestamp
(formatTime defaultTimeLocale (iso8601DateFormat (Just "%H:%M:%S")))
(formatTime defaultTimeLocale "T%H:%M:%S")
id
)

Expand Down
49 changes: 26 additions & 23 deletions mat-chalmers.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ maintainer: [email protected]
category: Web
build-type: Simple
cabal-version: >=1.10
Tested-With: GHC ==9.4.5
data-files:
static/style.css
static/icon.png
Expand All @@ -28,56 +29,58 @@ library
, Config
, Util

build-depends: aeson
, attoparsec
, base >=4.7
, css-text
, exceptions == 0.10.4
-- Prefer to put the dependencies with versions here, and the ones without
-- versions in the `build-depends` blocks below.
build-depends: aeson >= 2.1.2.1 && < 3.0
, attoparsec >= 0.14.4 && < 0.15
, base >=4.17.1.0 && < 5.0
, bytestring >=0.11 && < 0.12
, css-text >= 0.1.3.0 && < 0.2
, exceptions >= 0.10.5 && < 0.11.0
, heredoc == 0.2.0.0
, http-client
, http-client-tls == 0.3.5.3
, logging-effect == 1.3.12
, microlens-platform
, http-client >= 0.7.14 && < 0.8
, http-client-tls >= 0.3.6.1 && <= 0.4
, logging-effect >= 1.4.0 && <= 2.0
, microlens-platform >= 0.4.3.3 && < 0.5
, lucid >= 2
, mtl == 2.2.2
, old-locale == 1.0.0.7
, prettyprinter == 1.7.1
, safe == 0.3.19
, tagsoup == 0.14.8
, text == 1.2.4.1
, bytestring == 0.10.12.0
, file-embed
, thyme
, text >= 2.0 && <= 3.0
, file-embed >= 0.0.15.0 && < 1.0
, thyme >= 0.4 && <= 0.5
, word8 == 0.1.3

executable mat-chalmers
main-is: Main.hs
ghc-options: -threaded -rtsopts -with-rtsopts=-N -Wall -Werror -Wunused-binds -Wunused-imports -Wcompat
hs-source-dirs: app
build-depends: mat-chalmers
, base >= 4.7
, base
, bytestring
, file-embed
, http-client-tls == 0.3.5.3
, http-client-tls
, microlens-platform
, logging-effect
, mtl
, scotty
, time == 1.9.3
, wai-extra
, scotty >= 0.12.1 && < 0.13
, time >= 1.12 && < 1.13
, wai-extra >= 3.1.13.0 && < 4.0
, wai-middleware-static-embedded == 0.1.0.0
, async >= 2.1.1
, async >= 2.2.4 && <= 3.0
default-language: Haskell2010

Test-Suite test-mat
type: exitcode-stdio-1.0
main-is: Main.hs
hs-source-dirs: test
default-language: Haskell2010
build-depends: base >= 4.7
build-depends: base
, bytestring
, mat-chalmers
, hspec == 2.7.10
, HUnit == 1.6.2.0
, hspec >= 2.10.10 && < 3.0
, HUnit >= 1.6.2.0 && < 2.0
, text
, thyme == 0.3.5.5
, thyme
4 changes: 2 additions & 2 deletions src/View.hs
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,13 @@ where
import Data.FileEmbed
import qualified Data.Text.Lazy as T
import qualified Data.Text.Lazy.Builder as T
import Data.Thyme
import Data.Thyme ( defaultTimeLocale
, formatTime )
import Lens.Micro.Platform ( (&)
, (%~)
, both
)
import Lucid
import System.Locale ( defaultTimeLocale )
import qualified Text.CSS.Parse as CSS
import qualified Text.CSS.Render as CSS

Expand Down
8 changes: 0 additions & 8 deletions stack.yaml

This file was deleted.

0 comments on commit a5ba650

Please sign in to comment.