on master help sign in
STACKAGE_AUTH_TOKEN environment variable
commitfd56370e3ae7cce0ab26248dd24cf0e610ae5907 authorMichael Snoyman <michael@snoyman.com> dateSun 11 Jan 2015, 10:08 (12 years ago) parenta143fc4
4 files changed+53−14
ChangeLog.md+5 Stackage/BuildConstraints.hs+28−9 Stackage/CompleteBuild.hs+11−4 Stackage/PerformBuild.hs+9−1
ChangeLog.md+5
@@ -1,3 +1,8 @@
1+## 0.5.1
2+
3+* `loadBuildConstraints`
4+* More command line options
5+
16## 0.5.0
27
38* Print "Still Alive" while checking, to avoid Travis timeouts
Stackage/BuildConstraints.hs+28−9
@@ -11,6 +11,8 @@ module Stackage.BuildConstraints
1111 , getSystemInfo
1212 , defaultBuildConstraints
1313 , toBC
14+ , BuildConstraintsSource (..)
15+ , loadBuildConstraints
1416 ) where
1517
1618import Control.Monad.Writer.Strict (execWriter, tell)
@@ -22,7 +24,7 @@ import Distribution.System (Arch, OS)
2224import qualified Distribution.System
2325import Distribution.Version (anyVersion)
2426import Filesystem (isFile)
25−import Network.HTTP.Client (Manager, httpLbs, responseBody)
27+import Network.HTTP.Client (Manager, httpLbs, responseBody, Request)
2628import Stackage.CorePackages
2729import Stackage.Prelude
2830
@@ -126,15 +128,32 @@ instance FromJSON PackageConstraints where
126128-- Checks the current directory for a build-constraints.yaml file and uses it
127129-- if present. If not, downloads from Github.
128130defaultBuildConstraints :: Manager -> IO BuildConstraints
129−defaultBuildConstraints man = do
130− e <- isFile fp
131− if e
132− then decodeFileEither (fpToString fp) >>= either throwIO toBC
133− else httpLbs req man >>=
134− either throwIO toBC . decodeEither' . toStrict . responseBody
131+defaultBuildConstraints = loadBuildConstraints BCSDefault
132+
133+data BuildConstraintsSource
134+ = BCSDefault
135+ | BCSFile FilePath
136+ | BCSWeb Request
137+ deriving (Show)
138+
139+loadBuildConstraints :: BuildConstraintsSource -> Manager -> IO BuildConstraints
140+loadBuildConstraints bcs man = do
141+ case bcs of
142+ BCSDefault -> do
143+ e <- isFile fp0
144+ if e
145+ then loadFile fp0
146+ else loadReq req0
147+ BCSFile fp -> loadFile fp
148+ BCSWeb req -> loadReq req
135149 where
136− fp = "build-constraints.yaml"
137− req = "https://raw.githubusercontent.com/fpco/stackage/master/build-constraints.yaml"
150+ fp0 = "build-constraints.yaml"
151+ req0 = "https://raw.githubusercontent.com/fpco/stackage/master/build-constraints.yaml"
152+
153+ loadFile fp = decodeFileEither (fpToString fp) >>= either throwIO toBC
154+ loadReq req = httpLbs req man >>=
155+ either throwIO toBC . decodeEither' . toStrict . responseBody
156+
138157
139158getSystemInfo :: IO SystemInfo
140159getSystemInfo = do
Stackage/CompleteBuild.hs+11−4
@@ -27,6 +27,7 @@ import Stackage.Prelude
2727import Stackage.ServerBundle
2828import Stackage.UpdateBuildPlan
2929import Stackage.Upload
30+import System.Environment (lookupEnv)
3031import System.IO (BufferMode (LineBuffering), hSetBuffering)
3132
3233-- | Flags passed in from the command line.
@@ -241,12 +242,18 @@ justUploadNightly day = do
241242finallyUpload :: Settings -> Manager -> IO ()
242243finallyUpload settings@Settings{..} man = do
243244 putStrLn "Uploading bundle to Stackage Server"
244− token <- readFile "/auth-token"
245+
246+ mtoken <- lookupEnv "STACKAGE_AUTH_TOKEN"
247+ token <-
248+ case mtoken of
249+ Nothing -> decodeUtf8 <$> readFile "/auth-token"
250+ Just token -> return $ pack token
251+
245252 now <- epochTime
246253 let ghcVer = display $ siGhcVersion $ bpSystemInfo plan
247254 (ident, mloc) <- flip uploadBundle man $ setArgs ghcVer def
248255 { ubContents = serverBundle now (title ghcVer) slug plan
249− , ubAuthToken = decodeUtf8 token
256+ , ubAuthToken = token
250257 }
251258 putStrLn $ "New ident: " ++ unSnapshotIdent ident
252259 forM_ mloc $ \loc ->
@@ -257,7 +264,7 @@ finallyUpload settings@Settings{..} man = do
257264 putStrLn "Uploading docs to Stackage Server"
258265 res1 <- uploadDocs UploadDocs
259266 { udServer = def
260− , udAuthToken = decodeUtf8 token
267+ , udAuthToken = token
261268 , udDocs = pbDocDir pb
262269 , udSnapshot = ident
263270 } man
@@ -274,7 +281,7 @@ finallyUpload settings@Settings{..} man = do
274281 putStrLn "Uploading doc map"
275282 uploadDocMap UploadDocMap
276283 { udmServer = def
277− , udmAuthToken = decodeUtf8 token
284+ , udmAuthToken = token
278285 , udmSnapshot = ident
279286 , udmDocDir = pbDocDir pb
280287 , udmPlan = plan
Stackage/PerformBuild.hs+9−1
@@ -197,7 +197,7 @@ performBuild' pb@PerformBuild {..} = withBuildDir $ \builddir -> do
197197 id
198198 (\db -> (("HASKELL_PACKAGE_SANDBOX", fpToString db):))
199199 (pbDatabase pb)
200− (map fixEnv env)
200+ (filter allowedEnv $ map fixEnv env)
201201 , sbHaddockFiles = haddockFiles
202202 }
203203
@@ -215,6 +215,8 @@ performBuild' pb@PerformBuild {..} = withBuildDir $ \builddir -> do
215215 | toUpper p == "PATH" = (p, fpToString (pbBinDir pb) ++ pathSep : x)
216216 | otherwise = (p, x)
217217
218+ allowedEnv (k, _) = k `notMember` bannedEnvs
219+
218220 -- | Separate for the PATH environment variable
219221 pathSep :: Char
220222#ifdef mingw32_HOST_OS
@@ -223,6 +225,12 @@ performBuild' pb@PerformBuild {..} = withBuildDir $ \builddir -> do
223225 pathSep = ':'
224226#endif
225227
228+-- | Environment variables we don't allow to be passed on to child processes.
229+bannedEnvs :: Set String
230+bannedEnvs = setFromList
231+ [ "STACKAGE_AUTH_TOKEN"
232+ ]
233+
226234data SingleBuild = SingleBuild
227235 { sbSem :: TSem
228236 , sbErrsVar :: TVar (Map PackageName BuildFailure)