MT#61223 repoapi: fix views for trunk-next

Change-Id: I027aaed4c94a63cba165b83c23e69cb5369fd9f6
master
Victor Seva 6 months ago
parent 21803cf66d
commit 373b26dc0c

@ -8,3 +8,45 @@
release: trunk-next
start_date: '2024-10-14T10:28:01.000Z'
uuid: 53f9e166-4271-4581-ae3d-b3c1bb0bb081
- model: repoapi.jenkinsbuildinfo
pk: 1
fields:
buildnumber: 38542
date: '2024-10-14 19:31:21'
gerrit_change: ''
gerrit_eventtype: ''
gerrit_patchset: none_might-be-direct-push
git_commit_msg: ''
job_url: 'https://jenkins.mgm.sipwise.com/job/release-copy-debs-yml/'
jobname: release-copy-debs-yml
param_branch: ''
param_distribution: ''
param_ppa: ''
param_release: release-trunk-trixie
param_release_uuid: 53f9e166-4271-4581-ae3d-b3c1bb0bb081
param_tag: ''
projectname: release-copy-debs-yml
repo_name: ''
result: SUCCESS,
tag: d9e505a5-e942-4687-9b0e-07f43a77a9aa
- model: repoapi.jenkinsbuildinfo
pk: 2
fields:
buildnumber: 4056
date: '2024-10-14 19:33:17'
gerrit_change: ''
gerrit_eventtype: ''
gerrit_patchset: none_might-be-direct-push
git_commit_msg: 2eb90b3 Release new version 13.1.0.0+0~mr13.1.0.0
job_url: 'https://jenkins.mgm.sipwise.com/job/ngcpcfg-repos/'
jobname: ngcpcfg-repos
param_branch: trixie/master
param_distribution: trixie
param_ppa: $ppa
param_release: trunk
param_release_uuid: 53f9e166-4271-4581-ae3d-b3c1bb0bb081
param_tag: none
projectname: ngcpcfg
repo_name: ''
result: SUCCESS
tag: 7737120e-f512-4793-9c45-47eb4a4f4891

@ -12,10 +12,15 @@
#
# You should have received a copy of the GNU General Public License along
# with this program. If not, see <http://www.gnu.org/licenses/>.
import pprint
import sys
from unittest.mock import patch
from django.test import override_settings
from django.test import SimpleTestCase
from django.urls import reverse
from rest_framework import status
from rest_framework.test import APITestCase
from build.conf import settings
from build.exceptions import PreviousBuildNotDone
@ -25,6 +30,7 @@ from build.utils import get_simple_release
from build.utils import guess_trunk_filename
from repoapi.models import JenkinsBuildInfo
from repoapi.test.base import BaseTest
from repoapi.utils import get_build_release
FIXTURES_PATH = settings.BASE_DIR.joinpath("build", "fixtures")
@ -177,3 +183,98 @@ class BuildReleaseCreate(BaseTest):
self.assertEqual(cfg.config_file, "trunk-next.yml")
self.assertEqual(cfg.debian_release, "bookworm")
self.assertEqual(cfg.release, "trunk-next")
@override_settings(
BUILD_REPOS_SCRIPTS_CONFIG_DIR=FIXTURES_PATH.joinpath("config.next")
)
@patch("repoapi.utils.dlfile")
@patch("build.tasks.trigger_build")
class TestViews(BaseTest, APITestCase):
fixtures = ["test_trunk_next"]
release = "trunk"
release_uuid = "53f9e166-4271-4581-ae3d-b3c1bb0bb081"
def test_release_ok(self, tb, dl):
qs = BuildRelease.objects.filter(uuid=self.release_uuid)
self.assertEqual(qs.count(), 1)
def test_project_list(self, tb, dl):
url_base = reverse("project-list", args=["trunk-next"])
url = f"{url_base}?release_uuid={self.release_uuid}"
response = self.client.get(url)
self.assertEqual(response.status_code, status.HTTP_200_OK)
pprint.pp(response.data, stream=sys.stderr)
# ngcpcfg build
self.assertEqual(len(response.data), 1)
info = response.data[0]
self.assertRegex(info["url"], r"http://testserver/release/trunk-next/")
self.assertNotIn(info["projectname"], settings.BUILD_RELEASE_JOBS)
def test_project_fulllist(self, tb, dl):
url_base = reverse(
"project-fulllist",
args=["trunk-next"],
)
url = f"{url_base}?release_uuid={self.release_uuid}"
response = self.client.get(url)
self.assertEqual(response.status_code, status.HTTP_200_OK)
pprint.pp(response.data, stream=sys.stderr)
# ngcpcfg build
self.assertEqual(len(response.data), 1)
info = response.data["ngcpcfg"]["7737120e-f512-4793-9c45-47eb4a4f4891"]
self.assertTrue(info["latest"])
def test_uuidinfo_list(self, tb, dl):
url_base = reverse(
"uuidinfo-list",
args=[
"trunk-next",
"ngcpcfg",
"7737120e-f512-4793-9c45-47eb4a4f4891",
],
)
url = f"{url_base}?release_uuid={self.release_uuid}"
response = self.client.get(url)
self.assertEqual(response.status_code, status.HTTP_200_OK)
pprint.pp(response.data, stream=sys.stderr)
# ngcpcfg build
self.assertEqual(len(response.data), 1)
def test_latestuuid_list(self, tb, dl):
url_base = reverse(
"latestuuid-list",
args=["trunk-next", "ngcpcfg"],
)
url = f"{url_base}?release_uuid={self.release_uuid}"
response = self.client.get(url)
self.assertEqual(response.status_code, status.HTTP_200_OK)
pprint.pp(response.data, stream=sys.stderr)
self.assertEqual(
response.data["tag"], "7737120e-f512-4793-9c45-47eb4a4f4891"
)
def test_projectuuid_list(self, tb, dl):
url_base = reverse(
"projectuuid-list",
args=["trunk-next", "ngcpcfg"],
)
url = f"{url_base}?release_uuid={self.release_uuid}"
response = self.client.get(url)
self.assertEqual(response.status_code, status.HTTP_200_OK)
pprint.pp(response.data, stream=sys.stderr)
info = response.data[0]
self.assertRegex(info["url"], r"http://testserver/release/trunk-next/")
self.assertEqual(info["tag"], "7737120e-f512-4793-9c45-47eb4a4f4891")
self.assertTrue(info["latest"])
@override_settings(
BUILD_REPOS_SCRIPTS_CONFIG_DIR=FIXTURES_PATH.joinpath("config.next")
)
class UtilsRelease(BaseTest):
fixtures = ["test_trunk_next"]
release_uuid = "53f9e166-4271-4581-ae3d-b3c1bb0bb081"
def test_get_build_release(self):
self.assertEqual(get_build_release(self.release_uuid), "trunk")

