mirror of
https://github.com/commercialhaskell/stackage-server.git
synced 2026-01-11 19:58:28 +01:00
* Moved all extensions into modules that are using them, rather than globally, since they mess up ghci session and introduce conflicts among packages. Removed those from `.ghci` file as well * Redesigned the schema to use Pantry and moved it into it's own module * Switched all of the db and cron related stuff to RIO. Yesod part is still on classy-prelude * Got pantry to update stackage-server database from hackage * Got import of stackage-snapshots implemented * Moved some logic from all-cabal-tool * Switched everything to `PackageNameP`, `VersionP`, etc. from a la Text. * Fixed haddock, so it now does proper redirects and pipes the docs correctly. Also implemented piping of json files from S3 bucket, so index-doc.json is also served by stackage-server thus making Ctrl+S feature work properly on haddock. Fix for commercialhaskell/stackage#4301 * Import of modules is done through cabal file parsing, which slows down the initial import process drastically, but incremental update is not a problem. * Just as with modules, dependencies are also imported from cabal file. * In general improved type safety by introducing a few data types: eg. `ModuleNameP`, `HackageCabalInfo`, and many more. * Implemented pulling of deprecation map from hackages and storing it in db * Implementation of forward/backward dependencies within a snapshot only. * Drastically improved performance of cron import job, by checking which snapshots are not up to date * Implemented pulling haddock list from S3 bucket. Modules that have documentation are marked from the availability of actual haddock. This process happens concurrently with snapshots loading. * Rearranged modules a bit: * github related functions went into it's own module * cron related functions where moved from Database to Cron module * Split up some functions to reduce individual complexity * Parallelized package loading in cron job * Implemented parsed cabal file caching. * All queries where reqritten with esqueleto * Syntactic improvements: * Added stylish-haskell config * Formatted all imports and extensions with stylish-haskell. * Fixed inconsistent indentation across all modules * Many improvements to the package page as well as few others. * Reimplemented hoogledb creation. * Dropped dependency on tar in favor of tar-conduit * Added cli for stackage-server-cron * Add cabal sha and size to the package page * Fixed links in hoogle searches. Improved type safety for a hoogle handler * satckage-server-cron is customizable with cli arguments Final adjustments for the new stackage server release: * Upgrade to lts-13.16. * Stackage server related code has been merged to pantry. Made the code compatible with the newer version pantry * Added cli '--snapshots-repo' * Add readme to package page * Adjust snapshots expected format: * Added `publish-time` * Removed name `field` * `compiler` field is now in the `resolver` field with fallback to the root
188 lines
8.3 KiB
Plaintext
188 lines
8.3 KiB
Plaintext
$newline never
|
|
<div .container #snapshot-home .content :isDeprecated:.deprecated>
|
|
<div .row>
|
|
<div .span12>
|
|
$if isDeprecated
|
|
<h1 .package-deprecation-warning>
|
|
Deprecated
|
|
$if (not $ null inFavourOf)
|
|
<div .in-favour-of>
|
|
In favour of
|
|
<div .in-favour-of-list>
|
|
$forall (i, pn) <- enumerate inFavourOf
|
|
$if i /= 0
|
|
, #
|
|
<a href="@{PackageR pn}">
|
|
#{pn}
|
|
<h1>
|
|
#{pname}
|
|
<p .synopsis>
|
|
#{piSynopsis}
|
|
\ #
|
|
$maybe url <- piHomepage
|
|
<a href="#{url}">
|
|
#{url}
|
|
|
|
<table>
|
|
$maybe displayedVersion <- mdisplayedVersion
|
|
<tr>
|
|
<td align=right>Version on this page:
|
|
<td>
|
|
<span .version>#{displayedVersion}
|
|
$maybe sppi <- msppi
|
|
$forall li <- sppiLatestInfo sppi
|
|
<tr>
|
|
<td align="right">
|
|
<a href=@{SnapshotR (liSnapName li) StackageHomeR}>
|
|
#{snapshotPrettyNameShort (liSnapName li)}
|
|
:
|
|
<td>
|
|
<span .version>
|
|
<a href=@{SnapshotR (liSnapName li) (StackageSdistR (PNVName pname))}>#{liVersionRev li}
|
|
$maybe hciLatest <- mhciLatest
|
|
<tr>
|
|
<td align="right">Latest on Hackage:
|
|
<td>
|
|
<a href="https://hackage.haskell.org/package/#{hciPackageName hciLatest}">
|
|
<span .version>#{hciVersionRev hciLatest}
|
|
|
|
$if isNothing msppi
|
|
<p .add-to-nightly>
|
|
This package is not currently in any snapshots. If you're interested in using it, we recommend #
|
|
<a href="https://github.com/fpco/stackage/#add-your-package">adding it to Stackage Nightly
|
|
. Doing so will make builds more reliable, and allow stackage.org to host generated Haddocks.
|
|
$else
|
|
<p>
|
|
<a href=@{PackageSnapshotsR pname}>See all snapshots <code>#{pname}</code> appears in
|
|
|
|
<div .row>
|
|
<div .span12>
|
|
<div .authorship>
|
|
<span .license>
|
|
#{piLicenseName} licensed #
|
|
$if null maintainers
|
|
and maintained #
|
|
$if not (null authors)
|
|
by #
|
|
$forall (i,identity) <- authors
|
|
<strong .author>
|
|
$case identity
|
|
$of PlainText name
|
|
$if i /= 0
|
|
, #
|
|
#{name}
|
|
$of Contact name email
|
|
$if i /= 0
|
|
, #
|
|
<a href="mailto:#{renderEmail email}">
|
|
#{name}
|
|
$of _
|
|
|
|
<div .maintainer>
|
|
$if not (null maintainers)
|
|
Maintained by #
|
|
$forall (i,identity) <- maintainers
|
|
<strong .author>
|
|
$case identity
|
|
$of PlainText name
|
|
$if i /= 0
|
|
, #
|
|
#{name}
|
|
$of Contact name email
|
|
$if i /= 0
|
|
, #
|
|
<a href="mailto:#{renderEmail email}">
|
|
#{name}
|
|
$of EmailOnly email
|
|
$if i /= 0
|
|
, #
|
|
<a href="mailto:#{renderEmail email}">
|
|
#{renderEmail email}
|
|
|
|
|
|
$maybe sppi <- msppi
|
|
$with spi <- sppiSnapshotPackageInfo sppi
|
|
<div .docs>
|
|
<h4>
|
|
Module documentation for #{spiVersion spi}
|
|
$maybe pantryCabal <- sppiPantryCabal sppi
|
|
<div .pantry-version>
|
|
This version can be pinned in stack with:
|
|
<code>#{pantryCabal}
|
|
$if null (sppiModuleNames sppi)
|
|
<p>There are no documented modules for this package.
|
|
$else
|
|
^{hoogleForm (spiSnapName spi)}
|
|
^{renderModules sppi}
|
|
|
|
$if not (LT.null (LT.renderHtml piReadme))
|
|
<div .markdown-container .readme-container>
|
|
<div .container .content>
|
|
<div .row>
|
|
<div .span12 .expanding>
|
|
#{piReadme}
|
|
<div .bottom-gradient>
|
|
<i class="fa fa-angle-down">
|
|
$elseif not (LT.null (LT.renderHtml piDescription))
|
|
<div .markdown-container .readme-container>
|
|
<div .container .content>
|
|
<div .row>
|
|
<div .span12 .expanding>
|
|
#{piDescription}
|
|
<div .bottom-gradient>
|
|
<i class="fa fa-angle-down">
|
|
|
|
$if not (LT.null (LT.renderHtml piChangelog))
|
|
<div .container .content id=changes>
|
|
<div .row>
|
|
<div .span12>
|
|
<h2 .changes-title>Changes
|
|
<div .markdown-container .changelog-container .content>
|
|
<div .container>
|
|
<div .row>
|
|
<div .span12 .expanding>
|
|
#{piChangelog}
|
|
<div .bottom-gradient>
|
|
<i class="fa fa-angle-down">
|
|
|
|
<div .container #snapshot-home .content>
|
|
<div .row>
|
|
<div .span12>
|
|
$maybe sppi <- msppi
|
|
$with spi <- sppiSnapshotPackageInfo sppi
|
|
$if (sppiForwardDepsCount sppi > 0)
|
|
<div .dependencies #dependencies>
|
|
Depends on #{renderNumPackages (sppiForwardDepsCount sppi)}
|
|
<em>(<a href=@{makeDepsLink spi SnapshotPackageDepsR}>full list with versions</a>)</em>:
|
|
<div .dep-list>
|
|
$forall (i, (name, range)) <- enumerate (sppiForwardDeps sppi)
|
|
$if i /= 0
|
|
, #
|
|
<a href=@{PackageR name} title=#{range}>
|
|
#{name}
|
|
$if (sppiForwardDepsCount sppi > maxDisplayedDeps)
|
|
, <em>and many more</em>
|
|
$if (sppiReverseDepsCount sppi > 0)
|
|
<div .reverse-dependencies #reverse-dependencies>
|
|
Used by #{renderNumPackages (sppiReverseDepsCount sppi)} in <b>#{spiSnapName spi}</b>
|
|
<em>(<a href=@{makeDepsLink spi SnapshotPackageRevDepsR}>full list with versions</a>)</em>:
|
|
<div .dep-list>
|
|
$forall (i, (name, range)) <- enumerate (sppiReverseDeps sppi)
|
|
$if i /= 0
|
|
, #
|
|
<a href=@{PackageR name} title=#{range}>
|
|
#{name}
|
|
$if (sppiReverseDepsCount sppi > maxDisplayedDeps)
|
|
, <em>and many more</em>
|
|
|
|
|
|
<div .container .content>
|
|
<div .row>
|
|
<div .span12>
|
|
<div id="disqus_thread">
|
|
<script>
|
|
var disqus_shortname = "fpcomplete"; (function() { var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true; dsq.src = 'https://' + disqus_shortname + '.disqus.com/embed.js'; (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq); })();
|
|
<a class="dsq-brlink" href="https://disqus.com">
|
|
comments powered by
|
|
<span class="logo-disqus">Disqus
|