
Ansible templating is not complete and will error out in publish.yaml Change-Id: Ib12cd64c3fbd94a8cee40f37ea00e1b72fed937b
88 lines
3.3 KiB
YAML
88 lines
3.3 KiB
YAML
- name: Publish charms to charmhub
|
|
when: publish_charm
|
|
environment:
|
|
CHARMCRAFT_AUTH: "{{ charmhub_token.value }}"
|
|
block:
|
|
- name: Install snapd
|
|
apt:
|
|
name: snapd
|
|
become: true
|
|
|
|
- name: Install charmcraft
|
|
snap:
|
|
name: charmcraft
|
|
channel: "{{ charmcraft_channel | default('latest/stable') }}"
|
|
classic: true
|
|
become: true
|
|
|
|
- name: Install docker
|
|
include_role:
|
|
name: ensure-docker
|
|
|
|
- name: Get metadata.yaml information
|
|
stat:
|
|
path: "{{ zuul.executor.work_root+'/'+zuul.project.src_dir+'/charms/'+charm_build_name+'/metadata.yaml' }}"
|
|
register: metadata_file
|
|
|
|
- name: Get charmcraft.yaml information
|
|
stat:
|
|
path: "{{ zuul.executor.work_root+'/'+zuul.project.src_dir+'/charms/'+charm_build_name+'/charmcraft.yaml' }}"
|
|
register: charmcraft_file
|
|
|
|
- name: Register resource file
|
|
set_fact:
|
|
resource_file: "{{ metadata_file.stat.exists | ternary(metadata_file.stat.path, charmcraft_file.stat.path) }}"
|
|
|
|
- name: Which metadata file is used
|
|
debug:
|
|
msg: "{{ resource_file }}"
|
|
|
|
- name: Upload oci-image to charmhub
|
|
register: upload_oci_image_output
|
|
vars:
|
|
metadata: "{{ lookup('file', resource_file) | from_yaml }}"
|
|
args:
|
|
executable: /bin/bash
|
|
shell: |
|
|
set -x
|
|
image={{ item.value['upstream-source'] }}
|
|
# Remove docker.io/ in the OCI image so that docker pulls image
|
|
# from mirror if configured.
|
|
image=${image#"docker.io/"}
|
|
docker pull $image
|
|
digest=`docker inspect --format {% raw %}'{{ index .RepoDigests 0 }}' {% endraw %} $image`
|
|
charmcraft upload-resource {{ charm_build_name }} {{ item.key }} --image $digest
|
|
retries: 3
|
|
until: >
|
|
("Revision" in upload_oci_image_output.stdout)
|
|
loop: "{{ lookup('ansible.builtin.dict', metadata.resources|default({}), wantlist=True) }}"
|
|
when: "item.value.type == 'oci-image'"
|
|
|
|
- name: Extract Resource revisions
|
|
set_fact:
|
|
resource_revision_flags: "{{ resource_revision_flags | default('') + ' --resource ' + item.item.key + ':' + (item.stdout | regex_search('Revision ([0-9]+)', '\\1', multiline=True) | first) }}"
|
|
with_items: "{{ upload_oci_image_output.results }}"
|
|
|
|
- name: Upload charm to charmhub
|
|
register: upload_charm_output
|
|
args:
|
|
chdir: "{{ zuul.project.src_dir }}"
|
|
# TODO: The below command can error out with a message that says
|
|
# upload with that digest already exists. This case need to be handled.
|
|
# More details https://github.com/canonical/charmcraft/issues/826
|
|
command: charmcraft upload -v --name {{ charm_build_name }} {{ charm_build_name }}.charm
|
|
retries: 3
|
|
until: >
|
|
("Revision" in upload_charm_output.stdout)
|
|
|
|
- name: Extract Charm revision
|
|
set_fact:
|
|
charm_revision: "{{ upload_charm_output.stdout | regex_search('Revision ([0-9]+)', '\\1', multiline=True) | first }}"
|
|
|
|
- name: Release charm
|
|
register: release_charm_output
|
|
command: charmcraft release {{ charm_build_name }} --revision {{ charm_revision }} --channel {{ publish_channel }} {{ resource_revision_flags | default("") }}
|
|
retries: 3
|
|
until: >
|
|
("Revision" in release_charm_output.stdout)
|