diff --git a/.gitignore b/.gitignore index 04ac0d0465..9e82459c3a 100644 --- a/.gitignore +++ b/.gitignore @@ -25,3 +25,6 @@ tags /.git/ /stack.cabal /etc/scripts/stack-scripts.cabal +.hspec-failures +better-cache/ +subs/ diff --git a/ChangeLog.md b/ChangeLog.md index d98e8d6bb3..5c3e485a64 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -15,6 +15,7 @@ Major changes: must be specified in `extra-deps`. * The `extra-dep` key in `packages` is no longer supported; please move any such specifications to `extra-deps`. +* `GHCJS` support is being downgraded to 'experimental'. At time of writing the upcoming release is 1.8. A warning notifying the user of the experimental status of `GHCJS` will be incorporated into 1.8. Behavior changes: @@ -47,6 +48,9 @@ Behavior changes: * Mustache templating is not applied to large files (over 50kb) to avoid performance degredation. See: [#4133](https://github.com/commercialhaskell/stack/issues/4133). +* `stack upload` signs the package by default, as documented. `--no-signature` + turns the signing off. + [#3739](https://github.com/commercialhaskell/stack/issues/3739) Other enhancements: @@ -84,6 +88,10 @@ Other enhancements: * `stack ghci` now asks which main target to load before doing the build, rather than after * Bump to hpack 0.29.0 +* With GHC 8.4 and later, Haddock is given the `--quickjump` flag. +* It is possible to specify the Hackage base URL to upload packages to, instead + of the default of `https://hackage.haskell.org/`, by using `hackage-base-url` + configuration option. Bug fixes: @@ -135,6 +143,9 @@ Bug fixes: #3942). * Fix invalid "While building Setup.hs" when Cabal calls fail. See: [#3934](https://github.com/commercialhaskell/stack/issues/3934) +* `stack upload` signs the package by default, as documented. `--no-signature` + turns the signing off. + [#3739](https://github.com/commercialhaskell/stack/issues/3739) ## v1.7.1 diff --git a/README.md b/README.md index 7c2f279c8c..0fca83bb90 100644 --- a/README.md +++ b/README.md @@ -9,3 +9,7 @@ Stack is a cross-platform program for developing Haskell projects. It is intende See [haskellstack.org](http://haskellstack.org) or the [doc](./doc) directory for more information. + +### Subsystem maintainers + +* GHCJS - [Matchwood](https://github.com/matchwood) \ No newline at end of file diff --git a/doc/README.md b/doc/README.md index d6e4bd5c6d..5b6c807c41 100644 --- a/doc/README.md +++ b/doc/README.md @@ -191,3 +191,7 @@ project meeting the needs of Haskell users of all stripes. If you'd like to get involved with Stack, check out the [newcomer friendly](https://github.com/commercialhaskell/stack/issues?q=is%3Aopen+is%3Aissue+label%3a%22newcomer+friendly%22) label on the Github issue tracker. + +#### How to uninstall +Removing ``~/.stack`` and ``/usr/local/bin/stack`` should be sufficient. You may want to delete ``.stack-work`` folders in any Haskell projects that you have built. + diff --git a/doc/appveyor.yml b/doc/appveyor.yml index dcb68600cb..34c446de06 100644 --- a/doc/appveyor.yml +++ b/doc/appveyor.yml @@ -12,6 +12,10 @@ environment: global: STACK_ROOT: "c:\\sr" + # Override the temp directory to avoid sed escaping issues + # See https://github.com/haskell/cabal/issues/5386 + TMP: "c:\\tmp" + matrix: - ARGS: "" #- ARGS: "--resolver lts-2" @@ -20,6 +24,7 @@ environment: #- ARGS: "--resolver lts-7" - ARGS: "--resolver lts-9" - ARGS: "--resolver lts-11" + - ARGS: "--resolver lts-12" #- ARGS: "--resolver nightly" test_script: @@ -29,4 +34,4 @@ test_script: # The ugly echo "" hack is to avoid complaints about 0 being an invalid file # descriptor -- echo "" | stack %ARGS% --no-terminal test --pedantic +- echo "" | stack %ARGS% --no-terminal test diff --git a/doc/ghcjs.md b/doc/ghcjs.md index 42ea64c090..ccbc542faa 100644 --- a/doc/ghcjs.md +++ b/doc/ghcjs.md @@ -1,8 +1,8 @@
-# GHCJS +# GHCJS (experimental) -To use GHCJS with stack, place a GHCJS version in the [`compiler`](yaml_configuration.md#compiler) field of `stack.yaml`. After this, all stack commands should work with GHCJS! In particular: +To use GHCJS with stack, place a GHCJS version in the [`compiler`](yaml_configuration.md#compiler) field of `stack.yaml`. After this, some stack commands should work with GHCJS. In particular: * `stack setup` will install GHCJS from source and boot it, which takes a long time. @@ -21,7 +21,13 @@ then you may need to install a different version of `node`. See ## Example Configurations -### Recent versions of GHCJS, repacked for stack +### GHCJS repacked for snapsnots lts-8 and lts-9 + +Please see the [ghcjs-stack-dist repository](https://github.com/matchwood/ghcjs-stack-dist) for `lts-8` and `lts-9` configurations and refer to the [README](https://github.com/matchwood/ghcjs-stack-dist/blob/master/README.md) for common issues. + +Support for `> lts-9` snapshots (`GHC 8.2` and above) is currently [work in progress](https://github.com/matchwood/ghcjs-stack-dist/issues/10). + +### GHCJS repacked for snapsnots < lts-8 These versions of GHCJS were created by [Marcin Tolysz](https://github.com/tolysz), and were particularly crafted to @@ -55,7 +61,7 @@ setup-info: url: http://ghcjs.tolysz.org/ghc-8.0-2017-02-05-lts-7.19-9007019.tar.gz sha1: d2cfc25f9cda32a25a87d9af68891b2186ee52f9 ``` -The later can be generated via: https://github.com/tolysz/prepare-ghcjs +The latter can be generated via: https://github.com/tolysz/prepare-ghcjs the former is a bit more manual. Those bundles are only tested against the latest `node-7.4.0`. In order to correctly boot and use ghcjs, one might need to install `alex` `happy` `hscolour` `hsc2hs` with the normal ghc. @@ -64,6 +70,7 @@ Older resolvers: |resolver|ghcjs|url|sha1| |---|---|---|---| +| lts-7.19 |0.2.1| http://ghcjs.tolysz.org/ghc-8.0-2017-02-05-lts-7.19-9007019.tar.gz | d2cfc25f9cda32a25a87d9af68891b2186ee52f9 | | lts-7.15 |0.2.1| http://ghcjs.tolysz.org/ghc-8.0-2017-01-11-lts-7.15-9007015.tar.gz | 30d34e9d704bdb799066387dfa1ba98b8884d932 | | lts-7.14 |0.2.1| http://ghcjs.tolysz.org/ghc-8.0-2016-12-25-lts-7.14-9007014.tar.gz | 530c4ee5e19e2874e128431c7ad421e336df0303 | | lts-7.13 |0.2.1| http://ghcjs.tolysz.org/ghc-8.0-2016-12-18-lts-7.13-9007013.tar.gz | 0d2ebe0931b29adca7cb9d9b9f77d60095bfb864 | diff --git a/doc/travis-complex.yml b/doc/travis-complex.yml index e278d06a3c..c162d149de 100644 --- a/doc/travis-complex.yml +++ b/doc/travis-complex.yml @@ -100,6 +100,10 @@ matrix: compiler: ": #stack 8.2.2" addons: {apt: {packages: [libgmp-dev]}} + - env: BUILD=stack ARGS="--resolver lts-12" + compiler: ": #stack 8.4.3" + addons: {apt: {packages: [libgmp-dev]}} + # Nightly builds are allowed to fail - env: BUILD=stack ARGS="--resolver nightly" compiler: ": #stack nightly" @@ -135,6 +139,10 @@ matrix: compiler: ": #stack 8.2.2 osx" os: osx + - env: BUILD=stack ARGS="--resolver lts-12" + compiler: ": #stack 8.4.3 osx" + os: osx + - env: BUILD=stack ARGS="--resolver nightly" compiler: ": #stack nightly osx" os: osx @@ -176,9 +184,14 @@ install: case "$BUILD" in stack) # Add in extra-deps for older snapshots, as necessary - stack --no-terminal --install-ghc $ARGS test --bench --dry-run || ( \ - stack --no-terminal $ARGS build cabal-install && \ - stack --no-terminal $ARGS solver --update-config) + # + # This is disabled by default, as relying on the solver like this can + # make builds unreliable. Instead, if you have this situation, it's + # recommended that you maintain multiple stack-lts-X.yaml files. + + #stack --no-terminal --install-ghc $ARGS test --bench --dry-run || ( \ + # stack --no-terminal $ARGS build cabal-install && \ + # stack --no-terminal $ARGS solver --update-config) # Build the dependencies stack --no-terminal --install-ghc $ARGS test --bench --only-dependencies diff --git a/doc/yaml_configuration.md b/doc/yaml_configuration.md index a34c871e80..89d0b6b24c 100644 --- a/doc/yaml_configuration.md +++ b/doc/yaml_configuration.md @@ -878,6 +878,17 @@ save-hackage-creds: true Since 1.5.0 +### hackage-base-url + +Sets the address of the Hackage server to upload the package to. Default is +`https://hackage.haskell.org/`. + +```yaml +hackage-base-url: https://hackage.example.com/ +``` + +Since 1.8.0 + ### ignore-revision-mismatch Cabal files in packages can be specified via exact revisions to deal diff --git a/mkdocs.yml b/mkdocs.yml index 6555a06639..4a197e5cfb 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -1,7 +1,8 @@ site_name: The Haskell Tool Stack site_description: The Haskell Tool Stack site_author: Stack contributors -repo_url: https://github.com/commercialhaskell/stack/tree/master/doc +repo_url: https://github.com/commercialhaskell/stack/ +edit_uri: edit/stable/doc/ copyright: Copyright (c) 2015-2018, Stack contributors docs_dir: doc site_dir: _site @@ -23,7 +24,7 @@ pages: - Build command: build_command.md - Dependency visualization: dependency_visualization.md - Docker integration: docker_integration.md - - GHCJS: ghcjs.md + - GHCJS (experimental): ghcjs.md - Nix integration: nix_integration.md - Non-standard project initialization: nonstandard_project_init.md - Shell auto-completion: shell_autocompletion.md diff --git a/src/Stack/Build/Execute.hs b/src/Stack/Build/Execute.hs index a89cd678e3..c4732ae1ba 100644 --- a/src/Stack/Build/Execute.hs +++ b/src/Stack/Build/Execute.hs @@ -1512,12 +1512,22 @@ singleBuild ac@ActionContext {..} ee@ExecuteEnv {..} task@Task {..} installedMap ("Warning: haddock not generating hyperlinked sources because 'HsColour' not\n" <> "found on PATH (use 'stack install hscolour' to install).") return ["--hyperlink-source" | hscolourExists] + + -- For GHC 8.4 and later, provide the --quickjump option. + actualCompiler <- view actualCompilerVersionL + let quickjump = + case actualCompiler of + GhcVersion ghcVer + | ghcVer >= $(mkVersion "8.4") -> ["--haddock-option=--quickjump"] + _ -> [] + cabal KeepTHLoading $ concat [ ["haddock", "--html", "--hoogle", "--html-location=../$pkg-$version/"] , sourceFlag , ["--internal" | boptsHaddockInternal eeBuildOpts] , [ "--haddock-option=" <> opt | opt <- hoAdditionalArgs (boptsHaddockOpts eeBuildOpts) ] + , quickjump ] let hasLibrary = diff --git a/src/Stack/Config.hs b/src/Stack/Config.hs index 3cca594385..6dd617b388 100644 --- a/src/Stack/Config.hs +++ b/src/Stack/Config.hs @@ -354,6 +354,7 @@ configFromConfigMonoid configDefaultTemplate = getFirst configMonoidDefaultTemplate configDumpLogs = fromFirst DumpWarningLogs configMonoidDumpLogs configSaveHackageCreds = fromFirst True configMonoidSaveHackageCreds + configHackageBaseUrl = fromFirst "https://hackage.haskell.org/" configMonoidHackageBaseUrl clIgnoreRevisionMismatch = fromFirst False configMonoidIgnoreRevisionMismatch configAllowDifferentUser <- diff --git a/src/Stack/Init.hs b/src/Stack/Init.hs index 2866cdcdd2..6a08e4a275 100644 --- a/src/Stack/Init.hs +++ b/src/Stack/Init.hs @@ -263,7 +263,6 @@ renderStackYaml p ignoredPackages dupPackages = , "resolver: lts-3.5" , "resolver: nightly-2015-09-21" , "resolver: ghc-7.10.2" - , "resolver: ghcjs-0.1.0_ghc-7.10.2" , "" , "The location of a snapshot can be provided as a file or url. Stack assumes" , "a snapshot provided as a file might change, whereas a url resource does not." diff --git a/src/Stack/Options/SDistParser.hs b/src/Stack/Options/SDistParser.hs index d9a1c30829..0839d5362a 100644 --- a/src/Stack/Options/SDistParser.hs +++ b/src/Stack/Options/SDistParser.hs @@ -15,7 +15,7 @@ sdistOptsParser signDefault = SDistOpts <$> optional pvpBoundsOption <*> ignoreCheckSwitch <*> (if signDefault - then switch (long "no-signature" <> help "Do not sign & upload signatures") + then not <$> switch (long "no-signature" <> help "Do not sign & upload signatures") else switch (long "sign" <> help "Sign & upload signatures")) <*> strOption (long "sig-server" <> metavar "URL" <> showDefault <> diff --git a/src/Stack/Setup/Installed.hs b/src/Stack/Setup/Installed.hs index 703b4912d9..5276681abf 100644 --- a/src/Stack/Setup/Installed.hs +++ b/src/Stack/Setup/Installed.hs @@ -87,6 +87,16 @@ listInstalled programsPath = do x <- T.stripSuffix ".installed" $ T.pack $ toFilePath $ filename fp parseToolText x +-- | See https://github.com/commercialhaskell/stack/issues/4086. +warnAboutGHCJS :: HasLogFunc env => RIO env () +warnAboutGHCJS = + logWarn $ "Building a GHCJS project. " <> fromString ghcjsWarning + +ghcjsWarning :: String +ghcjsWarning = unwords + [ "Note that GHCJS support in Stack is EXPERIMENTAL" + ] + getCompilerVersion :: (HasProcessContext env, HasLogFunc env) => WhichCompiler @@ -101,6 +111,7 @@ getCompilerVersion wc = logDebug $ "GHC version is: " <> display x return x Ghcjs -> do + warnAboutGHCJS logDebug "Asking GHCJS for its version" -- Output looks like -- diff --git a/src/Stack/Types/Config.hs b/src/Stack/Types/Config.hs index 6886618691..063a5801ab 100644 --- a/src/Stack/Types/Config.hs +++ b/src/Stack/Types/Config.hs @@ -340,6 +340,8 @@ data Config = -- command disallows this. ,configSaveHackageCreds :: !Bool -- ^ Should we save Hackage credentials to a file? + ,configHackageBaseUrl :: !Text + -- ^ Hackage base URL used when uploading packages ,configRunner :: !Runner ,configPantryConfig :: !PantryConfig ,configStackRoot :: !(Path Abs Dir) @@ -744,6 +746,8 @@ data ConfigMonoid = -- ^ See 'configDumpLogs' , configMonoidSaveHackageCreds :: !(First Bool) -- ^ See 'configSaveHackageCreds' + , configMonoidHackageBaseUrl :: !(First Text) + -- ^ See 'configHackageBaseUrl' , configMonoidIgnoreRevisionMismatch :: !(First Bool) -- ^ See 'configIgnoreRevisionMismatch' } @@ -841,6 +845,7 @@ parseConfigMonoidObject rootDir obj = do configMonoidAllowDifferentUser <- First <$> obj ..:? configMonoidAllowDifferentUserName configMonoidDumpLogs <- First <$> obj ..:? configMonoidDumpLogsName configMonoidSaveHackageCreds <- First <$> obj ..:? configMonoidSaveHackageCredsName + configMonoidHackageBaseUrl <- First <$> obj ..:? configMonoidHackageBaseUrlName configMonoidIgnoreRevisionMismatch <- First <$> obj ..:? configMonoidIgnoreRevisionMismatchName return ConfigMonoid {..} @@ -981,6 +986,9 @@ configMonoidDumpLogsName = "dump-logs" configMonoidSaveHackageCredsName :: Text configMonoidSaveHackageCredsName = "save-hackage-creds" +configMonoidHackageBaseUrlName :: Text +configMonoidHackageBaseUrlName = "hackage-base-url" + configMonoidIgnoreRevisionMismatchName :: Text configMonoidIgnoreRevisionMismatchName = "ignore-revision-mismatch" diff --git a/src/Stack/Upload.hs b/src/Stack/Upload.hs index 21e38509a8..5027a700fc 100644 --- a/src/Stack/Upload.hs +++ b/src/Stack/Upload.hs @@ -123,13 +123,14 @@ applyCreds creds req0 = do -- sending a file like 'upload', this sends a lazy bytestring. -- -- Since 0.1.2.1 -uploadBytes :: HackageCreds +uploadBytes :: String -- ^ Hackage base URL + -> HackageCreds -> String -- ^ tar file name -> L.ByteString -- ^ tar file contents -> IO () -uploadBytes creds tarName bytes = do +uploadBytes baseUrl creds tarName bytes = do let req1 = setRequestHeader "Accept" ["text/plain"] - "https://hackage.haskell.org/packages/" + (fromString $ baseUrl <> "packages/") formData = [partFileRequestBody "package" tarName (RequestBodyLBS bytes)] req2 <- formDataBody formData req1 req3 <- applyCreds creds req2 @@ -163,16 +164,21 @@ printBody res = runConduit $ getResponseBody res .| CB.sinkHandle stdout -- | Upload a single tarball with the given @Uploader@. -- -- Since 0.1.0.0 -upload :: HackageCreds -> FilePath -> IO () -upload creds fp = uploadBytes creds (takeFileName fp) =<< L.readFile fp +upload :: String -- ^ Hackage base URL + -> HackageCreds + -> FilePath + -> IO () +upload baseUrl creds fp = uploadBytes baseUrl creds (takeFileName fp) =<< L.readFile fp -uploadRevision :: HackageCreds +uploadRevision :: String -- ^ Hackage base URL + -> HackageCreds -> PackageIdentifier -> L.ByteString -> IO () -uploadRevision creds ident@(PackageIdentifier name _) cabalFile = do +uploadRevision baseUrl creds ident@(PackageIdentifier name _) cabalFile = do req0 <- parseRequest $ concat - [ "https://hackage.haskell.org/package/" + [ baseUrl + , "package/" , displayC ident , "/" , displayC name diff --git a/src/main/Main.hs b/src/main/Main.hs index 1da438ebf5..839f9012b7 100644 --- a/src/main/Main.hs +++ b/src/main/Main.hs @@ -716,6 +716,7 @@ uploadCmd sdistOpts go = do ] liftIO exitFailure config <- view configL + let hackageUrl = T.unpack $ configHackageBaseUrl config getCreds <- liftIO (runOnce (Upload.loadCreds config)) mapM_ (resolveFile' >=> checkSDistTarball sdistOpts) files forM_ @@ -724,7 +725,7 @@ uploadCmd sdistOpts go = do do tarFile <- resolveFile' file liftIO $ do creds <- getCreds - Upload.upload creds (toFilePath tarFile) + Upload.upload hackageUrl creds (toFilePath tarFile) when (sdoptsSign sdistOpts) (void $ @@ -738,8 +739,8 @@ uploadCmd sdistOpts go = do checkSDistTarball' sdistOpts tarName tarBytes liftIO $ do creds <- getCreds - Upload.uploadBytes creds tarName tarBytes - forM_ mcabalRevision $ uncurry $ Upload.uploadRevision creds + Upload.uploadBytes hackageUrl creds tarName tarBytes + forM_ mcabalRevision $ uncurry $ Upload.uploadRevision hackageUrl creds tarPath <- parseRelFile tarName when (sdoptsSign sdistOpts) @@ -829,8 +830,8 @@ execCmd ExecOpts {..} go@GlobalOpts{..} = (ExecCmd cmd, args) -> return (cmd, args) (ExecRun, args) -> getRunCmd args (ExecGhc, args) -> getGhcCmd "" eoPackages args - -- NOTE: this won't currently work for GHCJS, because it doesn't have - -- a runghcjs binary. It probably will someday, though. + -- NOTE: This doesn't work for GHCJS, because it doesn't have + -- a runghcjs binary. (ExecRunGhc, args) -> getGhcCmd "run" eoPackages args munlockFile lk -- Unlock before transferring control away. diff --git a/test/integration/tests/3942-solver-error-output/files/test-stack.yml b/test/integration/tests/3942-solver-error-output/files/test-stack.yml index d0479c6cd0..e74b7e7774 100644 --- a/test/integration/tests/3942-solver-error-output/files/test-stack.yml +++ b/test/integration/tests/3942-solver-error-output/files/test-stack.yml @@ -2,7 +2,7 @@ resolver: lts-11.6 packages: - location: - git: git@github.com:cjdev/cloudseeder.git + git: https://github.com/cjdev/cloudseeder.git commit: c7068f25c41bcc0b4bdfc9b38ee5b05b5caefae5 extra-dep: true diff --git a/test/integration/tests/upload/Main.hs b/test/integration/tests/upload/Main.hs new file mode 100644 index 0000000000..fbc2f46891 --- /dev/null +++ b/test/integration/tests/upload/Main.hs @@ -0,0 +1,45 @@ +import Control.Concurrent + +import StackTest + +import System.Directory (createDirectoryIfMissing, + getCurrentDirectory) +import System.Environment (getEnv, setEnv) +import System.FilePath (()) +import System.Process + +main :: IO () +main = + withFakeHackage $ do + disableGpg + stackRoot <- getEnv "STACK_ROOT" + -- Ensure there are credentials available for uploading + createDirectoryIfMissing True (stackRoot "upload") + writeFile + (stackRoot "upload" "credentials.json") + "{\"username\":\"fake\",\"password\":\"fake\"}" + -- Test the upload with no signing + stack ["upload", "--no-signature", "."] + -- Test failure signing + stackErr ["upload", "."] + +-- | Ensure gpg is unusable by putting a broken one on PATH +disableGpg :: IO () +disableGpg = do + originalPath <- getEnv "PATH" + cwd <- getCurrentDirectory + setEnv "PATH" $ (cwd "gpg-disabled") ++ ":" ++ originalPath + +-- | Start a fake Hackage server to test the upload +withFakeHackage :: IO a -> IO a +withFakeHackage act = do + stackEnv <- stackExe + -- Build the dependencies for the fake server + stack $ withNetworkArgs ++ ["FakeHackageStart.hs"] + -- Start the fake server + withCreateProcess (proc stackEnv $ withNetworkArgs ++ ["FakeHackage.hs"]) $ \_ _ _ _ -> do + -- Wait for the fake server to start accepting requests + threadDelay 2000000 + act + where + withNetworkArgs = ["runghc", "--package", "network-simple"] diff --git a/test/integration/tests/upload/files/FakeHackage.hs b/test/integration/tests/upload/files/FakeHackage.hs new file mode 100644 index 0000000000..8b2ae4092f --- /dev/null +++ b/test/integration/tests/upload/files/FakeHackage.hs @@ -0,0 +1,8 @@ +{-# LANGUAGE OverloadedStrings #-} + +import Network.Simple.TCP + +-- | Fake server that always responds with HTTP OK +main = + serve (Host "127.0.0.1") "12415" $ \(socket, _) -> + send socket "HTTP/1.1 200 OK\r\n\r\n" diff --git a/test/integration/tests/upload/files/FakeHackageStart.hs b/test/integration/tests/upload/files/FakeHackageStart.hs new file mode 100644 index 0000000000..53d5853101 --- /dev/null +++ b/test/integration/tests/upload/files/FakeHackageStart.hs @@ -0,0 +1,2 @@ +-- | Module to force downloading all the dependencies to avoid race conditions +main = pure () diff --git a/test/integration/tests/upload/files/Foo.hs b/test/integration/tests/upload/files/Foo.hs new file mode 100644 index 0000000000..efbf93bbde --- /dev/null +++ b/test/integration/tests/upload/files/Foo.hs @@ -0,0 +1 @@ +module Foo where diff --git a/test/integration/tests/upload/files/gpg-disabled/gpg b/test/integration/tests/upload/files/gpg-disabled/gpg new file mode 100755 index 0000000000..7a54effe96 --- /dev/null +++ b/test/integration/tests/upload/files/gpg-disabled/gpg @@ -0,0 +1,4 @@ +#!/bin/sh + +echo "Should not be used!" >&2 +exit 1 diff --git a/test/integration/tests/upload/files/gpg-disabled/gpg2 b/test/integration/tests/upload/files/gpg-disabled/gpg2 new file mode 120000 index 0000000000..a7506d694e --- /dev/null +++ b/test/integration/tests/upload/files/gpg-disabled/gpg2 @@ -0,0 +1 @@ +gpg \ No newline at end of file diff --git a/test/integration/tests/upload/files/stack.yaml b/test/integration/tests/upload/files/stack.yaml new file mode 100644 index 0000000000..4778629d76 --- /dev/null +++ b/test/integration/tests/upload/files/stack.yaml @@ -0,0 +1,4 @@ +resolver: lts-11.6 +packages: + - . +hackage-base-url: http://localhost:12415/ diff --git a/test/integration/tests/upload/files/uploadtest.cabal b/test/integration/tests/upload/files/uploadtest.cabal new file mode 100644 index 0000000000..fbf051d525 --- /dev/null +++ b/test/integration/tests/upload/files/uploadtest.cabal @@ -0,0 +1,13 @@ +build-type: Simple +name: uploadtest +version: 0.0.0 +category: test +maintainer: uploadtest@example.com +cabal-version: 1.20 +synopsis: Upload test +description: Upload test description +license: BSD3 +library + build-depends: base >= 4.7 && < 5 + exposed-modules: Foo + default-language: Haskell2010