Teach the CI How to Publish our Charm on Charmhub

Add a job that publishes the packed charm on Charmhub.

The job is not enabled with this commit; it should be enabled for
the 'post' and 'release' pipelines with the appropriate channel.

Change-Id: Ie62dc692cbce73560e09117888a022700fecca42
diff --git a/playbooks/charm-cinder-storpool-iscsi/publish-to-charmhub.yaml b/playbooks/charm-cinder-storpool-iscsi/publish-to-charmhub.yaml
new file mode 100644
index 0000000..f551710
--- /dev/null
+++ b/playbooks/charm-cinder-storpool-iscsi/publish-to-charmhub.yaml
@@ -0,0 +1,48 @@
+- hosts: all
+  vars:
+    charm_root: "{{ zuul.project.src_dir }}"
+  tasks:
+
+    - name: Install charmcraft
+      community.general.snap:
+        name: charmcraft
+        classic: true
+      become: true
+
+    - name: Initialize lxd
+      ansible.builtin.command: lxd init --auto
+      become: true
+
+    - name: Install tox
+      ansible.builtin.apt:
+        name: tox
+        update_cache: yes
+      become: true
+
+    - name: Generate 'version' File
+      ansible.builtin.shell: echo -n "git." > version && git rev-parse --short=8 HEAD >> version
+      args:
+        chdir: "{{ charm_root }}"
+
+    - name: run build
+      ansible.builtin.shell: tox -e build
+      args:
+        chdir: "{{ charm_root }}"
+
+    - name: Upload Charm to Charmhub
+      ansible.builtin.shell: charmcraft upload --name cinder-storpool-iscsi cinder-storpool.charm
+      register: charmcraft_upload
+      args:
+        chdir: "{{ charm_root }}"
+      environment:
+        CHARMCRAFT_AUTH: "{{ CHARMCRAFT_AUTH['v'] }}"
+
+    - name: Release the Charm
+      ansible.builtin.shell: charmcraft release --revision {{ charm_revision }} --channel {{ channel }} cinder-storpool-iscsi
+      register: release_out
+      args:
+        chdir: "{{ charm_root }}"
+      vars:
+        - charm_revision: "{{ charmcraft_upload.stdout | regex_search('Revision ([0-9]+)', '\\1') | first }}"
+      environment:
+        CHARMCRAFT_AUTH: "{{ CHARMCRAFT_AUTH['v'] }}"
diff --git a/zuul.d/charm-cinder-storpool-iscsi.yaml b/zuul.d/charm-cinder-storpool-iscsi.yaml
index 16060cf..783003d 100644
--- a/zuul.d/charm-cinder-storpool-iscsi.yaml
+++ b/zuul.d/charm-cinder-storpool-iscsi.yaml
@@ -118,6 +118,19 @@
     vars:
       tox_env: cover
 
+- job:
+    name: publish-to-charmhub
+    description: "Publish Charm to Charmhub"
+    run: playbooks/charm-cinder-storpool-iscsi/publish-to-charmhub.yaml
+    timeout: 1800
+    nodeset:
+      nodes:
+        - name: controller
+          label: os-ubuntu-focal
+    secrets:
+      - name: CHARMCRAFT_AUTH
+        secret: CHARMCRAFT_AUTH
+
 - project:
     name: charm-cinder-storpool-iscsi
     check:
diff --git a/zuul.d/charmcraft-secrets.yaml b/zuul.d/charmcraft-secrets.yaml
new file mode 100644
index 0000000..907b221
--- /dev/null
+++ b/zuul.d/charmcraft-secrets.yaml
@@ -0,0 +1,24 @@
+- secret:
+    name: CHARMCRAFT_AUTH
+    data:
+      v: !encrypted/pkcs1-oaep
+        - nzhvHxkwbVvRgSehlBspu4pRqYIxEeKaQoxgO58DTYuT9L8ksU/XdditXU+Pu2NQVm/Rg
+          l0p9xhZzgnlXEAghdhdn4V32BXy70igCFTIetJ2SkpJZuqZKlzUjGCjdMyZFUquYSPvYU
+          1Ta3lrb4fsRDNz94KuHrZxU4lx+4t/FvZl518fBWoKMfXptiv2lhwro9N5Wx4tDqdpG8W
+          8iYKKsnKl9LvmU//TRkNkiGqAgkvB3Ld6NTk0esd3KOk2975GBvNicgB7axTUA6D1dqrK
+          LPVZHz0SsNOi+/gQSYtorxbf3qWc5T3XsaBWTRvBezTCUT5m99Lq6IXD5XurQEcGZYZOG
+          vJhg28ofKDU1io2qRJvpadwarigee43Vx+7tFVCVxMk3vDBGmM7FDSxG8o9rOf3IKjSXv
+          /ZTQGoi2bQXG22It9S8AUKhrRgk8jzlfqu+Wsno8pTD5ATGUjJRSEcABSVJ7V35H0Tx1/
+          kdhvGHbWJTNhBMvUI9qWx0LJiX1m0js8oalqI43QVBIVaE1iykLvYzZfuftUvc1Qe0f3H
+          sCRYp+4bwRpzhxT3kaqA3FnBfmWU19A4jjzIHJy7RKYVn5INReum5x9bmH3ye+7u/w16M
+          dEgYct1G0moBnVi63mI5HSxIkJPB11UzPsd5Wzs2ihN/sWc6aYWOFMTDrRyBnE=
+        - QwieQwpTGPjcLNZ6BQ2w7m0Y+6XuNB6q22IMSTpfY23KmSJ4WEG6pjaMrjobyfP1lU1+8
+          aiAxUuC6hBvWN9G9py45fd4ywudSmXjYf+aFOKzu39oc9aROYbZBUSJoftH0+3bvDX/qL
+          Hr3GeiGxf5udX00o50NAgSopmqBCAT2kf2UBeIRq5ZLBHDUvNm9o1KE47wn5vgqO/cJ+k
+          yFbMJmugtsAJ9Har5kKQ5tAe+w8UB/aLE9nD0cF4c28j3z/mH/hIxGC2WNs9M9gfQfYGF
+          OW+QOEZTsJaVcl5v+gXndjOITJPHgft49XGsJILtstWHVaMiMM8A84Da8ThvgDKblWfRs
+          VdaVRkiiuXCoD6ssL3ePZkEqJTCOXnH2j1e6AOK9+3MnuW24gLUipMu4AEq4+phx/gxls
+          oKcAas+wfIk1iWi7dqLscTIJB+6f3aCGd/+Q+Cdvw2qmBxLHk/b4pOW2onN8V+BZd2u//
+          MwCnzwXRaf+QqcKI/k28O/Js9dixwWPxUMvnmIpu3r0LTQW0dQlMsz7u03NpbN4MkhWqy
+          o0fYDP5LYDX9mWM3TxerUqVveB1WY9Z/7uq3B4krCw2K5ULCWiT+qq6TDyj1+We1sOkEH
+          PZPwk0bChhhvY1KVaueL59zcUnIBeI1Zobw4TW7jS2TzeS57GgCgNUm40YsrDk=