Do not delete unmanaged jobs when --views-only option specified

Change-Id: I54e4d62db56824bfa020bbc1a711b95a5b15fcc5
This commit is contained in:
Vsevolod Fedorov 2024-03-22 11:31:48 +03:00
parent 2aa0ac5462
commit 1f320ad9f9
3 changed files with 57 additions and 3 deletions

View File

@ -7,6 +7,7 @@ Release 6.2.0
Bugs fixed
~~~~~~~~~~
* Do not delete obsolete jobs when `--views-only` option specified.
* Add readthedocs configuration file. RTD now requires it. Fixes documentation build on RTD.
Release 6.1.0

View File

@ -144,7 +144,8 @@ class UpdateSubCommand(base.JobsSubCommand):
)
logger.info("Number of views updated: %d", num_updated_views)
keep_jobs = [job.name for job in xml_jobs]
if options.delete_old:
n = builder.delete_old_managed(keep=keep_jobs)
logger.info("Number of jobs deleted: %d", n)
if options.update in {"jobs", "all"}:
keep_jobs = [job.name for job in xml_jobs]
n = builder.delete_old_managed(keep=keep_jobs)
logger.info("Number of jobs deleted: %d", n)

View File

@ -138,6 +138,58 @@ def test_update_jobs_and_delete_old(
assert jenkins_delete_job.call_count == len(calls)
def test_update_jobs_and_delete_old_views_only(
mocker, fixtures_dir, default_config_file, execute_jenkins_jobs
):
"""Test update behaviour with --delete-old option
with --views-only option specified.
No jobs should be deleted.
"""
mocker.patch("jenkins_jobs.builder.jenkins.Jenkins.job_exists")
jenkins_get_all_jobs = mocker.patch(
"jenkins_jobs.builder.jenkins.Jenkins.get_all_jobs"
)
jenkins_reconfig_job = mocker.patch(
"jenkins_jobs.builder.jenkins.Jenkins.reconfig_job"
)
jenkins_delete_job = mocker.patch("jenkins_jobs.builder.jenkins.Jenkins.delete_job")
mocker.patch("jenkins_jobs.builder.jenkins.Jenkins.view_exists")
mocker.patch("jenkins_jobs.builder.jenkins.Jenkins.get_views")
jenkins_reconfig_view = mocker.patch(
"jenkins_jobs.builder.jenkins.Jenkins.reconfig_view"
)
yaml_jobs = ["job-1", "job-2", "job-3"]
extra_managed_jobs = ["old-job-1", "old-job-2"]
unmanaged_jobs = ["unmanaged"]
jenkins_get_all_jobs.return_value = [
{"fullname": name} for name in yaml_jobs + extra_managed_jobs + unmanaged_jobs
]
mocker.patch(
"jenkins_jobs.builder.JenkinsManager.is_managed",
side_effect=(lambda name: name not in unmanaged_jobs),
)
path = fixtures_dir / "update-both.yaml"
args = [
"--conf",
default_config_file,
"update",
"--delete-old",
"--views-only",
str(path),
]
execute_jenkins_jobs(args)
assert jenkins_reconfig_job.call_count == 0
assert jenkins_delete_job.call_count == 0
assert jenkins_reconfig_view.call_count == 3
def test_update_views(mocker, fixtures_dir, default_config_file, execute_jenkins_jobs):
"""
Test update_job is called for project with views