From 5cb5668295d29102d4cfec5e98ac44914c8956cc Mon Sep 17 00:00:00 2001 From: Bryan Richter Date: Tue, 13 Feb 2024 09:20:41 +0200 Subject: [PATCH] Revert to previous pinned version of pantry The new pantry version in lts-22.6 was not compatible with the database and/or config on the stackage server. --- src/Data/WebsiteContent.hs | 1 + src/Stackage/Database/Cron.hs | 106 +++++++++++++++++++--------------- stack.yaml | 4 ++ 3 files changed, 64 insertions(+), 47 deletions(-) diff --git a/src/Data/WebsiteContent.hs b/src/Data/WebsiteContent.hs index aa5ce10..eac2d5a 100644 --- a/src/Data/WebsiteContent.hs +++ b/src/Data/WebsiteContent.hs @@ -2,6 +2,7 @@ {-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE TypeFamilies #-} +{-# LANGUAGE TypeOperators #-} module Data.WebsiteContent ( WebsiteContent (..) , StackRelease (..) diff --git a/src/Stackage/Database/Cron.hs b/src/Stackage/Database/Cron.hs index 8c3ab6c..9fa8485 100644 --- a/src/Stackage/Database/Cron.hs +++ b/src/Stackage/Database/Cron.hs @@ -42,9 +42,9 @@ import Network.HTTP.Types (status200, status404) import Pantry (CabalFileInfo(..), DidUpdateOccur(..), HpackExecutable(HpackBundled), PackageIdentifierRevision(..), defaultCasaMaxPerRequest, defaultCasaRepoPrefix, - defaultPackageIndexConfig, - defaultSnapshotLocation, withPantryConfig, PantryConfig) -import Pantry.Internal.Stackage (HackageTarballResult(..), forceUpdateHackageIndex, + defaultHackageSecurityConfig, defaultSnapshotLocation) +import Pantry.Internal.Stackage (HackageTarballResult(..), PantryConfig(..), + Storage(..), forceUpdateHackageIndex, getHackageTarball, packageTreeKey) import Path (parseAbsDir, toFilePath) import RIO @@ -57,6 +57,7 @@ import RIO.Process (mkDefaultProcessContext) import qualified RIO.Set as Set import qualified RIO.Text as T import RIO.Time +import Settings import Stackage.Database.Github import Stackage.Database.PackageInfo import Stackage.Database.Query @@ -88,6 +89,11 @@ hoogleUrl n haddockBucketUrl = T.concat hackageDeprecatedUrl :: Request hackageDeprecatedUrl = "https://hackage.haskell.org/packages/deprecated.json" +withStorage :: (Storage -> IO a) -> IO a +withStorage inner = do + as <- getAppSettings + withStackageDatabase False (appDatabase as) (\db -> inner (Storage (runDatabase db) id)) + getStackageSnapshotsDir :: RIO StackageCron FilePath getStackageSnapshotsDir = do cron <- ask @@ -151,52 +157,58 @@ stackageServerCron StackageCronOptions {..} = do catchIO (bindPortTCP 17834 "127.0.0.1") $ const $ throwString "Stackage Cron loader process already running, exiting." connectionCount <- getNumCapabilities - lo <- logOptionsHandle stdout True - stackageRootDir <- getAppUserDataDirectory "stackage" - pantryRootDir <- parseAbsDir (stackageRootDir "pantry") - createDirectoryIfMissing True (toFilePath pantryRootDir) - gpdCache <- newIORef IntMap.empty - defaultProcessContext <- mkDefaultProcessContext - aws <- do - aws' <- newEnv discover - endpoint <- lookup "AWS_S3_ENDPOINT" <$> getEnvironment - pure $ case endpoint of - Nothing -> aws' - Just ep -> configureService (setEndpoint True (BS8.pack ep) 443 Amazonka.S3.defaultService) aws' - withLogFunc (setLogMinLevel scoLogLevel lo) $ \logFunc -> do - let cronWithPantryConfig :: HasLogFunc env => (PantryConfig -> RIO env a) -> RIO env a - cronWithPantryConfig = - withPantryConfig - pantryRootDir - defaultPackageIndexConfig - HpackBundled - connectionCount - defaultCasaRepoPrefix - defaultCasaMaxPerRequest - defaultSnapshotLocation - - currentHoogleVersionId <- runRIO logFunc $ do - cronWithPantryConfig $ \pantryConfig -> do + withStorage $ \storage -> do + lo <- logOptionsHandle stdout True + stackageRootDir <- getAppUserDataDirectory "stackage" + pantryRootDir <- parseAbsDir (stackageRootDir "pantry") + createDirectoryIfMissing True (toFilePath pantryRootDir) + updateRef <- newMVar True + cabalImmutable <- newIORef Map.empty + cabalMutable <- newIORef Map.empty + gpdCache <- newIORef IntMap.empty + defaultProcessContext <- mkDefaultProcessContext + aws <- do + aws' <- newEnv discover + endpoint <- lookup "AWS_S3_ENDPOINT" <$> getEnvironment + pure $ case endpoint of + Nothing -> aws' + Just ep -> configureService (setEndpoint True (BS8.pack ep) 443 Amazonka.S3.defaultService) aws' + withLogFunc (setLogMinLevel scoLogLevel lo) $ \logFunc -> do + let pantryConfig = + PantryConfig + { pcHackageSecurity = defaultHackageSecurityConfig + , pcHpackExecutable = HpackBundled + , pcRootDir = pantryRootDir + , pcStorage = storage + , pcUpdateRef = updateRef + , pcParsedCabalFilesRawImmutable = cabalImmutable + , pcParsedCabalFilesMutable = cabalMutable + , pcConnectionCount = connectionCount + , pcCasaRepoPrefix = defaultCasaRepoPrefix + , pcCasaMaxPerRequest = defaultCasaMaxPerRequest + , pcSnapshotLocation = defaultSnapshotLocation + } + currentHoogleVersionId <- runRIO logFunc $ do runStackageMigrations' pantryConfig getCurrentHoogleVersionIdWithPantryConfig pantryConfig - let stackage pantryConfig = - StackageCron - { scPantryConfig = pantryConfig - , scStackageRoot = stackageRootDir - , scProcessContext = defaultProcessContext - , scLogFunc = logFunc - , scForceFullUpdate = scoForceUpdate - , scCachedGPD = gpdCache - , scEnvAWS = aws - , scDownloadBucketName = scoDownloadBucketName - , scDownloadBucketUrl = scoDownloadBucketUrl - , scUploadBucketName = scoUploadBucketName - , scSnapshotsRepo = scoSnapshotsRepo - , scReportProgress = scoReportProgress - , scCacheCabalFiles = scoCacheCabalFiles - , scHoogleVersionId = currentHoogleVersionId - } - runRIO logFunc $ cronWithPantryConfig $ \pantryConfig -> runRIO (stackage pantryConfig) (runStackageUpdate scoDoNotUpload) + let stackage = + StackageCron + { scPantryConfig = pantryConfig + , scStackageRoot = stackageRootDir + , scProcessContext = defaultProcessContext + , scLogFunc = logFunc + , scForceFullUpdate = scoForceUpdate + , scCachedGPD = gpdCache + , scEnvAWS = aws + , scDownloadBucketName = scoDownloadBucketName + , scDownloadBucketUrl = scoDownloadBucketUrl + , scUploadBucketName = scoUploadBucketName + , scSnapshotsRepo = scoSnapshotsRepo + , scReportProgress = scoReportProgress + , scCacheCabalFiles = scoCacheCabalFiles + , scHoogleVersionId = currentHoogleVersionId + } + runRIO stackage (runStackageUpdate scoDoNotUpload) runStackageUpdate :: Bool -> RIO StackageCron () diff --git a/stack.yaml b/stack.yaml index 2bc5b89..7e10533 100644 --- a/stack.yaml +++ b/stack.yaml @@ -2,6 +2,10 @@ resolver: lts-22.6 extra-deps: - hoogle-5.0.18.4@sha256:1372458e97dff541fcda099236af7936bf93ee6b8c5d15695ee6d9426dff5eed,3171 - safe-0.3.20@sha256:7813ad56161f57d5162a924de5597d454162a2faed06be6e268b37bb5c19d48d,2312 +- Cabal-3.8.1.0@sha256:77121d8e1aff14a0fd95684b751599db78a7dd26d55862d9fcef27c88b193e9d,12609 +- Cabal-syntax-3.8.1.0@sha256:ed2d937ba6c6a20b75850349eedd41374885fc42369ef152d69e2ba70f44f593,7620 +- git: https://github.com/commercialhaskell/pantry.git + commit: 5df643cc1deb561d9c52a9cb6f593aba2bc4c08e nix: packages: