mirror of
https://github.com/hasura/graphql-engine.git
synced 2024-12-17 20:41:49 +03:00
71af68e9e5
The only real use was for the dubious multitenant option --consoleAssetsVersion, which actually overrode not just the assets version. I.e., as far as I can tell, if you pass --consoleAssetsVersion to multitenant, that version will also make it into e.g. HTTP client user agent headers as the proper graphql-engine version. I'm dropping that option, since it seems unused in production and I don't want to go to the effort of fixing it, but am happy to look into that if folks feels strongly that it should be kept. (Reason for attacking this is that I was looking into http client things around blacklisting, and the versioning thing is a bit painful around http client headers.) PR-URL: https://github.com/hasura/graphql-engine-mono/pull/2458 GitOrigin-RevId: a02b05557124bdba9f65e96b3aa2746aeee03f4a
73 lines
2.1 KiB
Haskell
73 lines
2.1 KiB
Haskell
module Hasura.Server.Version
|
|
( Version (..),
|
|
currentVersion,
|
|
consoleAssetsVersion,
|
|
)
|
|
where
|
|
|
|
import Control.Lens ((^.), (^?))
|
|
import Data.Aeson (FromJSON (..), ToJSON (..))
|
|
import Data.SemVer qualified as V
|
|
import Data.Text qualified as T
|
|
import Data.Text.Conversions (FromText (..), ToText (..))
|
|
import Hasura.Prelude
|
|
import Hasura.Server.Utils (getValFromEnvOrScript)
|
|
import Text.Regex.TDFA ((=~~))
|
|
|
|
data Version
|
|
= VersionDev !Text
|
|
| VersionRelease !V.Version
|
|
deriving (Show, Eq)
|
|
|
|
instance ToText Version where
|
|
toText = \case
|
|
VersionDev txt -> txt
|
|
VersionRelease version -> "v" <> V.toText version
|
|
|
|
instance FromText Version where
|
|
fromText txt = case V.fromText $ T.dropWhile (== 'v') txt of
|
|
Left _ -> VersionDev txt
|
|
Right version -> VersionRelease version
|
|
|
|
instance ToJSON Version where
|
|
toJSON = toJSON . toText
|
|
|
|
instance FromJSON Version where
|
|
parseJSON = fmap fromText . parseJSON
|
|
|
|
currentVersion :: Version
|
|
currentVersion =
|
|
fromText $
|
|
T.dropWhileEnd (== '\n') $
|
|
T.pack $
|
|
$$(getValFromEnvOrScript "VERSION" "../scripts/get-version.sh")
|
|
|
|
-- | A version-based string used to form the CDN URL for fetching console assets.
|
|
consoleAssetsVersion :: Text
|
|
consoleAssetsVersion = case currentVersion of
|
|
VersionDev txt -> "versioned/" <> txt
|
|
VersionRelease v -> case getReleaseChannel v of
|
|
Nothing -> "versioned/" <> vMajMin
|
|
Just c -> "channel/" <> c <> "/" <> vMajMin
|
|
where
|
|
vMajMin = T.pack ("v" <> show (v ^. V.major) <> "." <> show (v ^. V.minor))
|
|
where
|
|
getReleaseChannel :: V.Version -> Maybe Text
|
|
getReleaseChannel sv = case sv ^. V.release of
|
|
[] -> Just "stable"
|
|
(mr : _) -> case getTextFromId mr of
|
|
Nothing -> Nothing
|
|
Just r ->
|
|
if
|
|
| T.null r -> Nothing
|
|
| otherwise -> T.pack <$> getChannelFromPreRelease (T.unpack r)
|
|
|
|
getChannelFromPreRelease :: String -> Maybe String
|
|
getChannelFromPreRelease sv = sv =~~ ("^([a-z]+)" :: String)
|
|
|
|
getTextFromId :: V.Identifier -> Maybe Text
|
|
getTextFromId i = Just i ^? (toTextualM . V._Textual)
|
|
where
|
|
toTextualM _ Nothing = pure Nothing
|
|
toTextualM f (Just a) = f a
|