Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 0 additions & 5 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,6 @@ script:
- |
echo "Running tests"
export PATH="${PATH}:$(pwd)/artifacts"
set -e
if [ `uname` = "Darwin" ]
then
stack build --test --no-run-tests --copy-bins --local-bin-path ./artifacts;
Expand All @@ -105,10 +104,6 @@ script:

# run the test suite executable
./.stack-work/dist/*/*/build/spec/spec

# install psa and rerun tests that exercise it
npm install -g purescript-psa
./.stack-work/dist/*/*/build/spec/spec --match "/Spago/spago run"


before_deploy:
Expand Down
4 changes: 2 additions & 2 deletions appveyor.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,8 @@ install:
- chmod a+x purescript

cache:
- C:\sr -> '%STACK_YAML%'
- .stack-work -> '%STACK_YAML%'
- '%STACK_ROOT% -> %STACK_YAML%, appveyor.yml'
- '.stack-work -> %STACK_YAML%, appveyor.yml'

build_script:
- stack build
Expand Down
2 changes: 2 additions & 0 deletions package.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,8 @@ library:
- semver-range
- ansi-terminal
- unordered-containers
- retry
- github

executables:
spago:
Expand Down
2 changes: 1 addition & 1 deletion src/Spago/FetchPackage.hs
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@ fetchPackage metadata pair@(packageName'@PackageName{..}, Package{ location = Re
assertDirectory resultDir2
cptree resultDir resultDir2
catch (mv resultDir packageGlobalCacheDir) $ \(err :: SomeException) ->
echo $ Messages.failedToCopyToGlobalCache err
echoDebug $ Messages.failedToCopyToGlobalCache err
mv resultDir2 packageLocalCacheDir

-- * if not, run a series of git commands to get the code, and move it to local cache
Expand Down
1 change: 1 addition & 0 deletions src/Spago/Messages.hs
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ failedToParseRepoString repo = makeMessage
, ""
, "- you're trying to use a URL which doesn't conform to RFC 3986, e.g. in the form of `git@foo.com:bar/baz.git`."
, " The above example can be rewritten in a valid form as \"ssh://git@foo.com/bar/baz.git\""
, ""
]

cannotFindConfig :: Text
Expand Down
29 changes: 21 additions & 8 deletions src/Spago/PackageSet.hs
Original file line number Diff line number Diff line change
Expand Up @@ -14,16 +14,18 @@ module Spago.PackageSet

import Spago.Prelude

import qualified Control.Retry as Retry
import qualified Data.Text as Text
import qualified Data.Text.Encoding as Text
import qualified Data.Versions as Version
import qualified Dhall
import Dhall.Binary (defaultStandardVersion)
import qualified Dhall.Freeze
import qualified Dhall.Pretty
import qualified Network.HTTP.Simple as Http
import qualified Network.HTTP.Client as Http
import qualified Network.HTTP.Simple as Http
import Network.URI (parseURI)
import qualified GitHub

import qualified Spago.Dhall as Dhall
import Spago.Messages as Messages
Expand Down Expand Up @@ -113,7 +115,7 @@ makePackageSetFile force = do
upgradePackageSet :: Spago m => m ()
upgradePackageSet = do
echoDebug "Running `spago upgrade-set`"
try getLatestRelease >>= \case
try (Retry.recoverAll (Retry.fullJitterBackoff 50000 <> Retry.limitRetries 5) $ \_ -> getLatestRelease1 <|> getLatestRelease2) >>= \case
Left (err :: SomeException) -> echoDebug $ Messages.failedToReachGitHub err
Right releaseTagName -> do
let quotedTag = surroundQuote releaseTagName
Expand All @@ -138,13 +140,24 @@ upgradePackageSet = do
-- to the latest release. So we search for the `Location` header which should contain
-- the URL we get redirected to, and strip the release name from there (it's the
-- last segment of the URL)
getLatestRelease :: Spago m => m Text
getLatestRelease = do
getLatestRelease1 :: Spago m => m Text
getLatestRelease1 = do
request <- Http.parseRequest "https://github.com/purescript/package-sets/releases/latest"
response <- Http.httpBS $ request { Http.redirectCount = 0 }
redirectUrl <- (\case [u] -> pure u; _ -> error ("Error following GitHub redirect, response:\n\n" <> show response))
$ Http.getResponseHeader "Location" response
pure $ last $ Text.splitOn "/" $ Text.decodeUtf8 redirectUrl
response <- Http.httpBS
$ Http.addRequestHeader "User-Agent" "Mozilla/5.0"
$ request { Http.redirectCount = 0 }
case Http.getResponseHeader "Location" response of
[redirectUrl] -> return $ last $ Text.splitOn "/" $ Text.decodeUtf8 redirectUrl
_ -> do
echoStr $ "Error following GitHub redirect, response:\n\n" <> show response
empty

getLatestRelease2 :: Spago m => m Text
getLatestRelease2 = do
result <- liftIO $ GitHub.executeRequest' $ GitHub.latestReleaseR "purescript" "package-sets"
case result of
Right GitHub.Release{..} -> return releaseTagName
Left _ -> empty

getCurrentTag :: Dhall.Import -> [Text]
getCurrentTag Dhall.Import
Expand Down
2 changes: 1 addition & 1 deletion test/SpagoSpec.hs
Original file line number Diff line number Diff line change
Expand Up @@ -233,7 +233,7 @@ spec = around_ setup $ do
$ filter (not . null . Text.breakOnAll "https://github.com/purescript/package-sets")
$ Text.lines packages
writeTextFile "packages.dhall" "https://raw.githubusercontent.com/purescript/package-sets/psc-0.13.0-20190713/src/packages.dhall sha256:906af79ba3aec7f429b107fd8d12e8a29426db8229d228c6f992b58151e2308e"
spago ["upgrade-set"] >>= shouldBeSuccess
spago ["-v", "upgrade-set"] >>= shouldBeSuccess
newPackages <- fmap Text.strip $ readTextFile "packages.dhall"
newPackages `shouldBe` packageSetUrl

Expand Down