-
Notifications
You must be signed in to change notification settings - Fork 13
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
8 changed files
with
210 additions
and
85 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
""" | ||
A copr-cli wrapper | ||
""" | ||
from subprocess import check_output, CalledProcessError | ||
|
||
class CoprCliCommandError(Exception): | ||
"""Raised when copr-cli command fails""" | ||
def __init__(self, message, command): | ||
self.message = message | ||
self.command = command | ||
super(CoprCliCommandError, self).__init__(message) #pylint: disable-all | ||
|
||
def copr_cli(command, executable=None): | ||
""" | ||
Run a copr-cli command | ||
""" | ||
if executable is None: | ||
executable = 'copr-cli' | ||
|
||
try: | ||
return check_output([executable] + command, universal_newlines=True) | ||
except CalledProcessError as error: | ||
raise CoprCliCommandError(error.output, error.cmd) | ||
|
||
def full_name(user, project): | ||
""" | ||
Returns a full Copr name: user/project | ||
""" | ||
return "%s/%s" %(user, project) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
""" | ||
Release a package to Copr | ||
""" | ||
|
||
import re | ||
|
||
from ansible.module_utils.basic import AnsibleModule | ||
from ansible.module_utils.copr_wrapper import copr_cli, CoprCliCommandError, full_name # pylint:disable=import-error,no-name-in-module | ||
|
||
|
||
def main(): | ||
""" | ||
Release a package to Copr | ||
""" | ||
module = AnsibleModule( | ||
argument_spec=dict( | ||
user=dict(type='str', required=True), | ||
project=dict(type='str', required=True), | ||
srpm=dict(type='path', required=True), | ||
wait=dict(type='bool', required=False, default=True) | ||
) | ||
) | ||
|
||
user = module.params['user'] | ||
project = module.params['project'] | ||
srpm = module.params['srpm'] | ||
wait = module.params['wait'] | ||
|
||
command = [ | ||
'build', | ||
full_name(user, project), | ||
srpm | ||
] | ||
|
||
if not wait: | ||
command.append('--nowait') | ||
|
||
try: | ||
output = copr_cli(command) | ||
except CoprCliCommandError as error: | ||
module.fail_json(msg='Copr build failed', command=error.command, output=error.message, | ||
repo_name=repo_name, srpm=srpm) | ||
|
||
builds = re.findall(r'^Build was added to.+:\n^\s(.+)', output, re.MULTILINE) | ||
|
||
module.exit_json(changed=True, output=output, builds=builds) | ||
|
||
|
||
if __name__ == '__main__': | ||
main() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
""" | ||
Fork a Copr project | ||
""" | ||
|
||
from ansible.module_utils.basic import AnsibleModule | ||
from ansible.module_utils.copr import copr_cli, CoprCliCommandError, full_name # pylint:disable=import-error,no-name-in-module | ||
|
||
|
||
def main(): | ||
""" | ||
Fork a Copr project | ||
""" | ||
module = AnsibleModule( | ||
argument_spec=dict( | ||
src_user=dict(type='str', required=True), | ||
src_project=dict(type='str', required=True), | ||
dest_user=dict(type='str', required=True), | ||
dest_project=dict(type='str', required=True), | ||
delete_after_days=dict(type='str', required=False, default=None), | ||
) | ||
) | ||
|
||
src_user = module.params['src_user'] | ||
src_project = module.params['src_project'] | ||
dest_user = module.params['dest_user'] | ||
dest_project = module.params['dest_project'] | ||
delete_after_days = module.params['delete_after_days'] | ||
|
||
command = [ | ||
'fork', | ||
full_name(src_user, src_project), | ||
full_name(dest_user, dest_project) | ||
] | ||
|
||
try: | ||
fork_output = copr_cli(command) | ||
except CoprCliCommandError as error: | ||
module.fail_json(msg='Copr project forking failed', command=' '.join(error.command), output=error.message) | ||
|
||
if delete_after_days: | ||
modify_command = [ | ||
'modify', | ||
full_name(dest_user, dest_project), | ||
'--delete-after-days', | ||
delete_after_days | ||
] | ||
|
||
try: | ||
output = copr_cli(modify_command) | ||
except CoprCliCommandError as error: | ||
module.fail_json(msg='Copr project forking failed', command=' '.join(error.command), output=error.message) | ||
|
||
module.exit_json(changed=True, output=fork_output) | ||
|
||
|
||
if __name__ == '__main__': | ||
main() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,53 +1,56 @@ | ||
--- | ||
- name: Create temporary build directory | ||
tempfile: | ||
state: directory | ||
suffix: srpms | ||
register: srpm_directory | ||
when: srpm_directory is not defined | ||
|
||
- name: 'Build SRPM' | ||
srpm: | ||
package: "{{ inventory_dir }}/{{ package_base_dir }}/{{ inventory_hostname }}" | ||
output: "{{ srpm_directory.path if 'path' in srpm_directory else srpm_directory }}" | ||
source_location: "{{ source_location | default(omit) }}" | ||
source_system: "{{ source_system | default(omit) }}" | ||
register: srpm_build | ||
|
||
- when: not build_package_scratch | ||
block: | ||
- name: 'Release to copr' | ||
tito_release: | ||
directory: "{{ inventory_dir }}/{{ package_base_dir }}/{{ inventory_hostname }}" | ||
arguments: "{{ build_package_tito_args }}" | ||
test: "{{ build_package_test }}" | ||
scratch: "{{ build_package_scratch }}" | ||
releasers: "{{ releasers }}" | ||
releaser_arguments: "{{ build_package_tito_releaser_args }}" | ||
register: build_package_tito_release | ||
|
||
- name: 'Wait for tasks to finish' | ||
include_tasks: wait.yml | ||
when: build_package_wait|bool | ||
- name: 'Run build' | ||
copr_build: | ||
user: "{{ copr_project_user }}" | ||
project: "{{ copr_project_name }}" | ||
srpm: "{{ srpm_build.path }}" | ||
wait: "{{ build_package_wait }}" | ||
register: copr_builds | ||
|
||
- when: build_package_scratch | ||
block: | ||
- name: Define copr repo name | ||
- name: Define Copr scratch project name | ||
set_fact: | ||
copr_repo_name: "{{ copr_user }}/{{ build_package_scratch_repo }}-{{ 999999999 | random | to_uuid }}" | ||
run_once: true | ||
when: copr_repo_name is not defined | ||
|
||
- name: 'Write copr repo name to vars file' | ||
copy: | ||
content: "{{ 'copr_repo: ' + copr_repo_name | to_yaml }}" | ||
dest: "{{ obal_tmp_dir }}/copr_repo" | ||
mode: '0640' | ||
run_once: true | ||
copr_scratch_project: "{{ copr_project_name }}-scratch-{{ 999999999 | random | to_uuid }}" | ||
when: copr_scratch_project is not defined | ||
|
||
- include_role: | ||
name: copr_repo | ||
run_once: true | ||
- name: Define Copr scatch user name | ||
set_fact: | ||
copr_scratch_user: "{{ copr_project_user }}" | ||
when: copr_scratch_user is not defined | ||
|
||
- name: 'Build SRPM' | ||
tito_build: | ||
directory: "{{ inventory_dir }}/{{ package_base_dir }}/{{ inventory_hostname }}" | ||
srpm: true | ||
scl: "{{ scl }}" | ||
register: srpm_build | ||
- name: Create a Copr fork for scratch builds | ||
copr_fork: | ||
src_user: "{{ copr_project_user }}" | ||
src_project: "{{ copr_project_name }}" | ||
dest_user: "{{ copr_scratch_user }}" | ||
dest_project: "{{ copr_scratch_project }}" | ||
delete_after_days: 4 | ||
|
||
- name: 'Run build' | ||
command: >- | ||
copr-cli build | ||
{% if not build_package_wait | bool %}--nowait{% endif %} | ||
{{ copr_repo_name }} | ||
{{ srpm_build.path }} | ||
register: build_status | ||
copr_build: | ||
user: "{{ copr_scratch_user }}" | ||
project: "{{ copr_scratch_project }}" | ||
srpm: "{{ srpm_build.path }}" | ||
wait: "{{ build_package_wait }}" | ||
register: copr_builds | ||
|
||
- debug: | ||
msg: "{{ build_status.stdout_lines | join('\n') }}" | ||
- debug: | ||
msg: "{{ copr_builds }}" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1,2 @@ | ||
--- | ||
copr_project_chroots: [] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,19 +1,20 @@ | ||
--- | ||
- name: 'Create copr scratch build repo' | ||
command: > | ||
copr-cli | ||
create | ||
{{ copr_repo_name }} | ||
--chroot {{ copr_repo_chroot }} | ||
--description '{{ copr_repo_description }}' | ||
--unlisted-on-hp on | ||
--repo '{{ copr_repo_external_repos | join(' ') }}' | ||
changed_when: false | ||
- name: 'Create Copr repo' | ||
copr_repo: | ||
repo_name: "{{ copr_repo_name }}" | ||
chroots: "{{ copr_repo_chroots | map(attribute='name') }}" | ||
description: "{{ copr_repo_description | default(omit) }}" | ||
delete_after_days: "{{ copr_repo_delete_after_days | default(omit) }}" | ||
unlisted_on_homepage: "{{ copr_repo_unlisted_on_homepage | default(omit) }}" | ||
register: create_output | ||
|
||
- name: 'Add build packages to chroot' | ||
command: > | ||
copr-cli | ||
edit-chroot | ||
{{ copr_repo_name }}/{{ copr_repo_chroot }} | ||
--packages '{{ copr_repo_packages | join(' ') }}' | ||
changed_when: false | ||
- name: Configure chroots | ||
copr_chroot: | ||
repo_name: "{{ copr_repo_name }}" | ||
chroot: "{{ chroot.name }}" | ||
external_repos: "{{ chroot.external_repos | default(omit) }}" | ||
buildroot_packages: "{{ chroot.buildroot_packages | default(omit) }}" | ||
modules: "{{ chroot.modules | default(omit) }}" | ||
loop: "{{ copr_repo_chroots }}" | ||
loop_control: | ||
loop_var: chroot |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters