[API] version with git hash

parent d362b468
Pipeline #7696 passed with stages
in 47 minutes and 15 seconds
......@@ -546,6 +546,7 @@ library
, fullstop ^>= 0.1.4
, gargantext-graph-core >= 0.2.0.0
, gargantext-prelude
, githash >= 0.1.7.0 && < 0.2
, graphviz ^>= 2999.20.1.0
, haskell-bee
, haskell-bee-pgmq
......
......@@ -25,7 +25,7 @@ import Gargantext.API.Admin.FrontEnd (FrontEndAPI)
import Gargantext.API.GraphQL (GraphQLAPI)
import Gargantext.API.Routes.Named.Private (GargPrivateAPI)
import Gargantext.API.Routes.Named.Public (GargPublicAPI)
import Gargantext.API.Routes.Types (WithCustomErrorScheme)
import Gargantext.API.Routes.Types (GargVersionResponse, WithCustomErrorScheme)
import Gargantext.API.Worker (WorkerAPI)
import Gargantext.Core.Notifications.Dispatcher.WebSocket qualified as Dispatcher
import Servant.API ((:>), (:-), JSON, ReqBody, Post, Get, QueryParam)
......@@ -102,5 +102,5 @@ data ForgotPasswordAsyncAPI mode = ForgotPasswordAsyncAPI
data GargVersion mode = GargVersion
{ gargVersionEp :: mode :- "version" :> Summary "Backend version" :> Get '[JSON] Text
{ gargVersionEp :: mode :- "version" :> Summary "Backend version" :> Get '[JSON] GargVersionResponse
} deriving Generic
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}
module Gargantext.API.Routes.Types where
import Control.Lens ((&), (%~), traversed)
import Data.ByteString (ByteString)
import Control.Lens ((%~), traversed)
import Data.Aeson ((.:), (.=), object, withObject)
import Data.CaseInsensitive qualified as CI
import Data.List qualified as L
import Data.Proxy (Proxy(..))
import Data.Swagger (ToSchema)
import Data.Set qualified as Set
import Data.Text qualified as T
import Gargantext.API.Errors (GargErrorScheme(..), renderGargErrorScheme)
import Gargantext.Prelude
import Network.HTTP.Types (HeaderName)
import Network.Wai (requestHeaders)
import Prelude
import Servant.API.Routes (HasRoutes, getRoutes, mkHeaderRep, responseHeaders)
import Servant.API.Routes.Internal.Response (unResponses)
import Servant.API.Routes.Route (routeResponse)
......@@ -60,3 +61,21 @@ instance (HasRoutes subApi) => HasRoutes (WithCustomErrorScheme subApi) where
errHeader = mkHeaderRep @"X-Garg-Error-Scheme" @ByteString
addHeader' rt = rt & routeResponse . unResponses . traversed . responseHeaders %~ Set.insert errHeader
in addHeader' <$> apiRoutes
data GargVersionResponse =
GargVersionResponse { _gvr_version :: T.Text
, _gvr_commitHash :: T.Text }
deriving (Show, Eq, Generic)
instance NFData GargVersionResponse
instance ToJSON GargVersionResponse where
toJSON GargVersionResponse { .. } = object [
"version" .= toJSON _gvr_version
, "commitHash" .= toJSON _gvr_commitHash
]
instance FromJSON GargVersionResponse where
parseJSON = withObject "GargVersionResponse" $ \o -> do
_gvr_version <- o .: "version"
_gvr_commitHash <- o .: "commitHash"
pure GargVersionResponse { .. }
instance ToSchema GargVersionResponse
......@@ -19,6 +19,7 @@ import Gargantext.API.Errors
import Gargantext.API.GraphQL as GraphQL
import Gargantext.API.Prelude (GargM)
import Gargantext.API.Routes.Named
import Gargantext.API.Routes.Types (GargVersionResponse(..))
import Gargantext.API.Server.Named.Public (serverPublicGargAPI)
import Gargantext.API.Swagger (openApiDoc)
import Gargantext.API.ThrowAll (serverPrivateGargAPI)
......@@ -27,6 +28,7 @@ import Gargantext.Core.Config (gc_frontend_config, hasConfig)
import Gargantext.Core.Config.Types (fc_url_backend_api)
import Gargantext.Prelude hiding (Handler, catch)
import Gargantext.System.Logging (logLocM, LogLevel(..))
import GitHash
import Paths_gargantext qualified as PG -- cabal magic build module
import Servant
import Servant.Server.Generic (AsServer, AsServerT)
......@@ -43,8 +45,12 @@ serverGargAPI env
, gargPublicAPI = serverPublicGargAPI (env ^. hasConfig . gc_frontend_config . fc_url_backend_api)
}
where
gi = $$tGitInfoCwd
gargVersion :: GargVersion (AsServerT (GargM Env BackendInternalError))
gargVersion = GargVersion $ pure (cs $ showVersion PG.version)
gargVersion = GargVersion
{ gargVersionEp = pure $ GargVersionResponse { _gvr_version = cs $ showVersion PG.version
, _gvr_commitHash = T.pack $ giHash gi } }
-- | Server declarations
server :: Env -> API AsServer
......
......@@ -17,6 +17,7 @@ import Data.Aeson.QQ
import Data.Text as T
import Gargantext.API.Admin.Auth.Types
import Gargantext.API.Routes.Named
import Gargantext.API.Routes.Types (GargVersionResponse(..))
import Gargantext.Core.Types
import Gargantext.Core.Types.Individu
import Gargantext.Database.Action.User.New
......@@ -50,7 +51,9 @@ tests = sequential $ aroundAll withTestDBAndPort $ beforeAllWith (\ctx -> setupE
result <- runClientM version_api (clientEnv _sctx_port)
case result of
Left err -> Prelude.fail (show err)
Right r -> r `shouldSatisfy` ((>= 1) . T.length) -- we got something back
Right (GargVersionResponse { .. }) -> do
_gvr_version `shouldSatisfy` ((>= 1) . T.length) -- we got something back
_gvr_commitHash `shouldSatisfy` ((>= 1) . T.length) -- we got something back
describe "POST /api/v1.0/auth" $ do
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment