view bin/publishstaticweb.py @ 441:eadcb1bb54e2

Merged revisions 388-399 via svnmerge from svn+ssh://svn.wald.intevation.org/treepkg/branches/treepkg-status ........ r388 | bricks | 2010-07-28 10:38:50 +0200 (Mi, 28 Jul 2010) | 3 lines fix if statement upload hook should be called if it's not empty ........ r389 | bricks | 2010-07-28 13:38:00 +0200 (Mi, 28 Jul 2010) | 2 lines only rsync specified architectures from cachedir to publishdir ........ r390 | bricks | 2010-07-29 14:07:57 +0200 (Do, 29 Jul 2010) | 2 lines introduced after_copy_hook and made rsync upload to publishdir optional ........ r391 | bricks | 2010-07-29 15:43:39 +0200 (Do, 29 Jul 2010) | 3 lines publish package must be default to get original behaviour be more verbose at publishing ........ r392 | bricks | 2010-07-29 16:50:53 +0200 (Do, 29 Jul 2010) | 2 lines fix handling of showing only successfull builds together with num packages ........ r393 | bricks | 2010-07-29 16:52:42 +0200 (Do, 29 Jul 2010) | 2 lines fixed typo ........ r394 | bricks | 2010-07-29 16:59:10 +0200 (Do, 29 Jul 2010) | 2 lines fixed another typo ........ r395 | bricks | 2010-07-29 18:05:54 +0200 (Do, 29 Jul 2010) | 3 lines fixed another typo treepkg is really slow with many revisions ........ r396 | bricks | 2010-08-02 12:41:55 +0200 (Mo, 02 Aug 2010) | 2 lines fixed typos ........ r397 | bricks | 2010-08-02 17:36:12 +0200 (Mo, 02 Aug 2010) | 3 lines be more error prone in listing different files not checking if a dir exists caused several errors if a build wasn't successful ........ r398 | bricks | 2010-08-05 18:21:47 +0200 (Do, 05 Aug 2010) | 2 lines review changes ........ r399 | bricks | 2010-08-06 13:06:08 +0200 (Fr, 06 Aug 2010) | 4 lines cleanup modules fix test_info testcases added testcases for remove_trailingslashes and expand_filename ........
author Bjoern Ricks <bricks@intevation.de>
date Fri, 06 Aug 2010 13:41:54 +0000
parents ef87d30468b6
children bccd69dedbe5
line wrap: on
line source
#! /usr/bin/python
# Copyright (C) 2007, 2008, 2009 by Intevation GmbH
# Authors:
# Bernhard Herzog <bh@intevation.de>
#
# This program is free software under the GPL (>=v2)
# Read the file COPYING coming with the software for details.

"""Publishes a static web-site with a status report"""

import sys
import os
from optparse import OptionParser
from ConfigParser import SafeConfigParser

import treepkgcmd
from treepkg.readconfig import read_config_section
from treepkg.run import call
from treepkg.cmdexpand import cmdexpand
from treepkg.util import ensure_directory

def remove_trailing_slashes(s):
    return s.rstrip("/")

def expand_filename(filename):
    """
    Applies os.path.expanduser and os.path.expandvars to filename
    """
    return os.path.expandvars(os.path.expanduser(filename))

staticweb_desc = ["build_user", "build_host", "build_create", "build_template",
                  "build_logs",
                  ("build_dir", remove_trailing_slashes),
                  "publish_user", "publish_host",
                  ("publish_dir", remove_trailing_slashes),
                  ("cachedir",
                   lambda s: expand_filename(remove_trailing_slashes(s)))]

#Default values for the configuration options can be set here
staticweb_defaults = [("build_logs", "build_log.txt.gz")]

def read_config(filename):
    parser = SafeConfigParser()
    parser.add_section("staticweb")
    for value in staticweb_defaults:
        parser.set("staticweb", value[0], value[1])
    parser.read([filename])
    return read_config_section(parser, "staticweb", staticweb_desc)

def parse_commandline():
    parser = OptionParser()
    parser.set_defaults(config_file=os.path.join(treepkgcmd.topdir,
                                                 "staticweb.cfg"))
    parser.set_defaults(update_cache_only=False)
    parser.add_option("--config-file",
                      help=("The configuration file. Default is staticweb.cfg"))
    parser.add_option("--update-cache-only", action="store_true",
                      help=("Stop after updating the cache."
                            " This omits the last step of the publishing"
                            " process"))
    return parser.parse_args()

def publish_static_site(config_filename, update_cache_only=False):
    config = read_config(config_filename)

    # create web-page on build host
    call(cmdexpand("ssh $build_user$@$build_host $build_create"
                   " --show-logs=$build_logs"
                   " --status-template=$build_template $build_dir",
                   **config))

    # rsync the new web-pages to the local cache
    ensure_directory(config["cachedir"])
    call(cmdexpand("rsync -rL --delete $build_user$@$build_host:$build_dir/"
                   " $cachedir",
                   **config))

    if not update_cache_only:
        # rsync the web pages from the local cache to the publishing host
        call(cmdexpand("rsync -rL --delete $cachedir/"
                       " $publish_user$@$publish_host:$publish_dir",
                       **config))


def main():
    options, args = parse_commandline()
    publish_static_site(options.config_file, options.update_cache_only)

main()
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)