@ -85,3 +85,13 @@ class UtilsTestCase(BaseTest):
utils.cleanup_build(build_path, dst_path)
dst_path.mkdir.assert_not_called()
sh.move.assert_called_once_with(build_path, dst_path)
class UtilsRelease(BaseTest):
fixtures = ["test_models"]
def test_get_build_release(self):
release_uuid = "dbe569f7-eab6-4532-a6d1-d31fb559648b"
self.assertEqual(
utils.get_build_release(release_uuid), "release-mr8.1"
)

@ -75,7 +75,7 @@ api_patterns = [
name="projectuuid-list",
),
re_path(
r"^release/(?P<release>[^/]+)" "/(?P<project>[^/]+)/(?P<uuid>[^/]+)/$",
r"^release/(?P<release>[^/]+)/(?P<project>[^/]+)/(?P<uuid>[^/]+)/$",
views.UUIDInfoList.as_view(),
name="uuidinfo-list",
),

@ -19,6 +19,8 @@ from pathlib import Path
import requests
import structlog
from django.apps import apps
from django.shortcuts import get_object_or_404
from requests.auth import HTTPBasicAuth
from .conf import settings
@ -183,6 +185,12 @@ def get_next_release(branch):
return None
def get_build_release(release_uuid):
BuildRelease = apps.get_model("build", "BuildRelease")
br = get_object_or_404(BuildRelease, uuid=release_uuid)
return br.build_release
def is_download_artifacts(jobname):
if jobname in settings.JBI_ARTIFACT_JOBS:
return True

@ -1,4 +1,4 @@
# Copyright (C) 2020-2022 The Sipwise Team - http://sipwise.com
# Copyright (C) 2020-2024 The Sipwise Team - http://sipwise.com
#
# This program is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the Free
@ -22,6 +22,7 @@ from rest_framework.views import APIView
from . import serializers
from .models import JenkinsBuildInfo as jbi
from .utils import get_build_release
@api_view(("GET",))
@ -77,7 +78,10 @@ class ProjectList(APIView):
params = {"flat": False}
if "release_uuid" in self.request.query_params:
params["release_uuid"] = self.request.query_params["release_uuid"]
projects = jbi.objects.release_projects(release, **params)
release_build = get_build_release(params["release_uuid"])
else:
release_build = release
projects = jbi.objects.release_projects(release_build, **params)
if projects is None:
return Response({}, status=status.HTTP_404_NOT_FOUND)
for project in projects:
@ -94,7 +98,10 @@ class ProjectFullList(APIView):
params = {}
if "release_uuid" in self.request.query_params:
params["release_uuid"] = self.request.query_params["release_uuid"]
projects = jbi.objects.release_projects_full(release, **params)
release_build = get_build_release(params["release_uuid"])
else:
release_build = release
projects = jbi.objects.release_projects_full(release_build, **params)
return Response(projects)
@ -103,9 +110,14 @@ class ProjectUUIDList(APIView):
params = {"flat": False}
if "release_uuid" in self.request.query_params:
params["release_uuid"] = self.request.query_params["release_uuid"]
uuids = jbi.objects.release_project_uuids(release, project, **params)
release_build = get_build_release(params["release_uuid"])
else:
release_build = release
uuids = jbi.objects.release_project_uuids(
release_build, project, **params
)
params.pop("flat")
latest = jbi.objects.latest_uuid(release, project, **params)
latest = jbi.objects.latest_uuid(release_build, project, **params)
for uuid in uuids:
uuid["url"] = reverse(
"uuidinfo-list",
@ -118,9 +130,14 @@ class ProjectUUIDList(APIView):
class UUIDInfoList(APIView):
def get(self, request, release, project, uuid, format=None):
if "release_uuid" in self.request.query_params:
release_uuid = self.request.query_params["release_uuid"]
release_build = get_build_release(release_uuid)
else:
release_build = release
res = list()
jbis = serializers.JenkinsBuildInfoSerializer
jobs = jbi.objects.jobs_by_uuid(release, project, uuid)
jobs = jbi.objects.jobs_by_uuid(release_build, project, uuid)
for job in jobs:
serializer = jbis(job, context={"request": request})
res.append(serializer.data)
@ -132,5 +149,8 @@ class LatestUUID(APIView):
params = {}
if "release_uuid" in self.request.query_params:
params["release_uuid"] = self.request.query_params["release_uuid"]
res = jbi.objects.latest_uuid(release, project, **params)
release_build = get_build_release(params["release_uuid"])
else:
release_build = release
res = jbi.objects.latest_uuid(release_build, project, **params)
return Response(res)

Loading…
Cancel
Save