Déployer un blog avec Hakyll, Gitlab-ci, Nix

Voir aussi : vidéo peertube - vidéo youtube - dépôt git

Gestion de code source

Intégration continue, déploiement

Exemple de blog avec Hakyll

Hakyll : générateur de blog statique

-- ...

main :: IO ()
main = hakyllWith config $ do

  -- ...

  match "posts/*/*-README.md" $ do
    route $ setExtension "html"
    compile $ pandocCompiler
      >>= loadAndApplyTemplate "templates/default.html" postCtx
      >>= relativizeUrls

  match "index.html" $ do
    route idRoute
    compile $ do
      posts <- recentFirst =<< loadAll "posts/*/*"
      let indexCtx =
            listField "posts" postCtx (return posts) `mappend`
            defaultContext
      getResourceBody
        >>= applyAsTemplate indexCtx
        >>= loadAndApplyTemplate "templates/default.html" indexCtx
        >>= relativizeUrls
name: site
version: 0.1
build-type: Simple
license: MIT
cabal-version: >= 1.10

executable site
  main-is: site.hs
  build-depends: base, hakyll
  ghc-options: -threaded
  default-language: Haskell2010

Exemple de déploiement avec Gitlab CI et Stack

image: haskell:8

pages:
  cache:
    paths:
      - .stack

  before_script:
    - apt-get update -yq   
    - apt-get install -yq unzip
    - export STACK_ROOT=`pwd`/.stack
    - stack install --only-dependencies
    - stack build

  script:
    - stack exec site build

  artifacts:
    paths:
      - public

  only:
    - master

Exemple de déploiement avec Gitlab CI et Nix

image: nixos/nix

pages:
  script:
    - nix-channel --add https://nixos.org/channels/nixos-18.03 nixpkgs
    - nix-channel --update
    - nix-env -iA nixpkgs.cabal-install
    - nix-shell --run "cabal --http-transport=plain-http run site build"

  artifacts:
    paths:
      - public

  only:
    - master