* gnu/packages/patches/elm-offline-package-registry.patch: New file. * gnu/local.mk (dist_patch_DATA): Add it. * gnu/packages/elm.scm (elm): Use it. * guix/build-system/elm.scm, guix/build/elm-build-system.scm, tests/elm.scm: New files. * Makefile.scm (MODULES, SCM_TESTS): Add them. * doc/guix.texi (Build Systems): Document 'elm-build-system'. * doc/contributing.texi (Elm Packages): New section. Document naming conventions and utilities. Signed-off-by: Ludovic Courtès <ludo@gnu.org>
		
			
				
	
	
		
			71 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| From 06563409e6f2b1cca7bc1b27e31efd07a7569da8 Mon Sep 17 00:00:00 2001
 | |
| From: Philip McGrath <philip@philipmcgrath.com>
 | |
| Date: Thu, 14 Apr 2022 22:41:04 -0400
 | |
| Subject: [PATCH] minimal support for offline builds
 | |
| 
 | |
| Normally, Elm performs HTTP requests before building to obtain or
 | |
| update its list of all registed packages and their versions.
 | |
| This is problematic in the Guix build environment.
 | |
| 
 | |
| This patch causes Elm to check if the `GUIX_ELM_OFFLINE_REGISTRY_FILE`
 | |
| is set and, if so, to use the contents of the file it specifies as
 | |
| though it were the response from
 | |
| https://package.elm-lang.org/all-packages.
 | |
| 
 | |
| This patch does not attempt to add more general support for offline
 | |
| builds. In particular, it does not attempt to support incremental
 | |
| updates to the package registry cache file. See also discussion at
 | |
| https://discourse.elm-lang.org/t/private-package-tool-spec/6779/25.
 | |
| ---
 | |
|  builder/src/Deps/Registry.hs | 25 +++++++++++++++++++++----
 | |
|  1 file changed, 21 insertions(+), 4 deletions(-)
 | |
| 
 | |
| diff --git a/builder/src/Deps/Registry.hs b/builder/src/Deps/Registry.hs
 | |
| index 8d7def98..70cf3622 100644
 | |
| --- a/builder/src/Deps/Registry.hs
 | |
| +++ b/builder/src/Deps/Registry.hs
 | |
| @@ -18,6 +18,8 @@ import Control.Monad (liftM2)
 | |
|  import Data.Binary (Binary, get, put)
 | |
|  import qualified Data.List as List
 | |
|  import qualified Data.Map.Strict as Map
 | |
| +import System.Environment as Env
 | |
| +import qualified Data.ByteString as BS
 | |
|  
 | |
|  import qualified Deps.Website as Website
 | |
|  import qualified Elm.Package as Pkg
 | |
| @@ -190,13 +192,28 @@ getVersions' name (Registry _ versions) =
 | |
|  post :: Http.Manager -> String -> D.Decoder x a -> (a -> IO b) -> IO (Either Exit.RegistryProblem b)
 | |
|  post manager path decoder callback =
 | |
|    let
 | |
| -    url = Website.route path []
 | |
| -  in
 | |
| -  Http.post manager url [] Exit.RP_Http $
 | |
| -    \body ->
 | |
| +    mkBodyCallback url body =
 | |
|        case D.fromByteString decoder body of
 | |
|          Right a -> Right <$> callback a
 | |
|          Left _ -> return $ Left $ Exit.RP_Data url body
 | |
| +    postOnline url cb =
 | |
| +      Http.post manager url [] Exit.RP_Http cb
 | |
| +    performPost f url =
 | |
| +      f url (mkBodyCallback url)
 | |
| +  in
 | |
| +    do
 | |
| +      maybeFile <- Env.lookupEnv "GUIX_ELM_OFFLINE_REGISTRY_FILE"
 | |
| +      case (path, maybeFile) of
 | |
| +        ( "/all-packages", Just file ) ->
 | |
| +          performPost postOffline file
 | |
| +        ( _, _ ) ->
 | |
| +          -- don't know how to handle other endpoints yet
 | |
| +          performPost postOnline (Website.route path [])
 | |
| +
 | |
| +postOffline :: String -> (BS.ByteString -> IO a) -> IO a
 | |
| +postOffline file callback = do
 | |
| +  body <- BS.readFile file
 | |
| +  callback body
 | |
|  
 | |
|  
 | |
|  
 | |
| -- 
 | |
| 2.32.0
 | |
| 
 |