Skip to content

Commit efe31ba

Browse files
authored
Merge pull request #1043 from ysangkok/link-build-report
Link build report from badge
2 parents 973096d + e82d635 commit efe31ba

File tree

5 files changed

+44
-24
lines changed

5 files changed

+44
-24
lines changed

datafiles/templates/Html/package-page.html.st

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,10 +56,20 @@
5656
</div>
5757

5858
<div id="badges" style="margin-top: 20px;">
59-
$if(install.0)$<img src="https://img.shields.io/static/v1?label=Build&message=$install.2$&color=$install.1$" />$endif$
60-
$if(test.0)$<img src="https://img.shields.io/static/v1?label=Tests&message=$test.2$&color=$test.1$" />$endif$
61-
$if(covg.0)$<img src="https://img.shields.io/static/v1?label=Coverage&message=$covg.2$%&color=$covg.1$" />$endif$
62-
$if(!hasExecOnly)$<img src="https://img.shields.io/static/v1?label=Documentation&message=$if(hasDocs)$Available$else$Unavailable$endif$&color=$if(hasDocs)$success$else$critical$endif$" />$endif$
59+
$if(install.0)$
60+
<a href="$install.3$">
61+
<img src="https://img.shields.io/static/v1?label=Build&message=$install.2$&color=$install.1$" />
62+
</a>
63+
$endif$
64+
$if(test.0)$
65+
<img src="https://img.shields.io/static/v1?label=Tests&message=$test.2$&color=$test.1$" />
66+
$endif$
67+
$if(covg.0)$
68+
<img src="https://img.shields.io/static/v1?label=Coverage&message=$covg.2$%&color=$covg.1$" />
69+
$endif$
70+
$if(!hasExecOnly)$
71+
<img src="https://img.shields.io/static/v1?label=Documentation&message=$if(hasDocs)$Available$else$Unavailable$endif$&color=$if(hasDocs)$success$else$critical$endif$" />
72+
$endif$
6373
</div>
6474

6575
<div id="modules">

src/Distribution/Server/Features/BuildReports.hs

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
{-# LANGUAGE RankNTypes, NamedFieldPuns, RecordWildCards #-}
22
module Distribution.Server.Features.BuildReports (
3+
BuildReportId(..),
34
ReportsFeature(..),
45
ReportsResource(..),
56
initBuildReportsFeature
@@ -45,7 +46,7 @@ data ReportsFeature = ReportsFeature {
4546
queryPackageReports :: forall m. MonadIO m => PackageId -> m [(BuildReportId, BuildReport)],
4647
queryBuildLog :: forall m. MonadIO m => BuildLog -> m Resource.BuildLog,
4748
pkgReportDetails :: forall m. MonadIO m => (PackageIdentifier, Bool) -> m BuildReport.PkgDetails,
48-
queryLastReportStats:: forall m. MonadIO m => PackageIdentifier -> m (Maybe BuildReport, Maybe BuildCovg),
49+
queryLastReportStats:: forall m. MonadIO m => PackageIdentifier -> m (Maybe (BuildReportId, BuildReport, Maybe BuildCovg)),
4950
reportsResource :: ReportsResource
5051
}
5152

@@ -202,17 +203,17 @@ buildReportsFeature name
202203
latestRpt <- queryState reportsState $ LookupLatestReport pkgid
203204
(time, ghcId) <- case latestRpt of
204205
Nothing -> return (Nothing,Nothing)
205-
Just (brp, _, _) -> do
206+
Just (_, brp, _, _) -> do
206207
let (CompilerId _ vrsn) = compiler brp
207208
return (time brp, Just vrsn)
208209
return (BuildReport.PkgDetails pkgid docs failCnt time ghcId)
209210

210-
queryLastReportStats :: MonadIO m => PackageIdentifier -> m (Maybe BuildReport, Maybe BuildCovg)
211+
queryLastReportStats :: MonadIO m => PackageIdentifier -> m (Maybe (BuildReportId, BuildReport, Maybe BuildCovg))
211212
queryLastReportStats pkgid = do
212-
rpt <- queryState reportsState $ LookupLatestReport pkgid
213-
case rpt of
214-
Nothing -> return (Nothing, Nothing)
215-
Just (a,_,b) -> return (Just a, b)
213+
lookupRes <- queryState reportsState $ LookupLatestReport pkgid
214+
case lookupRes of
215+
Nothing -> return Nothing
216+
Just (rptId, rpt, _, covg) -> return (Just (rptId, rpt, covg))
216217

217218

218219
---------------------------------------------------------------------------

src/Distribution/Server/Features/BuildReports/BuildReports.hs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -193,14 +193,15 @@ lookupFailCount pkgid buildReports = do
193193
rp <- Map.lookup pkgid (reportsIndex buildReports)
194194
return $ buildStatus rp
195195

196-
lookupLatestReport :: PackageId -> BuildReports -> Maybe (BuildReport, Maybe BuildLog, Maybe BuildCovg)
196+
lookupLatestReport :: PackageId -> BuildReports -> Maybe (BuildReportId, BuildReport, Maybe BuildLog, Maybe BuildCovg)
197197
lookupLatestReport pkgid buildReports = do
198198
rp <- Map.lookup pkgid (reportsIndex buildReports)
199199
let rs = reports rp
200-
a <- if Map.null rs
201-
then Nothing
202-
else Just $ fst $ Map.findMax rs
203-
Map.lookup a rs
200+
(maxKey, (rep, buildLog, covg)) <-
201+
if Map.null rs
202+
then Nothing
203+
else Just $ Map.findMax rs
204+
Just (maxKey, rep, buildLog, covg)
204205

205206
-- addPkg::`
206207
-------------------

src/Distribution/Server/Features/BuildReports/State.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ resetFailCount pkgid = do
7777
lookupFailCount :: PackageId -> Query BuildReports (Maybe BuildStatus)
7878
lookupFailCount pkgid = asks (BuildReports.lookupFailCount pkgid)
7979

80-
lookupLatestReport :: PackageId -> Query BuildReports (Maybe (BuildReport, Maybe BuildLog, Maybe BuildCovg))
80+
lookupLatestReport :: PackageId -> Query BuildReports (Maybe (BuildReportId, BuildReport, Maybe BuildLog, Maybe BuildCovg))
8181
lookupLatestReport pkgid = asks (BuildReports.lookupLatestReport pkgid)
8282

8383
makeAcidic ''BuildReports ['addReport

src/Distribution/Server/Features/Html.hs

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ module Distribution.Server.Features.Html (
44
initHtmlFeature
55
) where
66

7+
import Control.Arrow ((&&&))
78
import Prelude ()
89
import Distribution.Server.Prelude
910

@@ -578,8 +579,11 @@ mkHtmlCore ServerEnv{serverBaseURI, serverBlobStore}
578579
documentationFeature reportsFeature realpkg
579580
mdocIndex <- maybe (return Nothing)
580581
(liftM Just . liftIO . cachedTarIndex) mdoctarblob
581-
let (install, test, covg) = getBadgeStats rptStats
582582
let
583+
idAndReport = fmap (\(rptId, rpt, _) -> (rptId, rpt)) rptStats
584+
install = getInstall $ fmap (fst &&& BR.installOutcome . snd) idAndReport
585+
test = getTest $ fmap ( BR.testsOutcome . snd) idAndReport
586+
covg = getAvgCovg $ (\(_, _, cvg) -> cvg) =<< rptStats
583587
loadDocMeta
584588
| Just doctarblob <- mdoctarblob
585589
, Just docIndex <- mdocIndex
@@ -632,12 +636,16 @@ mkHtmlCore ServerEnv{serverBaseURI, serverBlobStore}
632636
utilities
633637
False
634638
where
635-
getBadgeStats (rpt, cvg) = (getInstall (fmap BR.installOutcome rpt), getTest (fmap BR.testsOutcome rpt), getAvgCovg cvg)
636-
637-
getInstall Nothing = (False, "", "")
638-
getInstall (Just BR.InstallOk) = (True, "success", "InstallOk")
639-
getInstall (Just (BR.DependencyFailed _)) = (True, "critical", "DependencyFailed")
640-
getInstall (Just k) = (True, "critical", show k)
639+
getInstall Nothing = (False, "", "", "")
640+
getInstall (Just (rptId, buildStatus)) =
641+
(isBadgeShowing, badgeColor, badgeText, rptUrl)
642+
where
643+
BuildReportId rawId = rptId
644+
rptUrl = "reports/" <> show rawId
645+
badgeContent BR.InstallOk = (True, "success", "InstallOk")
646+
badgeContent (BR.DependencyFailed _) = (True, "critical", "DependencyFailed")
647+
badgeContent k = (True, "critical", show k)
648+
(isBadgeShowing, badgeColor, badgeText) = badgeContent buildStatus
641649

642650
getTest (Just BR.Ok) = (True, "success", "Passed")
643651
getTest (Just BR.Failed) = (True, "critical", "Failed")

0 commit comments

Comments
 (0)