From eb58e310a781f3ee16c03789da84ed4b80101cda Mon Sep 17 00:00:00 2001 From: Clark Boylan Date: Thu, 7 Jun 2012 13:39:27 -0700 Subject: [PATCH] Add FTP doc publishing job. Need to publish documentation to docs.openstack.org. This host does not speak SCP so we cannot use the old SCP documentation publishing job. Replace SCP job with an FTP job (which docs.openstack.org does speak) in order to publish documentation destined for docs.openstack.org. Change-Id: Ie528389c919179eac5fe6c0ca78e3dbe2251bd00 --- .../files/modules/publisher_ftp.py | 97 +++++++++++++++++++ .../files/projects/openstack/cinder.yml | 1 + .../files/projects/openstack/glance.yml | 1 + .../files/projects/openstack/horizon.yml | 1 + .../files/projects/openstack/keystone.yml | 1 + .../files/projects/openstack/nova.yml | 1 + .../openstack/python-cinderclient.yml | 1 + .../openstack/python-glanceclient.yml | 1 + .../openstack/python-keystoneclient.yml | 1 + .../projects/openstack/python-novaclient.yml | 1 + .../openstack/python-openstackclient.yml | 1 + .../openstack/python-quantumclient.yml | 1 + .../projects/openstack/python-swiftclient.yml | 1 + .../files/projects/openstack/quantum.yml | 1 + .../files/projects/openstack/swift.yml | 1 + .../files/projects/stackforge/ceilometer.yml | 1 + .../files/projects/stackforge/heat.yml | 1 + .../files/projects/stackforge/reddwarf.yml | 1 + .../files/templates/python_jobs.yml | 8 +- 19 files changed, 120 insertions(+), 2 deletions(-) create mode 100644 modules/jenkins_jobs/files/modules/publisher_ftp.py diff --git a/modules/jenkins_jobs/files/modules/publisher_ftp.py b/modules/jenkins_jobs/files/modules/publisher_ftp.py new file mode 100644 index 0000000000..92d71bfea2 --- /dev/null +++ b/modules/jenkins_jobs/files/modules/publisher_ftp.py @@ -0,0 +1,97 @@ +#! /usr/bin/env python +# Copyright (C) 2012 OpenStack, LLC. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +# Jenkins Job module for publishing via ftp +# publish: +# site: 'docs.openstack.org' +# remote_dir: 'dest/dir' +# source_files: 'base/source/dir/**' +# remove_prefix: 'base/source/dir' +# excludes: '**/*.exludedfiletype' +# +# This will upload everything under $workspace/base/source/dir to +# docs.openstack.org $ftpdir/dest/dir exluding the excluded file type. + +import xml.etree.ElementTree as XML + +class publisher_ftp(object): + def __init__(self, data): + self.data = data + + def gen_xml(self, xml_parent): + """ + Example XML: + + + FTP: + + + + docs.openstack.org + true + + + + openstack-identity-api/target/docbkx/webhelp/api/openstack-identity-service/2.0/** + **/*.xml,**/null* + openstack-identity-api/target/docbkx/webhelp + false + false + false + false + + + false + false + + + false + false + false + + + + + """ + publish = self.data['publisher'] + outer_publishers = XML.SubElement(xml_parent, 'publishers') + outer_ftp = XML.SubElement(outer_publishers, 'jenkins.plugins.publish__over__ftp.BapFtpPublisherPlugin') + XML.SubElement(outer_ftp, 'consolePrefix').text = 'FTP: ' + delegate = XML.SubElement(outer_ftp, 'delegate') + publishers = XML.SubElement(delegate, 'publishers') + ftp = XML.SubElement(publishers, 'jenkins.plugins.publish__over__ftp.BapFtpPublisher') + XML.SubElement(ftp, 'configName').text = publish['site'] + XML.SubElement(ftp, 'verbose').text = 'true' + + transfers = XML.SubElement(ftp, 'transfers') + ftp_transfers = XML.SubElement(transfers, 'jenkins.plugins.publish__over__ftp.BapFtpTransfer') + # TODO: the next four fields are where the magic happens. Fill them in. + XML.SubElement(ftp_transfers, 'remoteDirectory').text = publish['remote_dir'] + XML.SubElement(ftp_transfers, 'sourceFiles').text = publish['source_files'] + XML.SubElement(ftp_transfers, 'excludes').text = publish['excludes'] + XML.SubElement(ftp_transfers, 'removePrefix').text = publish['remove_prefix'] + XML.SubElement(ftp_transfers, 'remoteDirectorySDF').text = 'false' + XML.SubElement(ftp_transfers, 'flatten').text = 'false' + XML.SubElement(ftp_transfers, 'cleanRemote').text = 'false' + XML.SubElement(ftp_transfers, 'asciiMode').text = 'false' + + XML.SubElement(ftp, 'useWorkspaceInPromotion').text = 'false' + XML.SubElement(ftp, 'usePromotionTimestamp').text = 'false' + XML.SubElement(delegate, 'continueOnError').text = 'false' + XML.SubElement(delegate, 'failOnError').text = 'false' + XML.SubElement(delegate, 'alwaysPublishFromMaster').text = 'false' + XML.SubElement(delegate, 'hostConfigurationAccess', + {'class': 'jenkins.plugins.publish_over_ftp.BapFtpPublisherPlugin', + 'reference': '../..'}) diff --git a/modules/jenkins_jobs/files/projects/openstack/cinder.yml b/modules/jenkins_jobs/files/projects/openstack/cinder.yml index 1aac5a64b8..461ae33056 100644 --- a/modules/jenkins_jobs/files/projects/openstack/cinder.yml +++ b/modules/jenkins_jobs/files/projects/openstack/cinder.yml @@ -7,4 +7,5 @@ values: github_org: 'openstack' review_site: 'review.openstack.org' publisher_site: 'nova.openstack.org' + doc_publisher_site: 'docs.openstack.org' node: 'precise' diff --git a/modules/jenkins_jobs/files/projects/openstack/glance.yml b/modules/jenkins_jobs/files/projects/openstack/glance.yml index eed97e9e88..98f6493abe 100644 --- a/modules/jenkins_jobs/files/projects/openstack/glance.yml +++ b/modules/jenkins_jobs/files/projects/openstack/glance.yml @@ -7,4 +7,5 @@ values: github_org: 'openstack' review_site: 'review.openstack.org' publisher_site: 'nova.openstack.org' + doc_publisher_site: 'docs.openstack.org' node: 'precise' diff --git a/modules/jenkins_jobs/files/projects/openstack/horizon.yml b/modules/jenkins_jobs/files/projects/openstack/horizon.yml index e6c2956e79..4a72401a47 100644 --- a/modules/jenkins_jobs/files/projects/openstack/horizon.yml +++ b/modules/jenkins_jobs/files/projects/openstack/horizon.yml @@ -7,4 +7,5 @@ values: github_org: 'openstack' review_site: 'review.openstack.org' publisher_site: 'nova.openstack.org' + doc_publisher_site: 'docs.openstack.org' node: 'precise' diff --git a/modules/jenkins_jobs/files/projects/openstack/keystone.yml b/modules/jenkins_jobs/files/projects/openstack/keystone.yml index a95a752f40..998bd537e6 100644 --- a/modules/jenkins_jobs/files/projects/openstack/keystone.yml +++ b/modules/jenkins_jobs/files/projects/openstack/keystone.yml @@ -7,4 +7,5 @@ values: github_org: 'openstack' review_site: 'review.openstack.org' publisher_site: 'nova.openstack.org' + doc_publisher_site: 'docs.openstack.org' node: 'precise' diff --git a/modules/jenkins_jobs/files/projects/openstack/nova.yml b/modules/jenkins_jobs/files/projects/openstack/nova.yml index 8a00e1dd88..d2f7ac27e7 100644 --- a/modules/jenkins_jobs/files/projects/openstack/nova.yml +++ b/modules/jenkins_jobs/files/projects/openstack/nova.yml @@ -7,4 +7,5 @@ values: github_org: 'openstack' review_site: 'review.openstack.org' publisher_site: 'nova.openstack.org' + doc_publisher_site: 'docs.openstack.org' node: 'precise' diff --git a/modules/jenkins_jobs/files/projects/openstack/python-cinderclient.yml b/modules/jenkins_jobs/files/projects/openstack/python-cinderclient.yml index 8f5030e9ce..03e7ad2fcf 100644 --- a/modules/jenkins_jobs/files/projects/openstack/python-cinderclient.yml +++ b/modules/jenkins_jobs/files/projects/openstack/python-cinderclient.yml @@ -7,4 +7,5 @@ values: github_org: 'openstack' review_site: 'review.openstack.org' publisher_site: 'nova.openstack.org' + doc_publisher_site: 'docs.openstack.org' node: 'precise' diff --git a/modules/jenkins_jobs/files/projects/openstack/python-glanceclient.yml b/modules/jenkins_jobs/files/projects/openstack/python-glanceclient.yml index 5178ef22db..61e7407523 100644 --- a/modules/jenkins_jobs/files/projects/openstack/python-glanceclient.yml +++ b/modules/jenkins_jobs/files/projects/openstack/python-glanceclient.yml @@ -7,4 +7,5 @@ values: github_org: 'openstack' review_site: 'review.openstack.org' publisher_site: 'nova.openstack.org' + doc_publisher_site: 'docs.openstack.org' node: 'precise' diff --git a/modules/jenkins_jobs/files/projects/openstack/python-keystoneclient.yml b/modules/jenkins_jobs/files/projects/openstack/python-keystoneclient.yml index e05fd4c567..33c248a8c4 100644 --- a/modules/jenkins_jobs/files/projects/openstack/python-keystoneclient.yml +++ b/modules/jenkins_jobs/files/projects/openstack/python-keystoneclient.yml @@ -7,4 +7,5 @@ values: github_org: 'openstack' review_site: 'review.openstack.org' publisher_site: 'nova.openstack.org' + doc_publisher_site: 'docs.openstack.org' node: 'precise' diff --git a/modules/jenkins_jobs/files/projects/openstack/python-novaclient.yml b/modules/jenkins_jobs/files/projects/openstack/python-novaclient.yml index bc9368ce3a..5ab75e327d 100644 --- a/modules/jenkins_jobs/files/projects/openstack/python-novaclient.yml +++ b/modules/jenkins_jobs/files/projects/openstack/python-novaclient.yml @@ -7,4 +7,5 @@ values: github_org: 'openstack' review_site: 'review.openstack.org' publisher_site: 'nova.openstack.org' + doc_publisher_site: 'docs.openstack.org' node: 'precise' diff --git a/modules/jenkins_jobs/files/projects/openstack/python-openstackclient.yml b/modules/jenkins_jobs/files/projects/openstack/python-openstackclient.yml index b81c5e2e7a..2fce146817 100644 --- a/modules/jenkins_jobs/files/projects/openstack/python-openstackclient.yml +++ b/modules/jenkins_jobs/files/projects/openstack/python-openstackclient.yml @@ -7,4 +7,5 @@ values: github_org: 'openstack' review_site: 'review.openstack.org' publisher_site: 'nova.openstack.org' + doc_publisher_site: 'docs.openstack.org' node: 'precise' diff --git a/modules/jenkins_jobs/files/projects/openstack/python-quantumclient.yml b/modules/jenkins_jobs/files/projects/openstack/python-quantumclient.yml index c2a58d87e2..19c105439f 100644 --- a/modules/jenkins_jobs/files/projects/openstack/python-quantumclient.yml +++ b/modules/jenkins_jobs/files/projects/openstack/python-quantumclient.yml @@ -7,4 +7,5 @@ values: github_org: 'openstack' review_site: 'review.openstack.org' publisher_site: 'nova.openstack.org' + doc_publisher_site: 'docs.openstack.org' node: 'precise' diff --git a/modules/jenkins_jobs/files/projects/openstack/python-swiftclient.yml b/modules/jenkins_jobs/files/projects/openstack/python-swiftclient.yml index ffb6d61554..9690057114 100644 --- a/modules/jenkins_jobs/files/projects/openstack/python-swiftclient.yml +++ b/modules/jenkins_jobs/files/projects/openstack/python-swiftclient.yml @@ -7,4 +7,5 @@ values: github_org: 'openstack' review_site: 'review.openstack.org' publisher_site: 'swift.openstack.org' + doc_publisher_site: 'docs.openstack.org' node: 'precise' diff --git a/modules/jenkins_jobs/files/projects/openstack/quantum.yml b/modules/jenkins_jobs/files/projects/openstack/quantum.yml index b72d4c3a93..f29717a0e3 100644 --- a/modules/jenkins_jobs/files/projects/openstack/quantum.yml +++ b/modules/jenkins_jobs/files/projects/openstack/quantum.yml @@ -7,4 +7,5 @@ values: github_org: 'openstack' review_site: 'review.openstack.org' publisher_site: 'nova.openstack.org' + doc_publisher_site: 'docs.openstack.org' node: 'precise' diff --git a/modules/jenkins_jobs/files/projects/openstack/swift.yml b/modules/jenkins_jobs/files/projects/openstack/swift.yml index 7edea3e600..e2bb33e4b5 100644 --- a/modules/jenkins_jobs/files/projects/openstack/swift.yml +++ b/modules/jenkins_jobs/files/projects/openstack/swift.yml @@ -7,4 +7,5 @@ values: github_org: 'openstack' review_site: 'review.openstack.org' publisher_site: 'nova.openstack.org' + doc_publisher_site: 'docs.openstack.org' node: 'precise' diff --git a/modules/jenkins_jobs/files/projects/stackforge/ceilometer.yml b/modules/jenkins_jobs/files/projects/stackforge/ceilometer.yml index d58c7926ce..8488f9b63a 100644 --- a/modules/jenkins_jobs/files/projects/stackforge/ceilometer.yml +++ b/modules/jenkins_jobs/files/projects/stackforge/ceilometer.yml @@ -7,4 +7,5 @@ values: github_org: 'stackforge' review_site: 'review.stackforge.org' publisher_site: 'TODO.stackforge.org' + doc_publisher_site: 'TODO.stackforge.org' node: 'oneiric' diff --git a/modules/jenkins_jobs/files/projects/stackforge/heat.yml b/modules/jenkins_jobs/files/projects/stackforge/heat.yml index 6584bf5d14..0f4c3623d9 100644 --- a/modules/jenkins_jobs/files/projects/stackforge/heat.yml +++ b/modules/jenkins_jobs/files/projects/stackforge/heat.yml @@ -7,4 +7,5 @@ values: github_org: 'heat-api' review_site: 'review.stackforge.org' publisher_site: 'TODO.stackforge.org' + doc_publisher_site: 'TODO.stackforge.org' node: 'oneiric' diff --git a/modules/jenkins_jobs/files/projects/stackforge/reddwarf.yml b/modules/jenkins_jobs/files/projects/stackforge/reddwarf.yml index d3eee036e8..1b942d82ee 100644 --- a/modules/jenkins_jobs/files/projects/stackforge/reddwarf.yml +++ b/modules/jenkins_jobs/files/projects/stackforge/reddwarf.yml @@ -7,4 +7,5 @@ values: github_org: 'stackforge' review_site: 'review.stackforge.org' publisher_site: 'TODO.stackforge.org' + doc_publisher_site: 'TODO.stackforge.org' node: 'oneiric' diff --git a/modules/jenkins_jobs/files/templates/python_jobs.yml b/modules/jenkins_jobs/files/templates/python_jobs.yml index fcadc8ace0..e91a8e4851 100644 --- a/modules/jenkins_jobs/files/templates/python_jobs.yml +++ b/modules/jenkins_jobs/files/templates/python_jobs.yml @@ -188,7 +188,7 @@ modules: - assignednode - trigger_pollscm - builders - - publisher_docs + - publisher_ftp main: name: '@NAME@-docs' @@ -211,7 +211,11 @@ assignednode: node: '@NODE@' publisher: - site: '@PUBLISHER_SITE@' + site: '@DOC_PUBLISHER_SITE@' + remote_dir: 'dev/docs/@NAME@' + source_files: 'doc/build/html/**' + remove_prefix: 'doc/build/html' + excludes: '' --- # merge-gate