Federated forge server

[[ 🗃 ^rjQ3E vervis ]] :: [📥 Inbox] [📤 Outbox] [🐤 Followers] [🤝 Collaborators] [🛠 Commits]

Clone

HTTPS: git clone https://vervis.peers.community/repos/rjQ3E

SSH: git clone USERNAME@vervis.peers.community:rjQ3E

Branches

Tags

main ::

vervis.cabal

cabal-version:       2.2
name:                vervis
version:             0.2
synopsis:            Federated project hosting platform
description:
  Vervis a decentralized software project hosting web application, which
  federates using ActivityPub and ForgeFed.
  .
  Most of the source code is in the public domain using the CC0 public domain
  dedication, but the application as a whole has GPL dependencies, and is
  released under the AGPL 3 license.
homepage:            https://codeberg.org/ForgeFed/Vervis
bug-reports:         https://codeberg.org/ForgeFed/Vervis/issues
license:             AGPL-3.0-or-later
license-file:        COPYING.AGPL3
author:              Pere Lev
maintainer:          pere@towards.vision
copyright:           ♡ Copying is an act of love. Please copy, reuse and share.
category:            Development, Distribution, Git, Web
build-type:          Simple
extra-source-files:  API.md
                     AUTHORS.md
                     CHANGELOG.md
                     COPYING
                     FEDERATION.md
                     INSTALL.md
                     README.md

source-repository head
  type:                git
  location:            https://codeberg.org/ForgeFed/Vervis

flag dev
  description: Turn on development settings, like auto-reload templates.
  default:     False

flag library-only
  description: Build for use with "yesod devel"
  default:     False

library
  exposed-modules:
                       Vervis.Application
                       Vervis.Hook
  other-modules:
                       Network.Git.Transport.HTTP.Fetch.RefDiscovery
                       Network.Git.Transport.HTTP.Fetch.UploadRequest
                       Network.Git.Get
                       Network.Git.Put
                       Network.Git.Types
                       Data.Binary.Get.Local
                       Data.Binary.Put.Local

                       Control.Applicative.Local
                       --Control.Concurrent.ActorOld
                       Control.Concurrent.Actor
                       Control.Concurrent.Local
                       Control.Concurrent.ResultShare
                       Control.Concurrent.Return
                       Control.Monad.Trans.Except.Local
                       Crypto.ActorKey
                       Crypto.PubKey.Encoding
                       Crypto.PublicVerifKey
                       --Darcs.Local.Repository
                       Data.Slab
                       Data.Slab.Backend
                       Data.Slab.Simple
                       Data.Aeson.Encode.Pretty.ToEncoding
                       Data.Aeson.Local
                       Data.Attoparsec.ByteString.Local
                       Data.Binary.Local
                       -- Data.Bitraversable.Local
                       Data.ByteString.Char8.Local
                       Data.ByteString.Local
                       Data.CaseInsensitive.Local
                       Data.Char.Local
                       --Data.DList.Local
                       Data.Either.Local
                       Data.EventTime.Local
                       Data.F3
                       Data.Functor.Local
                       Data.Graph.DirectedAcyclic.View.Tree
                       Data.Graph.Inductive.Query.Cycle
                       Data.Graph.Inductive.Query.Layer
                       Data.Graph.Inductive.Query.Path
                       Data.Graph.Inductive.Query.TransRed
                       Data.HashMap.Lazy.Local
                       --Data.Hourglass.Local
                       Data.Int.Local
                       Data.KeyFile
                       Data.List.Local
                       Data.List.NonEmpty.Local
                       Data.Maybe.Local
                       Data.MediaType
                       Data.ObjId
                       Data.Paginate.Local
                       Data.Patch.Local
                       Data.Text.UTF8.Local
                       Data.Text.Lazy.UTF8.Local
                       Data.Time.Clock.Local
                       Data.Tree.Local
                       Data.Tuple.Local
                       Data.VersionControl
                       Database.Esqueleto.Local
                       Database.Persist.Box
                       Database.Persist.Box.Internal
                       Database.Persist.Box.Via
                       Database.Persist.Class.Local
                       Database.Persist.JSON
                       Database.Persist.Sql.Local
                       Database.Persist.Sqlite.Local
                       Database.Persist.Local
                       --Database.Persist.Local.Class.PersistEntityHierarchy
                       Database.Persist.Local.RecursionDoc
                       Development.Darcs
                       Development.Git
                       Development.PatchMediaType
                       Development.PatchMediaType.JSON
                       Development.PatchMediaType.Persist
                       --Diagrams.IntransitiveDAG
                       Formatting.CaseInsensitive
                       Language.Haskell.TH.Quote.Local
                       Network.FedURI
                       Network.HTTP.Client.Conduit.ActivityPub
                       Network.HTTP.Client.Conduit.F3
                       Network.HTTP.Digest
                       Network.SSH.Local
                       System.Process.Typed.Local
                       Text.Blaze.Local
                       Text.Display
                       Text.Email.Local
                       Text.FilePath.Local
                       Text.Jasmine.Local
                       Web.ActivityAccess
                       Web.ActivityPub
                       Web.ActivityPub.Internal
                       Web.Actor
                       Web.Actor.Deliver
                       Web.Actor.Persist
                       -- Web.Capability
                       Web.Text
                       Web.Hashids.Local
                       Web.PathPieces.Local
                       Yesod.ActivityPub
                       Yesod.Actor
                       Yesod.Auth.Unverified
                       Yesod.Auth.Unverified.Creds
                       Yesod.Auth.Unverified.Internal
                       Yesod.FedURI
                       Yesod.Form.Local
                       Yesod.Hashids
                       Yesod.MonadSite
                       Yesod.Paginate.Local
                       Yesod.Persist.Local
                       Yesod.RenderSource
                       Yesod.SessionEntity

                       Vervis.Access
                       Vervis.ActivityPub
                       Vervis.Actor
                       Vervis.Actor2
                       Vervis.Actor.Common
                       Vervis.Actor.Deck
                       Vervis.Actor.Factory
                       Vervis.Actor.Group
                       Vervis.Actor.Loom
                       Vervis.Actor.Person
                       Vervis.Actor.Person.Client
                       Vervis.Actor.Project
                       Vervis.Actor.Repo
                       Vervis.API
                       Vervis.Avatar
                       Vervis.BinaryBody
                       Vervis.Changes
                       Vervis.ChangeFeed
                       --Vervis.Class.Actor
                       Vervis.Client
                       Vervis.Cloth
                       --Vervis.Colour
                       --Vervis.Content
                       Vervis.Darcs

                       Vervis.Data.Actor
                       Vervis.Data.Collab
                       Vervis.Data.Discussion
                       Vervis.Data.Follow
                       Vervis.Data.Ticket

                       --Vervis.Federation
                       Vervis.Federation.Auth
                       Vervis.Federation.Discussion
                       Vervis.Federation.Offer
                       --Vervis.Federation.Push
                       Vervis.Federation.Ticket
                       Vervis.FedURI
                       Vervis.Fetch
                       Vervis.Field.Key
                       Vervis.Field.Person
                       --Vervis.Field.Project
                       --Vervis.Field.Repo
                       --Vervis.Field.Role
                       --Vervis.Field.Sharer
                       --Vervis.Field.Ticket
                       -- Vervis.Field.Workflow
                       Vervis.Form.Discussion
                       --Vervis.Form.Group
                       Vervis.Form.Key
                       Vervis.Form.Repo
                       --Vervis.Form.Role
                       Vervis.Form.Ticket
                       Vervis.Form.Tracker
                       -- Vervis.Form.Workflow
                       Vervis.Formatting
                       Vervis.Foundation
                       Vervis.Git
                       Vervis.GraphProxy
                       Vervis.Handler.Client
                       Vervis.Handler.Cloth
                       Vervis.Handler.Common
                       Vervis.Handler.Deck
                       Vervis.Handler.Factory
                       -- Vervis.Handler.Git
                       Vervis.Handler.Group
                       --Vervis.Handler.Inbox
                       Vervis.Handler.Key
                       Vervis.Handler.Loom
                       Vervis.Handler.Person
                       Vervis.Handler.Repo
                       --Vervis.Handler.Role
                       Vervis.Handler.Project
                       --Vervis.Handler.Sharer
                       Vervis.Handler.Ticket
                       -- Vervis.Handler.Wiki
                       -- Vervis.Handler.Workflow
                       Vervis.KeyFile
                       Vervis.Migration
                       Vervis.Migration.Entities
                       Vervis.Migration.Model2016
                       Vervis.Migration.Model2018
                       Vervis.Migration.Model2019
                       Vervis.Migration.Model2020
                       Vervis.Migration.Model2022
                       Vervis.Migration.Model2023
                       Vervis.Migration.Model2024
                       Vervis.Migration.TH
                       Vervis.Model
                       Vervis.Model.Entity
                       Vervis.Model.Group
                       Vervis.Model.Ident
                       Vervis.Model.Role
                       Vervis.Model.Ticket
                       Vervis.Model.TH
                       Vervis.Model.Workflow
                       Vervis.Paginate
                       Vervis.Palette
                       Vervis.Path

                       Vervis.Persist.Actor
                       Vervis.Persist.Collab
                       Vervis.Persist.Discussion
                       Vervis.Persist.Follow
                       Vervis.Persist.Ticket

                       Vervis.Readme
                       Vervis.Recipient
                       Vervis.RemoteActorStore
                       Vervis.RemoteActorStore.Types
                       --Vervis.Repo
                       Vervis.Secure

                       Vervis.Serve.Collab

                       Vervis.Settings
                       Vervis.Settings.StaticFiles
                       Vervis.Settings.TH
                       Vervis.SourceTree
                       Vervis.Ssh
                       Vervis.Style
                       Vervis.Ticket
                       Vervis.TicketFilter
                       Vervis.Time

                       Vervis.Web.Actor
                       Vervis.Web.Collab
                       Vervis.Web.Darcs
                       --Vervis.Web.Delivery
                       Vervis.Web.Discussion
                       Vervis.Web.Git
                       Vervis.Web.Repo

                       Vervis.Widget
                       Vervis.Widget.Discussion
                       Vervis.Widget.Person
                       Vervis.Widget.Repo
                       --Vervis.Widget.Role
                       Vervis.Widget.Ticket
                       Vervis.Widget.Tracker
                       -- Vervis.Widget.Workflow
                       -- Vervis.Wiki
                       --Vervis.WorkItem

  default-extensions:  TemplateHaskell
                       QuasiQuotes
                       OverloadedStrings
                       MultiParamTypeClasses
                       TypeFamilies
                       GADTs
                       GeneralizedNewtypeDeriving
                       FlexibleContexts
                       FlexibleInstances
                       EmptyDataDecls
                       NoMonomorphismRestriction
                       DeriveDataTypeable
                       ViewPatterns
                       TupleSections
                       RecordWildCards
                       LambdaCase
                       DerivingStrategies
                       StandaloneDeriving
                       DataKinds

  build-depends:       aeson
                       -- For activity JSOn display in /inbox test page
                     , aeson-pretty
                       -- For rethrowing in Control.Concurrent.Actor
                     , annotated-exception
                       -- for encoding and decoding of crypto public keys
                     , asn1-encoding
                     , asn1-types
                       -- for parsing commands sent over SSH and Darcs patch
                       -- metadata
                     , attoparsec
                       -- For LocalActorBy and LocalStageBy
                     , barbies
                     , base
                       -- for hex display of Darcs patch hashes
                     , base16-bytestring
                     , base58-bytestring
                     , base64-bytestring
                       -- for Data.Binary.Local
                     , binary
                     , blaze-html
                       -- for Data.EventTime.Local
                     , blaze-markup
                     , byteable
                     , bytestring
                       -- for Darcs.Local.PatchInfo.Parser
                     , bytestring-lexing
                     , case-insensitive
                       -- For slab/box/citron serialization
                     , cereal
                     , conduit
                       -- For httpAPEither
                     , conduit-extra
                     , containers
                     , cryptonite
                     , data-default
                     , data-default-class
                     , data-default-instances-bytestring
                     , data-ordlist
                     --, diff-parse
                     , directory
                       -- for Data.Git.Local
                     , directory-tree
                     , dlist
                     , dvara
                     , email-validate
                     , email-validate-json
                     , esqueleto
                     , exceptions
                     , fast-logger
                       -- for building a message tree using DFS in
                       -- Vervis.Discussion, possibly also used by some git
                       -- graph related code?
                     , fgl
                     , file-embed
                     , filepath
                     , formatting
                     , hashable
                     , hashids
                       -- for source file highlighting
                     , highlighter2
                     , http-client-signature
                     , html-entities
                     , http-signature
                     , gitrev
                     -- currently discarding all JS so no need for minifier
                     --, hjsmin
                     --, hourglass
                     , yesod-http-signature
                     , http-client
                     , http-client-tls
                     , http-conduit
                     , http-types
                     , libravatar
                     , memory
                     , mime-mail
                     , monad-control
                     , monad-logger
                       -- for Database.Persist.Local
                     , mtl
                     , network
                     , network-uri
                     , optics-core
                     , pandoc
                     , pandoc-types
                       -- for PathPiece instance for CI, Web.PathPieces.Local
                     , path-pieces
                     --, patience
                     , pem
                     , persistent
                     , persistent-email-address
                     , persistent-migration
                     , persistent-postgresql
                     , persistent-sqlite
                     , process
                       -- for generating hashids salt
                     , random
                       -- for Database.Persist.Local
                     , resourcet
                     , retry
                     , safe
                     , semialign
                     , shakespeare
                       -- for json debug highlighting in Yesod.RenderSource
                     , skylighting
                     , smtp-mail
                     , ssh
                       -- for holding actor key in a TVar
                     , stm
                     , template-haskell
                     , temporary
                     , text
                     , these
                     , time
                     , time-interval
                     , time-interval-aeson
                     , time-units
                     , tls
                     , transformers
                       -- probably should be replaced with lenses once I learn
                     , tuple
                     , typed-process
                     , first-class-families
                     , HList
                       -- For making git hooks executable, i.e. set file mode
                     , unix
                       -- For httpAPEither
                     , unliftio-core
                     , unliftio
                     , unordered-containers
                     , vary
                     , vector
                     , wai
                     , wai-extra
                     , wai-logger
                     , warp
                       -- for encoding and decoding of crypto public keys
                     , x509
                       -- for parsing darcs apply's changes XML from env var in
                       -- the vervis post-apply hook program
                     , xml
                     , xss-sanitize
                     , yaml
                     , yesod
                     , yesod-auth
                     , yesod-auth-account
                     , yesod-core
                     , yesod-form
                     , yesod-mail-send
                     , yesod-newsfeed
                     , yesod-static
                     , yesod-persistent
                       -- for reading gzipped darcs inventory via utils in
                       -- Data.Attoparsec.ByteString.Local
                     , zlib

  hs-source-dirs:      src
  default-language:    GHC2021

  if flag(dev) || flag(library-only)
    cpp-options:       -DDEVELOPMENT
    ghc-options:       -Wall -fwarn-tabs -O0
                       -Werror=incomplete-patterns
                       -Werror=missing-fields
                       -Werror=overlapping-patterns
  else
    ghc-options:       -Wall -fwarn-tabs -O2

executable vervis
  main-is:             main.hs
  build-depends:       base, vervis
  hs-source-dirs:      app
  default-language:    GHC2021
  ghc-options:         -Wall -threaded -rtsopts -with-rtsopts=-N

  if flag(library-only)
    buildable: False

executable vervis-post-receive
  main-is:             main.hs
  build-depends:       base, vervis
  hs-source-dirs:      hook-git
  default-language:    GHC2021
  ghc-options:         -Wall

executable vervis-post-apply
  main-is:             main.hs
  build-depends:       base, vervis
  hs-source-dirs:      hook-darcs
  default-language:    GHC2021
  ghc-options:         -Wall

test-suite test
  main-is:             Spec.hs

  default-extensions:  TemplateHaskell
                       QuasiQuotes
                       OverloadedStrings
                       CPP
                       MultiParamTypeClasses
                       TypeFamilies
                       GADTs
                       GeneralizedNewtypeDeriving
                       FlexibleContexts
                       FlexibleInstances
                       EmptyDataDecls
                       NoMonomorphismRestriction
                       DeriveDataTypeable
                       ViewPatterns
                       TupleSections

  build-depends:       base
                     , vervis
                     , yesod-test
                     , yesod-core
                     , yesod
                     , persistent
                     , persistent-postgresql
                     , resourcet
                     , monad-logger
                     , shakespeare
                     , transformers
                     , hspec >= 2.0.0
                     , aeson

  hs-source-dirs:      test
  default-language:    GHC2021
  ghc-options:         -Wall
  type:                exitcode-stdio-1.0

-- test-suite test-graph
--   main-is:             Test.hs
--   build-depends:       base
--                      , fgl
--                      , fgl-arbitrary
--                      , hspec
--                      , vervis
--   hs-source-dirs:      test
--   default-language:    GHC2021
--   ghc-options:         -Wall
--   type:                exitcode-stdio-1.0

[See repo JSON]