---
- hosts: all
  vars:
    specs_src: "{{ ansible_user_dir }}/{{ codegenerator_work_dir }}/openapi_specs"
  tasks:
    - name: Ensure local output dirs
      delegate_to: localhost
      ansible.builtin.file:
        path: "{{ zj_output_dir }}"
        state: directory
        mode: 0755
      with_items:
        - "{{ zuul.executor.work_root }}/artifacts"
      loop_control:
        loop_var: zj_output_dir

    - name: Collect OpenAPI specs
      synchronize:
        dest: "{{ zj_output.dest }}"
        mode: pull
        src: "{{ zj_output.src }}"
        verify_host: true
        owner: false
        group: false
      loop:
        - dest: "{{ zuul.executor.work_root }}/artifacts"
          src: "{{ specs_src }}"
      loop_control:
        loop_var: zj_output

    - name: Find all generated specs
      ansible.builtin.find:
        paths: "{{ specs_src }}"
        patterns: "*.yaml"
        recurse: true
        # Search for anything and filter later
        file_type: "any"
      register: openapi_specs

    - name: Return artifact to Zuul
      zuul_return:
        data:
          zuul:
            artifacts:
              - name: "{{ openapi_service }} OpenAPI spec {{ zj_item.path | basename | splitext | first }}"
                url: "artifacts/openapi_specs{{ zj_item.path | regex_replace(specs_src) }}"
                metadata:
                  type: openapi
                  service_type: "{{ openapi_service }}"
                  version: "{{ zj_item.path | basename | splitext | first }}"
      loop: "{{ openapi_specs.files }}"
      loop_control:
        loop_var: zj_item
      when:
          # only interested in files/links
        - "not zj_item.isdir"