mirror of
https://github.com/Start9Labs/registry.git
synced 2026-03-26 02:11:53 +00:00
add option to deprecate a service version based on a min os version
This commit is contained in:
@@ -36,7 +36,8 @@ tor-port: "_env:TOR_PORT:447"
|
||||
static-bin-dir: "_env:STATIC_BIN:/usr/local/bin/"
|
||||
error-log-root: "_env:ERROR_LOG_ROOT:/var/log/registry/"
|
||||
marketplace-name: "_env:MARKETPLACE_NAME:CHANGE ME"
|
||||
max-eos-version: "_env:MAX_VERSION:0.3.3.0"
|
||||
max-eos-version: "_env:MAX_VERSION:0.3.4.0"
|
||||
min-eos-version: "_env:MIN_VERSION:0.3.4.0"
|
||||
run-migration: "_env:RUN_MIGRATION:false"
|
||||
|
||||
database:
|
||||
|
||||
@@ -31,7 +31,7 @@ import Startlude (
|
||||
getCurrentTime,
|
||||
maybe,
|
||||
($),
|
||||
(.), Bool (True, False),
|
||||
(.), Bool (False),
|
||||
)
|
||||
import System.FilePath (takeExtension)
|
||||
import UnliftIO (
|
||||
@@ -314,6 +314,7 @@ upsertPackageVersion PackageManifest{..} = do
|
||||
VersionRecord
|
||||
now
|
||||
(Just now)
|
||||
Nothing
|
||||
pkgId
|
||||
packageManifestVersion
|
||||
packageManifestTitle
|
||||
|
||||
@@ -26,7 +26,7 @@ import Orphans.Emver ()
|
||||
import Startlude (Down (..), Eq, Generic, Maybe (..), Ord ((<)), Show, Text, filter, fst, head, pure, sortOn, ($), (&&&), (.), (<$>), (<&>), (<=))
|
||||
import Yesod (ToContent (toContent), ToTypedContent (..), YesodPersist (runDB), getsYesod)
|
||||
import Yesod.Core.Types (JSONResponse (..))
|
||||
import Settings (AppSettings(maxEosVersion))
|
||||
import Settings (AppSettings(maxOsVersion))
|
||||
import Lib.Types.Core (OsArch(RASPBERRYPI))
|
||||
import Data.Maybe (fromMaybe)
|
||||
|
||||
@@ -50,7 +50,7 @@ getEosVersionR :: Handler (JSONResponse (Maybe EosRes))
|
||||
getEosVersionR = do
|
||||
currentEosVersion <- fromMaybe Version { unVersion = (0,3,0,0) } <$> queryParamAs "eos-version" parseVersion
|
||||
arch <- fromMaybe RASPBERRYPI <$> getArchQuery
|
||||
maxVersion <- getsYesod $ maxEosVersion . appSettings
|
||||
maxVersion <- getsYesod $ maxOsVersion . appSettings
|
||||
allEosVersions <- runDB $
|
||||
select $ do
|
||||
vers <- from $ table @OsVersion
|
||||
|
||||
@@ -9,16 +9,18 @@ import Data.List (lookup)
|
||||
import Data.List.NonEmpty.Extra qualified as NE
|
||||
import Data.Tuple.Extra (second)
|
||||
import Database.Queries (collateVersions, getPkgDataSource)
|
||||
import Foundation (Handler)
|
||||
import Foundation (Handler, RegistryCtx (appSettings))
|
||||
import Handler.Package.V1.Index (getOsVersionQuery)
|
||||
import Lib.Error (S9Error (..))
|
||||
import Lib.Types.Core (PkgId)
|
||||
import Lib.Types.Emver (Version, satisfies)
|
||||
import Lib.Types.Emver (Version (..), satisfies)
|
||||
import Model (VersionRecord (..))
|
||||
import Network.HTTP.Types (status400)
|
||||
import Startlude (Bool (True), Down (Down), Either (..), Generic, Maybe (..), NonEmpty, Show, const, encodeUtf8, filter, flip, nonEmpty, pure, ($), (.), (<$>), (<&>))
|
||||
import Yesod (ToContent (..), ToTypedContent (..), YesodPersist (runDB), YesodRequest (reqGetParams), getRequest, sendResponseStatus)
|
||||
import Handler.Util (getArchQuery)
|
||||
import Handler.Util (getArchQuery, filterDeprecatedVersions)
|
||||
import Yesod.Core (getsYesod)
|
||||
import Settings (AppSettings(minOsVersion))
|
||||
|
||||
|
||||
newtype VersionLatestRes = VersionLatestRes (HashMap PkgId (Maybe Version))
|
||||
@@ -38,6 +40,7 @@ getVersionLatestR = do
|
||||
Nothing -> const True
|
||||
Just v -> flip satisfies v
|
||||
osArch <- getArchQuery
|
||||
minOsVersion <- getsYesod $ minOsVersion . appSettings
|
||||
do
|
||||
case lookup "ids" getParameters of
|
||||
Nothing -> sendResponseStatus status400 (InvalidParamsE "get:ids" "<MISSING>")
|
||||
@@ -54,6 +57,8 @@ getVersionLatestR = do
|
||||
.| collateVersions
|
||||
-- filter out versions of apps that are incompatible with the OS predicate
|
||||
.| mapC (second (filter (osPredicate' . versionRecordOsVersion)))
|
||||
-- filter out deprecated service versions after a min os version
|
||||
.| mapC (second (filterDeprecatedVersions minOsVersion osPredicate'))
|
||||
-- prune empty version sets
|
||||
.| concatMapC (\(pkgId, vs) -> (pkgId,) <$> nonEmpty vs)
|
||||
-- grab the latest matching version if it exists
|
||||
|
||||
@@ -25,16 +25,16 @@ import Database.Queries (
|
||||
getPkgDependencyData,
|
||||
serviceQuerySource,
|
||||
)
|
||||
import Foundation (Handler, Route (InstructionsR, LicenseR))
|
||||
import Foundation (Handler, Route (InstructionsR, LicenseR), RegistryCtx (appSettings))
|
||||
import Handler.Package.Api (DependencyRes (..), PackageListRes (..), PackageRes (..))
|
||||
import Handler.Types.Api (ApiVersion (..))
|
||||
import Handler.Util (basicRender, parseQueryParam, getArchQuery)
|
||||
import Handler.Util (basicRender, parseQueryParam, getArchQuery, filterDeprecatedVersions)
|
||||
import Lib.PkgRepository (PkgRepo, getIcon, getManifest)
|
||||
import Lib.Types.Core (PkgId)
|
||||
import Lib.Types.Emver (Version, VersionRange (..), parseRange, satisfies, (<||))
|
||||
import Model (Category (..), Key (..), PkgDependency (..), VersionRecord (..), PkgRecord (pkgRecordHidden))
|
||||
import Protolude.Unsafe (unsafeFromJust)
|
||||
import Settings (AppSettings)
|
||||
import Settings (AppSettings (minOsVersion))
|
||||
import Startlude (
|
||||
Applicative ((*>)),
|
||||
Bifunctor (..),
|
||||
@@ -88,8 +88,8 @@ import Yesod (
|
||||
lookupGetParam,
|
||||
)
|
||||
import Data.Tuple (fst)
|
||||
import Data.Tuple.Extra (both)
|
||||
import Database.Persist.Postgresql (entityVal)
|
||||
import Yesod.Core (getsYesod)
|
||||
|
||||
data PackageReq = PackageReq
|
||||
{ packageReqId :: !PkgId
|
||||
@@ -119,6 +119,7 @@ getPackageIndexR = do
|
||||
Nothing -> const True
|
||||
Just v -> flip satisfies v
|
||||
osArch <- getArchQuery
|
||||
minOsVersion <- getsYesod $ minOsVersion . appSettings
|
||||
do
|
||||
pkgIds <- getPkgIdsQuery
|
||||
category <- getCategoryQuery
|
||||
@@ -139,6 +140,8 @@ getPackageIndexR = do
|
||||
.| collateVersions
|
||||
-- filter out versions of apps that are incompatible with the OS predicate
|
||||
.| mapC (second (filter (osPredicate . versionRecordOsVersion)))
|
||||
-- filter out deprecated service versions after a min os version
|
||||
.| mapC (second (filterDeprecatedVersions minOsVersion osPredicate))
|
||||
-- prune empty version sets
|
||||
.| concatMapC (\(pkgId, vs) -> (pkgId,) <$> nonEmpty vs)
|
||||
-- grab the latest matching version if it exists
|
||||
|
||||
@@ -25,13 +25,13 @@ import Lib.PkgRepository (
|
||||
)
|
||||
import Lib.Types.Core (PkgId, OsArch)
|
||||
import Lib.Types.Emver (
|
||||
Version,
|
||||
Version (Version, unVersion),
|
||||
VersionRange,
|
||||
satisfies, parseVersion
|
||||
)
|
||||
import Model (
|
||||
UserActivity (..),
|
||||
VersionRecord (versionRecordOsVersion),
|
||||
VersionRecord (versionRecordOsVersion, versionRecordDeprecatedAt),
|
||||
)
|
||||
import Network.HTTP.Types (
|
||||
Status,
|
||||
@@ -79,6 +79,7 @@ import Yesod (
|
||||
)
|
||||
import Yesod.Core (addHeader, logWarn)
|
||||
import Lib.Error (S9Error (..))
|
||||
import Data.Maybe (isJust)
|
||||
|
||||
orThrow :: MonadHandler m => m (Maybe a) -> m a -> m a
|
||||
orThrow action other =
|
||||
@@ -175,3 +176,9 @@ fetchCompatiblePkgVersions osVersion pkg = do
|
||||
|
||||
getArchQuery :: Handler (Maybe OsArch)
|
||||
getArchQuery = parseQueryParam "arch" ((flip $ note . mappend "Invalid 'arch': ") =<< readMaybe)
|
||||
|
||||
filterDeprecatedVersions :: Version -> (Version -> Bool) -> [VersionRecord] -> [VersionRecord]
|
||||
filterDeprecatedVersions minOsVersion osPredicate vrs = do
|
||||
if (osPredicate minOsVersion)
|
||||
then filter (\v -> not $ isJust $ versionRecordDeprecatedAt v) $ vrs
|
||||
else vrs
|
||||
@@ -54,6 +54,7 @@ PkgRecord
|
||||
VersionRecord sql=version
|
||||
createdAt UTCTime
|
||||
updatedAt UTCTime Maybe
|
||||
deprecatedAt UTCTime Maybe
|
||||
pkgId PkgRecordId
|
||||
number Version
|
||||
title Text
|
||||
|
||||
@@ -75,7 +75,8 @@ data AppSettings = AppSettings
|
||||
-- ^ Should all log messages be displayed?
|
||||
, errorLogRoot :: !FilePath
|
||||
, marketplaceName :: !Text
|
||||
, maxEosVersion :: !Version
|
||||
, maxOsVersion :: !Version
|
||||
, minOsVersion :: !Version
|
||||
, registryHostname :: !Text
|
||||
, registryVersion :: !Version
|
||||
, resourcesDir :: !FilePath
|
||||
@@ -110,7 +111,8 @@ instance FromJSON AppSettings where
|
||||
appShouldLogAll <- o .:? "should-log-all" .!= False
|
||||
errorLogRoot <- o .: "error-log-root"
|
||||
marketplaceName <- o .: "marketplace-name"
|
||||
maxEosVersion <- o .: "max-eos-version"
|
||||
maxOsVersion <- o .: "max-eos-version"
|
||||
minOsVersion <- o .: "min-eos-version"
|
||||
registryHostname <- o .: "registry-hostname"
|
||||
resourcesDir <- o .: "resources-path"
|
||||
needsMigration <- o .: "run-migration"
|
||||
|
||||
Reference in New Issue
Block a user