diff --git a/.zuul.yaml b/.zuul.yaml index fe32bbd6..391df54b 100644 --- a/.zuul.yaml +++ b/.zuul.yaml @@ -336,6 +336,29 @@ vars: branch_override: stable/train +- job: + name: ansible-collections-openstack-release + parent: base + run: ci/publish/publish_collection.yml + secrets: + - ansible_galaxy_info + +- secret: + name: ansible_galaxy_info + data: + url: https://galaxy.ansible.com + token: !encrypted/pkcs1-oaep + - lZFzfoCbuwqV1k6qRfl/VS7E+knUW7+zpg7BptrenK4n0g7UY0HtdVkYq0pV0Tj/LbhzG + jHD0mehcV1iS6B7ORKg4criJkdDfEx09BD8z8yv0EleiIMmhlrCoMcY593OZMBtVbGi0D + CwQtNO98QIsfZogChfLfvRNiBmUV98mEb/p6p3EtGx8J7qcAsqfWxc/CzB8GCleLAHHHT + FuikMM03ZnV0ew7E+TPkHbzzPhBZOqS5HYF0HtgttHwIXdfIWp/XdTuEEk7uRRgYZ2Iao + ifWRzoKaOQmhM++e1ydCqw9D4y9dZEFNMQLwSqcrvtb8cNwT1kl7SCFqYNE2lbutj4ne6 + PTBQRsKegMB4Y3ena14fNF6tCynvJLPhF/cjPH2Jhs+B19XQhWkL3TgiOY02W24YHwRcP + +LdkM8inAvyVi3DEbEqdjBPO9OFJcBOKPlCdkGvuwdNCuEpEwctWs0gV3voflG2CDKzmJ + wu9JJOAWnq/0l1WpuDqWreKeQ/BUGZC2Gb4xRAqofulgvhs4WuYoEccjH4EJFIZ90S1EP + R/ZLadqZaEhmjwGM5sMWbBbjT23XsRgg0Tzt9m8DENYMuYDqkMdRbt2jYZa+32p4hyxVe + Y6H/pqYq5b9uOzumnShaK4WlmkQyXcNPkoSlMC1h4OGvqX/WUixpI38jyMA5Tc= + - project: check: jobs: @@ -429,3 +452,7 @@ - ansible-collections-openstack-functional-devstack-stein-ansible-2.11 - ansible-collections-openstack-functional-devstack-rocky-ansible-2.11 - ansible-collections-openstack-functional-devstack-queens-ansible-devel + + pre-release: + jobs: + - ansible-collections-openstack-release diff --git a/ci/publish/publish_collection.yml b/ci/publish/publish_collection.yml new file mode 100644 index 00000000..4b74f953 --- /dev/null +++ b/ci/publish/publish_collection.yml @@ -0,0 +1,75 @@ +--- +- hosts: all + vars: + collection_path: "{{ ansible_user_dir }}/{{ zuul.projects['opendev.org/openstack/ansible-collections-openstack'].src_dir }}" + build_collection_path: /tmp/collection_built/ + ansible_galaxy_path: "~/.local/bin/ansible-galaxy" + + tasks: + + - name: Include role for pip + include_role: + name: ensure-pip + + - name: Install ansible + pip: + name: ansible-core<2.12 + + - name: Discover tag version + set_fact: + version_tag: "{{ zuul.tag|default('no_version', true) }}" + + - name: Fail if no tag version found + fail: + msg: "No tag was found in Zuul vars!" + when: version_tag == 'no_version' + + - name: Create a directory for collection + file: + state: "{{ item }}" + path: "{{ build_collection_path }}" + loop: + - absent + - directory + + - name: Set galaxy.yml for right version from tag + lineinfile: + path: '{{ collection_path }}/galaxy.yml' + regexp: '^version:.*' + line: 'version: {{ version_tag }}' + + - name: Build collection + command: "{{ ansible_galaxy_path }} collection build --output-path {{ build_collection_path }} --force" + args: + chdir: "{{ collection_path }}" + + - name: Publish content to Ansible Galaxy + block: + - name: Create ansible.cfg configuration file tempfile + tempfile: + state: file + suffix: .cfg + register: _ansiblecfg_tmp + + - name: Create ansible.cfg configuration file + copy: + dest: "{{ _ansiblecfg_tmp.path }}" + mode: 0600 + content: | + [galaxy] + server_list = release_galaxy + + [galaxy_server.release_galaxy] + url = {{ ansible_galaxy_info.url }} + token = {{ ansible_galaxy_info.token }} + + - name: Publish collection to Ansible Galaxy / Automation Hub + environment: + ANSIBLE_CONFIG: "{{ _ansiblecfg_tmp.path }}" + shell: >- + {{ ansible_galaxy_path }} collection publish -vvv + {{ build_collection_path }}/openstack-cloud-{{ version_tag }}.tar.gz + + always: + - name: Shred ansible-galaxy credentials + command: "shred {{ _ansiblecfg_tmp.path }}" diff --git a/tox.ini b/tox.ini index 14a64185..a66c39dc 100644 --- a/tox.ini +++ b/tox.ini @@ -111,3 +111,13 @@ deps = -r{toxinidir}/test-requirements-2.11.txt passenv = {[testenv:ansible]passenv} commands = {[testenv:ansible]commands} + +[testenv:galaxy-release] +deps = + ansible-core +commands = + /usr/bin/mkdir -p /tmp/collection_built + /usr/bin/bash -ec 'rm -rf /tmp/collection_built/*' + /usr/bin/sed -i "s/version:.*/version: {env:VERSION_TAG}/" {toxinidir}/galaxy.yml + ansible-galaxy collection build {toxinidir} --output-path /tmp/collection_built/ --force + ansible-galaxy collection publish /tmp/collection_built/openstack-cloud-{env:VERSION_TAG}.tar.gz --token {env:API_GALAXY_TOKEN}