swift/.zuul.yaml
Ade Lee 03be71c44a Add FIPS CI jobs
Added jobs to run the swift functional tests when FIPS is enabled.
We'll set these jobs to be non-voting initially, so that we can
ensure that they are stable.

Change-Id: If0b4cfc1ac9a8c66085eb4dc95366d43806d5ae2
2022-01-25 12:07:09 -08:00

786 lines
24 KiB
YAML

- job:
name: swift-tox-base
parent: openstack-tox-py27
description: |
Base job for swift-tox jobs.
It sets TMPDIR to an XFS mount point created via
tools/test-setup.sh.
timeout: 5400
vars:
tox_environment:
TMPDIR: '{{ ansible_env.HOME }}/xfstmp'
- job:
name: swift-tox-py27
parent: swift-tox-base
description: |
Run unit-tests for swift under cPython version 2.7.
Uses tox with the ``py27`` environment.
It sets TMPDIR to an XFS mount point created via
tools/test-setup.sh.
vars:
tox_envlist: py27
tox_environment:
NOSE_COVER_HTML: 1
NOSE_COVER_HTML_DIR: '{toxinidir}/cover'
post-run: tools/playbooks/common/cover-post.yaml
- job:
name: swift-tox-py27-centos-7
parent: swift-tox-py27
nodeset: centos-7
- job:
name: swift-tox-py36
parent: swift-tox-base
nodeset: ubuntu-bionic
description: |
Run unit-tests for swift under cPython version 3.6.
Uses tox with the ``py36`` environment.
It sets TMPDIR to an XFS mount point created via
tools/test-setup.sh.
vars:
tox_envlist: py36
bindep_profile: test py36
tox_environment:
NOSE_COVER_HTML: 1
NOSE_COVER_HTML_DIR: '{toxinidir}/cover'
post-run: tools/playbooks/common/cover-post.yaml
- job:
name: swift-tox-py36-centos-8-stream
parent: swift-tox-py36
nodeset: centos-8-stream
- job:
name: swift-tox-py37
parent: swift-tox-base
nodeset: ubuntu-bionic
description: |
Run unit-tests for swift under cPython version 3.7.
Uses tox with the ``py37`` environment.
It sets TMPDIR to an XFS mount point created via
tools/test-setup.sh.
vars:
tox_envlist: py37
bindep_profile: test py37
python_version: 3.7
tox_environment:
NOSE_COVER_HTML: 1
NOSE_COVER_HTML_DIR: '{toxinidir}/cover'
post-run: tools/playbooks/common/cover-post.yaml
- job:
name: swift-tox-py38
parent: swift-tox-base
nodeset: ubuntu-focal
description: |
Run unit-tests for swift under cPython version 3.8.
Uses tox with the ``py38`` environment.
It sets TMPDIR to an XFS mount point created via
tools/test-setup.sh.
vars:
tox_envlist: py38
bindep_profile: test py38
python_version: 3.8
tox_environment:
NOSE_COVER_HTML: 1
NOSE_COVER_HTML_DIR: '{toxinidir}/cover'
post-run: tools/playbooks/common/cover-post.yaml
- job:
name: swift-tox-py38-arm64
parent: swift-tox-py38
nodeset: ubuntu-focal-arm64
description: |
Run unit tests for an OpenStack Python project under cPython
version 3.8 on top of arm64 architecture.
- job:
name: swift-tox-py39-arm64
parent: swift-tox-py39
nodeset: ubuntu-focal-arm64
description: |
Run unit tests for an OpenStack Python project under cPython
version 3.9 on top of arm64 architecture.
- job:
name: swift-tox-py39
parent: swift-tox-base
nodeset: ubuntu-focal
description: |
Run unit-tests for swift under cPython version 3.9.
Uses tox with the ``py39`` environment.
It sets TMPDIR to an XFS mount point created via
tools/test-setup.sh.
vars:
tox_envlist: py39
bindep_profile: test py39
python_version: 3.9
tox_environment:
NOSE_COVER_HTML: 1
NOSE_COVER_HTML_DIR: '{toxinidir}/cover'
post-run: tools/playbooks/common/cover-post.yaml
- job:
name: swift-tox-func-py27
parent: swift-tox-base
description: |
Run functional tests for swift under cPython version 2.7.
Uses tox with the ``func`` environment.
It sets TMPDIR to an XFS mount point created via
tools/test-setup.sh.
vars:
tox_envlist: func
- job:
name: swift-tox-func-py38
parent: swift-tox-base
nodeset: ubuntu-focal
description: |
Run functional tests for swift under cPython version 3.8.
Uses tox with the ``func-py3`` environment.
It sets TMPDIR to an XFS mount point created via
tools/test-setup.sh.
vars:
tox_envlist: func-py3
bindep_profile: test py38
python_version: 3.8
- job:
name: swift-tox-func-py36-centos-8-stream
parent: swift-tox-func-py38
nodeset: centos-8-stream
vars:
bindep_profile: test py36
python_version: 3.6
- job:
name: swift-tox-func-encryption-py36-centos-8-stream
parent: swift-tox-func-py36-centos-8-stream
vars:
tox_envlist: func-encryption-py3
- job:
name: swift-tox-func-ec-py36-centos-8-stream
parent: swift-tox-func-py36-centos-8-stream
vars:
tox_envlist: func-ec-py3
- job:
name: swift-tox-func-encryption-py38
parent: swift-tox-func-py38
description: |
Run functional tests for swift under cPython version 3.8.
Uses tox with the ``func-encryption-py3`` environment.
It sets TMPDIR to an XFS mount point created via
tools/test-setup.sh.
vars:
tox_envlist: func-encryption-py3
- job:
name: swift-tox-func-encryption-py38-arm64
parent: swift-tox-func-encryption-py38
nodeset: ubuntu-focal-arm64
description: |
Run functional tests for swift under cPython version 3.8
on top of arm64 architecture.
Uses tox with the ``func-encryption-py3`` environment.
It sets TMPDIR to an XFS mount point created via
tools/test-setup.sh.
- job:
name: swift-tox-func-py38-arm64
parent: swift-tox-func-py38
nodeset: ubuntu-focal-arm64
description: |
Run functional tests for swift under cPython version 3.8
on top of arm64 architecture.
Uses tox with the ``func-py3`` environment.
It sets TMPDIR to an XFS mount point created via
tools/test-setup.sh.
- job:
name: swift-tox-func-ec-py38
parent: swift-tox-func-py38
description: |
Run functional tests for swift under cPython version 3.8.
Uses tox with the ``func-ec-py3`` environment.
It sets TMPDIR to an XFS mount point created via
tools/test-setup.sh.
vars:
tox_envlist: func-ec-py3
- job:
name: swift-tox-func-py27-centos-7
parent: swift-tox-func-py27
nodeset: centos-7
- job:
name: swift-tox-func-encryption-py27
parent: swift-tox-base
description: |
Run functional tests for swift under cPython version 2.7.
Uses tox with the ``func-encryption`` environment.
It sets TMPDIR to an XFS mount point created via
tools/test-setup.sh.
vars:
tox_envlist: func-encryption
- job:
name: swift-tox-func-encryption-py27-centos-7
parent: swift-tox-func-encryption-py27
nodeset: centos-7
- job:
name: swift-tox-func-ec-py27
parent: swift-tox-base
description: |
Run functional tests for swift under cPython version 2.7.
Uses tox with the ``func-ec`` environment.
It sets TMPDIR to an XFS mount point created via
tools/test-setup.sh.
vars:
tox_envlist: func-ec
- job:
name: swift-tox-func-ec-py27-centos-7
parent: swift-tox-func-ec-py27
nodeset: centos-7
- job:
name: swift-dsvm-functional
parent: devstack-minimal
description: |
Setup a Swift/Keystone environment and run Swift's func tests.
required-projects:
- opendev.org/openstack/requirements
- opendev.org/openstack/swift
- opendev.org/openstack/keystone
timeout: 5400
vars:
tox_constraints_file: '{{ ansible_user_dir }}/src/opendev.org/openstack/requirements/upper-constraints.txt'
# This tox env get run twice; once for Keystone and once for tempauth
tox_envlist: func-py3
devstack_localrc:
SWIFT_HASH: changeme
# We don't need multiple replicas to run purely functional tests.
# In fact, devstack special cases some things when there's only
# one replica.
SWIFT_REPLICAS: 1
# One replica => no need for replicators, etc.
SWIFT_START_ALL_SERVICES: False
devstack_services:
keystone: true
swift: true
s3api: true
zuul_work_dir: src/opendev.org/openstack/swift
pre-run: tools/playbooks/dsvm/pre.yaml
run: tools/playbooks/dsvm/run.yaml
post-run: tools/playbooks/dsvm/post.yaml
- job:
name: swift-dsvm-functional-ipv6
parent: swift-dsvm-functional
vars:
devstack_localrc:
SERVICE_IP_VERSION: 6
SERVICE_HOST: ""
- job:
name: swift-tox-func-s3api-ceph-s3tests-tempauth
parent: unittests
voting: false
nodeset: centos-7
description: |
Setup a SAIO dev environment and run ceph-s3tests
timeout: 5400
vars:
s3_acl: yes
pre-run:
- tools/playbooks/common/install_dependencies.yaml
- tools/playbooks/saio_single_node_setup/setup_saio.yaml
- tools/playbooks/saio_single_node_setup/add_s3api.yaml
- tools/playbooks/saio_single_node_setup/make_rings.yaml
run: tools/playbooks/ceph-s3tests/run.yaml
post-run:
- tools/playbooks/probetests/post.yaml
- tools/playbooks/ceph-s3tests/post.yaml
- job:
name: swift-probetests-centos-7
parent: unittests
nodeset: centos-7
description: |
Setup a SAIO dev environment and run Swift's probe tests
under Python 2.
timeout: 7200
vars:
bindep_profile: test py27
pre-run:
- tools/playbooks/common/install_dependencies.yaml
- tools/playbooks/saio_single_node_setup/setup_saio.yaml
- tools/playbooks/saio_single_node_setup/make_rings.yaml
run: tools/playbooks/probetests/run.yaml
post-run: tools/playbooks/probetests/post.yaml
- job:
name: swift-probetests-centos-8-stream
parent: swift-probetests-centos-7
nodeset: centos-8-stream
description: |
Setup a SAIO dev environment and run Swift's probe tests
under Python 3.
vars:
bindep_profile: test py36
- job:
name: swift-probetests-centos-8-stream-arm64
parent: swift-probetests-centos-8-stream
nodeset:
nodes:
- name: swift-centos-8-stream-arm64
label: centos-8-stream-arm64
description: |
Setup a SAIO dev environment and run Swift's probe tests
under Python 3 on top of arm64 architecture.
timeout: 10800
- job:
name: swift-func-cors
parent: swift-probetests-centos-7
description: |
Setup a SAIO dev environment and run Swift's CORS functional tests
timeout: 1200
vars:
s3_acl: no
pre-run:
- tools/playbooks/saio_single_node_setup/add_s3api.yaml
- tools/playbooks/cors/install_selenium.yaml
run: tools/playbooks/cors/run.yaml
post-run: tools/playbooks/cors/post.yaml
- nodeset:
name: swift-five-nodes
nodes:
- name: test-runner1
label: centos-7
- name: proxy1
label: centos-7
- name: account1
label: centos-7
- name: container1
label: centos-7
- name: object1
label: centos-7
groups:
- name: test-runner
nodes:
- test-runner1
- name: swift-cluster
nodes:
- proxy1
- account1
- container1
- object1
- name: proxy
nodes:
- proxy1
- name: account
nodes:
- account1
- name: container
nodes:
- container1
- name: object
nodes:
- object1
- name: storage
nodes:
- account1
- container1
- object1
- job:
name: swift-multinode-rolling-upgrade
parent: multinode
nodeset: swift-five-nodes
description: |
Build a 4 node swift cluster and run functional tests
timeout: 5400
pre-run:
- tools/playbooks/multinode_setup/pre.yaml
- tools/playbooks/common/install_dependencies.yaml
- tools/playbooks/multinode_setup/configure_loopback.yaml
- tools/playbooks/multinode_setup/common_config.yaml
- tools/playbooks/multinode_setup/make_rings.yaml
run: tools/playbooks/multinode_setup/run.yaml
post-run: tools/playbooks/probetests/post.yaml
- job:
name: swift-multinode-rolling-upgrade-rocky
parent: swift-multinode-rolling-upgrade
vars:
previous_swift_version: origin/stable/rocky
- job:
name: swift-multinode-rolling-upgrade-stein
parent: swift-multinode-rolling-upgrade
vars:
previous_swift_version: origin/stable/stein
- job:
name: swift-multinode-rolling-upgrade-train
parent: swift-multinode-rolling-upgrade
vars:
previous_swift_version: origin/stable/train
- job:
name: swift-multinode-rolling-upgrade-ussuri
parent: swift-multinode-rolling-upgrade
vars:
previous_swift_version: origin/stable/ussuri
- job:
name: swift-multinode-rolling-upgrade-victoria
parent: swift-multinode-rolling-upgrade
vars:
previous_swift_version: origin/stable/victoria
- job:
name: swift-multinode-rolling-upgrade-wallaby
parent: swift-multinode-rolling-upgrade
vars:
previous_swift_version: origin/stable/wallaby
- job:
name: swift-multinode-rolling-upgrade-xena
parent: swift-multinode-rolling-upgrade
vars:
previous_swift_version: origin/stable/xena
- job:
name: swift-multinode-rolling-upgrade-master
parent: swift-multinode-rolling-upgrade
vars:
previous_swift_version: origin/master
- job:
name: swift-tox-lower-constraints
parent: openstack-tox-lower-constraints
vars:
bindep_profile: test py27
python_version: 2.7
tox_environment:
TMPDIR: '{{ ansible_env.HOME }}/xfstmp'
# Image building jobs
- secret:
name: swift-dockerhub
data:
username: screamingfrenzy
password: !encrypted/pkcs1-oaep
- ruMizg1iVvKm4ABLQ8GshZMwt3EzxOyjPZsInL20+ZS+TQxhEwRbLFGzSxnrChIOdioyl
7TMW1PxQeJ5T/mPIsV7TBsSsnIMKYRcDSbKjnC0hjILpKfQXLFw4/rV/d3jeB6oLDSTW1
fIt4NmJqhsjlvst+VwT1JnFHLdrRaGMWYkjRU8rEmH82jDM7Wk7J+selykvTrlRQ7RpQR
6huzniL6PJPOZ7I5VsQcCmEWYKwd/u9Ifhe50yjgxmKR7Fi+wl0nBSOzt38f9ZEXTB6So
/ks0+RX2sTlgulNgJnnR8FG3p2AHxTJ75fcBnY1KkYlG0+KsdRTzNjxNXs2/Ao0pyJJTs
JWniEHWVAq6T5agwD1SsmWAzFctBjGKDstxmTyHaSNNN5c6yoVZewRBrFDfYXMJUikyS+
52bel/uihhiq60MnUCzKCiBg/TM1uonwRKA2KkDXWRh80oxBMIxw5nVZCMaHFpx7NW/ls
k6aI8jio+/N0cLZlglWqGOsE3EC08Ddd+cqe668/LQVY97UgMjIu6aZRwX9Iwa2NXNDRE
zPKQ3UDWYFgl8Za90PmrRD4qYuN/1lqCrLKp5cSJbche+EqdrGolCj701zUWcCdwjHMwz
YA5zG1SbWFyC9BidZYTwMNbo/RRz4TtFmW35A4CRE5HYB5Uh5ccpGlBvI9Yv8A=
- job:
name: swift-build-image
parent: opendev-build-docker-image
voting: false
description: Build SAIO docker images.
vars: &swift_image_vars
docker_images:
- context: .
repository: openstackswift/saio
- job:
name: swift-upload-image
parent: opendev-upload-docker-image
voting: false
description: Build SAIO docker images and upload to Docker Hub.
secrets:
name: docker_credentials
secret: swift-dockerhub
pass-to-parent: true
vars: *swift_image_vars
- job:
name: swift-promote-image
parent: opendev-promote-docker-image
voting: false
description: Promote previously uploaded Docker images.
secrets:
name: docker_credentials
secret: swift-dockerhub
pass-to-parent: true
vars: *swift_image_vars
- job:
name: swift-build-image-py3
parent: opendev-build-docker-image
voting: false
description: Build py3 SAIO docker images.
vars: &swift_image_vars_py3
docker_images:
- context: .
dockerfile: Dockerfile-py3
repository: openstackswift/saio
tags:
- py3
- job:
name: swift-upload-image-py3
parent: opendev-upload-docker-image
voting: false
description: Build py3 SAIO docker images and upload to Docker Hub.
secrets:
name: docker_credentials
secret: swift-dockerhub
pass-to-parent: true
vars: *swift_image_vars_py3
- job:
name: swift-promote-image-py3
parent: opendev-promote-docker-image
voting: false
description: Promote previously uploaded Docker images.
secrets:
name: docker_credentials
secret: swift-dockerhub
pass-to-parent: true
vars: *swift_image_vars_py3
- job:
name: swift-tox-func-py36-centos-8-stream-fips
parent: swift-tox-func-py36-centos-8-stream
voting: false
description: |
Functional testing on a FIPS enabled Centos 8 system
vars:
enable_fips: true
- job:
name: swift-tox-func-encryption-py36-centos-8-stream-fips
parent: swift-tox-func-encryption-py36-centos-8-stream
voting: false
description: |
Functional encryption testing on a FIPS enabled
Centos 8 system
vars:
enable_fips: true
- job:
name: swift-tox-func-ec-py36-centos-8-stream-fips
parent: swift-tox-func-ec-py36-centos-8-stream
voting: false
description: |
Functional EC testing on a FIPS enabled Centos 8 system
vars:
enable_fips: true
- project-template:
name: swift-jobs-arm64
description: |
Runs tests for an OpenStack Python project under the CPython
version 3 releases designated for testing on top of ARM64 architecture.
check-arm64:
jobs:
- swift-tox-py38-arm64
- swift-tox-py39-arm64
- swift-probetests-centos-8-stream-arm64
- swift-tox-func-encryption-py38-arm64
- swift-tox-func-py38-arm64
- project:
templates:
- publish-openstack-docs-pti
- periodic-stable-jobs
- check-requirements
- release-notes-jobs-python3
- integrated-gate-object-storage
- swift-jobs-arm64
check:
jobs:
- swift-tox-func-encryption-py36-centos-8:
irrelevant-files: &functest-irrelevant-files
- ^(api-ref|doc|releasenotes)/.*$
- ^test/(cors|probe)/.*$
- ^(.gitreview|.mailmap|AUTHORS|CHANGELOG|.*\.rst)$
- swift-tox-func-py36-centos-8-stream-fips:
irrelevant-files: *functest-irrelevant-files
- swift-tox-func-encryption-py36-centos-8-stream-fips:
irrelevant-files: *functest-irrelevant-files
- swift-tox-func-ec-py36-centos-8-stream-fips:
irrelevant-files: *functest-irrelevant-files
- swift-build-image:
irrelevant-files: &docker-irrelevant-files
- ^(api-ref|doc|releasenotes)/.*$
- ^test/(functional|probe)/.*$
- swift-build-image-py3:
irrelevant-files: *docker-irrelevant-files
# Unit tests
- swift-tox-py27:
irrelevant-files: &unittest-irrelevant-files
- ^(api-ref|doc|releasenotes)/.*$
- ^test/(cors|functional|probe)/.*$
- swift-tox-py36:
irrelevant-files: *unittest-irrelevant-files
- swift-tox-py39:
irrelevant-files: *unittest-irrelevant-files
# Functional tests
- swift-tox-func-py27:
irrelevant-files: *functest-irrelevant-files
- swift-tox-func-encryption-py27:
irrelevant-files: *functest-irrelevant-files
- swift-tox-func-ec-py27:
irrelevant-files: *functest-irrelevant-files
# py3 functional tests
- swift-tox-func-py38:
irrelevant-files: *functest-irrelevant-files
- swift-tox-func-encryption-py38:
irrelevant-files: *functest-irrelevant-files
- swift-tox-func-ec-py38:
irrelevant-files: *functest-irrelevant-files
# Other tests
- swift-func-cors:
irrelevant-files:
- ^(api-ref|releasenotes)/.*$
# Keep doc/saio -- we use those sample configs in the saio playbooks
- ^doc/(requirements.txt|(manpages|s3api|source)/.*)$
- ^test/(unit|functional|probe)/.*$
- ^(.gitreview|.mailmap|AUTHORS|CHANGELOG)$
- swift-tox-func-s3api-ceph-s3tests-tempauth:
irrelevant-files:
- ^(api-ref|releasenotes)/.*$
# Keep doc/saio -- we use those sample configs in the saio playbooks
# Also keep doc/s3api -- it holds known failures for these tests
- ^doc/(requirements.txt|(manpages|source)/.*)$
- ^test/(cors|unit|probe)/.*$
- ^(.gitreview|.mailmap|AUTHORS|CHANGELOG|.*\.rst)$
- swift-probetests-centos-7:
irrelevant-files: &probetest-irrelevant-files
- ^(api-ref|releasenotes)/.*$
# Keep doc/saio -- we use those sample configs in the saio playbooks
- ^doc/(requirements.txt|(manpages|s3api|source)/.*)$
- ^test/(cors|unit|functional)/.*$
- ^(.gitreview|.mailmap|AUTHORS|CHANGELOG|.*\.rst)$
- swift-probetests-centos-8-stream:
irrelevant-files: *probetest-irrelevant-files
- swift-dsvm-functional:
irrelevant-files: *functest-irrelevant-files
- swift-dsvm-functional-ipv6:
irrelevant-files: *functest-irrelevant-files
- swift-tox-lower-constraints:
irrelevant-files: *unittest-irrelevant-files
- openstack-tox-pep8:
irrelevant-files: &pep8-irrelevant-files
- ^(api-ref|etc|examples|releasenotes)/.*$
# Keep doc/manpages -- we want to syntax check them
- ^doc/(requirements.txt|(saio|s3api|source)/.*)$
- swift-multinode-rolling-upgrade:
irrelevant-files: *functest-irrelevant-files
- tempest-integrated-object-storage:
irrelevant-files: &tempest-irrelevant-files
- ^(api-ref|doc|releasenotes)/.*$
- ^test/.*$
- ^(.gitreview|.mailmap|AUTHORS|CHANGELOG|.*\.rst)$
- tempest-ipv6-only:
irrelevant-files: *tempest-irrelevant-files
- grenade:
irrelevant-files: *tempest-irrelevant-files
gate:
jobs:
# For gate jobs, err towards running more jobs (so, generally avoid
# using irrelevant-files). Exceptions should mainly be made for
# long-running jobs, like probetests or (once they move to
# in-tree definitions) dsvm jobs.
- swift-upload-image:
irrelevant-files: *docker-irrelevant-files
- swift-upload-image-py3:
irrelevant-files: *docker-irrelevant-files
- swift-tox-py27
- swift-tox-py36
- swift-tox-py39
- swift-tox-func-py27
- swift-tox-func-encryption-py27
- swift-tox-func-ec-py27
- swift-tox-func-py38
- swift-tox-func-encryption-py38
- swift-tox-func-ec-py38
- swift-func-cors
- swift-probetests-centos-7:
irrelevant-files: *probetest-irrelevant-files
- swift-probetests-centos-8-stream:
irrelevant-files: *probetest-irrelevant-files
- swift-dsvm-functional:
irrelevant-files: *functest-irrelevant-files
- swift-dsvm-functional-ipv6:
irrelevant-files: *functest-irrelevant-files
- swift-tox-lower-constraints:
irrelevant-files: *unittest-irrelevant-files
- openstack-tox-pep8:
irrelevant-files: *pep8-irrelevant-files
- swift-multinode-rolling-upgrade:
irrelevant-files: *functest-irrelevant-files
- tempest-integrated-object-storage:
irrelevant-files: *tempest-irrelevant-files
- tempest-ipv6-only:
irrelevant-files: *tempest-irrelevant-files
- grenade:
irrelevant-files: *tempest-irrelevant-files
experimental:
jobs:
- swift-tox-py37
- swift-tox-py38
- swift-tox-py27-centos-7
- swift-tox-func-py27-centos-7
- swift-tox-func-encryption-py27-centos-7
- swift-tox-func-ec-py27-centos-7
- swift-tox-py36-centos-8-stream
- swift-tox-func-py36-centos-8-stream
- swift-tox-func-encryption-py36-centos-8-stream
- swift-tox-func-ec-py36-centos-8-stream
- swift-multinode-rolling-upgrade-rocky
- swift-multinode-rolling-upgrade-stein
- swift-multinode-rolling-upgrade-train
- swift-multinode-rolling-upgrade-ussuri
- swift-multinode-rolling-upgrade-victoria
- swift-multinode-rolling-upgrade-wallaby
- swift-multinode-rolling-upgrade-xena
- swift-multinode-rolling-upgrade-master:
branches: master
post:
jobs:
- publish-openstack-python-branch-tarball
promote:
jobs:
- swift-promote-image
- swift-promote-image-py3