Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package openSUSE-release-tools for openSUSE:Factory checked in at 2023-02-17 16:45:45 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/openSUSE-release-tools (Old) and /work/SRC/openSUSE:Factory/.openSUSE-release-tools.new.22824 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "openSUSE-release-tools" Fri Feb 17 16:45:45 2023 rev:459 rq:1066361 version:20230210.1cf4e6b Changes: -------- --- /work/SRC/openSUSE:Factory/openSUSE-release-tools/openSUSE-release-tools.changes 2023-01-17 17:35:38.465295003 +0100 +++ /work/SRC/openSUSE:Factory/.openSUSE-release-tools.new.22824/openSUSE-release-tools.changes 2023-02-17 16:46:10.651258818 +0100 @@ -1,0 +2,101 @@ +Fri Feb 10 10:11:22 UTC 2023 - opensuse-releaset...@opensuse.org + +- Update to version 20230210.1cf4e6b: + * leapmicro: fix the wrong Leap Micro version in RelPkgs pipeline + +------------------------------------------------------------------- +Thu Feb 09 08:41:15 UTC 2023 - opensuse-releaset...@opensuse.org + +- Update to version 20230209.cdbe773: + * Update totestmanager.gocd.yaml.erb + * Add LeapMicro 5.4 pipelines + +------------------------------------------------------------------- +Thu Feb 02 16:27:26 UTC 2023 - opensuse-releaset...@opensuse.org + +- Update to version 20230202.cbaa2d4: + * Release the multibuild container itself, that will cover all flavors + +------------------------------------------------------------------- +Thu Feb 02 09:14:56 UTC 2023 - opensuse-releaset...@opensuse.org + +- Update to version 20230202.d737b9f: + * Tag the previous image in the cleanup script + * Add cleanup script running at night on botmaster + +------------------------------------------------------------------- +Tue Jan 31 11:57:59 UTC 2023 - opensuse-releaset...@opensuse.org + +- Update to version 20230131.9980d01: + * Remove trailing whitespace in gocd/sp.target.gocd.yaml + * Port over more uses of Request.get_creator() + +------------------------------------------------------------------- +Mon Jan 30 15:12:57 UTC 2023 - opensuse-releaset...@opensuse.org + +- Update to version 20230130.8e810cc: + * More gocd errors in the new SLE pipelines + * Fix gocd config ident - listing a stage as a job + * gocd: Add parametrized pipeline for automatic release + * gocd: Add parallel stage for totest release + +------------------------------------------------------------------- +Sun Jan 29 18:09:31 UTC 2023 - opensuse-releaset...@opensuse.org + +- Update to version 20230129.a7da0b8: + * Don't schedule Leap 15.3 tests in O3 + +------------------------------------------------------------------- +Wed Jan 25 19:08:51 UTC 2023 - opensuse-releaset...@opensuse.org + +- Update to version 20230125.2b3c045: + * Allow specifying a devel project that has "Factory" in its name + +------------------------------------------------------------------- +Wed Jan 25 18:22:19 UTC 2023 - opensuse-releaset...@opensuse.org + +- Update to version 20230125.2c0e252: + * Add explicit deprecation warning + +------------------------------------------------------------------- +Wed Jan 25 18:04:48 UTC 2023 - opensuse-releaset...@opensuse.org + +- Update to version 20230125.be71541: + * Handle special DVD+Image BUILD values in SLE Micro Staging jobs + +------------------------------------------------------------------- +Wed Jan 25 17:47:53 UTC 2023 - opensuse-releaset...@opensuse.org + +- Update to version 20230125.61fdf0f: + * accept_command: cleanup redundant ports_prjs assignment + +------------------------------------------------------------------- +Wed Jan 25 17:41:50 UTC 2023 - opensuse-releaset...@opensuse.org + +- Update to version 20230125.394f8ee: + * use request.creator rather than request.get_creator() which is deprecated + * Use old function to pass tests + * Restore old xpathsearch for fullhistory searches + * Use the 15.4 container + * Fixes for osc-1.x + +------------------------------------------------------------------- +Wed Jan 25 14:55:27 UTC 2023 - opensuse-releaset...@opensuse.org + +- Update to version 20230125.29aed3c: + * Make REGEX_LINE backwards compatible + * Fix regex for access logs parsing + +------------------------------------------------------------------- +Wed Jan 25 13:07:19 UTC 2023 - opensuse-releaset...@opensuse.org + +- Update to version 20230125.4d5b976: + * Switch to 15.4, 15.3 has been deleted + +------------------------------------------------------------------- +Tue Jan 24 12:27:48 UTC 2023 - opensuse-releaset...@opensuse.org + +- Update to version 20230124.c53e264: + * gocd/rabbit-openqa.py: Always include flavor, name and machine in the check + +------------------------------------------------------------------- Old: ---- openSUSE-release-tools-20230110.5f7806f.obscpio New: ---- openSUSE-release-tools-20230210.1cf4e6b.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ openSUSE-release-tools.spec ++++++ --- /var/tmp/diff_new_pack.nEgZGl/_old 2023-02-17 16:46:11.459263369 +0100 +++ /var/tmp/diff_new_pack.nEgZGl/_new 2023-02-17 16:46:11.467263413 +0100 @@ -20,7 +20,7 @@ %define source_dir openSUSE-release-tools %define announcer_filename factory-package-news Name: openSUSE-release-tools -Version: 20230110.5f7806f +Version: 20230210.1cf4e6b Release: 0 Summary: Tools to aid in staging and release work for openSUSE/SUSE License: GPL-2.0-or-later AND MIT ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.nEgZGl/_old 2023-02-17 16:46:11.547263864 +0100 +++ /var/tmp/diff_new_pack.nEgZGl/_new 2023-02-17 16:46:11.551263886 +0100 @@ -1,7 +1,7 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/openSUSE/openSUSE-release-tools.git</param> - <param name="changesrevision">5f7806f1e084217fc0dc4878e5feeeeaf21cbe24</param> + <param name="changesrevision">1cf4e6bb02ea1352c8257b391e4c814aa03d8924</param> </service> </servicedata> ++++++ openSUSE-release-tools-20230110.5f7806f.obscpio -> openSUSE-release-tools-20230210.1cf4e6b.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20230110.5f7806f/ReviewBot.py new/openSUSE-release-tools-20230210.1cf4e6b/ReviewBot.py --- old/openSUSE-release-tools-20230110.5f7806f/ReviewBot.py 2023-01-10 08:02:00.000000000 +0100 +++ new/openSUSE-release-tools-20230210.1cf4e6b/ReviewBot.py 2023-02-10 11:08:40.000000000 +0100 @@ -385,7 +385,7 @@ return self.devel_project_review_add(request, project, package, message) def devel_project_review_needed(self, request, project, package): - author = request.get_creator() + author = request.creator maintainers = set(maintainers_get(self.apiurl, project, package)) if author in maintainers: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20230110.5f7806f/check_maintenance_incidents.py new/openSUSE-release-tools-20230210.1cf4e6b/check_maintenance_incidents.py --- old/openSUSE-release-tools-20230110.5f7806f/check_maintenance_incidents.py 2023-01-10 08:02:00.000000000 +0100 +++ new/openSUSE-release-tools-20230210.1cf4e6b/check_maintenance_incidents.py 2023-02-10 11:08:40.000000000 +0100 @@ -55,7 +55,7 @@ # check if pkgname was submitted by the correct maintainer. If not, set # self.needs_maintainer_review def _check_maintainer_review_needed(self, req, a): - author = req.get_creator() + author = req.creator if a.type == 'maintenance_incident': # check if there is a link and use that or the real package # name as src_packge may end with something like diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20230110.5f7806f/check_source.py new/openSUSE-release-tools-20230210.1cf4e6b/check_source.py --- old/openSUSE-release-tools-20230110.5f7806f/check_source.py 2023-01-10 08:02:00.000000000 +0100 +++ new/openSUSE-release-tools-20230210.1cf4e6b/check_source.py 2023-02-10 11:08:40.000000000 +0100 @@ -267,7 +267,7 @@ if self.add_devel_project_review: devel_project, devel_package = devel_project_fallback(self.apiurl, target_project, target_package) if devel_project and devel_package: - submitter = self.request.get_creator() + submitter = self.request.creator maintainers = set(maintainers_get(self.apiurl, devel_project, devel_package)) known_maintainer = False if maintainers: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20230110.5f7806f/check_tags_in_requests.py new/openSUSE-release-tools-20230210.1cf4e6b/check_tags_in_requests.py --- old/openSUSE-release-tools-20230110.5f7806f/check_tags_in_requests.py 2023-01-10 08:02:00.000000000 +0100 +++ new/openSUSE-release-tools-20230210.1cf4e6b/check_tags_in_requests.py 2023-02-10 11:08:40.000000000 +0100 @@ -4,6 +4,8 @@ import osc.conf import osc.core + +from osclib.core import get_request_list_with_history from lxml import etree as ET from urllib.error import HTTPError, URLError @@ -72,7 +74,7 @@ project = project[len(prefix):] sr = srprefix break - requests = osc.core.get_request_list(apiurl, project, package, None, ['new', 'review'], 'submit') + requests = get_request_list_with_history(apiurl, project, package, None, ['new', 'review'], 'submit') except (HTTPError, URLError): self.logger.error("caught exception while checking %s/%s", project, package) return None diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20230110.5f7806f/dashboard/generate.py new/openSUSE-release-tools-20230210.1cf4e6b/dashboard/generate.py --- old/openSUSE-release-tools-20230110.5f7806f/dashboard/generate.py 2023-01-10 08:02:00.000000000 +0100 +++ new/openSUSE-release-tools-20230210.1cf4e6b/dashboard/generate.py 2023-02-10 11:08:40.000000000 +0100 @@ -173,11 +173,11 @@ download_url='http://download.opensuse.org/ports/zsystems/tumbleweed/iso/', openqa_group='openSUSE Tumbleweed s390x', openqa_version='Tumbleweed', openqa_groupid=34) else: - fetcher.add('openSUSE:Leap:Micro:5.3', nick='Leap:Micro:5.3', - download_url='https://download.opensuse.org/distribution/leap-micro/5.3/product/iso', - openqa_group='openSUSE Leap Micro 5.3', openqa_version='5.3', openqa_groupid=102) - fetcher.add('openSUSE:Leap:Micro:5.3:Images', nick='Leap:Micro:5.3:Images', - openqa_group='openSUSE Leap Micro 5.3 Image', openqa_version='5.3', openqa_groupid=101) + fetcher.add('openSUSE:Leap:Micro:5.4', nick='Leap:Micro:5.4', + download_url='https://download.opensuse.org/distribution/leap-micro/5.4/product/iso', + openqa_group='openSUSE Leap Micro 5.4', openqa_version='5.4', openqa_groupid=102) + fetcher.add('openSUSE:Leap:Micro:5.4:Images', nick='Leap:Micro:5.4:Images', + openqa_group='openSUSE Leap Micro 5.4 Image', openqa_version='5.4', openqa_groupid=101) fetcher.add('openSUSE:Leap:15.5', nick='Leap:15.5', download_url='https://download.opensuse.org/distribution/leap/15.5/iso', openqa_group='openSUSE Leap 15', openqa_version='15.5', openqa_groupid=50) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20230110.5f7806f/data/apimap.json new/openSUSE-release-tools-20230210.1cf4e6b/data/apimap.json --- old/openSUSE-release-tools-20230110.5f7806f/data/apimap.json 2023-01-10 08:02:00.000000000 +0100 +++ new/openSUSE-release-tools-20230210.1cf4e6b/data/apimap.json 2023-02-10 11:08:40.000000000 +0100 @@ -1,14 +1,4 @@ { - "openSUSE:Leap:15.3:Update" : { - "version": "15.3", - "flavor": "DVD-Incidents", - "distri": "opensuse" - }, - "openSUSE:Backports:SLE-15-SP3:Update" : { - "version": "15.3", - "flavor": "DVD-Backports-Incidents", - "distri": "opensuse" - }, "openSUSE:Leap:15.4:Update" : { "version": "15.4", "flavor": "DVD-Incidents", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20230110.5f7806f/data/incidents.json new/openSUSE-release-tools-20230210.1cf4e6b/data/incidents.json --- old/openSUSE-release-tools-20230110.5f7806f/data/incidents.json 2023-01-10 08:02:00.000000000 +0100 +++ new/openSUSE-release-tools-20230210.1cf4e6b/data/incidents.json 2023-02-10 11:08:40.000000000 +0100 @@ -1,16 +1,4 @@ { - "openSUSE:Leap:15.3:Update": { - "DISTRI": "opensuse", - "FLAVOR": "DVD-Incidents", - "VERSION": "15.3", - "ARCH": "x86_64" - }, - "openSUSE:Backports:SLE-15-SP3:Update": { - "DISTRI": "opensuse", - "FLAVOR": "DVD-Backports-Incidents", - "VERSION": "15.3", - "ARCH": "x86_64" - }, "openSUSE:Leap:15.4:Update": { "DISTRI": "opensuse", "FLAVOR": "DVD-Incidents", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20230110.5f7806f/data/repos.json new/openSUSE-release-tools-20230210.1cf4e6b/data/repos.json --- old/openSUSE-release-tools-20230110.5f7806f/data/repos.json 2023-01-10 08:02:00.000000000 +0100 +++ new/openSUSE-release-tools-20230210.1cf4e6b/data/repos.json 2023-02-10 11:08:40.000000000 +0100 @@ -1,35 +1,5 @@ { "https://openqa.opensuse.org": { - "openSUSE:Leap:15.3:Update": { - "settings": { - "OS_TEST_ISSUES": "", - "FLAVOR": "DVD-Updates", - "DISTRI": "opensuse", - "VERSION": "15.3", - "ARCH": "x86_64" - }, - "test": "kde", - "repos": [ - "http://download.opensuse.org/update/leap/15.3/oss/", - "http://download.opensuse.org/update/leap/15.3/non-oss/", - "http://download.opensuse.org/update/leap/15.3/backports/", - "http://download.opensuse.org/update/leap/15.3/sle/" - ] - }, - "openSUSE:Backports:SLE-15-SP3:Update": { - "settings": { - "OS_TEST_ISSUES": "", - "FLAVOR": "DVD-Backports-Incidents", - "DISTRI": "opensuse", - "VERSION": "15.3", - "ARCH": "x86_64" - }, - "test": "kde", - "repos": [ - "http://download.opensuse.org/update/leap/15.3/backports/", - "http://download.opensuse.org/update/leap/15.3/sle/" - ] - }, "openSUSE:Leap:15.4:Update": { "settings": { "OS_TEST_ISSUES": "", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20230110.5f7806f/devel-project.py new/openSUSE-release-tools-20230210.1cf4e6b/devel-project.py --- old/openSUSE-release-tools-20230110.5f7806f/devel-project.py 2023-01-10 08:02:00.000000000 +0100 +++ new/openSUSE-release-tools-20230210.1cf4e6b/devel-project.py 2023-02-10 11:08:40.000000000 +0100 @@ -7,7 +7,6 @@ import osc.conf from osc.core import HTTPError -from osc.core import get_request_list from osc.core import get_review_list from osc.core import show_package_meta from osc.core import show_project_meta @@ -15,6 +14,7 @@ from osclib.conf import Config from osclib.core import devel_project_fallback from osclib.core import entity_email +from osclib.core import get_request_list_with_history from osclib.core import package_list_kind_filtered from osclib.core import request_age from osclib.stagingapi import StagingAPI @@ -163,10 +163,9 @@ # Disable including source project in get_request_list() query. osc.conf.config['include_request_from_project'] = False for devel_project in devel_projects: - requests = get_request_list(apiurl, devel_project, - req_state=('new', 'review'), - req_type='submit', - withfullhistory=True) + requests = get_request_list_with_history( + apiurl, devel_project, req_state=('new', 'review'), + req_type='submit') for request in requests: action = request.actions[0] age = request_age(request).days diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20230110.5f7806f/dist/ci/docker-compose.yml new/openSUSE-release-tools-20230210.1cf4e6b/dist/ci/docker-compose.yml --- old/openSUSE-release-tools-20230110.5f7806f/dist/ci/docker-compose.yml 2023-01-10 08:02:00.000000000 +0100 +++ new/openSUSE-release-tools-20230210.1cf4e6b/dist/ci/docker-compose.yml 2023-02-10 11:08:40.000000000 +0100 @@ -1,7 +1,7 @@ version: "3.4" x-obs: &obs - image: registry.opensuse.org/opensuse/tools/images/containers153/osrt_miniobs:latest + image: registry.opensuse.org/opensuse/tools/images/containers154/osrt_miniobs:latest x-testenv: &testenv image: registry.opensuse.org/opensuse/tools/images/containers_tumbleweed/osrt_testenv_tumbleweed:latest diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20230110.5f7806f/dist/ci/miniobs/Dockerfile new/openSUSE-release-tools-20230210.1cf4e6b/dist/ci/miniobs/Dockerfile --- old/openSUSE-release-tools-20230110.5f7806f/dist/ci/miniobs/Dockerfile 2023-01-10 08:02:00.000000000 +0100 +++ new/openSUSE-release-tools-20230210.1cf4e6b/dist/ci/miniobs/Dockerfile 2023-02-10 11:08:40.000000000 +0100 @@ -1,7 +1,7 @@ #!BuildTag: osrt_miniobs -FROM opensuse/leap:15.3 +FROM opensuse/leap:15.4 -RUN zypper ar http://download.opensuse.org/repositories/OBS:/Server:/Unstable/15.3/ 'O:S:U'; \ +RUN zypper ar http://download.opensuse.org/repositories/OBS:/Server:/Unstable/15.4/ 'O:S:U'; \ zypper --gpg-auto-import-keys refresh RUN zypper install -y obs-api obs-worker obs-server \ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20230110.5f7806f/gocd/admin/cleanup.py new/openSUSE-release-tools-20230210.1cf4e6b/gocd/admin/cleanup.py --- old/openSUSE-release-tools-20230110.5f7806f/gocd/admin/cleanup.py 1970-01-01 01:00:00.000000000 +0100 +++ new/openSUSE-release-tools-20230210.1cf4e6b/gocd/admin/cleanup.py 2023-02-10 11:08:40.000000000 +0100 @@ -0,0 +1,225 @@ +import requests +import sys +import time +import subprocess +import shutil +import glob +import os +import psycopg2 + + +token = open("gocd_api.token").read().strip() +api_prefix = "http://localhost:8153/go/api" +container_image = "registry.opensuse.org/opensuse/tools/images/containers_tumbleweed/gocd-agent-release-tools" +# api_prefix = 'https://botmaster.suse.de/go/api' + + +def botmaster_headers(version): + headers = {"Authorization": f"Bearer {token}"} + headers["X-GoCD-Confirm"] = "true" + headers["Accept"] = f"application/vnd.go.cd.v{version}+json" + headers["Content-Type"] = "application/json" + return headers + + +def botmaster_get(url, version): + url = api_prefix + url + return requests.get(url, headers=botmaster_headers(version)) + + +def botmaster_post(url, version): + url = api_prefix + url + return requests.post(url, headers=botmaster_headers(version)) + + +def botmaster_delete(url, version): + url = api_prefix + url + return requests.delete(url, headers=botmaster_headers(version)) + + +def botmaster_patch(url, data, version): + url = api_prefix + url + return requests.patch(url, data, headers=botmaster_headers(version)) + + +def delete_agents(only_disable=False): + x = botmaster_get("/agents", version=7) + if x.status_code not in [200]: + print("Can't retrieve agent list") + sys.exit(1) + agents = x.json()["_embedded"]["agents"] + for agent in agents: + url = f'/agents/{agent["uuid"]}' + # first needs to be disabled + if agent["agent_config_state"] != "Disabled": + x = botmaster_patch(url, '{"agent_config_state": "Disabled"}', version=7) + if x.status_code != 200: + print("Can't disable agent", url, x, x.content) + continue + if not only_disable: + botmaster_delete(url, version=7) + + +def cleanup_cache(): + for file in glob.glob("/srv/go-repository-cache/repo-*solv*"): + os.unlink(file) + for suffix in ["openSUSE:Maintenance:*", "*:Staging:adi:*", "repo-*"]: + for dir in glob.glob(f"/srv/go-repository-cache/{suffix}"): + shutil.rmtree(dir) + for root, dir, files in os.walk("/srv/go-repository-cache/"): + if root.endswith("/.cache"): + for file in files: + os.unlink(os.path.join(root, file)) + + +def remove_old_runs(cur, pipeline): + cur.execute( + """SELECT distinct p.id,p.label from pipelines p join stages s on s.pipelineid = p.id + and s.createdtime < current_date - interval '5' day and p.name=%s""", + (pipeline,), + ) + ids = [] + for row in cur.fetchall(): + id, label = row + print("Remove", pipeline, label) + path = f"/var/lib/go-server/artifacts/pipelines/{pipeline}/{label}" + try: + shutil.rmtree(path) + except FileNotFoundError: + pass + ids.append(id) + cur.execute( + "delete from BUILDSTATETRANSITIONS where STAGEID in (select id from stages where pipelineid = ANY(%s))", + (ids,), + ) + cur.execute( + "delete from PIPELINEMATERIALREVISIONS where pipelineid = ANY(%s)", (ids,) + ) + cur.execute( + "delete from builds where stageid in (select id from stages where pipelineid = ANY(%s))", + (ids,), + ) + cur.execute("delete from stages where pipelineid = ANY(%s)", (ids,)) + cur.execute("delete from pipelines where id = ANY(%s)", (ids,)) + cur.execute("update pipelines set NATURALORDER=0 where name = %s", (pipeline,)) + + +def cleanup_old_pipelines(): + # very safe password - only reachable from localhost + conn = psycopg2.connect( + "dbname=gocd user=gocd_database_user password=gocd_database_password host=localhost" + ) + with conn.cursor() as cur: + cur.execute("SELECT distinct name from pipelines") + pipelines = sorted([row[0] for row in cur.fetchall()]) + for pipeline in pipelines: + remove_old_runs(cur, pipeline) + conn.commit() + cur.execute( + """delete from modifiedfiles where modificationid in + (select id from modifications where modifiedtime < current_date - interval '10' day)""" + ) + # cur.execute("delete from modifications where modifiedtime < current_date - interval '10' day") + conn.close() + + +def main(): + # Make a tag of the preivous image + subprocess.run( + [ + "docker", + "tag", + container_image + ":latest", + container_image + ":previous", + ], + check=True, + ) + + # pull new image - if registry is down, better stop here + subprocess.run( + [ + "docker", + "pull", + container_image + ":latest", + ], + check=True, + ) + + # disable all agents + delete_agents(only_disable=True) + + # putting the server into maintenance mode + x = botmaster_post("/admin/maintenance_mode/enable", version=1) + if x.status_code not in [204, 409]: + print("Failed to enable maintenance mode", x, x.content) + sys.exit(1) + + # wait for all jobs to finish - cancel the monitors manually + while True: + info = botmaster_get("/admin/maintenance_mode/info", version=1) + if info.status_code not in [200]: + print("Failed to retrieve maintenance mode info", info, info.content) + sys.exit(1) + info = info.json() + if not info["is_maintenance_mode"]: + print("Failed to enable maintenance mode", x, x.content) + sys.exit(1) + + running_systems = info["attributes"]["running_systems"]["building_jobs"] + if len(running_systems) == 0: + break + pipelines = [] + for job in running_systems: + if job["pipeline_name"] in [ + "SUSE.Repo.Monitor", + "SUSE.openQA", + "openSUSE.Repo.Monitor", + "openSUSE.openQA", + ]: + url = f"/stages/{job['pipeline_name']}/{job['pipeline_counter']}/{job['stage_name']}/{job['stage_counter']}/cancel" + x = botmaster_post(url, version=3) + if x.status_code not in [200]: + print(f"Can't cancel {job['pipline_name']}") + print(x, x.content) + sys.exit(1) + else: + pipelines.append(job["pipeline_name"]) + print("Waiting 2 min for the jobs to finish", sorted(pipelines)) + time.sleep(120) + + # stop all agents + subprocess.run(["systemctl", "stop", "go-agent-*"], check=True) + + # cleanup + proc = subprocess.Popen(["docker", "system", "prune"], stdin=subprocess.PIPE) + proc.communicate(input=b"y\n") + + # stop the server + subprocess.run(["systemctl", "stop", "go-server.service"]) + + cleanup_old_pipelines() + + # start the server again + subprocess.run(["systemctl", "start", "go-server.service"]) + + while True: + try: + info = botmaster_get("/admin/maintenance_mode/info", version=1) + print(info, info.content) + if info.status_code in [503]: + # is starting + time.sleep(5) + continue + break + except requests.exceptions.ConnectionError: + time.sleep(5) + continue + + delete_agents() + cleanup_cache() + + # start the agents on new image + subprocess.run(["systemctl", "start", "--all", "go-agent-*"], check=True) + + +main() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20230110.5f7806f/gocd/admin/remove-old-logs.service new/openSUSE-release-tools-20230210.1cf4e6b/gocd/admin/remove-old-logs.service --- old/openSUSE-release-tools-20230110.5f7806f/gocd/admin/remove-old-logs.service 1970-01-01 01:00:00.000000000 +0100 +++ new/openSUSE-release-tools-20230210.1cf4e6b/gocd/admin/remove-old-logs.service 2023-02-10 11:08:40.000000000 +0100 @@ -0,0 +1,8 @@ +[Unit] +Description=Remove old gocd logs +After=local-fs.target + +[Service] +Type=oneshot +WorkingDirectory=/root/admin +ExecStart=/usr/bin/python3 cleanup.py diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20230110.5f7806f/gocd/admin/remove-old-logs.timer new/openSUSE-release-tools-20230210.1cf4e6b/gocd/admin/remove-old-logs.timer --- old/openSUSE-release-tools-20230110.5f7806f/gocd/admin/remove-old-logs.timer 1970-01-01 01:00:00.000000000 +0100 +++ new/openSUSE-release-tools-20230210.1cf4e6b/gocd/admin/remove-old-logs.timer 2023-02-10 11:08:40.000000000 +0100 @@ -0,0 +1,9 @@ +[Unit] +Description=Remove Old gocd logs +After=local-fs.target + +[Timer] +OnCalendar=*-*-* 01:07:00 + +[Install] +WantedBy=timers.target diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20230110.5f7806f/gocd/leapmicro.target.gocd.yaml new/openSUSE-release-tools-20230210.1cf4e6b/gocd/leapmicro.target.gocd.yaml --- old/openSUSE-release-tools-20230110.5f7806f/gocd/leapmicro.target.gocd.yaml 2023-01-10 08:02:00.000000000 +0100 +++ new/openSUSE-release-tools-20230210.1cf4e6b/gocd/leapmicro.target.gocd.yaml 2023-02-10 11:08:40.000000000 +0100 @@ -17,26 +17,7 @@ resources: - repo-checker tasks: - - script: ./pkglistgen.py -A https://api.opensuse.org update_and_solve -p openSUSE:Leap:Micro:5.2 -s target --only-release-packages - - LeapMicro53.RelPkgs: - group: Leap - lock_behavior: unlockWhenFinished - timer: - spec: 0 10 * ? * * - only_on_changes: false - materials: - git: - git: https://github.com/openSUSE/openSUSE-release-tools.git - environment_variables: - OSC_CONFIG: /home/go/config/oscrc-staging-bot - stages: - - Create.Release.Packages: - approval: manual - resources: - - repo-checker - tasks: - - script: ./pkglistgen.py -A https://api.opensuse.org update_and_solve -p openSUSE:Leap:Micro:5.3 -s target --only-release-packages + - script: ./pkglistgen.py -A https://api.opensuse.org update_and_solve -p openSUSE:Leap:Micro:5.4 -s target --only-release-packages LeapMicro.Package.Lists: group: Leap @@ -54,23 +35,4 @@ resources: - repo-checker tasks: - - script: ./pkglistgen.py -A https://api.opensuse.org --debug update_and_solve -p openSUSE:Leap:Micro:5.2 -s target - - LeapMicro53.Package.Lists: - group: Leap - lock_behavior: unlockWhenFinished - environment_variables: - OSC_CONFIG: /home/go/config/oscrc-staging-bot - timer: - spec: 0 40 * ? * * - only_on_changes: false - materials: - git: - git: https://github.com/openSUSE/openSUSE-release-tools.git - stages: - - Update.000product: - resources: - - repo-checker - tasks: - - script: ./pkglistgen.py -A https://api.opensuse.org --debug update_and_solve -p openSUSE:Leap:Micro:5.3 -s target - + - script: ./pkglistgen.py -A https://api.opensuse.org --debug update_and_solve -p openSUSE:Leap:Micro:5.4 -s target diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20230110.5f7806f/gocd/rabbit-openqa.py new/openSUSE-release-tools-20230210.1cf4e6b/gocd/rabbit-openqa.py --- old/openSUSE-release-tools-20230110.5f7806f/gocd/rabbit-openqa.py 2023-01-10 08:02:00.000000000 +0100 +++ new/openSUSE-release-tools-20230210.1cf4e6b/gocd/rabbit-openqa.py 2023-02-10 11:08:40.000000000 +0100 @@ -11,6 +11,7 @@ from osclib.stagingapi import StagingAPI from lxml import etree as ET from openqa_client.client import OpenQA_Client +from packaging import version from urllib.error import HTTPError from urllib.parse import quote_plus @@ -100,11 +101,39 @@ # collect job infos to pick names for job in openqa: print(staging, iso, job['id'], job['state'], job['result'], - job['settings']['MACHINE'], job['settings']['TEST']) + job['settings']['FLAVOR'], job['settings']['TEST'], job['settings']['MACHINE']) openqa_infos[job['id']] = {'url': self.listener.test_url(job)} openqa_infos[job['id']]['state'] = self.map_openqa_result(job) - openqa_infos[job['id']]['name'] = job['settings']['TEST'] - openqa_infos[job['id']]['machine'] = job['settings']['MACHINE'] + openqa_infos[job['id']]['build'] = job['settings']['BUILD'] + openqa_infos[job['id']]['name'] = f"{job['settings']['FLAVOR']}-{job['settings']['TEST']}@{job['settings']['MACHINE']}" + + def compare_simple_builds(build1, build2): + """Simple build number comparison""" + ver1 = version.parse(build1) + ver2 = version.parse(build2) + if ver1 < ver2: + return -1 + if ver1 > ver2: + return 1 + return 0 + + def compare_composite_builds(build1, build2): + """Compare BUILD numbers consisting of multiple _-separated components.""" + components1 = build1.split('_') + components2 = build2.split('_') + if len(components1) != len(components2): + raise Exception(f'Failed to compare {build1} and {build2}: Different format') + + component_cmps = [Project.compare_simple_builds(components1[i], components2[i]) for i in range(0, len(components1))] + less = -1 in component_cmps + greater = 1 in component_cmps + if less and greater: + raise Exception(f'Failed to compare {build1} and {build2}: Not ordered') + if less: + return -1 + if greater: + return 1 + return 0 def update_staging_status(self, staging): openqa_infos = dict() @@ -119,18 +148,36 @@ url = self.api.makeurl(['status_reports', 'published', staging, 'images', 'reports', buildid]) # make sure the names are unique + obsolete_jobs = [] taken_names = dict() for id in openqa_infos: name = openqa_infos[id]['name'] if name in taken_names: - openqa_infos[id]['name'] = openqa_infos[id]['name'] + "@" + openqa_infos[id]['machine'] - # the other id - oid = taken_names[name] - openqa_infos[oid]['name'] = openqa_infos[oid]['name'] + "@" + openqa_infos[oid]['machine'] - if openqa_infos[id]['name'] == openqa_infos[oid]['name']: - raise Exception(f'Names of job #{id} and #{oid} collide') + # There are multiple jobs with that specific FLAVOR-TEST@MACHINE. + # In SLE Micro, jobs currently use BUILD=(dvdbuild)_(image_build), + # so if the dvd is rebuilt, new image jobs are triggered for the + # same binary. The openQA ?latest=1 filter doesn't look at that, + # so we have to figure out which of those is the most recent one. + build1 = openqa_infos[taken_names[name]]['build'] + build2 = openqa_infos[id]['build'] + if '_' in build1 and '_' in build2 and build1 != build2: + # Use the more recent build + buildcmp = Project.compare_composite_builds(build1, build2) + self.logger.info(f'Multiple builds for {name}, {build1} and {build2}. Comparison: {buildcmp}') + if buildcmp < 0: # Drop the previous one + obsolete_jobs.append(taken_names[name]) + taken_names[name] = id + continue + elif buildcmp > 0: # Drop this one + obsolete_jobs.append(id) + continue + + raise Exception(f'Names of job #{id} and #{taken_names[name]} collide: {name}') taken_names[name] = id + for id in obsolete_jobs: + del openqa_infos[id] + for info in openqa_infos.values(): xml = self.openqa_check_xml(info['url'], info['state'], 'openqa:' + info['name']) try: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20230110.5f7806f/gocd/sp.target.gocd.yaml new/openSUSE-release-tools-20230210.1cf4e6b/gocd/sp.target.gocd.yaml --- old/openSUSE-release-tools-20230110.5f7806f/gocd/sp.target.gocd.yaml 2023-01-10 08:02:00.000000000 +0100 +++ new/openSUSE-release-tools-20230210.1cf4e6b/gocd/sp.target.gocd.yaml 2023-02-10 11:08:40.000000000 +0100 @@ -45,7 +45,7 @@ osc -A https://api.suse.de release --target-project=SUSE:SLE-15-SP5:GA:TEST --target-repository=containers -r containerfile SUSE:SLE-15-SP5:GA $container done osc -A https://api.suse.de release --target-project=SUSE:SLE-15-SP5:GA:TEST --target-repository=containers -r images SUSE:SLE-15-SP5:GA sles15-image - PRODUCTS=$(osc -A https://api.suse.de ls SUSE:SLE-15-SP5:GA | grep "^SLES15-SP5" | grep -v release ||:) + PRODUCTS=$(osc -A https://api.suse.de ls SUSE:SLE-15-SP5:GA | grep "^SLES15-SP5" | grep -v release | grep -v : ||:) if [ -z "${PRODUCTS}" ]; then echo "[WARNNING] There is no cloud image to be released" fi @@ -64,6 +64,20 @@ done osc -A https://api.suse.de/ api "/build/SUSE:SLE-15-SP5:GA:TEST/_result?view=summary&repository=images" | grep "result project" | grep 'code="published" state="published">' && echo PUBLISHED + - Release.Images.To.Test.New: + approval: manual + roles: + - SLE + environment_variables: + OSC_CONFIG: /home/go/config/oscrc-totest-manager + JIRA_PAT: /home/go/config/jira-pat + JIRA_INSTANCE: /home/go/config/jira-instance + resources: + - staging-bot + tasks: + - script: |- + sle-prjmgr-tools --jira-instance $JIRA_INSTANCE --osc-config $OSC_CONFIG ibs_to_jira --jira-pat $JIRA_PAT -p SUSE:SLE-15-SP5:GA + - Release.Images.To.Publish: approval: manual roles: @@ -151,3 +165,51 @@ - staging-bot tasks: - script: osc -A https://api.suse.de release SUSE:SLE-15-SP5:GA:TEST + + SLE15.SP5.ReleaseScc: + group: SLE15.Target + parameters: + product: sle15sp5 + target: MyTarget + build: "0.0" + materials: + scripts: + auto_update: true + git: https://github.com/openSUSE/openSUSE-release-tools.git + whitelist: + - DO_NOT_TRIGGER + destination: scripts + stages: + # "ratt" is an alias for the internal IP of the API, only available on botmaster. + - Release.Images.Update: + approval: manual + roles: + - SLE + resources: + - staging-bot + tasks: + - script: curl --verbose --max-time 3600 "http://ratt:5000/update?product=#{product}&target=#{target}&build=#{build}" + - Release.Images.Rename: + approval: manual + roles: + - SLE + resources: + - staging-bot + tasks: + - script: curl --verbose --max-time 3600 "http://ratt:5000/rename?product=#{product}&target=#{target}" + - Release.Images.Sync: + approval: manual + roles: + - SLE + resources: + - staging-bot + tasks: + - script: curl --verbose --max-time 3600 "http://ratt:5000/sync?product=#{product}&target=#{target}" + - Release.Images.Release: + approval: manual + roles: + - SLE + resources: + - staging-bot + tasks: + - script: curl --verbose --max-time 3600 "http://ratt:5000/release?product=#{product}" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20230110.5f7806f/gocd/totestmanager.gocd.yaml new/openSUSE-release-tools-20230210.1cf4e6b/gocd/totestmanager.gocd.yaml --- old/openSUSE-release-tools-20230110.5f7806f/gocd/totestmanager.gocd.yaml 2023-01-10 08:02:00.000000000 +0100 +++ new/openSUSE-release-tools-20230210.1cf4e6b/gocd/totestmanager.gocd.yaml 2023-02-10 11:08:40.000000000 +0100 @@ -252,7 +252,7 @@ - script: |- install -D /home/go/config/openqa-client.conf /home/go/.config/openqa/client.conf scripts/totest-manager.py -A https://api.opensuse.org --debug run openSUSE:Leap:15.5:ARM:Images - TTM.Leap_Micro_5.2: + TTM.Leap_Micro_5.4: group: openSUSE.Checkers lock_behavior: unlockWhenFinished environment_variables: @@ -272,8 +272,8 @@ tasks: - script: |- install -D /home/go/config/openqa-client.conf /home/go/.config/openqa/client.conf - scripts/totest-manager.py -A https://api.opensuse.org --debug run openSUSE:Leap:Micro:5.2 - TTM.Leap_Micro_5.2_Images: + scripts/totest-manager.py -A https://api.opensuse.org --debug run openSUSE:Leap:Micro:5.4 + TTM.Leap_Micro_5.4_Images: group: openSUSE.Checkers lock_behavior: unlockWhenFinished environment_variables: @@ -293,46 +293,4 @@ tasks: - script: |- install -D /home/go/config/openqa-client.conf /home/go/.config/openqa/client.conf - scripts/totest-manager.py -A https://api.opensuse.org --debug run openSUSE:Leap:Micro:5.2:Images - TTM.Leap_Micro_5.3: - group: openSUSE.Checkers - lock_behavior: unlockWhenFinished - environment_variables: - OSC_CONFIG: /home/go/config/oscrc-totest-manager - materials: - script: - git: https://github.com/openSUSE/openSUSE-release-tools.git - destination: scripts - timer: - spec: 0 */15 * ? * * - only_on_changes: false - stages: - - Run: - approval: manual - resources: - - staging-bot - tasks: - - script: |- - install -D /home/go/config/openqa-client.conf /home/go/.config/openqa/client.conf - scripts/totest-manager.py -A https://api.opensuse.org --debug run openSUSE:Leap:Micro:5.3 - TTM.Leap_Micro_5.3_Images: - group: openSUSE.Checkers - lock_behavior: unlockWhenFinished - environment_variables: - OSC_CONFIG: /home/go/config/oscrc-totest-manager - materials: - script: - git: https://github.com/openSUSE/openSUSE-release-tools.git - destination: scripts - timer: - spec: 0 */15 * ? * * - only_on_changes: false - stages: - - Run: - approval: manual - resources: - - staging-bot - tasks: - - script: |- - install -D /home/go/config/openqa-client.conf /home/go/.config/openqa/client.conf - scripts/totest-manager.py -A https://api.opensuse.org --debug run openSUSE:Leap:Micro:5.3:Images + scripts/totest-manager.py -A https://api.opensuse.org --debug run openSUSE:Leap:Micro:5.4:Images diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20230110.5f7806f/gocd/totestmanager.gocd.yaml.erb new/openSUSE-release-tools-20230210.1cf4e6b/gocd/totestmanager.gocd.yaml.erb --- old/openSUSE-release-tools-20230110.5f7806f/gocd/totestmanager.gocd.yaml.erb 2023-01-10 08:02:00.000000000 +0100 +++ new/openSUSE-release-tools-20230210.1cf4e6b/gocd/totestmanager.gocd.yaml.erb 2023-02-10 11:08:40.000000000 +0100 @@ -13,10 +13,8 @@ openSUSE:Leap:15.5:Images openSUSE:Leap:15.5:ARM openSUSE:Leap:15.5:ARM:Images - openSUSE:Leap:Micro:5.2 - openSUSE:Leap:Micro:5.2:Images - openSUSE:Leap:Micro:5.3 - openSUSE:Leap:Micro:5.3:Images + openSUSE:Leap:Micro:5.4 + openSUSE:Leap:Micro:5.4:Images ) -%> TTM.<%= project.gsub('openSUSE:', '').gsub(':', '_') %>: group: openSUSE.Checkers diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20230110.5f7806f/metrics/access/ingest.php new/openSUSE-release-tools-20230210.1cf4e6b/metrics/access/ingest.php --- old/openSUSE-release-tools-20230110.5f7806f/metrics/access/ingest.php 2023-01-10 08:02:00.000000000 +0100 +++ new/openSUSE-release-tools-20230210.1cf4e6b/metrics/access/ingest.php 2023-02-10 11:08:40.000000000 +0100 @@ -1,7 +1,7 @@ #!/usr/bin/php <?php -const REGEX_LINE = '/\S+ \S+ \S+ \[([^:]+:\d+:\d+:\d+ [^\]]+)\] "(\S+)(?: (\S+) \S+)?" (\S+) (\S+) "[^"]*" "[^"]*" .* size:(\S+) \S+(?: +"?(\S+-\S+-\S+-\S+-[^\s"]+|-)"? "?(dvd|ftp|mini|usb-[^"]*|livecd-[^"]*|appliance-?[^"]*|-)"?)?/'; +const REGEX_LINE = '/\S+ \S+ \S+ \[([^:]+:\d+:\d+:\d+ [^\]]+)\] "(\S+)(?: (\S+) \S+)?" (\S+) (\S+) "[^"]*" "[^"]*" .* (?:size:|want:- give:- \d+ )(\S+) \S+(?: +"?(\S+-\S+-\S+-\S+-[^\s"]+|-)"? "?(dvd|ftp|mini|usb-[^"]*|livecd-[^"]*|appliance-?[^"]*|-)"?)?/'; const REGEX_PRODUCT = '#/(?:(tumbleweed)|distribution/(?:leap/)?(\d+\.\d+)|openSUSE(?:_|:/)(?:leap(?:_|:/))?(factory|tumbleweed|\d+\.\d+))#i'; const REGEX_IMAGE = '#(?:/(?:iso|live)/[^/]+-(DVD|NET|GNOME-Live|KDE-Live|Rescue-CD|Kubic-DVD)-[^/]+\.iso(?:\.torrent)?|/jeos/[^/]+-(JeOS)\.[^/]+\.(?:qcow2|vhdx|vmdk|vmx)$)#'; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20230110.5f7806f/metrics.py new/openSUSE-release-tools-20230210.1cf4e6b/metrics.py --- old/openSUSE-release-tools-20230110.5f7806f/metrics.py 2023-01-10 08:02:00.000000000 +0100 +++ new/openSUSE-release-tools-20230210.1cf4e6b/metrics.py 2023-02-10 11:08:40.000000000 +0100 @@ -19,6 +19,7 @@ import osclib.conf from osclib.cache import Cache from osclib.conf import Config +from osclib.core import get_request_list_with_history from osclib.core import project_pseudometa_package from osclib.stagingapi import StagingAPI @@ -102,9 +103,8 @@ def ingest_requests(api, project): - requests = get_request_list(api.apiurl, project, - req_state=('accepted', 'revoked', 'superseded'), - withfullhistory=True) + requests = get_request_list_with_history( + api.apiurl, project, req_state=('accepted', 'revoked', 'superseded')) for request in requests: if request.find('action').get('type') not in ('submit', 'delete'): # TODO Handle non-stageable requests via different flow. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20230110.5f7806f/osc-staging.py new/openSUSE-release-tools-20230210.1cf4e6b/osc-staging.py --- old/openSUSE-release-tools-20230110.5f7806f/osc-staging.py 2023-01-10 08:02:00.000000000 +0100 +++ new/openSUSE-release-tools-20230210.1cf4e6b/osc-staging.py 2023-02-10 11:08:40.000000000 +0100 @@ -53,14 +53,15 @@ if project.startswith(('openSUSE', 'SUSE')): return project - if 'Factory' in project or 'openSUSE' in project: + if project.startswith('Factory'): return 'openSUSE:%s' % project - if 'SLE' in project: + if project.startswith('SLE') or project.startswith('ALP'): return 'SUSE:%s' % project # If we can't guess, raise a Warning - warnings.warn('%s project not recognized.' % project) + if (':' not in project): + warnings.warn('%s project not recognized.' % project) return project diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20230110.5f7806f/osclib/accept_command.py new/openSUSE-release-tools-20230210.1cf4e6b/osclib/accept_command.py --- old/openSUSE-release-tools-20230110.5f7806f/osclib/accept_command.py 2023-01-10 08:02:00.000000000 +0100 +++ new/openSUSE-release-tools-20230210.1cf4e6b/osclib/accept_command.py 2023-02-10 11:08:40.000000000 +0100 @@ -275,7 +275,6 @@ self.update_version_attribute(project, curr_version) - ports_prjs = ['PowerPC', 'ARM', 'zSystems', 'RISCV'] ports_prjs = ['ARM', 'LegacyX86', 'PowerPC', 'RISCV', 'zSystems'] for ports in ports_prjs: project = self.api.project + ':' + ports diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20230110.5f7806f/osclib/core.py new/openSUSE-release-tools-20230210.1cf4e6b/osclib/core.py --- old/openSUSE-release-tools-20230110.5f7806f/osclib/core.py 2023-01-10 08:02:00.000000000 +0100 +++ new/openSUSE-release-tools-20230210.1cf4e6b/osclib/core.py 2023-02-10 11:08:40.000000000 +0100 @@ -12,13 +12,13 @@ from osc.core import get_binarylist from osc.core import get_commitlog from osc.core import get_dependson -from osc.core import get_request_list from osc.core import http_DELETE from osc.core import http_GET from osc.core import http_POST from osc.core import http_PUT from osc.core import makeurl from osc.core import owner +from osc.core import search as osc_core_search from osc.core import Request from osc.core import Action from osc.core import show_package_meta @@ -56,10 +56,60 @@ return members -# osc uses xml.etree while we rely on lxml + +def get_request_list_with_history( + apiurl, project='', package='', req_who='', req_state=('new', 'review', 'declined'), + req_type=None, exclude_target_projects=[]): + """using an xpath search to get full request history. deprecated copy of old code from osc 0.x.""" + + import warnings + warnings.warn( + "get_request_list_with_history() uses an xpath search, which is slow. consider porting to" + "use osc.core.get_request_collection() instead.", + DeprecationWarning + ) + + xpath = '' + if 'all' not in req_state: + for state in req_state: + xpath = xpath_join(xpath, 'state/@name=\'%s\'' % state, inner=True) + if req_who: + xpath = xpath_join(xpath, '(state/@who=\'%(who)s\' or history/@who=\'%(who)s\')' % {'who': req_who}, op='and') + + # XXX: we cannot use the '|' in the xpath expression because it is not supported + # in the backend + todo = {} + if project: + todo['project'] = project + if package: + todo['package'] = package + for kind, val in todo.items(): + xpath_base = 'action/target/@%(kind)s=\'%(val)s\'' + if conf.config['include_request_from_project']: + xpath_base = xpath_join(xpath_base, 'action/source/@%(kind)s=\'%(val)s\'', op='or', inner=True) + xpath = xpath_join(xpath, xpath_base % {'kind': kind, 'val': val}, op='and', nexpr_parentheses=True) + + if req_type: + xpath = xpath_join(xpath, 'action/@type=\'%s\'' % req_type, op='and') + for i in exclude_target_projects: + xpath = xpath_join(xpath, '(not(action/target/@project=\'%(prj)s\'))' % {'prj': i}, op='and') + + if conf.config['verbose'] > 1: + print('[ %s ]' % xpath) + queries = {} + queries['request'] = {'withfullhistory': '1'} + res = osc_core_search(apiurl, queries=queries, request=xpath) + collection = res['request'] + requests = [] + for root in collection.findall('request'): + r = Request() + r.read(root) + requests.append(r) + return requests def convert_from_osc_et(xml): + """osc uses xml.etree while we rely on lxml.""" from xml.etree import ElementTree as oscET return ET.fromstring(oscET.tostring(xml)) @@ -1085,7 +1135,7 @@ # Disable including source project in get_request_list() query. before = conf.config['include_request_from_project'] conf.config['include_request_from_project'] = False - requests = get_request_list(apiurl, project, package, None, states, request_type, withfullhistory=True) + requests = get_request_list_with_history(apiurl, project, package, None, states, request_type) conf.config['include_request_from_project'] = before for request in requests: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20230110.5f7806f/publish_distro_conf/publish_leap-micro54.config new/openSUSE-release-tools-20230210.1cf4e6b/publish_distro_conf/publish_leap-micro54.config --- old/openSUSE-release-tools-20230110.5f7806f/publish_distro_conf/publish_leap-micro54.config 1970-01-01 01:00:00.000000000 +0100 +++ new/openSUSE-release-tools-20230210.1cf4e6b/publish_distro_conf/publish_leap-micro54.config 2023-02-10 11:08:40.000000000 +0100 @@ -0,0 +1,50 @@ +# vim:syntax=sh + +micro_version=5.4 +qu="" # empty string for GA, QuarterlyUpdate repins have -N in version +logfile_base=~/publish_logs/$micro_version/$(date -d "$date" '+%Y/%m/%d/%H%M') +synclog="${logfile_base}.log" +deletelog="${logfile_base}-deletes.log" +path="/distribution/leap-micro/$micro_version/product" +flavors=(DVD-x86_64 DVD-aarch64) + +get_version() { + # get expected version from first flavor + if [ -z "$version" ]; then + version=`echo $stage/iso/openSUSE-Leap-Micro-$micro_version$qu-$flavor-Build[0123456789]*.[0123456789]*-Media.iso` + version=${version##*Build} + version=${version%-*} + if [ -z "$version" ]; then + echo "no version found, exit." | tee -a $synclog + exit 1 + fi + fi +} + +get_iso() +{ + iso="openSUSE-Leap-Micro-$micro_version$qu-$flavor-Build$version-Media.iso" +} + +get_iso_link() +{ + link="$stage/iso/openSUSE-Leap-$micro_version$qu-$flavor-Current.iso" +} + +get_diff_url() +{ + url="$diff_url_base/$micro_version/diff/$version" +} + +get_mark_published_url() +{ + url="$diff_url_base/$micro_version/current" +} + +get_changes_filename() +{ + # ChangeLog files from obsgendiff are used instead + #changes="$changes_dir_base/jump/$jump_version/Changes.$version.txt" + : +# changes="$changes_dir_base/leap/$micro_version/Changes.$version.txt" +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20230110.5f7806f/publish_distro_conf/publish_leap-micro54_appliances.config new/openSUSE-release-tools-20230210.1cf4e6b/publish_distro_conf/publish_leap-micro54_appliances.config --- old/openSUSE-release-tools-20230110.5f7806f/publish_distro_conf/publish_leap-micro54_appliances.config 1970-01-01 01:00:00.000000000 +0100 +++ new/openSUSE-release-tools-20230210.1cf4e6b/publish_distro_conf/publish_leap-micro54_appliances.config 2023-02-10 11:08:40.000000000 +0100 @@ -0,0 +1,58 @@ +# vim:syntax=sh + +micro_version=5.4 +release=0 +logfile_base=~/publish_logs/$micro_version-appliances/$(date -d "$date" '+%Y/%m/%d/%H%M') +synclog="${logfile_base}.log" +deletelog="${logfile_base}-deletes.log" +path="/distribution/leap-micro/$micro_version/appliances" +flavors=(Default Default-RT Default-SelfInstall) +repos=() +extra_repos=() +isodir="" + +get_version() { + # get expected version from first flavor + if [ -z "$version" ]; then + version=`echo $stage/openSUSE-Leap-Micro.x86_64-$micro_version.$release-$flavor-Build*.raw.xz` + version=${version##*Build} + version=${version%.*} + if [ -z "$version" ]; then + echo "no version found, exit." | tee -a $synclog + exit 1 + fi + fi +} + +_get_iso() +{ + local snapshot="$1" + local suffix=xz +# echo "openSUSE-Leap-Micro-$micro_version-JeOS.x86_64-$micro_version.0-$flavor-$snapshot.$suffix" + echo "openSUSE-Leap-Micro.x86_64-$micro_version.$release-$flavor-$snapshot.$suffix" +} + +get_iso() +{ + iso=`_get_iso "Build$version"` +} + +get_iso_link() +{ + link="$stage/`_get_iso Current`" +} + +get_diff_url() +{ + url="" +} + +get_mark_published_url() +{ + url="" +} + +get_changes_filename() +{ + changes="" +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20230110.5f7806f/tests/OBSLocal.py new/openSUSE-release-tools-20230210.1cf4e6b/tests/OBSLocal.py --- old/openSUSE-release-tools-20230110.5f7806f/tests/OBSLocal.py 2023-01-10 08:02:00.000000000 +0100 +++ new/openSUSE-release-tools-20230210.1cf4e6b/tests/OBSLocal.py 2023-02-10 11:08:40.000000000 +0100 @@ -71,14 +71,18 @@ with open(OSCRC, 'w+') as f: f.write('\n'.join([ '[general]', - 'apiurl = http://api:3000', + 'apiurl = {}'.format(APIURL), 'http_debug = false', 'debug = false', 'cookiejar = {}'.format(OSCCOOKIEJAR), - '[http://api:3000]', + '[{}]'.format(APIURL), 'user = {}'.format(userid), 'pass = opensuse', 'email = {}@example.com'.format(userid), + # allow plain http even if it is insecure; we're testing after all + 'allow_http = 1', + # disable cert checking to allow self-signed certs + 'sslcertck = 0', '', ])) @@ -87,8 +91,7 @@ self.users.append(userid) self.oscrc(userid) - # Rather than modify userid and email, just re-parse entire config and - # reset authentication by clearing opener to avoid edge-cases. + # Rather than modify userid and email, just re-parse entire config self.oscParse() def osc_user_pop(self): @@ -96,16 +99,12 @@ self.osc_user(self.users.pop()) def oscParse(self): - # Otherwise, will stick to first user for a given apiurl. - conf._build_opener.last_opener = (None, None) - # Otherwise, will not re-parse same config file. if 'cp' in conf.get_configParser.__dict__: del conf.get_configParser.cp conf.get_config(override_conffile=OSCRC, - override_no_keyring=True, - override_no_gnome_keyring=True) + override_no_keyring=True) os.environ['OSC_CONFIG'] = OSCRC os.environ['OSRT_DISABLE_CACHE'] = 'true' @@ -310,8 +309,7 @@ memoize_session_reset() osc.core.conf.get_config(override_conffile=oscrc, - override_no_keyring=True, - override_no_gnome_keyring=True) + override_no_keyring=True) os.environ['OSC_CONFIG'] = oscrc if os.environ.get('OSC_DEBUG'): ++++++ openSUSE-release-tools.obsinfo ++++++ --- /var/tmp/diff_new_pack.nEgZGl/_old 2023-02-17 16:46:12.659270126 +0100 +++ /var/tmp/diff_new_pack.nEgZGl/_new 2023-02-17 16:46:12.667270172 +0100 @@ -1,5 +1,5 @@ name: openSUSE-release-tools -version: 20230110.5f7806f -mtime: 1673334120 -commit: 5f7806f1e084217fc0dc4878e5feeeeaf21cbe24 +version: 20230210.1cf4e6b +mtime: 1676023720 +commit: 1cf4e6bb02ea1352c8257b391e4c814aa03d8924