From cf992ba6775ec80a4d4750e567aa26ec65ad7e62 Mon Sep 17 00:00:00 2001 From: Victor Seva Date: Fri, 30 Jul 2021 14:06:05 +0200 Subject: [PATCH] TT#134250 release_changed: add label field Add label in order to group different builds from daily-build-matrix-runner or daily-build-matrix-base-runner jobs * add support for CARRIER vmtype Change-Id: I0159a191c40c329532d7040bacb55ecfbf9f6f14 --- release_changed/fixtures/test_envVars.json | 3 +- .../fixtures/test_envVars_done.json | 3 +- .../fixtures/test_release_changed.yaml | 30 ++++++++-------- release_changed/migrations/0002_add_label.py | 34 +++++++++++++++++++ release_changed/models.py | 9 ++--- release_changed/tasks.py | 12 +++++-- release_changed/test_rest.py | 10 +++--- release_changed/test_tasks.py | 20 +++++++---- release_changed/urls.py | 2 +- release_changed/views.py | 16 +++++---- 10 files changed, 96 insertions(+), 43 deletions(-) create mode 100644 release_changed/migrations/0002_add_label.py diff --git a/release_changed/fixtures/test_envVars.json b/release_changed/fixtures/test_envVars.json index d4d021f..067fbe6 100644 --- a/release_changed/fixtures/test_envVars.json +++ b/release_changed/fixtures/test_envVars.json @@ -32,6 +32,7 @@ "USER": "jenkins", "vmdone": "no", "vmtype": "CE", - "vmversion": "mr8.5.1" + "vmversion": "mr8.5.1", + "buildlabel": "base" } } \ No newline at end of file diff --git a/release_changed/fixtures/test_envVars_done.json b/release_changed/fixtures/test_envVars_done.json index ba3023e..a67b9a7 100644 --- a/release_changed/fixtures/test_envVars_done.json +++ b/release_changed/fixtures/test_envVars_done.json @@ -32,6 +32,7 @@ "USER": "jenkins", "vmdone": "yes", "vmtype": "CE", - "vmversion": "mr8.5.1" + "vmversion": "mr8.5.1", + "buildlabel": "base" } } \ No newline at end of file diff --git a/release_changed/fixtures/test_release_changed.yaml b/release_changed/fixtures/test_release_changed.yaml index d328fb4..b93ffea 100644 --- a/release_changed/fixtures/test_release_changed.yaml +++ b/release_changed/fixtures/test_release_changed.yaml @@ -1,14 +1,16 @@ -- model: release_changed.releasechanged - pk: 1 - fields: - version: mr8.4 - vmtype: CE - result: FAILURE - date: 2020-09-09 08:50:01.671302+00:00 -- model: release_changed.releasechanged - pk: 2 - fields: - version: mr8.4 - vmtype: PRO - result: SUCCESS - date: 2020-09-09 08:54:13.908608+00:00 +- model: release_changed.releasechanged + pk: 1 + fields: + version: mr8.4 + vmtype: CE + result: FAILURE + label: base + date: 2020-09-09 08:50:01.671302+00:00 +- model: release_changed.releasechanged + pk: 2 + fields: + version: mr8.4 + vmtype: PRO + result: SUCCESS + label: base + date: 2020-09-09 08:54:13.908608+00:00 diff --git a/release_changed/migrations/0002_add_label.py b/release_changed/migrations/0002_add_label.py new file mode 100644 index 0000000..6a60962 --- /dev/null +++ b/release_changed/migrations/0002_add_label.py @@ -0,0 +1,34 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.29 on 2021-07-30 11:54 +from django.db import migrations +from django.db import models + + +class Migration(migrations.Migration): + + dependencies = [("release_changed", "0001_initial")] + + operations = [ + migrations.AddField( + model_name="releasechanged", + name="label", + field=models.CharField(default="daily", max_length=128), + preserve_default=False, + ), + migrations.AlterField( + model_name="releasechanged", + name="vmtype", + field=models.CharField( + choices=[ + ("CE", "spce"), + ("PRO", "sppro"), + ("CARRIER", "carrier"), + ], + max_length=7, + ), + ), + migrations.AlterUniqueTogether( + name="releasechanged", + unique_together=set([("version", "vmtype", "label")]), + ), + ] diff --git a/release_changed/models.py b/release_changed/models.py index b7a9178..563d9f9 100644 --- a/release_changed/models.py +++ b/release_changed/models.py @@ -28,7 +28,7 @@ from .conf import settings # noqa class ReleaseChanged(models.Model): - VMTYPE_CHOICES = (("CE", "spce"), ("PRO", "sppro")) + VMTYPE_CHOICES = (("CE", "spce"), ("PRO", "sppro"), ("CARRIER", "carrier")) RESULT_CHOICES = ( ("ABORTED", "ABORTED"), ("FAILURE", "FAILURE"), @@ -37,14 +37,15 @@ class ReleaseChanged(models.Model): ("UNSTABLE", "UNSTABLE"), ) version = models.CharField(max_length=64, null=False) - vmtype = models.CharField(max_length=3, null=False, choices=VMTYPE_CHOICES) + vmtype = models.CharField(max_length=7, null=False, choices=VMTYPE_CHOICES) + label = models.CharField(max_length=128, null=False) result = models.CharField( max_length=50, null=False, choices=RESULT_CHOICES ) date = models.DateTimeField(auto_now=True) class Meta: - unique_together = (("version", "vmtype"),) + unique_together = (("version", "vmtype", "label"),) def __str__(self): - return "{0.vmtype}_{0.version}_{0.result}".format(self) + return "{0.label}_{0.vmtype}_{0.version}_{0.result}".format(self) diff --git a/release_changed/tasks.py b/release_changed/tasks.py index 021f9ff..8ac9941 100644 --- a/release_changed/tasks.py +++ b/release_changed/tasks.py @@ -34,12 +34,18 @@ def process_result(jbi_id, path_envVars): ReleaseChanged.objects.filter( version=info["vmversion"], vmtype=info["vmtype"], + label=info["buildlabel"], ).delete() - logger.info("{}_{} deleted".format(info["vmtype"], info["vmversion"])) + logger.info( + "{}_{}_{} deleted".format( + info["vmtype"], info["vmversion"], info["buildlabel"] + ) + ) return r, created = ReleaseChanged.objects.get_or_create( version=info["vmversion"], vmtype=info["vmtype"], + label=info["buildlabel"], defaults={"result": jbi.result}, ) if not created: @@ -49,5 +55,5 @@ def process_result(jbi_id, path_envVars): changed = "*NOT*" else: changed = "" - msg = "setting {}_{} as {} changed, created:{}" - logger.info(msg.format(r.vmtype, r.version, changed, created)) + msg = "setting {}_{}_{} as {} changed, created:{}" + logger.info(msg.format(r.vmtype, r.version, r.label, changed, created)) diff --git a/release_changed/test_rest.py b/release_changed/test_rest.py index c91eb40..59f57e2 100644 --- a/release_changed/test_rest.py +++ b/release_changed/test_rest.py @@ -20,9 +20,7 @@ from repoapi.test.base import BaseTest class TestRest(BaseTest, APITestCase): - fixtures = [ - "test_release_changed", - ] + fixtures = ["test_release_changed"] url = "release_changed:check" @@ -30,16 +28,16 @@ class TestRest(BaseTest, APITestCase): super(TestRest, self).setUp() def test_get_success(self): - url = reverse(self.url, args=["PRO", "mr8.4"]) + url = reverse(self.url, args=["base", "PRO", "mr8.4"]) response = self.client.get(url, format="json") self.assertEqual(response.status_code, status.HTTP_200_OK) def test_get_not_success(self): - url = reverse(self.url, args=["CE", "mr8.4"]) + url = reverse(self.url, args=["base", "CE", "mr8.4"]) response = self.client.get(url, format="json") self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) def test_get_not_exist(self): - url = reverse(self.url, args=["CE", "mr8.5"]) + url = reverse(self.url, args=["base", "CE", "mr8.5"]) response = self.client.get(url, format="json") self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) diff --git a/release_changed/test_tasks.py b/release_changed/test_tasks.py index 02ac4c6..4e1469c 100644 --- a/release_changed/test_tasks.py +++ b/release_changed/test_tasks.py @@ -38,34 +38,42 @@ class TasksTestCase(BaseTest): jbi = JenkinsBuildInfo.objects.get(pk=1) with patch("builtins.open", mock_open(read_data=DATA)): tasks.process_result.delay(jbi.id, FILE_PATH) - r = ReleaseChanged.objects.get(version="mr8.5.1", vmtype="CE") + r = ReleaseChanged.objects.get( + label="base", version="mr8.5.1", vmtype="CE" + ) self.assertEqual("FAILED", r.result) def test_process_modify(self): r = ReleaseChanged.objects.create( - version="mr8.5.1", vmtype="CE", result="SUCCESS" + label="base", version="mr8.5.1", vmtype="CE", result="SUCCESS" ) r_id = r.id jbi = JenkinsBuildInfo.objects.get(pk=1) with patch("builtins.open", mock_open(read_data=DATA)): tasks.process_result.delay(jbi.id, FILE_PATH) - r = ReleaseChanged.objects.get(version="mr8.5.1", vmtype="CE") + r = ReleaseChanged.objects.get( + label="base", version="mr8.5.1", vmtype="CE" + ) self.assertEqual(r_id, r.id) self.assertEqual("FAILED", r.result) def test_process_done(self): ReleaseChanged.objects.create( - version="mr8.5.1", vmtype="CE", result="FAILED" + label="base", version="mr8.5.1", vmtype="CE", result="FAILED" ) jbi = JenkinsBuildInfo.objects.get(pk=1) with patch("builtins.open", mock_open(read_data=DATA_DONE)): tasks.process_result.delay(jbi.id, FILE_PATH) - rs = ReleaseChanged.objects.filter(version="mr8.5.1", vmtype="CE") + rs = ReleaseChanged.objects.filter( + label="base", version="mr8.5.1", vmtype="CE" + ) self.assertFalse(rs.exists()) def test_process_done_no_obj(self): jbi = JenkinsBuildInfo.objects.get(pk=1) with patch("builtins.open", mock_open(read_data=DATA_DONE)): tasks.process_result.delay(jbi.id, FILE_PATH) - rs = ReleaseChanged.objects.filter(version="mr8.5.1", vmtype="CE") + rs = ReleaseChanged.objects.filter( + label="base", version="mr8.5.1", vmtype="CE" + ) self.assertFalse(rs.exists()) diff --git a/release_changed/urls.py b/release_changed/urls.py index 2ef7d6d..d0bdb32 100644 --- a/release_changed/urls.py +++ b/release_changed/urls.py @@ -25,7 +25,7 @@ urlpatterns = [ name="detail", ), url( - r"^(?P[^/]+)/(?P[^/]+)/$", + r"^(?P