|
60 | 60 | Platform arch _ = buildPlatform |
61 | 61 | gArch = arch |
62 | 62 | gBinarySuffix = "" |
| 63 | + gUploadLabel = Nothing |
63 | 64 | gLocalInstallRoot = "" -- Set to real value below. |
64 | 65 | gProjectRoot = "" -- Set to real value velow. |
65 | 66 | global0 = foldl (flip id) Global{..} flags |
@@ -100,7 +101,10 @@ options = |
100 | 101 | "Architecture to build (e.g. 'i386' or 'x86_64')." |
101 | 102 | , Option "" [binaryVariantOptName] |
102 | 103 | (ReqArg (\v -> Right $ \g -> g{gBinarySuffix = v}) "SUFFIX") |
103 | | - "Extra suffix to add to binary executable archive filename." ] |
| 104 | + "Extra suffix to add to binary executable archive filename." |
| 105 | + , Option "" [uploadLabelOptName] |
| 106 | + (ReqArg (\v -> Right $ \g -> g{gUploadLabel = Just v}) "LABEL") |
| 107 | + "Label to give the uploaded release asset" ] |
104 | 108 |
|
105 | 109 | -- | Shake rules. |
106 | 110 | rules :: Global -> [String] -> Rules () |
@@ -133,9 +137,13 @@ rules global@Global{..} args = do |
133 | 137 | phony archBuildPhony $ need [archDir </> archPackageFileName] |
134 | 138 |
|
135 | 139 | releaseDir </> "*" <.> uploadExt %> \out -> do |
136 | | - need [dropExtension out] |
137 | | - uploadToGithubRelease global (dropExtension out) |
138 | | - copyFileChanged (dropExtension out) out |
| 140 | + let srcFile = dropExtension out |
| 141 | + mUploadLabel = |
| 142 | + if takeExtension srcFile == ascExt |
| 143 | + then fmap (++ " (GPG signature)") gUploadLabel |
| 144 | + else gUploadLabel |
| 145 | + uploadToGithubRelease global srcFile mUploadLabel |
| 146 | + copyFileChanged srcFile out |
139 | 147 |
|
140 | 148 | releaseCheckDir </> binaryExeFileName %> \out -> do |
141 | 149 | need [installBinDir </> stackExeFileName] |
@@ -396,15 +404,6 @@ rules global@Global{..} args = do |
396 | 404 | binaryExeFileName = binaryName global <.> exe |
397 | 405 | stackExeFileName = stackProgName <.> exe |
398 | 406 |
|
399 | | - zipExt = "zip" |
400 | | - tarGzExt = tarExt <.> gzExt |
401 | | - gzExt = "gz" |
402 | | - tarExt = "tar" |
403 | | - ascExt = "asc" |
404 | | - uploadExt = "upload" |
405 | | - debExt = "deb" |
406 | | - rpmExt = "rpm" |
407 | | - |
408 | 407 | debStagedDocDir dv = debStagingDir dv </> "usr/share/doc" </> stackProgName |
409 | 408 | debStagedBashCompletionFile dv = debStagingDir dv </> "etc/bash_completion.d/stack" |
410 | 409 | debStagedExeFile dv = debStagingDir dv </> "usr/bin/stack" |
@@ -453,25 +452,39 @@ rules global@Global{..} args = do |
453 | 452 |
|
454 | 453 | anyDistroVersion distro = DistroVersion distro "*" "*" |
455 | 454 |
|
| 455 | + zipExt = ".zip" |
| 456 | + tarGzExt = tarExt <.> gzExt |
| 457 | + gzExt = ".gz" |
| 458 | + tarExt = ".tar" |
| 459 | + ascExt = ".asc" |
| 460 | + uploadExt = ".upload" |
| 461 | + debExt = ".deb" |
| 462 | + rpmExt = ".rpm" |
| 463 | + |
456 | 464 |
|
457 | 465 | -- | Upload file to Github release. |
458 | | -uploadToGithubRelease :: Global -> FilePath -> Action () |
459 | | -uploadToGithubRelease global@Global{..} file = do |
| 466 | +uploadToGithubRelease :: Global -> FilePath -> Maybe String -> Action () |
| 467 | +uploadToGithubRelease global@Global{..} file mUploadLabel = do |
460 | 468 | putNormal $ "Uploading to Github: " ++ file |
| 469 | + need [file] |
461 | 470 | GithubRelease{..} <- getGithubRelease |
462 | 471 | resp <- liftIO $ callGithubApi global |
463 | 472 | [(CI.mk $ S8.pack "Content-Type", defaultMimeLookup (T.pack file))] |
464 | 473 | (Just file) |
465 | 474 | (replace |
466 | | - "{?name}" |
467 | | - ("?name=" ++ S8.unpack (urlEncode True (S8.pack (takeFileName file)))) |
| 475 | + "{?name,label}" |
| 476 | + ("?name=" ++ urlEncodeStr (takeFileName file) ++ |
| 477 | + (case mUploadLabel of |
| 478 | + Nothing -> "" |
| 479 | + Just uploadLabel -> "&label=" ++ urlEncodeStr uploadLabel)) |
468 | 480 | relUploadUrl) |
469 | 481 | case eitherDecode resp of |
470 | 482 | Left e -> error ("Could not parse Github asset upload response (" ++ e ++ "):\n" ++ L8.unpack resp ++ "\n") |
471 | 483 | Right (GithubReleaseAsset{..}) -> |
472 | 484 | when (assetState /= "uploaded") $ |
473 | 485 | error ("Invalid asset state after Github asset upload: " ++ assetState) |
474 | 486 | where |
| 487 | + urlEncodeStr = S8.unpack . urlEncode True . S8.pack |
475 | 488 | getGithubRelease = do |
476 | 489 | releases <- getGithubReleases |
477 | 490 | let tag = fromMaybe ("v" ++ stackVersionStr global) gGithubReleaseTag |
@@ -600,6 +613,10 @@ archOptName = "arch" |
600 | 613 | binaryVariantOptName :: String |
601 | 614 | binaryVariantOptName = "binary-variant" |
602 | 615 |
|
| 616 | +-- | @--upload-label@ command-line option name. |
| 617 | +uploadLabelOptName :: String |
| 618 | +uploadLabelOptName = "upload-label" |
| 619 | + |
603 | 620 | -- | Arguments to pass to all 'stack' invocations. |
604 | 621 | stackArgs :: Global -> [String] |
605 | 622 | stackArgs Global{..} = ["--arch=" ++ display gArch] |
@@ -647,5 +664,6 @@ data Global = Global |
647 | 664 | , gProjectRoot :: !FilePath |
648 | 665 | , gHomeDir :: !FilePath |
649 | 666 | , gArch :: !Arch |
650 | | - , gBinarySuffix :: !String } |
| 667 | + , gBinarySuffix :: !String |
| 668 | + , gUploadLabel ::(Maybe String)} |
651 | 669 | deriving (Show) |
0 commit comments