packages feed

updo-1.0.0: text-templates/dhall2cabal.dhall

let TYPES = ../types.dhall

let length = https://prelude.dhall-lang.org/List/length

let show = https://prelude.dhall-lang.org/Natural/show

in  \(stackage-resolver : Text) ->
    \(pkg-set : TYPES.PkgSet) ->
    \ ( pkg-config
      : { constraints : List TYPES.PkgVer
        , source-pkgs :
            { deps-external : List TYPES.SourceRepoPkg
            , deps-internal : List TYPES.SourceRepoPkg
            , forks-external : List TYPES.SourceRepoPkg
            , forks-internal : List TYPES.SourceRepoPkg
            }
        }
      ) ->
      let deps-external = pkg-config.source-pkgs.deps-external

      let deps-internal = pkg-config.source-pkgs.deps-internal

      let forks-external = pkg-config.source-pkgs.forks-external

      let forks-internal = pkg-config.source-pkgs.forks-internal

      let source-deps =
            deps-external # deps-internal # forks-external # forks-internal

      let count =
            \(xs : List TYPES.SourceRepoPkg) ->
              show (length TYPES.SourceRepoPkg xs)

      let countPkgs = \(xs : List Text) -> show (length Text xs)

      let pkgs =
            merge
              { AllPkgs = \(pkgs : List Text) -> pkgs
              , PkgUpgrade = \(pkgs : TYPES.PkgTodoList) -> pkgs.done
              }
              pkg-set

      let pkgs-comment =
            merge
              { AllPkgs =
                  \(pkgs : List Text) ->
                    "-- We have ${countPkgs pkgs} packages."
              , PkgUpgrade =
                  \(pkgs : TYPES.PkgTodoList) ->
                    "-- We have upgraded ${countPkgs
                                             pkgs.done} packages and have ${countPkgs
                                                                              pkgs.todo} yet to do."
              }
              pkg-set

      let cabal = ./cabal/package.dhall

      in  ''
          import: ./project-stackage/${stackage-resolver}.config

          ${pkgs-comment}
          ${cabal.packages pkgs}

          -- We have ${count source-deps} source packages listed in this order:
          --   * external ${count deps-external}
          --   * internal ${count deps-internal}
          --   * external forks ${count forks-external}
          --   * internal forks ${count forks-internal}

          -- Source Packages, external (3rd party).
          ${cabal.repo-items deps-external}

          -- Source Packages, internal to this organisation (private and public).
          ${cabal.repo-items deps-internal}

          -- Source Packages, external (3rd party) forks of other repositories.
          -- Can we help upstream?
          ${cabal.repo-items forks-external}

          -- Source Packages, internal forks of other repositories.
          -- Can we upstream and unfork?
          ${cabal.repo-items forks-internal}

          -- Constraints are equivalent to stack package-version extra dependencies.
          ${cabal.constraints pkg-config.constraints}
          ''