Parallelize builds
diff --git a/.github/workflows/test-master.yml b/.github/workflows/test-master.yml
deleted file mode 100644
index ffff096..0000000
--- a/.github/workflows/test-master.yml
+++ /dev/null
@@ -1,470 +0,0 @@
-name: test-master
-'on':
-  pull_request: {}
-  push:
-    branches:
-    - main
-jobs:
-  build-images:
-    runs-on: ubuntu-latest
-    steps:
-    - uses: actions/checkout@v3.0.2
-    - uses: docker/setup-qemu-action@v2.0.0
-    - uses: docker/setup-buildx-action@v2.0.0
-    - uses: docker/login-action@v2.0.0
-      with:
-        registry: quay.io
-        username: ${{ secrets.QUAY_USERNAME }}
-        password: ${{ secrets.QUAY_ROBOT_TOKEN }}
-    - name: Build openstack/barbican
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=barbican-master
-        cache-to: type=gha,mode=max,scope=barbican-master
-        push: true
-        platforms: linux/amd64
-        build-args: 'RELEASE=master
-
-          PROJECT=barbican
-
-          PROJECT_REF=ff7fef62116bf5e128da1207752fb69a6193e606
-
-          PROFILES=
-
-          DIST_PACKAGES=
-
-          PIP_PACKAGES='
-        tags: quay.io/vexxhost/barbican:ff7fef62116bf5e128da1207752fb69a6193e606
-    - name: Build openstack/cinder
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=cinder-master
-        cache-to: type=gha,mode=max,scope=cinder-master
-        push: true
-        platforms: linux/amd64
-        build-args: 'RELEASE=master
-
-          PROJECT=cinder
-
-          PROJECT_REF=cf2b3005aa39b5700f51be0140c61ad9f8ec47db
-
-          PROFILES=ceph qemu
-
-          DIST_PACKAGES=
-
-          PIP_PACKAGES='
-        tags: quay.io/vexxhost/cinder:cf2b3005aa39b5700f51be0140c61ad9f8ec47db
-    - name: Build openstack/designate
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=designate-master
-        cache-to: type=gha,mode=max,scope=designate-master
-        push: true
-        platforms: linux/amd64
-        build-args: 'RELEASE=master
-
-          PROJECT=designate
-
-          PROJECT_REF=927e34ee5a53771530e78bcbbd74549c632b539a
-
-          PROFILES=
-
-          DIST_PACKAGES=bind9utils
-
-          PIP_PACKAGES='
-        tags: quay.io/vexxhost/designate:927e34ee5a53771530e78bcbbd74549c632b539a
-    - name: Build openstack/glance
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=glance-master
-        cache-to: type=gha,mode=max,scope=glance-master
-        push: true
-        platforms: linux/amd64
-        build-args: 'RELEASE=master
-
-          PROJECT=glance
-
-          PROJECT_REF=cb60c1d2facde2f318ec30c8b9cf63844eaccf92
-
-          PROFILES=ceph
-
-          DIST_PACKAGES=
-
-          PIP_PACKAGES='
-        tags: quay.io/vexxhost/glance:cb60c1d2facde2f318ec30c8b9cf63844eaccf92
-    - name: Build openstack/heat
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=heat-master
-        cache-to: type=gha,mode=max,scope=heat-master
-        push: true
-        platforms: linux/amd64
-        build-args: 'RELEASE=master
-
-          PROJECT=heat
-
-          PROJECT_REF=f98d164be9c7fecd390b3e4822b33ad4054fcfca
-
-          PROFILES=
-
-          DIST_PACKAGES=curl
-
-          PIP_PACKAGES='
-        tags: quay.io/vexxhost/heat:f98d164be9c7fecd390b3e4822b33ad4054fcfca
-    - name: Build openstack/horizon
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=horizon-master
-        cache-to: type=gha,mode=max,scope=horizon-master
-        push: true
-        platforms: linux/amd64
-        build-args: 'RELEASE=master
-
-          PROJECT=horizon
-
-          PROJECT_REF=857d17467adca804fab70c0d8a88f2bf89234ae5
-
-          PROFILES=apache
-
-          DIST_PACKAGES=
-
-          PIP_PACKAGES=designate-dashboard heat-dashboard ironic-ui magnum-ui neutron-vpnaas-dashboard
-          octavia-dashboard senlin-dashboard monasca-ui'
-        tags: quay.io/vexxhost/horizon:857d17467adca804fab70c0d8a88f2bf89234ae5
-    - name: Build openstack/ironic
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=ironic-master
-        cache-to: type=gha,mode=max,scope=ironic-master
-        push: true
-        platforms: linux/amd64
-        build-args: 'RELEASE=master
-
-          PROJECT=ironic
-
-          PROJECT_REF=4a347b3069498d0f2b49105014e6e118b5972c0f
-
-          PROFILES=ipxe ipmi qemu tftp
-
-          DIST_PACKAGES=ethtool lshw iproute2
-
-          PIP_PACKAGES=python-dracclient sushy'
-        tags: quay.io/vexxhost/ironic:4a347b3069498d0f2b49105014e6e118b5972c0f
-    - name: Build openstack/keystone
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=keystone-master
-        cache-to: type=gha,mode=max,scope=keystone-master
-        push: true
-        platforms: linux/amd64
-        build-args: 'RELEASE=master
-
-          PROJECT=keystone
-
-          PROJECT_REF=1dd6993d7b9b647810e6f495b62c37627c6e8658
-
-          PROFILES=apache ldap openidc
-
-          DIST_PACKAGES=
-
-          PIP_PACKAGES='
-        tags: quay.io/vexxhost/keystone:1dd6993d7b9b647810e6f495b62c37627c6e8658
-    - name: Build openstack/magnum
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=magnum-master
-        cache-to: type=gha,mode=max,scope=magnum-master
-        push: true
-        platforms: linux/amd64
-        build-args: 'RELEASE=master
-
-          PROJECT=magnum
-
-          PROJECT_REF=60b338126601be3db42ba65d71649c4e3878b4f3
-
-          PROFILES=
-
-          DIST_PACKAGES=
-
-          PIP_PACKAGES='
-        tags: quay.io/vexxhost/magnum:60b338126601be3db42ba65d71649c4e3878b4f3
-    - name: Build openstack/monasca-agent
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=monasca-agent-master
-        cache-to: type=gha,mode=max,scope=monasca-agent-master
-        push: true
-        platforms: linux/amd64
-        build-args: 'RELEASE=master
-
-          PROJECT=monasca-agent
-
-          PROJECT_REF=29be6e96a6c590221e7d2fd1e30dffc7aec519a9
-
-          PROFILES=
-
-          DIST_PACKAGES=iproute2 libvirt-clients lshw
-
-          PIP_PACKAGES=libvirt-python python-glanceclient python-neutronclient python-novaclient
-          py3nvml'
-        tags: quay.io/vexxhost/monasca-agent:29be6e96a6c590221e7d2fd1e30dffc7aec519a9
-    - name: Build openstack/monasca-api
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=monasca-api-master
-        cache-to: type=gha,mode=max,scope=monasca-api-master
-        push: true
-        platforms: linux/amd64
-        build-args: 'RELEASE=master
-
-          PROJECT=monasca-api
-
-          PROJECT_REF=658c68b593a4d83f59143dc6c7df81860d3f57cb
-
-          PROFILES=apache influxdb
-
-          DIST_PACKAGES=
-
-          PIP_PACKAGES='
-        tags: quay.io/vexxhost/monasca-api:658c68b593a4d83f59143dc6c7df81860d3f57cb
-    - name: Build openstack/monasca-notification
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=monasca-notification-master
-        cache-to: type=gha,mode=max,scope=monasca-notification-master
-        push: true
-        platforms: linux/amd64
-        build-args: 'RELEASE=master
-
-          PROJECT=monasca-notification
-
-          PROJECT_REF=5225304a268fbd7e5edc30ab6d2b0cbf3b92b565
-
-          PROFILES=
-
-          DIST_PACKAGES=
-
-          PIP_PACKAGES='
-        tags: quay.io/vexxhost/monasca-notification:5225304a268fbd7e5edc30ab6d2b0cbf3b92b565
-    - name: Build openstack/monasca-persister
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=monasca-persister-master
-        cache-to: type=gha,mode=max,scope=monasca-persister-master
-        push: true
-        platforms: linux/amd64
-        build-args: 'RELEASE=master
-
-          PROJECT=monasca-persister
-
-          PROJECT_REF=1ea4e21eb231e4fe193e62f1b03b957c9d4281c8
-
-          PROFILES=influxdb
-
-          DIST_PACKAGES=
-
-          PIP_PACKAGES='
-        tags: quay.io/vexxhost/monasca-persister:1ea4e21eb231e4fe193e62f1b03b957c9d4281c8
-    - name: Build openstack/neutron
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=neutron-master
-        cache-to: type=gha,mode=max,scope=neutron-master
-        push: true
-        platforms: linux/amd64,linux/arm64
-        build-args: 'RELEASE=master
-
-          PROJECT=neutron
-
-          PROJECT_REF=3e8f2325d626a695a812a093907a6f3fd2e1315f
-
-          PROFILES=openvswitch vpn
-
-          DIST_PACKAGES=jq ethtool lshw
-
-          PIP_PACKAGES=neutron-vpnaas'
-        tags: quay.io/vexxhost/neutron:3e8f2325d626a695a812a093907a6f3fd2e1315f
-    - name: Build openstack/nova
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=nova-master
-        cache-to: type=gha,mode=max,scope=nova-master
-        push: true
-        platforms: linux/amd64,linux/arm64
-        build-args: 'RELEASE=master
-
-          PROJECT=nova
-
-          PROJECT_REF=69bc4c38d1c5b98fcbbe8b16a7dfeb654e3b8173
-
-          PROFILES=ceph openvswitch configdrive qemu migration
-
-          DIST_PACKAGES=ovmf qemu-efi-aarch64
-
-          PIP_PACKAGES='
-        tags: quay.io/vexxhost/nova:69bc4c38d1c5b98fcbbe8b16a7dfeb654e3b8173
-    - name: Build openstack/octavia
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=octavia-master
-        cache-to: type=gha,mode=max,scope=octavia-master
-        push: true
-        platforms: linux/amd64
-        build-args: 'RELEASE=master
-
-          PROJECT=octavia
-
-          PROJECT_REF=98ec46b8073bda426316235f743e9af004172389
-
-          PROFILES=
-
-          DIST_PACKAGES=
-
-          PIP_PACKAGES='
-        tags: quay.io/vexxhost/octavia:98ec46b8073bda426316235f743e9af004172389
-    - name: Build openstack/placement
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=placement-master
-        cache-to: type=gha,mode=max,scope=placement-master
-        push: true
-        platforms: linux/amd64
-        build-args: 'RELEASE=master
-
-          PROJECT=placement
-
-          PROJECT_REF=d0e05e89ac4a57b6489007ed46e86357f11e5b23
-
-          PROFILES=apache
-
-          DIST_PACKAGES=
-
-          PIP_PACKAGES=httplib2'
-        tags: quay.io/vexxhost/placement:d0e05e89ac4a57b6489007ed46e86357f11e5b23
-    - name: Build openstack/senlin
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=senlin-master
-        cache-to: type=gha,mode=max,scope=senlin-master
-        push: true
-        platforms: linux/amd64
-        build-args: 'RELEASE=master
-
-          PROJECT=senlin
-
-          PROJECT_REF=5d3bc56e01f163b62b6e5d53c53ec1bdcf792cc7
-
-          PROFILES=
-
-          DIST_PACKAGES=
-
-          PIP_PACKAGES='
-        tags: quay.io/vexxhost/senlin:5d3bc56e01f163b62b6e5d53c53ec1bdcf792cc7
-    - name: Promote openstack/barbican
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/barbican:ff7fef62116bf5e128da1207752fb69a6193e606
-        dst: quay.io/vexxhost/barbican:master
-    - name: Promote openstack/cinder
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/cinder:cf2b3005aa39b5700f51be0140c61ad9f8ec47db
-        dst: quay.io/vexxhost/cinder:master
-    - name: Promote openstack/designate
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/designate:927e34ee5a53771530e78bcbbd74549c632b539a
-        dst: quay.io/vexxhost/designate:master
-    - name: Promote openstack/glance
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/glance:cb60c1d2facde2f318ec30c8b9cf63844eaccf92
-        dst: quay.io/vexxhost/glance:master
-    - name: Promote openstack/heat
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/heat:f98d164be9c7fecd390b3e4822b33ad4054fcfca
-        dst: quay.io/vexxhost/heat:master
-    - name: Promote openstack/horizon
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/horizon:857d17467adca804fab70c0d8a88f2bf89234ae5
-        dst: quay.io/vexxhost/horizon:master
-    - name: Promote openstack/ironic
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/ironic:4a347b3069498d0f2b49105014e6e118b5972c0f
-        dst: quay.io/vexxhost/ironic:master
-    - name: Promote openstack/keystone
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/keystone:1dd6993d7b9b647810e6f495b62c37627c6e8658
-        dst: quay.io/vexxhost/keystone:master
-    - name: Promote openstack/magnum
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/magnum:60b338126601be3db42ba65d71649c4e3878b4f3
-        dst: quay.io/vexxhost/magnum:master
-    - name: Promote openstack/monasca-agent
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/monasca-agent:29be6e96a6c590221e7d2fd1e30dffc7aec519a9
-        dst: quay.io/vexxhost/monasca-agent:master
-    - name: Promote openstack/monasca-api
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/monasca-api:658c68b593a4d83f59143dc6c7df81860d3f57cb
-        dst: quay.io/vexxhost/monasca-api:master
-    - name: Promote openstack/monasca-notification
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/monasca-notification:5225304a268fbd7e5edc30ab6d2b0cbf3b92b565
-        dst: quay.io/vexxhost/monasca-notification:master
-    - name: Promote openstack/monasca-persister
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/monasca-persister:1ea4e21eb231e4fe193e62f1b03b957c9d4281c8
-        dst: quay.io/vexxhost/monasca-persister:master
-    - name: Promote openstack/neutron
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/neutron:3e8f2325d626a695a812a093907a6f3fd2e1315f
-        dst: quay.io/vexxhost/neutron:master
-    - name: Promote openstack/nova
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/nova:69bc4c38d1c5b98fcbbe8b16a7dfeb654e3b8173
-        dst: quay.io/vexxhost/nova:master
-    - name: Promote openstack/octavia
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/octavia:98ec46b8073bda426316235f743e9af004172389
-        dst: quay.io/vexxhost/octavia:master
-    - name: Promote openstack/placement
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/placement:d0e05e89ac4a57b6489007ed46e86357f11e5b23
-        dst: quay.io/vexxhost/placement:master
-    - name: Promote openstack/senlin
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/senlin:5d3bc56e01f163b62b6e5d53c53ec1bdcf792cc7
-        dst: quay.io/vexxhost/senlin:master
diff --git a/.github/workflows/test-wallaby.yml b/.github/workflows/test-wallaby.yml
deleted file mode 100644
index 0e244ae..0000000
--- a/.github/workflows/test-wallaby.yml
+++ /dev/null
@@ -1,470 +0,0 @@
-name: test-wallaby
-'on':
-  pull_request: {}
-  push:
-    branches:
-    - main
-jobs:
-  build-images:
-    runs-on: ubuntu-latest
-    steps:
-    - uses: actions/checkout@v3.0.2
-    - uses: docker/setup-qemu-action@v2.0.0
-    - uses: docker/setup-buildx-action@v2.0.0
-    - uses: docker/login-action@v2.0.0
-      with:
-        registry: quay.io
-        username: ${{ secrets.QUAY_USERNAME }}
-        password: ${{ secrets.QUAY_ROBOT_TOKEN }}
-    - name: Build openstack/barbican
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=barbican-wallaby
-        cache-to: type=gha,mode=max,scope=barbican-wallaby
-        push: true
-        platforms: linux/amd64
-        build-args: 'RELEASE=wallaby
-
-          PROJECT=barbican
-
-          PROJECT_REF=486e60723f1f635b8e1843bccaf144d85556a9f6
-
-          PROFILES=
-
-          DIST_PACKAGES=
-
-          PIP_PACKAGES='
-        tags: quay.io/vexxhost/barbican:486e60723f1f635b8e1843bccaf144d85556a9f6
-    - name: Build openstack/cinder
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=cinder-wallaby
-        cache-to: type=gha,mode=max,scope=cinder-wallaby
-        push: true
-        platforms: linux/amd64
-        build-args: 'RELEASE=wallaby
-
-          PROJECT=cinder
-
-          PROJECT_REF=70164132dcc590c944fee36c58e93056a3447142
-
-          PROFILES=ceph qemu
-
-          DIST_PACKAGES=
-
-          PIP_PACKAGES='
-        tags: quay.io/vexxhost/cinder:70164132dcc590c944fee36c58e93056a3447142
-    - name: Build openstack/designate
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=designate-wallaby
-        cache-to: type=gha,mode=max,scope=designate-wallaby
-        push: true
-        platforms: linux/amd64
-        build-args: 'RELEASE=wallaby
-
-          PROJECT=designate
-
-          PROJECT_REF=8cef906600117b71903b54c4d7c1e072902f7a46
-
-          PROFILES=
-
-          DIST_PACKAGES=bind9utils
-
-          PIP_PACKAGES='
-        tags: quay.io/vexxhost/designate:8cef906600117b71903b54c4d7c1e072902f7a46
-    - name: Build openstack/glance
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=glance-wallaby
-        cache-to: type=gha,mode=max,scope=glance-wallaby
-        push: true
-        platforms: linux/amd64
-        build-args: 'RELEASE=wallaby
-
-          PROJECT=glance
-
-          PROJECT_REF=677c89c23631e9083261a1a18ed438d8966e0de2
-
-          PROFILES=ceph
-
-          DIST_PACKAGES=
-
-          PIP_PACKAGES='
-        tags: quay.io/vexxhost/glance:677c89c23631e9083261a1a18ed438d8966e0de2
-    - name: Build openstack/heat
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=heat-wallaby
-        cache-to: type=gha,mode=max,scope=heat-wallaby
-        push: true
-        platforms: linux/amd64
-        build-args: 'RELEASE=wallaby
-
-          PROJECT=heat
-
-          PROJECT_REF=d0e2ded71374cffab41499e75efb81782bf83ffa
-
-          PROFILES=
-
-          DIST_PACKAGES=curl
-
-          PIP_PACKAGES='
-        tags: quay.io/vexxhost/heat:d0e2ded71374cffab41499e75efb81782bf83ffa
-    - name: Build openstack/horizon
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=horizon-wallaby
-        cache-to: type=gha,mode=max,scope=horizon-wallaby
-        push: true
-        platforms: linux/amd64
-        build-args: 'RELEASE=wallaby
-
-          PROJECT=horizon
-
-          PROJECT_REF=82698aa8901b0533f2e62868fabbf5ef4c36cea0
-
-          PROFILES=apache
-
-          DIST_PACKAGES=
-
-          PIP_PACKAGES=designate-dashboard heat-dashboard ironic-ui magnum-ui neutron-vpnaas-dashboard
-          octavia-dashboard senlin-dashboard monasca-ui'
-        tags: quay.io/vexxhost/horizon:82698aa8901b0533f2e62868fabbf5ef4c36cea0
-    - name: Build openstack/ironic
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=ironic-wallaby
-        cache-to: type=gha,mode=max,scope=ironic-wallaby
-        push: true
-        platforms: linux/amd64
-        build-args: 'RELEASE=wallaby
-
-          PROJECT=ironic
-
-          PROJECT_REF=35e20b62de1a867534d54de844496072ae291eac
-
-          PROFILES=ipxe ipmi qemu tftp
-
-          DIST_PACKAGES=ethtool lshw iproute2
-
-          PIP_PACKAGES=python-dracclient sushy'
-        tags: quay.io/vexxhost/ironic:35e20b62de1a867534d54de844496072ae291eac
-    - name: Build openstack/keystone
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=keystone-wallaby
-        cache-to: type=gha,mode=max,scope=keystone-wallaby
-        push: true
-        platforms: linux/amd64
-        build-args: 'RELEASE=wallaby
-
-          PROJECT=keystone
-
-          PROJECT_REF=6c75b657352a86e50e63aec44d28784d8863df99
-
-          PROFILES=apache ldap openidc
-
-          DIST_PACKAGES=
-
-          PIP_PACKAGES='
-        tags: quay.io/vexxhost/keystone:6c75b657352a86e50e63aec44d28784d8863df99
-    - name: Build openstack/magnum
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=magnum-wallaby
-        cache-to: type=gha,mode=max,scope=magnum-wallaby
-        push: true
-        platforms: linux/amd64
-        build-args: 'RELEASE=wallaby
-
-          PROJECT=magnum
-
-          PROJECT_REF=a35f48e4357bf5f2601fbdaf62d2074719db1dd9
-
-          PROFILES=
-
-          DIST_PACKAGES=
-
-          PIP_PACKAGES='
-        tags: quay.io/vexxhost/magnum:a35f48e4357bf5f2601fbdaf62d2074719db1dd9
-    - name: Build openstack/monasca-agent
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=monasca-agent-wallaby
-        cache-to: type=gha,mode=max,scope=monasca-agent-wallaby
-        push: true
-        platforms: linux/amd64
-        build-args: 'RELEASE=wallaby
-
-          PROJECT=monasca-agent
-
-          PROJECT_REF=8547772515174ec785ba2bb2dcc88965e0b094f9
-
-          PROFILES=
-
-          DIST_PACKAGES=iproute2 libvirt-clients lshw
-
-          PIP_PACKAGES=libvirt-python python-glanceclient python-neutronclient python-novaclient
-          py3nvml'
-        tags: quay.io/vexxhost/monasca-agent:8547772515174ec785ba2bb2dcc88965e0b094f9
-    - name: Build openstack/monasca-api
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=monasca-api-wallaby
-        cache-to: type=gha,mode=max,scope=monasca-api-wallaby
-        push: true
-        platforms: linux/amd64
-        build-args: 'RELEASE=wallaby
-
-          PROJECT=monasca-api
-
-          PROJECT_REF=6a18732f771dd299b9375ad0cf56aacfc0d1d156
-
-          PROFILES=apache influxdb
-
-          DIST_PACKAGES=
-
-          PIP_PACKAGES='
-        tags: quay.io/vexxhost/monasca-api:6a18732f771dd299b9375ad0cf56aacfc0d1d156
-    - name: Build openstack/monasca-notification
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=monasca-notification-wallaby
-        cache-to: type=gha,mode=max,scope=monasca-notification-wallaby
-        push: true
-        platforms: linux/amd64
-        build-args: 'RELEASE=wallaby
-
-          PROJECT=monasca-notification
-
-          PROJECT_REF=b7f87925990f7f816a9b61ed542322d544d30265
-
-          PROFILES=
-
-          DIST_PACKAGES=
-
-          PIP_PACKAGES='
-        tags: quay.io/vexxhost/monasca-notification:b7f87925990f7f816a9b61ed542322d544d30265
-    - name: Build openstack/monasca-persister
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=monasca-persister-wallaby
-        cache-to: type=gha,mode=max,scope=monasca-persister-wallaby
-        push: true
-        platforms: linux/amd64
-        build-args: 'RELEASE=wallaby
-
-          PROJECT=monasca-persister
-
-          PROJECT_REF=0d1cdd567ab030266d59240b80ee405d5a123fbc
-
-          PROFILES=influxdb
-
-          DIST_PACKAGES=
-
-          PIP_PACKAGES='
-        tags: quay.io/vexxhost/monasca-persister:0d1cdd567ab030266d59240b80ee405d5a123fbc
-    - name: Build openstack/neutron
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=neutron-wallaby
-        cache-to: type=gha,mode=max,scope=neutron-wallaby
-        push: true
-        platforms: linux/amd64,linux/arm64
-        build-args: 'RELEASE=wallaby
-
-          PROJECT=neutron
-
-          PROJECT_REF=ce82edb2db9cd0dbc640e1fa709540bfd876bb58
-
-          PROFILES=openvswitch vpn
-
-          DIST_PACKAGES=jq ethtool lshw
-
-          PIP_PACKAGES=neutron-vpnaas'
-        tags: quay.io/vexxhost/neutron:ce82edb2db9cd0dbc640e1fa709540bfd876bb58
-    - name: Build openstack/nova
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=nova-wallaby
-        cache-to: type=gha,mode=max,scope=nova-wallaby
-        push: true
-        platforms: linux/amd64,linux/arm64
-        build-args: 'RELEASE=wallaby
-
-          PROJECT=nova
-
-          PROJECT_REF=2f7f4cc0babbda80946d9b56eae8f988b39a4d9d
-
-          PROFILES=ceph openvswitch configdrive qemu migration
-
-          DIST_PACKAGES=ovmf qemu-efi-aarch64
-
-          PIP_PACKAGES='
-        tags: quay.io/vexxhost/nova:2f7f4cc0babbda80946d9b56eae8f988b39a4d9d
-    - name: Build openstack/octavia
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=octavia-wallaby
-        cache-to: type=gha,mode=max,scope=octavia-wallaby
-        push: true
-        platforms: linux/amd64
-        build-args: 'RELEASE=wallaby
-
-          PROJECT=octavia
-
-          PROJECT_REF=8abf181448190ea272225ae4415586cbc0e24c6a
-
-          PROFILES=
-
-          DIST_PACKAGES=
-
-          PIP_PACKAGES='
-        tags: quay.io/vexxhost/octavia:8abf181448190ea272225ae4415586cbc0e24c6a
-    - name: Build openstack/placement
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=placement-wallaby
-        cache-to: type=gha,mode=max,scope=placement-wallaby
-        push: true
-        platforms: linux/amd64
-        build-args: 'RELEASE=wallaby
-
-          PROJECT=placement
-
-          PROJECT_REF=716b947c479e36ce2e9ec6d9e0bbab882f391892
-
-          PROFILES=apache
-
-          DIST_PACKAGES=
-
-          PIP_PACKAGES=httplib2'
-        tags: quay.io/vexxhost/placement:716b947c479e36ce2e9ec6d9e0bbab882f391892
-    - name: Build openstack/senlin
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=senlin-wallaby
-        cache-to: type=gha,mode=max,scope=senlin-wallaby
-        push: true
-        platforms: linux/amd64
-        build-args: 'RELEASE=wallaby
-
-          PROJECT=senlin
-
-          PROJECT_REF=ac8245b582376b460a2494ad23ff9e2d83d228cb
-
-          PROFILES=
-
-          DIST_PACKAGES=
-
-          PIP_PACKAGES='
-        tags: quay.io/vexxhost/senlin:ac8245b582376b460a2494ad23ff9e2d83d228cb
-    - name: Promote openstack/barbican
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/barbican:486e60723f1f635b8e1843bccaf144d85556a9f6
-        dst: quay.io/vexxhost/barbican:wallaby
-    - name: Promote openstack/cinder
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/cinder:70164132dcc590c944fee36c58e93056a3447142
-        dst: quay.io/vexxhost/cinder:wallaby
-    - name: Promote openstack/designate
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/designate:8cef906600117b71903b54c4d7c1e072902f7a46
-        dst: quay.io/vexxhost/designate:wallaby
-    - name: Promote openstack/glance
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/glance:677c89c23631e9083261a1a18ed438d8966e0de2
-        dst: quay.io/vexxhost/glance:wallaby
-    - name: Promote openstack/heat
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/heat:d0e2ded71374cffab41499e75efb81782bf83ffa
-        dst: quay.io/vexxhost/heat:wallaby
-    - name: Promote openstack/horizon
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/horizon:82698aa8901b0533f2e62868fabbf5ef4c36cea0
-        dst: quay.io/vexxhost/horizon:wallaby
-    - name: Promote openstack/ironic
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/ironic:35e20b62de1a867534d54de844496072ae291eac
-        dst: quay.io/vexxhost/ironic:wallaby
-    - name: Promote openstack/keystone
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/keystone:6c75b657352a86e50e63aec44d28784d8863df99
-        dst: quay.io/vexxhost/keystone:wallaby
-    - name: Promote openstack/magnum
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/magnum:a35f48e4357bf5f2601fbdaf62d2074719db1dd9
-        dst: quay.io/vexxhost/magnum:wallaby
-    - name: Promote openstack/monasca-agent
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/monasca-agent:8547772515174ec785ba2bb2dcc88965e0b094f9
-        dst: quay.io/vexxhost/monasca-agent:wallaby
-    - name: Promote openstack/monasca-api
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/monasca-api:6a18732f771dd299b9375ad0cf56aacfc0d1d156
-        dst: quay.io/vexxhost/monasca-api:wallaby
-    - name: Promote openstack/monasca-notification
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/monasca-notification:b7f87925990f7f816a9b61ed542322d544d30265
-        dst: quay.io/vexxhost/monasca-notification:wallaby
-    - name: Promote openstack/monasca-persister
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/monasca-persister:0d1cdd567ab030266d59240b80ee405d5a123fbc
-        dst: quay.io/vexxhost/monasca-persister:wallaby
-    - name: Promote openstack/neutron
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/neutron:ce82edb2db9cd0dbc640e1fa709540bfd876bb58
-        dst: quay.io/vexxhost/neutron:wallaby
-    - name: Promote openstack/nova
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/nova:2f7f4cc0babbda80946d9b56eae8f988b39a4d9d
-        dst: quay.io/vexxhost/nova:wallaby
-    - name: Promote openstack/octavia
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/octavia:8abf181448190ea272225ae4415586cbc0e24c6a
-        dst: quay.io/vexxhost/octavia:wallaby
-    - name: Promote openstack/placement
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/placement:716b947c479e36ce2e9ec6d9e0bbab882f391892
-        dst: quay.io/vexxhost/placement:wallaby
-    - name: Promote openstack/senlin
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/senlin:ac8245b582376b460a2494ad23ff9e2d83d228cb
-        dst: quay.io/vexxhost/senlin:wallaby
diff --git a/.github/workflows/test-xena.yml b/.github/workflows/test-xena.yml
deleted file mode 100644
index a48c3dd..0000000
--- a/.github/workflows/test-xena.yml
+++ /dev/null
@@ -1,470 +0,0 @@
-name: test-xena
-'on':
-  pull_request: {}
-  push:
-    branches:
-    - main
-jobs:
-  build-images:
-    runs-on: ubuntu-latest
-    steps:
-    - uses: actions/checkout@v3.0.2
-    - uses: docker/setup-qemu-action@v2.0.0
-    - uses: docker/setup-buildx-action@v2.0.0
-    - uses: docker/login-action@v2.0.0
-      with:
-        registry: quay.io
-        username: ${{ secrets.QUAY_USERNAME }}
-        password: ${{ secrets.QUAY_ROBOT_TOKEN }}
-    - name: Build openstack/barbican
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=barbican-xena
-        cache-to: type=gha,mode=max,scope=barbican-xena
-        push: true
-        platforms: linux/amd64
-        build-args: 'RELEASE=xena
-
-          PROJECT=barbican
-
-          PROJECT_REF=bb2779473f786f3bb7b84bc4f445089da8cbfe88
-
-          PROFILES=
-
-          DIST_PACKAGES=
-
-          PIP_PACKAGES='
-        tags: quay.io/vexxhost/barbican:bb2779473f786f3bb7b84bc4f445089da8cbfe88
-    - name: Build openstack/cinder
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=cinder-xena
-        cache-to: type=gha,mode=max,scope=cinder-xena
-        push: true
-        platforms: linux/amd64
-        build-args: 'RELEASE=xena
-
-          PROJECT=cinder
-
-          PROJECT_REF=b2caec7696817e02b0763d8b0d4f5d1b7f0b903e
-
-          PROFILES=ceph qemu
-
-          DIST_PACKAGES=
-
-          PIP_PACKAGES='
-        tags: quay.io/vexxhost/cinder:b2caec7696817e02b0763d8b0d4f5d1b7f0b903e
-    - name: Build openstack/designate
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=designate-xena
-        cache-to: type=gha,mode=max,scope=designate-xena
-        push: true
-        platforms: linux/amd64
-        build-args: 'RELEASE=xena
-
-          PROJECT=designate
-
-          PROJECT_REF=410c1e8d60a6b3844050dd4d3ecc46f640356bfb
-
-          PROFILES=
-
-          DIST_PACKAGES=bind9utils
-
-          PIP_PACKAGES='
-        tags: quay.io/vexxhost/designate:410c1e8d60a6b3844050dd4d3ecc46f640356bfb
-    - name: Build openstack/glance
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=glance-xena
-        cache-to: type=gha,mode=max,scope=glance-xena
-        push: true
-        platforms: linux/amd64
-        build-args: 'RELEASE=xena
-
-          PROJECT=glance
-
-          PROJECT_REF=cbe6522e67c2e437e600b4fb153a1d048a310282
-
-          PROFILES=ceph
-
-          DIST_PACKAGES=
-
-          PIP_PACKAGES='
-        tags: quay.io/vexxhost/glance:cbe6522e67c2e437e600b4fb153a1d048a310282
-    - name: Build openstack/heat
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=heat-xena
-        cache-to: type=gha,mode=max,scope=heat-xena
-        push: true
-        platforms: linux/amd64
-        build-args: 'RELEASE=xena
-
-          PROJECT=heat
-
-          PROJECT_REF=ead7cd61bd685ea46dd21c4ef3ea6b3fde273c10
-
-          PROFILES=
-
-          DIST_PACKAGES=curl
-
-          PIP_PACKAGES='
-        tags: quay.io/vexxhost/heat:ead7cd61bd685ea46dd21c4ef3ea6b3fde273c10
-    - name: Build openstack/horizon
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=horizon-xena
-        cache-to: type=gha,mode=max,scope=horizon-xena
-        push: true
-        platforms: linux/amd64
-        build-args: 'RELEASE=xena
-
-          PROJECT=horizon
-
-          PROJECT_REF=48b702adf75b7f19420df578d2bf9bf813099af5
-
-          PROFILES=apache
-
-          DIST_PACKAGES=
-
-          PIP_PACKAGES=designate-dashboard heat-dashboard ironic-ui magnum-ui neutron-vpnaas-dashboard
-          octavia-dashboard senlin-dashboard monasca-ui'
-        tags: quay.io/vexxhost/horizon:48b702adf75b7f19420df578d2bf9bf813099af5
-    - name: Build openstack/ironic
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=ironic-xena
-        cache-to: type=gha,mode=max,scope=ironic-xena
-        push: true
-        platforms: linux/amd64
-        build-args: 'RELEASE=xena
-
-          PROJECT=ironic
-
-          PROJECT_REF=3f624e5caa83acf9b98443cf32cb0cd69143c6e2
-
-          PROFILES=ipxe ipmi qemu tftp
-
-          DIST_PACKAGES=ethtool lshw iproute2
-
-          PIP_PACKAGES=python-dracclient sushy'
-        tags: quay.io/vexxhost/ironic:3f624e5caa83acf9b98443cf32cb0cd69143c6e2
-    - name: Build openstack/keystone
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=keystone-xena
-        cache-to: type=gha,mode=max,scope=keystone-xena
-        push: true
-        platforms: linux/amd64
-        build-args: 'RELEASE=xena
-
-          PROJECT=keystone
-
-          PROJECT_REF=e772caa58ec7afdef4bd5fb58e44dc21a78c237b
-
-          PROFILES=apache ldap openidc
-
-          DIST_PACKAGES=
-
-          PIP_PACKAGES='
-        tags: quay.io/vexxhost/keystone:e772caa58ec7afdef4bd5fb58e44dc21a78c237b
-    - name: Build openstack/magnum
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=magnum-xena
-        cache-to: type=gha,mode=max,scope=magnum-xena
-        push: true
-        platforms: linux/amd64
-        build-args: 'RELEASE=xena
-
-          PROJECT=magnum
-
-          PROJECT_REF=82a22387b91bb3c77261f42535be9c9d6b53a853
-
-          PROFILES=
-
-          DIST_PACKAGES=
-
-          PIP_PACKAGES='
-        tags: quay.io/vexxhost/magnum:82a22387b91bb3c77261f42535be9c9d6b53a853
-    - name: Build openstack/monasca-agent
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=monasca-agent-xena
-        cache-to: type=gha,mode=max,scope=monasca-agent-xena
-        push: true
-        platforms: linux/amd64
-        build-args: 'RELEASE=xena
-
-          PROJECT=monasca-agent
-
-          PROJECT_REF=284233aa9e53601548ae2ec435331b59974aa5a7
-
-          PROFILES=
-
-          DIST_PACKAGES=iproute2 libvirt-clients lshw
-
-          PIP_PACKAGES=libvirt-python python-glanceclient python-neutronclient python-novaclient
-          py3nvml'
-        tags: quay.io/vexxhost/monasca-agent:284233aa9e53601548ae2ec435331b59974aa5a7
-    - name: Build openstack/monasca-api
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=monasca-api-xena
-        cache-to: type=gha,mode=max,scope=monasca-api-xena
-        push: true
-        platforms: linux/amd64
-        build-args: 'RELEASE=xena
-
-          PROJECT=monasca-api
-
-          PROJECT_REF=44956801556b79c14373aa533df4debbd1da0ad9
-
-          PROFILES=apache influxdb
-
-          DIST_PACKAGES=
-
-          PIP_PACKAGES='
-        tags: quay.io/vexxhost/monasca-api:44956801556b79c14373aa533df4debbd1da0ad9
-    - name: Build openstack/monasca-notification
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=monasca-notification-xena
-        cache-to: type=gha,mode=max,scope=monasca-notification-xena
-        push: true
-        platforms: linux/amd64
-        build-args: 'RELEASE=xena
-
-          PROJECT=monasca-notification
-
-          PROJECT_REF=a94f013ff4addceb93ab556b666f63da7ea820e5
-
-          PROFILES=
-
-          DIST_PACKAGES=
-
-          PIP_PACKAGES='
-        tags: quay.io/vexxhost/monasca-notification:a94f013ff4addceb93ab556b666f63da7ea820e5
-    - name: Build openstack/monasca-persister
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=monasca-persister-xena
-        cache-to: type=gha,mode=max,scope=monasca-persister-xena
-        push: true
-        platforms: linux/amd64
-        build-args: 'RELEASE=xena
-
-          PROJECT=monasca-persister
-
-          PROJECT_REF=19d29bfab93206a7d7652037465d449895b7d8ce
-
-          PROFILES=influxdb
-
-          DIST_PACKAGES=
-
-          PIP_PACKAGES='
-        tags: quay.io/vexxhost/monasca-persister:19d29bfab93206a7d7652037465d449895b7d8ce
-    - name: Build openstack/neutron
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=neutron-xena
-        cache-to: type=gha,mode=max,scope=neutron-xena
-        push: true
-        platforms: linux/amd64,linux/arm64
-        build-args: 'RELEASE=xena
-
-          PROJECT=neutron
-
-          PROJECT_REF=74f127973831c9c5f889017b3b627bd9940e37a6
-
-          PROFILES=openvswitch vpn
-
-          DIST_PACKAGES=jq ethtool lshw
-
-          PIP_PACKAGES=neutron-vpnaas'
-        tags: quay.io/vexxhost/neutron:74f127973831c9c5f889017b3b627bd9940e37a6
-    - name: Build openstack/nova
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=nova-xena
-        cache-to: type=gha,mode=max,scope=nova-xena
-        push: true
-        platforms: linux/amd64,linux/arm64
-        build-args: 'RELEASE=xena
-
-          PROJECT=nova
-
-          PROJECT_REF=62e1a621d19e8833a18afdba86de7f8334171c63
-
-          PROFILES=ceph openvswitch configdrive qemu migration
-
-          DIST_PACKAGES=ovmf qemu-efi-aarch64
-
-          PIP_PACKAGES='
-        tags: quay.io/vexxhost/nova:62e1a621d19e8833a18afdba86de7f8334171c63
-    - name: Build openstack/octavia
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=octavia-xena
-        cache-to: type=gha,mode=max,scope=octavia-xena
-        push: true
-        platforms: linux/amd64
-        build-args: 'RELEASE=xena
-
-          PROJECT=octavia
-
-          PROJECT_REF=bda4d7160aebf7549d72b049c8dca53f7d4dedb5
-
-          PROFILES=
-
-          DIST_PACKAGES=
-
-          PIP_PACKAGES='
-        tags: quay.io/vexxhost/octavia:bda4d7160aebf7549d72b049c8dca53f7d4dedb5
-    - name: Build openstack/placement
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=placement-xena
-        cache-to: type=gha,mode=max,scope=placement-xena
-        push: true
-        platforms: linux/amd64
-        build-args: 'RELEASE=xena
-
-          PROJECT=placement
-
-          PROJECT_REF=f96984abd48f4d938d0fff0bab9b12ed933e320e
-
-          PROFILES=apache
-
-          DIST_PACKAGES=
-
-          PIP_PACKAGES=httplib2'
-        tags: quay.io/vexxhost/placement:f96984abd48f4d938d0fff0bab9b12ed933e320e
-    - name: Build openstack/senlin
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=senlin-xena
-        cache-to: type=gha,mode=max,scope=senlin-xena
-        push: true
-        platforms: linux/amd64
-        build-args: 'RELEASE=xena
-
-          PROJECT=senlin
-
-          PROJECT_REF=28f8abc29a966d41f8b4502d1fc7432f86b14bea
-
-          PROFILES=
-
-          DIST_PACKAGES=
-
-          PIP_PACKAGES='
-        tags: quay.io/vexxhost/senlin:28f8abc29a966d41f8b4502d1fc7432f86b14bea
-    - name: Promote openstack/barbican
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/barbican:bb2779473f786f3bb7b84bc4f445089da8cbfe88
-        dst: quay.io/vexxhost/barbican:xena
-    - name: Promote openstack/cinder
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/cinder:b2caec7696817e02b0763d8b0d4f5d1b7f0b903e
-        dst: quay.io/vexxhost/cinder:xena
-    - name: Promote openstack/designate
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/designate:410c1e8d60a6b3844050dd4d3ecc46f640356bfb
-        dst: quay.io/vexxhost/designate:xena
-    - name: Promote openstack/glance
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/glance:cbe6522e67c2e437e600b4fb153a1d048a310282
-        dst: quay.io/vexxhost/glance:xena
-    - name: Promote openstack/heat
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/heat:ead7cd61bd685ea46dd21c4ef3ea6b3fde273c10
-        dst: quay.io/vexxhost/heat:xena
-    - name: Promote openstack/horizon
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/horizon:48b702adf75b7f19420df578d2bf9bf813099af5
-        dst: quay.io/vexxhost/horizon:xena
-    - name: Promote openstack/ironic
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/ironic:3f624e5caa83acf9b98443cf32cb0cd69143c6e2
-        dst: quay.io/vexxhost/ironic:xena
-    - name: Promote openstack/keystone
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/keystone:e772caa58ec7afdef4bd5fb58e44dc21a78c237b
-        dst: quay.io/vexxhost/keystone:xena
-    - name: Promote openstack/magnum
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/magnum:82a22387b91bb3c77261f42535be9c9d6b53a853
-        dst: quay.io/vexxhost/magnum:xena
-    - name: Promote openstack/monasca-agent
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/monasca-agent:284233aa9e53601548ae2ec435331b59974aa5a7
-        dst: quay.io/vexxhost/monasca-agent:xena
-    - name: Promote openstack/monasca-api
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/monasca-api:44956801556b79c14373aa533df4debbd1da0ad9
-        dst: quay.io/vexxhost/monasca-api:xena
-    - name: Promote openstack/monasca-notification
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/monasca-notification:a94f013ff4addceb93ab556b666f63da7ea820e5
-        dst: quay.io/vexxhost/monasca-notification:xena
-    - name: Promote openstack/monasca-persister
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/monasca-persister:19d29bfab93206a7d7652037465d449895b7d8ce
-        dst: quay.io/vexxhost/monasca-persister:xena
-    - name: Promote openstack/neutron
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/neutron:74f127973831c9c5f889017b3b627bd9940e37a6
-        dst: quay.io/vexxhost/neutron:xena
-    - name: Promote openstack/nova
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/nova:62e1a621d19e8833a18afdba86de7f8334171c63
-        dst: quay.io/vexxhost/nova:xena
-    - name: Promote openstack/octavia
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/octavia:bda4d7160aebf7549d72b049c8dca53f7d4dedb5
-        dst: quay.io/vexxhost/octavia:xena
-    - name: Promote openstack/placement
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/placement:f96984abd48f4d938d0fff0bab9b12ed933e320e
-        dst: quay.io/vexxhost/placement:xena
-    - name: Promote openstack/senlin
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/senlin:28f8abc29a966d41f8b4502d1fc7432f86b14bea
-        dst: quay.io/vexxhost/senlin:xena
diff --git a/.github/workflows/test-yoga.yml b/.github/workflows/test-yoga.yml
deleted file mode 100644
index 1bb7eb7..0000000
--- a/.github/workflows/test-yoga.yml
+++ /dev/null
@@ -1,470 +0,0 @@
-name: test-yoga
-'on':
-  pull_request: {}
-  push:
-    branches:
-    - main
-jobs:
-  build-images:
-    runs-on: ubuntu-latest
-    steps:
-    - uses: actions/checkout@v3.0.2
-    - uses: docker/setup-qemu-action@v2.0.0
-    - uses: docker/setup-buildx-action@v2.0.0
-    - uses: docker/login-action@v2.0.0
-      with:
-        registry: quay.io
-        username: ${{ secrets.QUAY_USERNAME }}
-        password: ${{ secrets.QUAY_ROBOT_TOKEN }}
-    - name: Build openstack/barbican
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=barbican-yoga
-        cache-to: type=gha,mode=max,scope=barbican-yoga
-        push: true
-        platforms: linux/amd64
-        build-args: 'RELEASE=yoga
-
-          PROJECT=barbican
-
-          PROJECT_REF=29e8fd054dbee79be2403e81fbe864aef8773ffe
-
-          PROFILES=
-
-          DIST_PACKAGES=
-
-          PIP_PACKAGES='
-        tags: quay.io/vexxhost/barbican:29e8fd054dbee79be2403e81fbe864aef8773ffe
-    - name: Build openstack/cinder
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=cinder-yoga
-        cache-to: type=gha,mode=max,scope=cinder-yoga
-        push: true
-        platforms: linux/amd64
-        build-args: 'RELEASE=yoga
-
-          PROJECT=cinder
-
-          PROJECT_REF=9b583401adfd63d3d311bb9515f9a27b9b679a6f
-
-          PROFILES=ceph qemu
-
-          DIST_PACKAGES=
-
-          PIP_PACKAGES='
-        tags: quay.io/vexxhost/cinder:9b583401adfd63d3d311bb9515f9a27b9b679a6f
-    - name: Build openstack/designate
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=designate-yoga
-        cache-to: type=gha,mode=max,scope=designate-yoga
-        push: true
-        platforms: linux/amd64
-        build-args: 'RELEASE=yoga
-
-          PROJECT=designate
-
-          PROJECT_REF=2dc40a15894d2c2010b7176ff6f1dff0c8621503
-
-          PROFILES=
-
-          DIST_PACKAGES=bind9utils
-
-          PIP_PACKAGES='
-        tags: quay.io/vexxhost/designate:2dc40a15894d2c2010b7176ff6f1dff0c8621503
-    - name: Build openstack/glance
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=glance-yoga
-        cache-to: type=gha,mode=max,scope=glance-yoga
-        push: true
-        platforms: linux/amd64
-        build-args: 'RELEASE=yoga
-
-          PROJECT=glance
-
-          PROJECT_REF=20110a7d0c310eac81635d1f8c60bce423418820
-
-          PROFILES=ceph
-
-          DIST_PACKAGES=
-
-          PIP_PACKAGES='
-        tags: quay.io/vexxhost/glance:20110a7d0c310eac81635d1f8c60bce423418820
-    - name: Build openstack/heat
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=heat-yoga
-        cache-to: type=gha,mode=max,scope=heat-yoga
-        push: true
-        platforms: linux/amd64
-        build-args: 'RELEASE=yoga
-
-          PROJECT=heat
-
-          PROJECT_REF=a406dff43d2f057674da9e564071e78c533006e0
-
-          PROFILES=
-
-          DIST_PACKAGES=curl
-
-          PIP_PACKAGES='
-        tags: quay.io/vexxhost/heat:a406dff43d2f057674da9e564071e78c533006e0
-    - name: Build openstack/horizon
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=horizon-yoga
-        cache-to: type=gha,mode=max,scope=horizon-yoga
-        push: true
-        platforms: linux/amd64
-        build-args: 'RELEASE=yoga
-
-          PROJECT=horizon
-
-          PROJECT_REF=a9ae00b16453b4d0ff1803651fe726da55a3f08d
-
-          PROFILES=apache
-
-          DIST_PACKAGES=
-
-          PIP_PACKAGES=designate-dashboard heat-dashboard ironic-ui magnum-ui neutron-vpnaas-dashboard
-          octavia-dashboard senlin-dashboard monasca-ui'
-        tags: quay.io/vexxhost/horizon:a9ae00b16453b4d0ff1803651fe726da55a3f08d
-    - name: Build openstack/ironic
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=ironic-yoga
-        cache-to: type=gha,mode=max,scope=ironic-yoga
-        push: true
-        platforms: linux/amd64
-        build-args: 'RELEASE=yoga
-
-          PROJECT=ironic
-
-          PROJECT_REF=8034242c225f3293c08ca46dc588d00c5ad0e10a
-
-          PROFILES=ipxe ipmi qemu tftp
-
-          DIST_PACKAGES=ethtool lshw iproute2
-
-          PIP_PACKAGES=python-dracclient sushy'
-        tags: quay.io/vexxhost/ironic:8034242c225f3293c08ca46dc588d00c5ad0e10a
-    - name: Build openstack/keystone
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=keystone-yoga
-        cache-to: type=gha,mode=max,scope=keystone-yoga
-        push: true
-        platforms: linux/amd64
-        build-args: 'RELEASE=yoga
-
-          PROJECT=keystone
-
-          PROJECT_REF=74be2e2465277aa93932fb9cabb3781451fcbe8a
-
-          PROFILES=apache ldap openidc
-
-          DIST_PACKAGES=
-
-          PIP_PACKAGES='
-        tags: quay.io/vexxhost/keystone:74be2e2465277aa93932fb9cabb3781451fcbe8a
-    - name: Build openstack/magnum
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=magnum-yoga
-        cache-to: type=gha,mode=max,scope=magnum-yoga
-        push: true
-        platforms: linux/amd64
-        build-args: 'RELEASE=yoga
-
-          PROJECT=magnum
-
-          PROJECT_REF=2ae6cd95f18a1675ec6059e6434ee58a1868b07f
-
-          PROFILES=
-
-          DIST_PACKAGES=
-
-          PIP_PACKAGES='
-        tags: quay.io/vexxhost/magnum:2ae6cd95f18a1675ec6059e6434ee58a1868b07f
-    - name: Build openstack/monasca-agent
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=monasca-agent-yoga
-        cache-to: type=gha,mode=max,scope=monasca-agent-yoga
-        push: true
-        platforms: linux/amd64
-        build-args: 'RELEASE=yoga
-
-          PROJECT=monasca-agent
-
-          PROJECT_REF=f0b09bec09883680390d61860f91dc4322a9f084
-
-          PROFILES=
-
-          DIST_PACKAGES=iproute2 libvirt-clients lshw
-
-          PIP_PACKAGES=libvirt-python python-glanceclient python-neutronclient python-novaclient
-          py3nvml'
-        tags: quay.io/vexxhost/monasca-agent:f0b09bec09883680390d61860f91dc4322a9f084
-    - name: Build openstack/monasca-api
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=monasca-api-yoga
-        cache-to: type=gha,mode=max,scope=monasca-api-yoga
-        push: true
-        platforms: linux/amd64
-        build-args: 'RELEASE=yoga
-
-          PROJECT=monasca-api
-
-          PROJECT_REF=0b7851cab47c8e7484e3ce669c5d485bd180c504
-
-          PROFILES=apache influxdb
-
-          DIST_PACKAGES=
-
-          PIP_PACKAGES='
-        tags: quay.io/vexxhost/monasca-api:0b7851cab47c8e7484e3ce669c5d485bd180c504
-    - name: Build openstack/monasca-notification
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=monasca-notification-yoga
-        cache-to: type=gha,mode=max,scope=monasca-notification-yoga
-        push: true
-        platforms: linux/amd64
-        build-args: 'RELEASE=yoga
-
-          PROJECT=monasca-notification
-
-          PROJECT_REF=50dac47ff801b784b9ad3cb701f6c9b04d0fa350
-
-          PROFILES=
-
-          DIST_PACKAGES=
-
-          PIP_PACKAGES='
-        tags: quay.io/vexxhost/monasca-notification:50dac47ff801b784b9ad3cb701f6c9b04d0fa350
-    - name: Build openstack/monasca-persister
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=monasca-persister-yoga
-        cache-to: type=gha,mode=max,scope=monasca-persister-yoga
-        push: true
-        platforms: linux/amd64
-        build-args: 'RELEASE=yoga
-
-          PROJECT=monasca-persister
-
-          PROJECT_REF=21e6581b44f70bd2464921c389fd44dad10d460f
-
-          PROFILES=influxdb
-
-          DIST_PACKAGES=
-
-          PIP_PACKAGES='
-        tags: quay.io/vexxhost/monasca-persister:21e6581b44f70bd2464921c389fd44dad10d460f
-    - name: Build openstack/neutron
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=neutron-yoga
-        cache-to: type=gha,mode=max,scope=neutron-yoga
-        push: true
-        platforms: linux/amd64,linux/arm64
-        build-args: 'RELEASE=yoga
-
-          PROJECT=neutron
-
-          PROJECT_REF=0836d57199a9fa337fe3bb9a5d2ad5e4cd814586
-
-          PROFILES=openvswitch vpn
-
-          DIST_PACKAGES=jq ethtool lshw
-
-          PIP_PACKAGES=neutron-vpnaas'
-        tags: quay.io/vexxhost/neutron:0836d57199a9fa337fe3bb9a5d2ad5e4cd814586
-    - name: Build openstack/nova
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=nova-yoga
-        cache-to: type=gha,mode=max,scope=nova-yoga
-        push: true
-        platforms: linux/amd64,linux/arm64
-        build-args: 'RELEASE=yoga
-
-          PROJECT=nova
-
-          PROJECT_REF=6d61fccb8455367aaa37ae7bddf3b8befd3c3d88
-
-          PROFILES=ceph openvswitch configdrive qemu migration
-
-          DIST_PACKAGES=ovmf qemu-efi-aarch64
-
-          PIP_PACKAGES='
-        tags: quay.io/vexxhost/nova:6d61fccb8455367aaa37ae7bddf3b8befd3c3d88
-    - name: Build openstack/octavia
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=octavia-yoga
-        cache-to: type=gha,mode=max,scope=octavia-yoga
-        push: true
-        platforms: linux/amd64
-        build-args: 'RELEASE=yoga
-
-          PROJECT=octavia
-
-          PROJECT_REF=9c30758dfbdc4d0dc5ff9a942ffece64e5cde325
-
-          PROFILES=
-
-          DIST_PACKAGES=
-
-          PIP_PACKAGES='
-        tags: quay.io/vexxhost/octavia:9c30758dfbdc4d0dc5ff9a942ffece64e5cde325
-    - name: Build openstack/placement
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=placement-yoga
-        cache-to: type=gha,mode=max,scope=placement-yoga
-        push: true
-        platforms: linux/amd64
-        build-args: 'RELEASE=yoga
-
-          PROJECT=placement
-
-          PROJECT_REF=4d3df47ee3e394e3178d58c15306620809ad2806
-
-          PROFILES=apache
-
-          DIST_PACKAGES=
-
-          PIP_PACKAGES=httplib2'
-        tags: quay.io/vexxhost/placement:4d3df47ee3e394e3178d58c15306620809ad2806
-    - name: Build openstack/senlin
-      uses: docker/build-push-action@v3.1.1
-      with:
-        context: images/openstack
-        cache-from: type=gha,scope=senlin-yoga
-        cache-to: type=gha,mode=max,scope=senlin-yoga
-        push: true
-        platforms: linux/amd64
-        build-args: 'RELEASE=yoga
-
-          PROJECT=senlin
-
-          PROJECT_REF=804056e856fb80bc881f6ef22eb57bc4adf7a287
-
-          PROFILES=
-
-          DIST_PACKAGES=
-
-          PIP_PACKAGES='
-        tags: quay.io/vexxhost/senlin:804056e856fb80bc881f6ef22eb57bc4adf7a287
-    - name: Promote openstack/barbican
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/barbican:29e8fd054dbee79be2403e81fbe864aef8773ffe
-        dst: quay.io/vexxhost/barbican:yoga
-    - name: Promote openstack/cinder
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/cinder:9b583401adfd63d3d311bb9515f9a27b9b679a6f
-        dst: quay.io/vexxhost/cinder:yoga
-    - name: Promote openstack/designate
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/designate:2dc40a15894d2c2010b7176ff6f1dff0c8621503
-        dst: quay.io/vexxhost/designate:yoga
-    - name: Promote openstack/glance
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/glance:20110a7d0c310eac81635d1f8c60bce423418820
-        dst: quay.io/vexxhost/glance:yoga
-    - name: Promote openstack/heat
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/heat:a406dff43d2f057674da9e564071e78c533006e0
-        dst: quay.io/vexxhost/heat:yoga
-    - name: Promote openstack/horizon
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/horizon:a9ae00b16453b4d0ff1803651fe726da55a3f08d
-        dst: quay.io/vexxhost/horizon:yoga
-    - name: Promote openstack/ironic
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/ironic:8034242c225f3293c08ca46dc588d00c5ad0e10a
-        dst: quay.io/vexxhost/ironic:yoga
-    - name: Promote openstack/keystone
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/keystone:74be2e2465277aa93932fb9cabb3781451fcbe8a
-        dst: quay.io/vexxhost/keystone:yoga
-    - name: Promote openstack/magnum
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/magnum:2ae6cd95f18a1675ec6059e6434ee58a1868b07f
-        dst: quay.io/vexxhost/magnum:yoga
-    - name: Promote openstack/monasca-agent
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/monasca-agent:f0b09bec09883680390d61860f91dc4322a9f084
-        dst: quay.io/vexxhost/monasca-agent:yoga
-    - name: Promote openstack/monasca-api
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/monasca-api:0b7851cab47c8e7484e3ce669c5d485bd180c504
-        dst: quay.io/vexxhost/monasca-api:yoga
-    - name: Promote openstack/monasca-notification
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/monasca-notification:50dac47ff801b784b9ad3cb701f6c9b04d0fa350
-        dst: quay.io/vexxhost/monasca-notification:yoga
-    - name: Promote openstack/monasca-persister
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/monasca-persister:21e6581b44f70bd2464921c389fd44dad10d460f
-        dst: quay.io/vexxhost/monasca-persister:yoga
-    - name: Promote openstack/neutron
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/neutron:0836d57199a9fa337fe3bb9a5d2ad5e4cd814586
-        dst: quay.io/vexxhost/neutron:yoga
-    - name: Promote openstack/nova
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/nova:6d61fccb8455367aaa37ae7bddf3b8befd3c3d88
-        dst: quay.io/vexxhost/nova:yoga
-    - name: Promote openstack/octavia
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/octavia:9c30758dfbdc4d0dc5ff9a942ffece64e5cde325
-        dst: quay.io/vexxhost/octavia:yoga
-    - name: Promote openstack/placement
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/placement:4d3df47ee3e394e3178d58c15306620809ad2806
-        dst: quay.io/vexxhost/placement:yoga
-    - name: Promote openstack/senlin
-      uses: akhilerm/tag-push-action@v2.0.0
-      with:
-        src: quay.io/vexxhost/senlin:804056e856fb80bc881f6ef22eb57bc4adf7a287
-        dst: quay.io/vexxhost/senlin:yoga
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
new file mode 100644
index 0000000..bef4775
--- /dev/null
+++ b/.github/workflows/test.yml
@@ -0,0 +1,77 @@
+name: test
+on:
+  pull_request: {}
+  push:
+    branches:
+      - main
+
+jobs:
+  build-matrix:
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/checkout@v3.0.2
+      - id: set-matrix
+        run: |
+          echo '::set-output name=release::$(./ci/build-release-matrix)'
+          echo '::set-output name=project::$(./ci/build-project-matrix)'
+    outputs:
+      release_matrix: ${{ steps.set-matrix.outputs.release }}
+      project_matrix: ${{ steps.set-matrix.outputs.project }}
+
+  build-openstack-images:
+    runs-on: ubuntu-latest
+    strategy:
+      fail-fast: false
+      matrix:
+        project: ${{ fromJson(needs.build-matrix.outputs.project_matrix) }}
+        release: ${{ fromJson(needs.build-matrix.outputs.release_matrix) }}
+    steps:
+      - uses: actions/checkout@v3
+      - uses: docker/setup-qemu-action@v2
+      - uses: docker/setup-buildx-action@v2
+      - run: ./ci/openstack-image-build-env ${{ matrix.project }} ${{ matrix.release }} >> $GITHUB_ENV
+      - uses: docker/login-action@v2
+        with:
+          registry: quay.io
+          username: ${{ secrets.QUAY_USERNAME }}
+          password: ${{ secrets.QUAY_ROBOT_TOKEN }}
+      - uses: docker/build-push-action@v3
+        with:
+          context: images/openstack
+          cache-from: type=gha,scope=${{ matrix.project }}-${{ matrix.release }}
+          cache-to: type=gha,mode=max,scope=${{ matrix.project }}-${{ matrix.release }}
+          platforms: ${{ env.PLATFORMS }}
+          push: true
+          build-args: |
+            RELEASE=${{ matrix.release }}
+            PROJECT=${{ matrix.project }}
+            PROJECT_REF=${{ env.PROJECT_REF }}
+            PROFILES=${{ env.PROFILES }}
+            DIST_PACKAGES=${{ env.DIST_PACKAGES }}
+            PIP_PACKAGES=${{ env.PIP_PACKAGES }}
+          tags: |
+            quay.io/vexxhost/${{ matrix.project }}:${{ env.PROJECT_REF }}
+
+  # TODO(mnaser): Molecule
+
+  promote-openstack-images:
+    if: ${{ github.ref == format('refs/heads/{0}', github.event.repository.default_branch) }}
+    needs:
+      - build-openstack-images
+    runs-on: ubuntu-latest
+    strategy:
+      fail-fast: false
+      matrix:
+        project: ${{ fromJson(needs.build-matrix.outputs.project_matrix) }}
+        release: ${{ fromJson(needs.build-matrix.outputs.release_matrix) }}
+    steps:
+      - run: ./ci/openstack-image-build-env ${{ matrix.project }} ${{ matrix.release }} >> $GITHUB_ENV
+      - uses: docker/login-action@v2
+        with:
+          registry: quay.io
+          username: ${{ secrets.QUAY_USERNAME }}
+          password: ${{ secrets.QUAY_ROBOT_TOKEN }}
+      - uses: akhilerm/tag-push-action@v2.0.0
+        with:
+          src: quay.io/vexxhost/${{ matrix.project }}:${{ env.PROJECT_REF }}
+          dst: quay.io/vexxhost/${{ matrix.project }}:${{ matrix.release }}
diff --git a/ci/build-project-matrix b/ci/build-project-matrix
new file mode 100755
index 0000000..29a7e8d
--- /dev/null
+++ b/ci/build-project-matrix
@@ -0,0 +1,12 @@
+#!/usr/bin/env python3
+
+import glob
+import sys
+import json
+
+
+json.dump(
+    sorted([r.split("/")[-1] for r in glob.glob("images/openstack/projects/*")]),
+    sys.stdout,
+    separators=(",", ":"),
+)
diff --git a/ci/build-release-matrix b/ci/build-release-matrix
new file mode 100755
index 0000000..25e689d
--- /dev/null
+++ b/ci/build-release-matrix
@@ -0,0 +1,10 @@
+#!/usr/bin/env python3
+
+import glob
+import sys
+import json
+
+
+json.dump([
+    r.split('/')[-1] for r in glob.glob('images/openstack/releases/*')
+], sys.stdout, separators=(',', ':'))
diff --git a/ci/openstack-image-build-env b/ci/openstack-image-build-env
new file mode 100755
index 0000000..ba00973
--- /dev/null
+++ b/ci/openstack-image-build-env
@@ -0,0 +1,50 @@
+#!/usr/bin/env python3
+
+import sys
+
+PROFILES = {
+    "cinder": "ceph qemu",
+    "nova": "ceph openvswitch configdrive qemu migration",
+    "neutron": "openvswitch vpn",
+    "keystone": "apache ldap openidc",
+    "horizon": "apache",
+    "monasca-api": "apache influxdb",
+    "ironic": "ipxe ipmi qemu tftp",
+    "glance": "ceph",
+    "monasca-persister": "influxdb",
+    "placement": "apache",
+}
+DIST_PACKAGES = {
+    "heat": "curl",
+    "designate": "bind9utils",
+    "nova": "ovmf qemu-efi-aarch64",
+    "neutron": "jq ethtool lshw",
+    "monasca-agent": "iproute2 libvirt-clients lshw",
+    "ironic": "ethtool lshw iproute2",
+}
+PIP_PACKAGES = {
+    "neutron": "neutron-vpnaas",
+    "monasca-agent": "libvirt-python python-glanceclient python-neutronclient python-novaclient py3nvml",
+    "horizon": "designate-dashboard heat-dashboard ironic-ui magnum-ui neutron-vpnaas-dashboard octavia-dashboard senlin-dashboard monasca-ui",
+    "ironic": "python-dracclient sushy",
+    "placement": "httplib2",
+}
+PLATFORMS = {
+    "nova": "linux/amd64,linux/arm64",
+    "neutron": "linux/amd64,linux/arm64",
+}
+
+project = sys.argv[1]
+release = sys.argv[2]
+
+ref = open(f"images/openstack/projects/{project}/{release}/ref", "r").read().strip()
+profiles = PROFILES.get(project, "")
+dist_packages = DIST_PACKAGES.get(project, "")
+pip_packages = PIP_PACKAGES.get(project, "")
+platforms = PLATFORMS.get(project, "")
+
+print(f"PROJECT_REF={ref}")
+print(f"PROFILES={profiles}")
+print(f"DIST_PACKAGES={dist_packages}")
+print(f"PIP_PACKAGES={pip_packages}")
+print(f"PLATFORMS={platforms}")