zuul-jobs/roles/upload-artifactory/tasks/upload.yaml
Niklas Borg 963f01e5dd Add properties to upload-artifactory
Properties can be used to tag files.
When another system is using a property filter, being able to set
the properties for zuul artifacts is very convenient.

Change-Id: Ib16ca0f6b532649daa77aa26a8ffa29b78429b71
2021-06-03 07:09:04 +00:00

103 lines
3.8 KiB
YAML

- name: Fail if artifactory instance is not defined
fail:
msg: "Instance {{ zj_artifact.instance }} is not defined."
when: zj_artifact.instance not in upload_artifactory_instances
- name: Make sure artifact exists on the executor
stat:
path: "{{ _undocumented_test_work_dir_ | default(zuul.executor.work_root) }}\
/artifacts/{{ zj_artifact.src }}"
register: artifact
delegate_to: "{{ _undocumented_test_worker_node_ | default('localhost') }}"
failed_when: not artifact.stat.exists
- name: Get sha256 checksum
stat:
path: "{{ _undocumented_test_work_dir_ | default(zuul.executor.work_root) }}\
/artifacts/{{ zj_artifact.src }}"
checksum_algorithm: sha256
delegate_to: "{{ _undocumented_test_worker_node_ | default('localhost') }}"
register: artifact_sha256_checksum
- name: Set request header fact
set_fact:
request_header:
X-Checksum-Sha1: "{{ artifact.stat.checksum }}"
X-Checksum-Sha256: "{{ artifact_sha256_checksum.stat.checksum }}"
- name: Add artifact headers
set_fact:
request_header: "{{ request_header | combine(zj_artifact.headers|default({})) }}"
- name: Add api key to header
when: "'api_key' in upload_artifactory_instances[zj_artifact.instance]"
no_log: true
set_fact:
request_header: "{{ request_header |
combine({'X-JFrog-Art-Api': upload_artifactory_instances[zj_artifact.instance].api_key}) }}"
- name: Set artifactory password
no_log: true
set_fact:
_artifactory_password: "{{ upload_artifactory_instances[zj_artifact.instance].password }}"
when:
- "'api_key' not in upload_artifactory_instances[zj_artifact.instance]"
- "'password' in upload_artifactory_instances[zj_artifact.instance]"
- name: Set artifactory backend url fact
set_fact:
_artifactory_backend_url: "\
{{ upload_artifactory_instances[zj_artifact.instance].transport | default('https') }}://\
{{ upload_artifactory_instances[zj_artifact.instance].fqdn }}/\
artifactory/\
{{ zj_artifact.dest }}"
- name: Set artifact properties
set_fact:
zj_artifact_properties: >-
{%- set zj_properties = [] -%}
{%- for zj_p in (zj_aps) -%}
{%- if zj_p.value is string -%}
{%- set _ = zj_properties.append(zj_p.key + '=' + zj_p.value) -%}
{%- elif zj_p.value is iterable and zj_p.value is not mapping -%}
{%- set _ = zj_properties.append(zj_p.key + '=' + zj_p.value | join(',')) -%}
{%- endif -%}
{%- endfor -%}
{{ zj_properties | join(';') }}
vars:
zj_aps: "{{ zj_artifact.properties | default({}) | dict2items }}"
- name: Set upload url
set_fact:
_artifactory_upload_url: "\
{%- if zj_artifact_properties|length -%}
{{ _artifactory_backend_url }};{{ zj_artifact_properties | default('') }}\
{%- else -%}
{{ _artifactory_backend_url }}\
{%- endif -%}"
- name: Upload artifact
no_log: true
uri:
user: "{{ upload_artifactory_instances[zj_artifact.instance].user }}"
password: "{{ _artifactory_password | default(omit) }}"
url: "{{ _artifactory_upload_url }}"
src: "{{ _undocumented_test_work_dir_ | default(zuul.executor.work_root) }}/\
artifacts/{{ zj_artifact.src }}"
headers: "{{ request_header }}"
status_code: 201
method: PUT
force_basic_auth: "{{ upload_artifactory_instances[zj_artifact.instance].force_basic_auth |
default(false) | bool }}"
remote_src: yes # To not unecessarily copy artifact to a tempfile
delegate_to: "{{ _undocumented_test_worker_node_ | default('localhost') }}"
- name: Add artifact link to build page
zuul_return:
data:
zuul:
artifacts:
- name: "{{ zj_artifact.name }}"
url: "{{ _artifactory_backend_url }}"
metadata: "{{ zj_artifact.metadata | default(omit) }}"