2010/01/21

So it starts like this

A couple of days ago, I needed to create a list of the third party libraries provided by jboss eap 4.3, that list was going to be used to allow the developers to know which versions of the libraries they can configure in their applications and it should be put in our wiki for everyone to see.

We have the following requirements:
  • ant 1.6.5+
  • subversion
  • python 2.5+
  • a running version of confluence

The first step is to checkout some files from the corresponding tag from the jboss public repository
mkdir ~/temp
cd ~/temp
svn co http://anonsvn.jboss.org/repos/jbossas/tags/JBPAPP_4_3_0_GA/build
svn co http://anonsvn.jboss.org/repos/jbossas/tags/JBPAPP_4_3_0_GA/tools
svn co http://anonsvn.jboss.org/repos/jbossas/tags/JBPAPP_4_3_0_GA/thirdparty

The second step is to run the corresponding ant build to generate the components info files
cd ~/temp/build
ant -f build-thirdparty.xml

Download this script and replace CHANGEME with the path to the correct location.
import os
import urllib2
import re
from BeautifulSoup import BeautifulSoup


basedir = '/CHANGEME/temp/thirdparty' # this is the directory that needs to be changed
infofile = 'component-info.xml'
ts = '|'
header = '||Component||Library||Version||Description||Comment||'

print header

for dir in sorted(os.listdir(basedir)):
    if dir == '':
        print 'The directory structure is not adequate'
        break
    filepath = ''.join([basedir, '/', dir, '/', infofile])
    if os.path.exists(filepath):
        filepath = ''.join(['file://',filepath])
        file = urllib2.urlopen(filepath)
    else:
        continue

    xml = file.read()
    soup = BeautifulSoup(xml)

    for attr, value in soup.find('component').attrs:
        if attr == 'id':
            c_attr = value
        elif attr == 'description':
            d_attr = str(value).replace('\n', '').replace('  ', '')
        elif attr == 'version':
            v_attr = value
        else:
            continue

    artifacts = soup.findAll('artifact')
    for line in artifacts:
        ids = re.split('"', str(line))
        print ts + c_attr + ts + ids[1] + ts + v_attr + ts + d_attr + ts + " " + ts

And finally run the script
python /path/to/the/script/jbjarversion.py > list

In 'list' you have the list formatted to be a confluence table.

No comments: