Personal tools

Arch Linux/Arch Haskell Group Maintainership

From HaskellWiki

< Arch Linux(Difference between revisions)
Jump to: navigation, search
Line 81: Line 81:
 
     echo scp /tmp/aur.xml code.haskell.org:/srv/code/arch/
 
     echo scp /tmp/aur.xml code.haskell.org:/srv/code/arch/
 
     cp /tmp/aur.xml $HOME
 
     cp /tmp/aur.xml $HOME
 +
 +
=== Uploading a package: an example ===
 +
 +
1. See a new package on the Hackage feed.
 +
2. Visit the Hackage page for the package.
 +
3. Copy the URL of the .cabal file
 +
    * e.g. "http://hackage.haskell.org/packages/archive/http-enumerator/0.0.1/http-enumerator.cabal"
 +
4. Run the build tool:
 +
    * $ build-package.sh http://hackage.haskell.org/packages/archive/http-enumerator/0.0.1/http-enumerator.cabal
 +
5. If dependent packages are missing, install them (e.g. with bauerbill) (see the "get" script) (or recursively create new packages for any that are missing in AUR).
 +
6. The script updates the RSS feed. Copy that to the server occasionally.
  
  

Revision as of 17:03, 9 October 2010

The Arch Haskell group maintains AUR packages for Haskell. The Arch Haskell packages make up around 10% of total AUR packages (~2000 packages).

To make the task of implementing the Arch Haskell policy of tracking AUR feasible, we take two approaches:

  • massive automation of Hackage to AUR regular conversion, via cabal2arch and the archlinux utilities library
  • group participation in updating packages.

The first step ensures a consistent user experience:

  • cabal2arch should be used to generate all Haskell AUR packages,
  • which ensures all naming conventions and other policies are followed,

The second point ensures the Arch Haskell project isn't vulernable to "bus errors" where a user burns out.

Contents

1 The job of an Arch Haskell group maintainer

The concern of an Arch Haskell maintainer is as follows.

  • Ensure AUR tracks Hackage versions of packages.

To do this, the following work is done:

  • Watch the Hackage RSS feed
  • When new packages appear, attempt to build and upload them, with the "build" script (below).

2 The "build" script

The "build" script is a shell program that wraps cabal2arch. You should always have the latest version of cabal2arch installed. The set of tools you need to run this script are:

  • The haskell-archlinux package.
  • cabal2arch
  • aurploader
  • feed-cli
  • get-aur-url
  • update-aur-log
  • makepkg/pacman

   #
   # Given a hackage .cabal url, build and upload a Arch Linux package
   # Update build reports and package publication feed.
   #
   cd /tmp/
   set -e
   # generate package
   project=`cabal2arch $* 2>&1 | tail -1 | sed 's/Created *//' | xargs basename | sed 's/\..*$//'`
   echo $project
   cd $project
   pkg=`sed -n '/pkgname/{s/pkgname=//;p;q}' PKGBUILD`
   # build package
   if makepkg -f ; then
       # update build report
       echo "$pkg True" >> $HOME/.build-all.log
   else
       exit 1
   fi
   cd ..
   # upload package
   echo "Uploading $project.tar.gz"
   aurploader -k $project.tar.gz
   # emit build status information
   # update-aur-log reads the .cabal2arch.log to pass data to feed-cli
   tail -1 ~/.cabal2arch.log | update-aur-log
   # now update the publications list . needs get-arch-url
   cp $HOME/aur.xml /tmp/
   url=`$HOME/bin/get-arch-url $project || cat /tmp/link`
   echo $url
   feed-cli new-item -t`cat /tmp/title` --description-file=/tmp/desc -u/tmp/aur.xml -l"$url"
   rm /tmp/link
   rm /tmp/title
   rm /tmp/desc
   echo scp /tmp/aur.xml code.haskell.org:/srv/code/arch/
   cp /tmp/aur.xml $HOME

2.1 Uploading a package: an example

1. See a new package on the Hackage feed.
2. Visit the Hackage page for the package. 
3. Copy the URL of the .cabal file
   * e.g. "http://hackage.haskell.org/packages/archive/http-enumerator/0.0.1/http-enumerator.cabal"
4. Run the build tool:
   * $ build-package.sh http://hackage.haskell.org/packages/archive/http-enumerator/0.0.1/http-enumerator.cabal
5. If dependent packages are missing, install them (e.g. with bauerbill) (see the "get" script) (or recursively create new packages for any that are missing in AUR).
6. The script updates the RSS feed. Copy that to the server occasionally. 


3 Package Quality Assurance

One script generates this table from build success logs:

4 Package Publication and Notification

Another updates the RSS feed, so that packages are publicized:

5 Mapping to Hackage

Yet another updates the distro mapping, so that AUR links are displayed on Hackage

6 Maintaining cabal2arch

  • Some notable Haskell programs (such as yi) ship a library. cabal2arch will by default call it "haskell-yi", which isn't desirable for high profile applications that incidentally ship a library. cabal2arch has a list of exceptions to this rule. If you find a package needing such an exception, edit the `shouldNotBeLibraries` list in Main.hs
  • Many C libraries are listed in .cabal files by different names to the Arch Linux packages. For example, "webkit" in a .cabal file is actually "libwebkit" under pacman. Cabal2arch has a list of such associations, that ensures the right C libraries are installed with the Haskell code. Keeping this list of associations up to date is a key advantage of cabal2arch over cabal-install. Edi t the ` translationTable` list in Main.hs as part of cabal2arch.