openSUSE Commits
Threads by month
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
May 2022
- 1 participants
- 2269 discussions
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-cligj for openSUSE:Factory checked in at 2022-04-28 23:07:52
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-cligj (Old)
and /work/SRC/openSUSE:Factory/.python-cligj.new.1538 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-cligj"
Thu Apr 28 23:07:52 2022 rev:2 rq:973538 version:0.7.2
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-cligj/python-cligj.changes 2019-03-10 09:36:21.436162133 +0100
+++ /work/SRC/openSUSE:Factory/.python-cligj.new.1538/python-cligj.changes 2022-04-28 23:07:56.736686031 +0200
@@ -1,0 +2,17 @@
+Mon Apr 25 13:47:41 UTC 2022 - Stefan Br��ns <stefan.bruens(a)rwth-aachen.de>
+
+- Update to 0.7.2:
+ * Permit use with click versions 8 and higher.
+- Update to 0.7.1:
+ * Future deprecation warning added in 0.7.0 has been changed.
+ Cligj version 1.0.0 will support Python versions >= 3.6.
+- Update to 0.7.0:
+ * Warn about deprecation of support for Python versions < 3.7
+ in 1.0.0 (#33).
+ * Warn about future change in --sequence default when the option
+ is used (#31).
+- Update to 0.6.0:
+ * Always use `encoding='utf-8'` when opening input GeoJSON (#27).
+ * Improve docstrings (#22).
+
+-------------------------------------------------------------------
Old:
----
cligj-0.5.0.tar.gz
New:
----
cligj-0.7.2.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-cligj.spec ++++++
--- /var/tmp/diff_new_pack.nCHSqc/_old 2022-04-28 23:07:57.216686554 +0200
+++ /var/tmp/diff_new_pack.nCHSqc/_new 2022-04-28 23:07:57.220686558 +0200
@@ -1,7 +1,7 @@
#
# spec file for package python-cligj
#
-# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2022 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -13,15 +13,16 @@
# published by the Open Source Initiative.
# Please submit bugfixes or comments via https://bugs.opensuse.org/
+#
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
Name: python-cligj
-Version: 0.5.0
+Version: 0.7.2
Release: 0
License: BSD-3-Clause
Summary: Click params for commmand line interfaces to GeoJSON
-Url: https://github.com/mapbox/cligj
+URL: https://github.com/mapbox/cligj
Group: Development/Languages/Python
# pypi source lack license and tests
Source: https://github.com/mapbox/cligj/archive/%{version}.tar.gz#/cligj-%{version}…
@@ -35,7 +36,6 @@
Requires: python-click
BuildArch: noarch
-
%python_subpackages
%description
++++++ cligj-0.5.0.tar.gz -> cligj-0.7.2.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cligj-0.5.0/.travis.yml new/cligj-0.7.2/.travis.yml
--- old/cligj-0.5.0/.travis.yml 2018-09-26 17:58:55.000000000 +0200
+++ new/cligj-0.7.2/.travis.yml 2021-05-28 23:21:08.000000000 +0200
@@ -1,10 +1,9 @@
sudo: false
language: python
python:
- - "2.7"
- - "3.3"
- - "3.4"
- - "3.5"
+ - "3.6"
+ - "3.7"
+ - "3.8"
install:
- "pip install coveralls"
- "pip install -e .[test]"
@@ -17,4 +16,4 @@
tags: true
provider: pypi
distributions: "sdist bdist_wheel"
- user: mapboxci
+ user: __token__
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cligj-0.5.0/CHANGES.txt new/cligj-0.7.2/CHANGES.txt
--- old/cligj-0.5.0/CHANGES.txt 2018-09-26 17:58:55.000000000 +0200
+++ new/cligj-0.7.2/CHANGES.txt 2021-05-28 23:21:08.000000000 +0200
@@ -1,6 +1,36 @@
Changes
=======
+0.7.1 (2010-11-20)
+------------------
+
+- Future deprecation warning added in 0.7.0 has been changed. Cligj version
+ 1.0.0 will support Python versions >= 3.6.
+
+0.7.0 (2010-10-21)
+------------------
+
+- Warn about deprecation of support for Python versions < 3.7 in 1.0.0 (#33).
+- Warn about future change in --sequence default when the option is used (#31).
+
+0.6.0 (2020-10-19)
+------------------
+
+No changes since 0.6b1.
+
+0.6b1 (2020-10-14)
+------------------
+
+Future changes:
+
+- Feature sequences, not collections, will be the default form of output in
+ version 1.0 (#20).
+
+Bug fixes:
+
+- Always use `encoding='utf-8'` when opening input GeoJSON (#27).
+- Improve docstrings (#22).
+
0.5.0 (2018-09-26)
------------------
@@ -20,7 +50,7 @@
0.3.0 (2015-08-12)
------------------
-- Deprecation of the cligj.plugins module (#6). Please switch to the
+- Deprecation of the cligj.plugins module (#6). Please switch to the
click-plugins module: https://github.com/click-contrib/click-plugins. The
cligj.plugins module will be removed from cligj at version 1.0.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cligj-0.5.0/MANIFEST.in new/cligj-0.7.2/MANIFEST.in
--- old/cligj-0.5.0/MANIFEST.in 1970-01-01 01:00:00.000000000 +0100
+++ new/cligj-0.7.2/MANIFEST.in 2021-05-28 23:21:08.000000000 +0200
@@ -0,0 +1,4 @@
+include CHANGES.txt
+include LICENSE
+
+graft tests
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cligj-0.5.0/README.rst new/cligj-0.7.2/README.rst
--- old/cligj-0.5.0/README.rst 2018-09-26 17:58:55.000000000 +0200
+++ new/cligj-0.7.2/README.rst 2021-05-28 23:21:08.000000000 +0200
@@ -1,8 +1,8 @@
cligj
======
-.. image:: https://travis-ci.org/mapbox/cligj.svg
- :target: https://travis-ci.org/mapbox/cligj
+.. image:: https://travis-ci.com/mapbox/cligj.svg
+ :target: https://travis-ci.com/mapbox/cligj
.. image:: https://coveralls.io/repos/mapbox/cligj/badge.png?branch=master
:target: https://coveralls.io/r/mapbox/cligj?branch=master
@@ -10,7 +10,7 @@
Common arguments and options for GeoJSON processing commands, using Click.
`cligj` is for Python developers who create command line interfaces for geospatial data.
-`cligj` allows you to quickly build consistent, well-tested and interoperable CLIs for handling GeoJSON.
+`cligj` allows you to quickly build consistent, well-tested and interoperable CLIs for handling GeoJSON.
Arguments
@@ -76,11 +76,15 @@
reads and writes GeoJSON expects a text containing a single feature collection,
that's the default, and a LF-delimited sequence of texts containing one GeoJSON
feature each is a feature that is turned on using the ``--sequence`` option.
-To write sequences of feature texts that conform to the `JSON Text Sequences
-proposed standard
-<http://tools.ietf.org/html/draft-ietf-json-text-sequence-13>`__ (and might
-contain pretty-printed JSON) with the ASCII Record Separator (0x1e) as
-a delimiter, use the ``--rs`` option
+To write sequences of feature texts that conform to the `GeoJSON Text Sequences
+standard <https://tools.ietf.org/html/rfc8142>`__ (and might contain
+pretty-printed JSON) with the ASCII Record Separator (0x1e) as a delimiter, use
+the ``--rs`` option
+
+.. warning:: Future change warning
+ GeoJSON sequences (`--sequence`), not collections (`--no-sequence`), will be
+ the default in version 1.0.0.
+
.. code-block:: python
@@ -125,7 +129,6 @@
False).
--help Show this message and exit.
-
And can be used like this
.. code-block:: console
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cligj-0.5.0/cligj/__init__.py new/cligj-0.7.2/cligj/__init__.py
--- old/cligj-0.5.0/cligj/__init__.py 2018-09-26 17:58:55.000000000 +0200
+++ new/cligj-0.7.2/cligj/__init__.py 2021-05-28 23:21:08.000000000 +0200
@@ -1,12 +1,21 @@
-# cligj
+"""cligj
-# Shared arguments and options.
+A package of arguments, options, and parsers for the Python GeoJSON
+ecosystem.
+"""
+
+import sys
+from warnings import warn
import click
from .features import normalize_feature_inputs
-# Arguments.
+__version__ = "0.7.2"
+
+if sys.version_info < (3, 6):
+ warn("cligj 1.0.0 will require Python >= 3.6", FutureWarning)
+
# Multiple input files.
files_in_arg = click.argument(
@@ -97,8 +106,14 @@
'--sequence/--no-sequence',
default=False,
help="Write a LF-delimited sequence of texts containing individual "
- "objects or write a single JSON text containing a feature "
- "collection object (the default).")
+ "objects or write a single JSON text containing a feature "
+ "collection object (the default).",
+ callback=lambda ctx, param, value: warn(
+ "Sequences of Features, not FeatureCollections, will be the default in version 1.0.0",
+ FutureWarning,
+ )
+ or value,
+)
use_rs_opt = click.option(
'--rs/--no-rs',
@@ -109,8 +124,8 @@
"(default is False).")
-# GeoJSON output mode option.
def geojson_type_collection_opt(default=False):
+ """GeoJSON FeatureCollection output mode"""
return click.option(
'--collection',
'geojson_type',
@@ -120,6 +135,7 @@
def geojson_type_feature_opt(default=False):
+ """GeoJSON Feature or Feature sequence output mode"""
return click.option(
'--feature',
'geojson_type',
@@ -129,6 +145,7 @@
def geojson_type_bbox_opt(default=False):
+ """GeoJSON bbox output mode"""
return click.option(
'--bbox',
'geojson_type',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cligj-0.5.0/cligj/features.py new/cligj-0.7.2/cligj/features.py
--- old/cligj-0.5.0/cligj/features.py 2018-09-26 17:58:55.000000000 +0200
+++ new/cligj-0.7.2/cligj/features.py 2021-05-28 23:21:08.000000000 +0200
@@ -1,3 +1,5 @@
+"""Feature parsing and normalization"""
+
from itertools import chain
import json
import re
@@ -23,10 +25,16 @@
"[lng, lat]", or "lng, lat", or "lng lat".
If no value is provided, features will be read from stdin.
+
+ Yields
+ ------
+ Mapping
+ A GeoJSON Feature represented by a Python mapping
+
"""
for feature_like in value or ('-',):
try:
- with click.open_file(feature_like) as src:
+ with click.open_file(feature_like, encoding="utf-8") as src:
for feature in iter_features(iter(src)):
yield feature
except IOError:
@@ -55,6 +63,12 @@
A function that will be applied to each extracted feature. It
takes a feature object and may return a replacement feature or
None -- in which case iter_features does not yield.
+
+ Yields
+ ------
+ Mapping
+ A GeoJSON Feature represented by a Python mapping
+
"""
func = func or (lambda x: x)
first_line = next(geojsonfile)
@@ -136,9 +150,20 @@
def to_feature(obj):
- """Takes a feature or a geometry
- returns feature verbatim or
- wraps geom in a feature with empty properties
+ """Converts an object to a GeoJSON Feature
+
+ Returns feature verbatim or wraps geom in a feature with empty
+ properties.
+
+ Raises
+ ------
+ ValueError
+
+ Returns
+ -------
+ Mapping
+ A GeoJSON Feature represented by a Python mapping
+
"""
if obj['type'] == 'Feature':
return obj
@@ -177,13 +202,13 @@
an iterable of objects with a geo interface and
normalizes it to the former."""
for obj in feature_objs:
- if hasattr(obj, "__geo_interface__") and \
- 'type' in obj.__geo_interface__.keys() and \
- obj.__geo_interface__['type'] == 'Feature':
+ if (
+ hasattr(obj, "__geo_interface__")
+ and "type" in obj.__geo_interface__.keys()
+ and obj.__geo_interface__["type"] == "Feature"
+ ):
yield obj.__geo_interface__
- elif isinstance(obj, dict) and 'type' in obj and \
- obj['type'] == 'Feature':
+ elif isinstance(obj, dict) and "type" in obj and obj["type"] == "Feature":
yield obj
else:
- raise ValueError("Did not recognize object {0}"
- "as GeoJSON Feature".format(obj))
+ raise ValueError("Did not recognize object as GeoJSON Feature")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cligj-0.5.0/setup.cfg new/cligj-0.7.2/setup.cfg
--- old/cligj-0.5.0/setup.cfg 1970-01-01 01:00:00.000000000 +0100
+++ new/cligj-0.7.2/setup.cfg 2021-05-28 23:21:08.000000000 +0200
@@ -0,0 +1,2 @@
+[metadata]
+license_file = LICENSE
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cligj-0.5.0/setup.py new/cligj-0.7.2/setup.py
--- old/cligj-0.5.0/setup.py 2018-09-26 17:58:55.000000000 +0200
+++ new/cligj-0.7.2/setup.py 2021-05-28 23:21:08.000000000 +0200
@@ -1,28 +1,32 @@
from codecs import open as codecs_open
+
from setuptools import setup, find_packages
+with open("cligj/__init__.py") as f:
+ for line in f:
+ if "__version__" in line:
+ version = line.split("=")[1].strip().strip('"').strip("'")
+ continue
-# Get the long description from the relevant file
with codecs_open('README.rst', encoding='utf-8') as f:
long_description = f.read()
-setup(name='cligj',
- version='0.5.0',
- description=u"Click params for commmand line interfaces to GeoJSON",
- long_description=long_description,
- classifiers=[],
- keywords='',
- author=u"Sean Gillies",
- author_email='sean(a)mapbox.com',
- url='https://github.com/mapbox/cligj',
- license='BSD',
- packages=find_packages(exclude=['ez_setup', 'examples', 'tests']),
- include_package_data=True,
- zip_safe=False,
- install_requires=[
- 'click >= 4.0, < 8'
- ],
- extras_require={
- 'test': ['pytest-cov'],
- })
+setup(
+ name="cligj",
+ version=version,
+ description=u"Click params for commmand line interfaces to GeoJSON",
+ long_description=long_description,
+ classifiers=[],
+ keywords="",
+ author=u"Sean Gillies",
+ author_email="sean(a)mapbox.com",
+ url="https://github.com/mapbox/cligj",
+ license="BSD",
+ packages=find_packages(exclude=["ez_setup", "examples", "tests"]),
+ include_package_data=True,
+ zip_safe=False,
+ python_requires=">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, <4",
+ install_requires=["click >= 4.0"],
+ extras_require={"test": ["pytest-cov"],},
+)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cligj-0.5.0/tests/test_cli.py new/cligj-0.7.2/tests/test_cli.py
--- old/cligj-0.5.0/tests/test_cli.py 2018-09-26 17:58:55.000000000 +0200
+++ new/cligj-0.7.2/tests/test_cli.py 2021-05-28 23:21:08.000000000 +0200
@@ -1,7 +1,9 @@
import os
import os.path
+import sys
import click
+import pytest
import cligj
@@ -155,62 +157,67 @@
assert result.output.splitlines() == ['geographic']
-def test_sequence(runner):
+(a)pytest.mark.filterwarnings("ignore")
+(a)pytest.mark.parametrize(
+ ("opt", "val"),
+ [
+ ("--sequence", True),
+ ("--no-sequence", False),
+ (None, cligj.__version__.startswith("1.0")),
+ ],
+)
+def test_sequence(runner, opt, val):
+ """True becomes the default in 1.0"""
@click.command()
@cligj.sequence_opt
def cmd(sequence):
- click.echo("%s" % sequence)
+ click.echo(str(sequence))
- result = runner.invoke(cmd)
+ result = runner.invoke(cmd, [opt] if opt is not None else [])
assert not result.exception
- assert result.output.splitlines() == ['False']
+ assert result.output.splitlines() == [str(val)]
- result = runner.invoke(cmd, ['--sequence'])
- assert not result.exception
- assert result.output.splitlines() == ['True']
- result = runner.invoke(cmd, ['--no-sequence'])
- assert not result.exception
- assert result.output.splitlines() == ['False']
+(a)pytest.mark.skipif(sys.version_info < (3,), reason="Requires Python 3")
+(a)pytest.mark.xfail(cligj.__version__.startswith("1.0"), reason="No warning in 1.0")
+def test_sequence_warns(runner):
+ """Warn about --sequence until 1.0"""
+ @click.command()
+ @cligj.sequence_opt
+ def cmd(sequence):
+ click.echo(str(sequence))
+
+ with pytest.warns(FutureWarning):
+ result = runner.invoke(cmd, ["--sequence"])
-def test_sequence_rs(runner):
+(a)pytest.mark.filterwarnings("ignore")
+(a)pytest.mark.parametrize(("opt", "val"), [("--rs", True), (None, False)])
+def test_sequence_rs(runner, opt, val):
@click.command()
@cligj.sequence_opt
@cligj.use_rs_opt
def cmd(sequence, use_rs):
- click.echo("%s" % sequence)
- click.echo("%s" % use_rs)
+ click.echo(str(sequence))
+ click.echo(str(use_rs))
- result = runner.invoke(cmd, ['--sequence', '--rs'])
+ result = runner.invoke(cmd, ["--sequence"] + ([opt] if opt is not None else []))
assert not result.exception
- assert result.output.splitlines() == ['True', 'True']
-
- result = runner.invoke(cmd, ['--sequence'])
- assert not result.exception
- assert result.output.splitlines() == ['True', 'False']
+ assert result.output.splitlines() == ["True", str(val)]
-def test_geojson_type(runner):
+(a)pytest.mark.parametrize(
+ ("opt", "val"),
+ [("--collection", "collection"), ("--feature", "feature"), ("--bbox", "bbox")],
+)
+def test_geojson_type(runner, opt, val):
@click.command()
@cligj.geojson_type_collection_opt(True)
@cligj.geojson_type_feature_opt(False)
@cligj.geojson_type_bbox_opt(False)
def cmd(geojson_type):
- click.echo("%s" % geojson_type)
-
- result = runner.invoke(cmd)
- assert not result.exception
- assert result.output.splitlines() == ['collection']
-
- result = runner.invoke(cmd, ['--collection'])
- assert not result.exception
- assert result.output.splitlines() == ['collection']
-
- result = runner.invoke(cmd, ['--feature'])
- assert not result.exception
- assert result.output.splitlines() == ['feature']
+ click.echo(str(geojson_type))
- result = runner.invoke(cmd, ['--bbox'])
+ result = runner.invoke(cmd, [opt])
assert not result.exception
- assert result.output.splitlines() == ['bbox']
+ assert result.output.splitlines() == [val]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cligj-0.5.0/tests/twopoints.geojson new/cligj-0.7.2/tests/twopoints.geojson
--- old/cligj-0.5.0/tests/twopoints.geojson 2018-09-26 17:58:55.000000000 +0200
+++ new/cligj-0.7.2/tests/twopoints.geojson 2021-05-28 23:21:08.000000000 +0200
@@ -1 +1 @@
-{"features": [{"bbox": [-122.9292140099711, 45.37948199034149, -122.44106199104115, 45.858097009742835], "center": [-122.7282, 45.5801], "context": [{"id": "postcode.2503633822", "text": "97203"}, {"id": "region.3470299826", "text": "Oregon"}, {"id": "country.4150104525", "short_code": "us", "text": "United States"}], "geometry": {"coordinates": [-122.7282, 45.5801], "type": "Point"}, "id": "place.42767", "place_name": "Portland, Oregon, United States", "properties": {}, "relevance": 0.999, "text": "Portland", "type": "Feature"}, {"bbox": [-121.9779540096568, 43.74737999114854, -120.74788099000016, 44.32812500969035], "center": [-121.3153, 44.0582], "context": [{"id": "postcode.3332732485", "text": "97701"}, {"id": "region.3470299826", "text": "Oregon"}, {"id": "country.4150104525", "short_code": "us", "text": "United States"}], "geometry": {"coordinates": [-121.3153, 44.0582], "type": "Point"}, "id": "place.3965", "place_name": "Bend, Oregon, United States", "properties": {}, "rele
vance": 0.999, "text": "Bend", "type": "Feature"}], "type": "FeatureCollection"}
+{"features": [{"bbox": [-122.9292140099711, 45.37948199034149, -122.44106199104115, 45.858097009742835], "center": [-122.7282, 45.5801], "context": [{"id": "postcode.2503633822", "text": "97203"}, {"id": "region.3470299826", "text": "Oregon"}, {"id": "country.4150104525", "short_code": "us", "text": "United States"}], "geometry": {"coordinates": [-122.7282, 45.5801], "type": "Point"}, "id": "place.42767", "place_name": "Portland, Oregon, United States", "properties": {}, "relevance": 0.999, "text": "Portland", "type": "Feature"}, {"bbox": [-121.9779540096568, 43.74737999114854, -120.74788099000016, 44.32812500969035], "center": [-121.3153, 44.0582], "context": [{"id": "postcode.3332732485", "text": "97701"}, {"id": "region.3470299826", "text": "Oregon"}, {"id": "country.4150104525", "short_code": "us", "text": "United States"}], "geometry": {"coordinates": [-121.3153, 44.0582], "type": "Point"}, "id": "place.3965", "place_name": "Bend, ����regon, United States", "properties": {}, "r
elevance": 0.999, "text": "Bend", "type": "Feature"}], "type": "FeatureCollection"}
2
1
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package 000product for openSUSE:Factory checked in at 2022-05-31 23:24:45
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/000product (Old)
and /work/SRC/openSUSE:Factory/.000product.new.1548 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "000product"
Tue May 31 23:24:45 2022 rev:3235 rq: version:unknown
Changes:
--------
New Changes file:
NO CHANGES FILE!!!
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ MicroOS-dvd5-dvd-x86_64.kiwi ++++++
--- /var/tmp/diff_new_pack.6D3gFO/_old 2022-05-31 23:24:50.511873492 +0200
+++ /var/tmp/diff_new_pack.6D3gFO/_new 2022-05-31 23:24:50.515873496 +0200
@@ -1,4 +1,4 @@
-<image name="OBS__MicroOS___20220530" schemaversion="4.1">
+<image name="OBS__MicroOS___20220531" schemaversion="4.1">
<description type="system">
<author>The SUSE Team</author>
<contact>build(a)opensuse.org</contact>
@@ -35,11 +35,11 @@
<productvar name="SEPARATE_MEDIA">true</productvar>
<productvar name="SHA1OPT">-x -2</productvar>
<productvar name="VENDOR">openSUSE</productvar>
- <productvar name="VERSION">20220530</productvar>
+ <productvar name="VERSION">20220531</productvar>
<productinfo name="CONTENTSTYLE">11</productinfo>
- <productinfo name="DISTRO">cpe:/o:opensuse:microos:20220530,openSUSE MicroOS</productinfo>
+ <productinfo name="DISTRO">cpe:/o:opensuse:microos:20220531,openSUSE MicroOS</productinfo>
<productinfo name="LINGUAS">en_US </productinfo>
- <productinfo name="REPOID">obsproduct://build.opensuse.org/openSUSE:Factory/MicroOS/20220530/x86_64</productinfo>
+ <productinfo name="REPOID">obsproduct://build.opensuse.org/openSUSE:Factory/MicroOS/20220531/x86_64</productinfo>
<productinfo name="VENDOR">openSUSE</productinfo>
<productoption name="INI_DIR">/usr/share/kiwi/modules/plugins/tumbleweed</productoption>
<productoption name="PLUGIN_DIR">/usr/share/kiwi/modules/plugins/tumbleweed</productoption>
@@ -1297,6 +1297,7 @@
<repopackage name="polkit" arch="x86_64"/>
<repopackage name="polkit-default-privs" arch="x86_64"/>
<repopackage name="polkit-kde-agent-5" arch="x86_64"/>
+ <repopackage name="power-profiles-daemon" arch="x86_64"/>
<repopackage name="powerdevil5" arch="x86_64"/>
<repopackage name="prison-qt5-imports" arch="x86_64"/>
<repopackage name="procps" arch="x86_64"/>
++++++ openSUSE-Addon-NonOss-ftp-ftp-i586_x86_64.kiwi ++++++
--- /var/tmp/diff_new_pack.6D3gFO/_old 2022-05-31 23:24:50.539873514 +0200
+++ /var/tmp/diff_new_pack.6D3gFO/_new 2022-05-31 23:24:50.543873517 +0200
@@ -1,4 +1,4 @@
-<image name="OBS__openSUSE-Addon-NonOss___20220530" schemaversion="4.1">
+<image name="OBS__openSUSE-Addon-NonOss___20220531" schemaversion="4.1">
<description type="system">
<author>The SUSE Team</author>
<contact>build(a)opensuse.org</contact>
@@ -36,11 +36,11 @@
<productvar name="SEPARATE_MEDIA">true</productvar>
<productvar name="SHA1OPT">-x -2</productvar>
<productvar name="VENDOR">openSUSE</productvar>
- <productvar name="VERSION">20220530</productvar>
+ <productvar name="VERSION">20220531</productvar>
<productinfo name="CONTENTSTYLE">11</productinfo>
- <productinfo name="DISTRO">cpe:/o:opensuse:opensuse-addon-nonoss:20220530,openSUSE NonOSS Addon</productinfo>
+ <productinfo name="DISTRO">cpe:/o:opensuse:opensuse-addon-nonoss:20220531,openSUSE NonOSS Addon</productinfo>
<productinfo name="LINGUAS">af ar be_BY bg br ca cy el et ga gl gu_IN he hi_IN hr ka km ko lt mk nn pa_IN rw sk sl sr_CS ss st tg th tr uk ve vi xh zu </productinfo>
- <productinfo name="REPOID">obsproduct://build.opensuse.org/openSUSE:Factory/openSUSE-Addon-NonOss/2022… obsproduct://build.opensuse.org/openSUSE:Factory/openSUSE-Addon-NonOss/2022…</productinfo>
+ <productinfo name="REPOID">obsproduct://build.opensuse.org/openSUSE:Factory/openSUSE-Addon-NonOss/2022… obsproduct://build.opensuse.org/openSUSE:Factory/openSUSE-Addon-NonOss/2022…</productinfo>
<productinfo name="VENDOR">openSUSE</productinfo>
<productoption name="INI_DIR">/usr/share/kiwi/modules/plugins/tumbleweed</productoption>
<productoption name="PLUGIN_DIR">/usr/share/kiwi/modules/plugins/tumbleweed</productoption>
++++++ openSUSE-cd-mini-i586.kiwi ++++++
--- /var/tmp/diff_new_pack.6D3gFO/_old 2022-05-31 23:24:50.559873530 +0200
+++ /var/tmp/diff_new_pack.6D3gFO/_new 2022-05-31 23:24:50.563873533 +0200
@@ -1,4 +1,4 @@
-<image name="OBS__openSUSE___20220530" schemaversion="4.1">
+<image name="OBS__openSUSE___20220531" schemaversion="4.1">
<description type="system">
<author>The SUSE Team</author>
<contact>build(a)opensuse.org</contact>
@@ -32,11 +32,11 @@
<productvar name="SEPARATE_MEDIA">true</productvar>
<productvar name="SHA1OPT">-x -2</productvar>
<productvar name="VENDOR">openSUSE</productvar>
- <productvar name="VERSION">20220530</productvar>
+ <productvar name="VERSION">20220531</productvar>
<productinfo name="CONTENTSTYLE">11</productinfo>
- <productinfo name="DISTRO">cpe:/o:opensuse:opensuse:20220530,openSUSE Tumbleweed</productinfo>
+ <productinfo name="DISTRO">cpe:/o:opensuse:opensuse:20220531,openSUSE Tumbleweed</productinfo>
<productinfo name="LINGUAS">cs da de el en en_GB en_US es fr hu it ja pl pt pt_BR ru zh zh_CN zh_TW </productinfo>
- <productinfo name="REPOID">obsproduct://build.opensuse.org/openSUSE:Factory/openSUSE/20220530/i586</productinfo>
+ <productinfo name="REPOID">obsproduct://build.opensuse.org/openSUSE:Factory/openSUSE/20220531/i586</productinfo>
<productinfo name="VENDOR">openSUSE</productinfo>
<productoption name="INI_DIR">/usr/share/kiwi/modules/plugins/tumbleweed</productoption>
<productoption name="PLUGIN_DIR">/usr/share/kiwi/modules/plugins/tumbleweed</productoption>
++++++ openSUSE-cd-mini-x86_64.kiwi ++++++
--- /var/tmp/diff_new_pack.6D3gFO/_old 2022-05-31 23:24:50.579873545 +0200
+++ /var/tmp/diff_new_pack.6D3gFO/_new 2022-05-31 23:24:50.579873545 +0200
@@ -1,4 +1,4 @@
-<image name="OBS__openSUSE___20220530" schemaversion="4.1">
+<image name="OBS__openSUSE___20220531" schemaversion="4.1">
<description type="system">
<author>The SUSE Team</author>
<contact>build(a)opensuse.org</contact>
@@ -35,11 +35,11 @@
<productvar name="SEPARATE_MEDIA">true</productvar>
<productvar name="SHA1OPT">-x -2</productvar>
<productvar name="VENDOR">openSUSE</productvar>
- <productvar name="VERSION">20220530</productvar>
+ <productvar name="VERSION">20220531</productvar>
<productinfo name="CONTENTSTYLE">11</productinfo>
- <productinfo name="DISTRO">cpe:/o:opensuse:opensuse:20220530,openSUSE Tumbleweed</productinfo>
+ <productinfo name="DISTRO">cpe:/o:opensuse:opensuse:20220531,openSUSE Tumbleweed</productinfo>
<productinfo name="LINGUAS">cs da de el en en_GB en_US es fr hu it ja pl pt pt_BR ru zh zh_CN zh_TW </productinfo>
- <productinfo name="REPOID">obsproduct://build.opensuse.org/openSUSE:Factory/openSUSE/20220530/x86_64</productinfo>
+ <productinfo name="REPOID">obsproduct://build.opensuse.org/openSUSE:Factory/openSUSE/20220531/x86_64</productinfo>
<productinfo name="VENDOR">openSUSE</productinfo>
<productoption name="INI_DIR">/usr/share/kiwi/modules/plugins/tumbleweed</productoption>
<productoption name="PLUGIN_DIR">/usr/share/kiwi/modules/plugins/tumbleweed</productoption>
++++++ openSUSE-dvd5-dvd-i586.kiwi ++++++
--- /var/tmp/diff_new_pack.6D3gFO/_old 2022-05-31 23:24:50.599873560 +0200
+++ /var/tmp/diff_new_pack.6D3gFO/_new 2022-05-31 23:24:50.603873564 +0200
@@ -1,4 +1,4 @@
-<image name="OBS__openSUSE___20220530" schemaversion="4.1">
+<image name="OBS__openSUSE___20220531" schemaversion="4.1">
<description type="system">
<author>The SUSE Team</author>
<contact>build(a)opensuse.org</contact>
@@ -32,11 +32,11 @@
<productvar name="SEPARATE_MEDIA">true</productvar>
<productvar name="SHA1OPT">-x -2</productvar>
<productvar name="VENDOR">openSUSE</productvar>
- <productvar name="VERSION">20220530</productvar>
+ <productvar name="VERSION">20220531</productvar>
<productinfo name="CONTENTSTYLE">11</productinfo>
- <productinfo name="DISTRO">cpe:/o:opensuse:opensuse:20220530,openSUSE Tumbleweed</productinfo>
+ <productinfo name="DISTRO">cpe:/o:opensuse:opensuse:20220531,openSUSE Tumbleweed</productinfo>
<productinfo name="LINGUAS">cs da de el en en_GB en_US es fr hu it ja pl pt pt_BR ru zh zh_CN zh_TW </productinfo>
- <productinfo name="REPOID">obsproduct://build.opensuse.org/openSUSE:Factory/openSUSE/20220530/i586</productinfo>
+ <productinfo name="REPOID">obsproduct://build.opensuse.org/openSUSE:Factory/openSUSE/20220531/i586</productinfo>
<productinfo name="VENDOR">openSUSE</productinfo>
<productoption name="INI_DIR">/usr/share/kiwi/modules/plugins/tumbleweed</productoption>
<productoption name="PLUGIN_DIR">/usr/share/kiwi/modules/plugins/tumbleweed</productoption>
@@ -539,6 +539,7 @@
<repopackage name="gdb"/>
<repopackage name="gdbm-lang"/>
<repopackage name="gdk-pixbuf-lang"/>
+ <repopackage name="gdk-pixbuf-loader-libheif"/>
<repopackage name="gdk-pixbuf-loader-rsvg"/>
<repopackage name="gdk-pixbuf-query-loaders"/>
<repopackage name="gdk-pixbuf-thumbnailer"/>
++++++ openSUSE-dvd5-dvd-x86_64.kiwi ++++++
--- /var/tmp/diff_new_pack.6D3gFO/_old 2022-05-31 23:24:50.647873598 +0200
+++ /var/tmp/diff_new_pack.6D3gFO/_new 2022-05-31 23:24:50.651873600 +0200
@@ -1,4 +1,4 @@
-<image name="OBS__openSUSE___20220530" schemaversion="4.1">
+<image name="OBS__openSUSE___20220531" schemaversion="4.1">
<description type="system">
<author>The SUSE Team</author>
<contact>build(a)opensuse.org</contact>
@@ -35,11 +35,11 @@
<productvar name="SEPARATE_MEDIA">true</productvar>
<productvar name="SHA1OPT">-x -2</productvar>
<productvar name="VENDOR">openSUSE</productvar>
- <productvar name="VERSION">20220530</productvar>
+ <productvar name="VERSION">20220531</productvar>
<productinfo name="CONTENTSTYLE">11</productinfo>
- <productinfo name="DISTRO">cpe:/o:opensuse:opensuse:20220530,openSUSE Tumbleweed</productinfo>
+ <productinfo name="DISTRO">cpe:/o:opensuse:opensuse:20220531,openSUSE Tumbleweed</productinfo>
<productinfo name="LINGUAS">cs da de el en en_GB en_US es fr hu it ja pl pt pt_BR ru zh zh_CN zh_TW </productinfo>
- <productinfo name="REPOID">obsproduct://build.opensuse.org/openSUSE:Factory/openSUSE/20220530/x86_64</productinfo>
+ <productinfo name="REPOID">obsproduct://build.opensuse.org/openSUSE:Factory/openSUSE/20220531/x86_64</productinfo>
<productinfo name="VENDOR">openSUSE</productinfo>
<productoption name="INI_DIR">/usr/share/kiwi/modules/plugins/tumbleweed</productoption>
<productoption name="PLUGIN_DIR">/usr/share/kiwi/modules/plugins/tumbleweed</productoption>
@@ -572,6 +572,7 @@
<repopackage name="gdb"/>
<repopackage name="gdbm-lang"/>
<repopackage name="gdk-pixbuf-lang"/>
+ <repopackage name="gdk-pixbuf-loader-libheif"/>
<repopackage name="gdk-pixbuf-loader-rsvg"/>
<repopackage name="gdk-pixbuf-query-loaders"/>
<repopackage name="gdk-pixbuf-query-loaders-32bit" arch="x86_64"/>
++++++ openSUSE-ftp-ftp-i586_x86_64.kiwi ++++++
--- /var/tmp/diff_new_pack.6D3gFO/_old 2022-05-31 23:24:50.683873625 +0200
+++ /var/tmp/diff_new_pack.6D3gFO/_new 2022-05-31 23:24:50.687873628 +0200
@@ -1,4 +1,4 @@
-<image name="OBS__openSUSE___20220530" schemaversion="4.1">
+<image name="OBS__openSUSE___20220531" schemaversion="4.1">
<description type="system">
<author>The SUSE Team</author>
<contact>build(a)opensuse.org</contact>
@@ -24,7 +24,7 @@
<productvar name="DISTNAME">openSUSE</productvar>
<productvar name="FLAVOR">ftp</productvar>
<productvar name="MAKE_LISTINGS">true</productvar>
- <productvar name="MEDIUM_NAME">openSUSE-20220530-i586-x86_64</productvar>
+ <productvar name="MEDIUM_NAME">openSUSE-20220531-i586-x86_64</productvar>
<productvar name="MULTIPLE_MEDIA">true</productvar>
<productvar name="PRODUCT_DIR">/</productvar>
<productvar name="PRODUCT_NAME">$DISTNAME-$FLAVOR</productvar>
@@ -36,11 +36,11 @@
<productvar name="SEPARATE_MEDIA">true</productvar>
<productvar name="SHA1OPT">-x -2</productvar>
<productvar name="VENDOR">openSUSE</productvar>
- <productvar name="VERSION">20220530</productvar>
+ <productvar name="VERSION">20220531</productvar>
<productinfo name="CONTENTSTYLE">11</productinfo>
- <productinfo name="DISTRO">cpe:/o:opensuse:opensuse:20220530,openSUSE Tumbleweed</productinfo>
+ <productinfo name="DISTRO">cpe:/o:opensuse:opensuse:20220531,openSUSE Tumbleweed</productinfo>
<productinfo name="LINGUAS">cs da de el en en_GB en_US es fr hu it ja pl pt pt_BR ru zh zh_CN zh_TW </productinfo>
- <productinfo name="REPOID">obsproduct://build.opensuse.org/openSUSE:Factory/openSUSE/20220530/i586 obsproduct://build.opensuse.org/openSUSE:Factory/openSUSE/20220530/x86_64</productinfo>
+ <productinfo name="REPOID">obsproduct://build.opensuse.org/openSUSE:Factory/openSUSE/20220531/i586 obsproduct://build.opensuse.org/openSUSE:Factory/openSUSE/20220531/x86_64</productinfo>
<productinfo name="VENDOR">openSUSE</productinfo>
<productoption name="DEBUGMEDIUM">2</productoption>
<productoption name="INI_DIR">/usr/share/kiwi/modules/plugins/tumbleweed</productoption>
++++++ MicroOS.product ++++++
--- /var/tmp/diff_new_pack.6D3gFO/_old 2022-05-31 23:24:50.731873662 +0200
+++ /var/tmp/diff_new_pack.6D3gFO/_new 2022-05-31 23:24:50.731873662 +0200
@@ -6,7 +6,7 @@
<name>MicroOS</name>
<releasepkgname>MicroOS-release</releasepkgname>
<endoflife/>
- <version>20220530</version>
+ <version>20220531</version>
<!-- release is no longer optional -->
<release>0</release>
<productline>MicroOS</productline>
++++++ dvd.group ++++++
--- /var/tmp/diff_new_pack.6D3gFO/_old 2022-05-31 23:24:50.839873745 +0200
+++ /var/tmp/diff_new_pack.6D3gFO/_new 2022-05-31 23:24:50.843873748 +0200
@@ -546,6 +546,7 @@
<package name="gdb" supportstatus="unsupported"/> <!-- reason: dvd:patterns-kde-kde -->
<package name="gdbm-lang" supportstatus="unsupported"/> <!-- reason: dvd:openSUSE-release -->
<package name="gdk-pixbuf-lang" supportstatus="unsupported"/> <!-- reason: dvd:openSUSE-release -->
+ <package name="gdk-pixbuf-loader-libheif" supportstatus="unsupported"/> <!-- reason: dvd:patterns-gnome-gnome -->
<package name="gdk-pixbuf-loader-rsvg" supportstatus="unsupported"/> <!-- reason: dvd:openSUSE-release -->
<package name="gdk-pixbuf-query-loaders" supportstatus="unsupported"/> <!-- reason: dvd:openSUSE-release -->
<package name="gdk-pixbuf-thumbnailer" supportstatus="unsupported"/> <!-- reason: dvd:openSUSE-release -->
++++++ openSUSE-Addon-NonOss.product ++++++
--- /var/tmp/diff_new_pack.6D3gFO/_old 2022-05-31 23:24:50.859873761 +0200
+++ /var/tmp/diff_new_pack.6D3gFO/_new 2022-05-31 23:24:50.863873763 +0200
@@ -4,7 +4,7 @@
<product>
<vendor>openSUSE</vendor>
<name>openSUSE-Addon-NonOss</name>
- <version>20220530</version>
+ <version>20220531</version>
<release>0</release>
<summary>openSUSE NonOSS Addon</summary>
<shortsummary>non oss addon</shortsummary>
++++++ openSUSE.product ++++++
--- /var/tmp/diff_new_pack.6D3gFO/_old 2022-05-31 23:24:50.879873776 +0200
+++ /var/tmp/diff_new_pack.6D3gFO/_new 2022-05-31 23:24:50.883873779 +0200
@@ -4,7 +4,7 @@
<product>
<vendor>openSUSE</vendor>
<name>openSUSE</name>
- <version>20220530</version>
+ <version>20220531</version>
<release>0</release>
<productline>openSUSE</productline>
++++++ opensuse_microos.group ++++++
--- /var/tmp/diff_new_pack.6D3gFO/_old 2022-05-31 23:24:50.911873801 +0200
+++ /var/tmp/diff_new_pack.6D3gFO/_new 2022-05-31 23:24:50.915873804 +0200
@@ -1273,6 +1273,7 @@
<package name="polkit" supportstatus="unsupported"/> <!-- reason: opensuse_microos:patterns-microos-base-packagekit -->
<package name="polkit-default-privs" supportstatus="unsupported"/> <!-- reason: opensuse_microos_desktop:patterns-microos-desktop-kde -->
<package name="polkit-kde-agent-5" supportstatus="unsupported"/> <!-- reason: opensuse_microos_desktop:patterns-microos-desktop-kde -->
+ <package name="power-profiles-daemon" supportstatus="unsupported"/> <!-- reason: opensuse_microos_desktop:patterns-microos-desktop-gnome -->
<package name="powerdevil5" supportstatus="unsupported"/> <!-- reason: opensuse_microos_desktop:patterns-microos-desktop-kde -->
<package name="prison-qt5-imports" supportstatus="unsupported"/> <!-- reason: opensuse_microos_desktop:patterns-microos-desktop-kde -->
<package name="procps" supportstatus="unsupported"/> <!-- reason: opensuse_microos:patterns-microos-base -->
++++++ unsorted.yml ++++++
--- /var/tmp/diff_new_pack.6D3gFO/_old 2022-05-31 23:24:50.975873850 +0200
+++ /var/tmp/diff_new_pack.6D3gFO/_new 2022-05-31 23:24:50.983873856 +0200
@@ -1916,6 +1916,7 @@
- charliecloud
- charliecloud-doc
- charliecloud-examples
+ - chart-testing
- chasen
- chasen-devel
- chck-devel
@@ -4273,7 +4274,6 @@
- gdk-pixbuf-devel
- gdk-pixbuf-devel-32bit: [x86_64]
- gdk-pixbuf-loader-libavif
- - gdk-pixbuf-loader-libheif
- gdk-pixbuf-loader-libopenraw
- gdk-pixbuf-loader-libopenraw-32bit: [x86_64]
- gdk-pixbuf-loader-rsvg-32bit: [x86_64]
@@ -10600,8 +10600,8 @@
- libdiscid0-32bit: [x86_64]
- libdiscord-rpc
- libdisomaster1
- - libdispatch
- libdispatch-devel
+ - libdispatch1_3
- libdjvulibre-devel
- libdlm-devel
- libdmapsharing-3_0-2
@@ -13947,7 +13947,7 @@
- libsliplu1
- libslirp-devel
- libslopy7_6
- - libslurm37: [x86_64]
+ - libslurm38: [x86_64]
- libsmartcols-devel
- libsmartcols-devel-32bit: [x86_64]
- libsmartcols-devel-static
@@ -18271,6 +18271,7 @@
- openSUSE-release-tools-abichecker: [x86_64]
- openSUSE-release-tools-announcer: [x86_64]
- openSUSE-release-tools-check-source: [x86_64]
+ - openSUSE-release-tools-docker-publisher: [x86_64]
- openSUSE-release-tools-maintenance: [x86_64]
- openSUSE-release-tools-metrics: [x86_64]
- openSUSE-release-tools-metrics-access: [x86_64]
@@ -23341,7 +23342,6 @@
- python310-httpsig_cffi
- python310-httptools
- python310-httpx
- - python310-hug
- python310-humanfriendly
- python310-humanhash3
- python310-humanize
@@ -23460,6 +23460,7 @@
- python310-josepy
- python310-jplephem
- python310-jsbeautifier
+ - python310-jschema-to-python
- python310-jsmin
- python310-json-rpc
- python310-json5
@@ -26502,7 +26503,6 @@
- python38-httpretty
- python38-httpsig_cffi
- python38-httptools
- - python38-hug
- python38-humanfriendly
- python38-humanhash3
- python38-humanize
@@ -26608,6 +26608,7 @@
- python38-josepy
- python38-jplephem
- python38-jsbeautifier
+ - python38-jschema-to-python
- python38-jsmin
- python38-json-rpc
- python38-json5
@@ -29603,7 +29604,6 @@
- python39-httpsig_cffi
- python39-httptools
- python39-httpx
- - python39-hug
- python39-humanfriendly
- python39-humanhash3
- python39-humanize
@@ -29722,6 +29722,7 @@
- python39-josepy
- python39-jplephem
- python39-jsbeautifier
+ - python39-jschema-to-python
- python39-jsmin
- python39-json-rpc
- python39-json5
@@ -33557,6 +33558,8 @@
- template-resolver
- template-resolver-javadoc
- tennebon-dynamic-wallpaper
+ - tensorflow-lite: [x86_64]
+ - tensorflow-lite-devel: [x86_64]
- tepl-6-lang
- tepl-devel
- termcap
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package 000release-packages for openSUSE:Factory checked in at 2022-05-31 23:24:43
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/000release-packages (Old)
and /work/SRC/openSUSE:Factory/.000release-packages.new.1548 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "000release-packages"
Tue May 31 23:24:43 2022 rev:1643 rq: version:unknown
Changes:
--------
New Changes file:
NO CHANGES FILE!!!
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
openSUSE-Addon-NonOss-release.spec: same change
openSUSE-release.spec: same change
stub.spec: same change
++++++ weakremovers.inc ++++++
--- /var/tmp/diff_new_pack.yXGUI1/_old 2022-05-31 23:24:46.439870359 +0200
+++ /var/tmp/diff_new_pack.yXGUI1/_new 2022-05-31 23:24:46.447870365 +0200
@@ -20810,6 +20810,7 @@
Provides: weakremover(python3-gunicorn-doc)
Provides: weakremover(python3-hgtools)
Provides: weakremover(python3-hide-code)
+Provides: weakremover(python3-hug)
Provides: weakremover(python3-humanfriendly-test)
Provides: weakremover(python3-hypothesis-auto)
Provides: weakremover(python3-hypothesis-test)
@@ -21069,6 +21070,7 @@
Provides: weakremover(python310-Pykka)
Provides: weakremover(python310-abclient)
Provides: weakremover(python310-boto)
+Provides: weakremover(python310-hug)
Provides: weakremover(python310-ipython-iptest)
Provides: weakremover(python310-jupytext)
Provides: weakremover(python310-keepalive)
@@ -24352,6 +24354,7 @@
Provides: weakremover(python38-fysom)
Provides: weakremover(python38-google-filesystem)
Provides: weakremover(python38-hide-code)
+Provides: weakremover(python38-hug)
Provides: weakremover(python38-hypothesis-auto)
Provides: weakremover(python38-ipython-iptest)
Provides: weakremover(python38-ipython715)
@@ -24499,6 +24502,7 @@
Provides: weakremover(python39-google-filesystem)
Provides: weakremover(python39-gvm-tools)
Provides: weakremover(python39-hide-code)
+Provides: weakremover(python39-hug)
Provides: weakremover(python39-hypothesis-auto)
Provides: weakremover(python39-ipython-iptest)
Provides: weakremover(python39-ipython715)
@@ -36750,6 +36754,7 @@
Provides: weakremover(libslurm34)
Provides: weakremover(libslurm35)
Provides: weakremover(libslurm36)
+Provides: weakremover(libslurm37)
Provides: weakremover(libsnmp30-32bit)
Provides: weakremover(libspandsp2-32bit)
Provides: weakremover(libsrt1-32bit)
@@ -37252,16 +37257,12 @@
Provides: weakremover(tensorflow-gnu-hpc)
Provides: weakremover(tensorflow-gnu-mvapich2-hpc)
Provides: weakremover(tensorflow-gnu-openmpi2-hpc)
-Provides: weakremover(tensorflow-lite)
-Provides: weakremover(tensorflow-lite-devel)
Provides: weakremover(tensorflow2)
Provides: weakremover(tensorflow2-devel)
Provides: weakremover(tensorflow2-doc)
Provides: weakremover(tensorflow2-gnu-hpc)
Provides: weakremover(tensorflow2-gnu-mvapich2-hpc)
Provides: weakremover(tensorflow2-gnu-openmpi2-hpc)
-Provides: weakremover(tensorflow2-lite)
-Provides: weakremover(tensorflow2-lite-devel)
Provides: weakremover(tensorflow2_2_1_0-gnu-hpc)
Provides: weakremover(tensorflow2_2_1_0-gnu-hpc-devel)
Provides: weakremover(tensorflow2_2_1_0-gnu-hpc-doc)
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package 000update-repos for openSUSE:Factory checked in at 2022-05-31 21:05:57
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/000update-repos (Old)
and /work/SRC/openSUSE:Factory/.000update-repos.new.1548 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "000update-repos"
Tue May 31 21:05:57 2022 rev:2000 rq: version:unknown
Changes:
--------
New Changes file:
NO CHANGES FILE!!!
Old:
----
factory:non-oss_3214.2.packages.zst
factory:non-oss_3214.2_and_before.packages.zst
factory:non-oss_3217.1.packages.zst
factory:non-oss_3219.3.packages.zst
factory:non-oss_3221.3.packages.zst
factory:non-oss_3222.3.packages.zst
factory:non-oss_3226.1.packages.zst
factory:non-oss_3227.3.packages.zst
factory:non-oss_3229.2.packages.zst
factory:non-oss_3230.3.packages.zst
factory_20220515.packages.zst
factory_20220515_and_before.packages.zst
factory_20220517.packages.zst
factory_20220518.packages.zst
factory_20220520.packages.zst
factory_20220521.packages.zst
factory_20220522.packages.zst
factory_20220523.packages.zst
factory_20220524.packages.zst
factory_20220525.packages.zst
New:
----
factory:non-oss_3233.1_and_before.packages.zst
factory_20220528_and_before.packages.zst
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ factory:non-oss_3233.1.packages.zst ++++++
Binary files /var/tmp/diff_new_pack.bv9vxn/_old and /var/tmp/diff_new_pack.bv9vxn/_new differ
++++++ factory_20220528.packages.zst ++++++
Binary files /var/tmp/diff_new_pack.bv9vxn/_old and /var/tmp/diff_new_pack.bv9vxn/_new differ
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-azure-mgmt-datafactory for openSUSE:Factory checked in at 2022-05-31 17:53:45
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-azure-mgmt-datafactory (Old)
and /work/SRC/openSUSE:Factory/.python-azure-mgmt-datafactory.new.1548 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-azure-mgmt-datafactory"
Tue May 31 17:53:45 2022 rev:18 rq:980113 version:2.6.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-azure-mgmt-datafactory/python-azure-mgmt-datafactory.changes 2022-05-13 23:03:43.735153865 +0200
+++ /work/SRC/openSUSE:Factory/.python-azure-mgmt-datafactory.new.1548/python-azure-mgmt-datafactory.changes 2022-05-31 17:53:47.851500914 +0200
@@ -1,0 +2,8 @@
+Mon May 30 11:16:37 UTC 2022 - John Paul Adrian Glaubitz <adrian.glaubitz(a)suse.com>
+
+- New upstream release
+ + Version 2.6.0
+ + For detailed information about changes see the
+ CHANGELOG.md file provided with this package
+
+-------------------------------------------------------------------
Old:
----
azure-mgmt-datafactory-2.5.0.zip
New:
----
azure-mgmt-datafactory-2.6.0.zip
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-azure-mgmt-datafactory.spec ++++++
--- /var/tmp/diff_new_pack.Y02Eyp/_old 2022-05-31 17:53:48.347501170 +0200
+++ /var/tmp/diff_new_pack.Y02Eyp/_new 2022-05-31 17:53:48.355501174 +0200
@@ -21,7 +21,7 @@
%define skip_python2 1
%endif
Name: python-azure-mgmt-datafactory
-Version: 2.5.0
+Version: 2.6.0
Release: 0
Summary: Microsoft Azure Data Factory Management Client Library
License: MIT
1
0
31 May '22
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-azure-media-videoanalyzer-edge for openSUSE:Factory checked in at 2022-05-31 17:53:45
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-azure-media-videoanalyzer-edge (Old)
and /work/SRC/openSUSE:Factory/.python-azure-media-videoanalyzer-edge.new.1548 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-azure-media-videoanalyzer-edge"
Tue May 31 17:53:45 2022 rev:3 rq:980112 version:1.0.0b4
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-azure-media-videoanalyzer-edge/python-azure-media-videoanalyzer-edge.changes 2021-11-17 01:15:25.542191169 +0100
+++ /work/SRC/openSUSE:Factory/.python-azure-media-videoanalyzer-edge.new.1548/python-azure-media-videoanalyzer-edge.changes 2022-05-31 17:53:47.167500563 +0200
@@ -1,0 +2,9 @@
+Mon May 30 14:31:34 UTC 2022 - John Paul Adrian Glaubitz <adrian.glaubitz(a)suse.com>
+
+- New upstream release
+ + Version 1.0.0b4
+ + For detailed information about changes see the
+ CHANGELOG.md file provided with this package
+- Update Requires from setup.py
+
+-------------------------------------------------------------------
Old:
----
azure-media-videoanalyzer-edge-1.0.0b3.zip
New:
----
azure-media-videoanalyzer-edge-1.0.0b4.zip
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-azure-media-videoanalyzer-edge.spec ++++++
--- /var/tmp/diff_new_pack.vXtaav/_old 2022-05-31 17:53:47.671500822 +0200
+++ /var/tmp/diff_new_pack.vXtaav/_new 2022-05-31 17:53:47.675500824 +0200
@@ -1,7 +1,7 @@
#
# spec file for package python-azure-media-videoanalyzer-edge
#
-# Copyright (c) 2021 SUSE LLC
+# Copyright (c) 2022 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -21,7 +21,7 @@
%define skip_python2 1
%endif
Name: python-azure-media-videoanalyzer-edge
-Version: 1.0.0b3
+Version: 1.0.0b4
Release: 0
Summary: Microsoft Azure Video Analyzer Edge SDK Library for Python
License: MIT
@@ -37,8 +37,9 @@
BuildRequires: unzip
Requires: python-azure-core < 2.0.0
Requires: python-azure-core >= 1.2.2
+Requires: python-azure-media-nspkg >= 1.0.0
Requires: python-azure-nspkg >= 3.0.0
-Requires: python-msrest >= 0.5.0
+Requires: python-msrest >= 0.6.21
Conflicts: python-azure-sdk <= 2.0.0
BuildArch: noarch
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package opi for openSUSE:Factory checked in at 2022-05-31 17:47:43
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/opi (Old)
and /work/SRC/openSUSE:Factory/.opi.new.1548 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "opi"
Tue May 31 17:47:43 2022 rev:32 rq:980108 version:2.6.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/opi/opi.changes 2022-05-16 18:11:29.909420409 +0200
+++ /work/SRC/openSUSE:Factory/.opi.new.1548/opi.changes 2022-05-31 17:47:44.059314717 +0200
@@ -1,0 +2,8 @@
+Tue May 31 14:44:50 UTC 2022 - Dominik Heidler <dheidler(a)suse.de>
+
+- Version 2.6.0
+- Move to global config in /etc/opi.cfg
+- Check if desired repo is already added instead of relying on prefix
+- Add config option use_releasever_var
+
+-------------------------------------------------------------------
Old:
----
opi-2.5.0.tar.gz
New:
----
opi-2.6.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ opi.spec ++++++
--- /var/tmp/diff_new_pack.QtiILo/_old 2022-05-31 17:47:44.535314960 +0200
+++ /var/tmp/diff_new_pack.QtiILo/_new 2022-05-31 17:47:44.539314962 +0200
@@ -17,7 +17,7 @@
Name: opi
-Version: 2.5.0
+Version: 2.6.0
Release: 0
Summary: OBS Package Installer (CLI)
License: GPL-3.0-only
@@ -49,15 +49,14 @@
%setup -q
%build
-help2man -s8 -N ./bin/opi > opi.8.gz
+help2man -s8 -N ./bin/opi | gzip > opi.8.gz
gzip opi.8.gz
%install
python3 setup.py install --prefix=%{_prefix} --root=%{buildroot}
-mkdir -p %{buildroot}%{_datadir}/metainfo
-cp org.openSUSE.opi.appdata.xml %{buildroot}%{_datadir}/metainfo
-mkdir -p %{buildroot}%{_datadir}/man/man8
-cp opi.8.gz %{buildroot}%{_datadir}/man/man8
+install -m 644 -D -v org.openSUSE.opi.appdata.xml %{buildroot}%{_datadir}/metainfo/org.openSUSE.opi.appdata.xml
+install -m 644 -D -v opi.8.gz %{buildroot}%{_datadir}/man/man8/opi.8.gz
+install -m 644 -D -v opi.default.cfg %{buildroot}%{_sysconfdir}/opi.cfg
%check
python3 setup.py --version | grep %{version}
@@ -69,5 +68,6 @@
%{_datadir}/metainfo/org.openSUSE.opi.appdata.xml
%{_datadir}/man/man8/opi.8.gz
%{python3_sitelib}/*
+%config %{_sysconfdir}/opi.cfg
%changelog
++++++ opi-2.5.0.tar.gz -> opi-2.6.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opi-2.5.0/README.md new/opi-2.6.0/README.md
--- old/opi-2.5.0/README.md 2022-05-16 17:08:24.000000000 +0200
+++ new/opi-2.6.0/README.md 2022-05-31 16:44:37.000000000 +0200
@@ -57,12 +57,10 @@
### Using DNF instead of Zypper
If you want to, you can use [DNF](https://en.opensuse.org/SDB:DNF) instead of Zypper.
-To do this, change the content of `~/.config/opi/config.json` so that it looks like this:
+To do this, change the content of `/etc/opi.cfg`:
-```json
-{
- "backend": "dnf"
-}
+```cfg
+backend = dnf
```
If you want to go back to Zypper, just change the value of `backend` back to `zypp`.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opi-2.5.0/opi/__init__.py new/opi-2.6.0/opi/__init__.py
--- old/opi-2.5.0/opi/__init__.py 2022-05-16 17:08:24.000000000 +0200
+++ new/opi-2.6.0/opi/__init__.py 2022-05-31 16:44:37.000000000 +0200
@@ -4,6 +4,7 @@
import re
import tempfile
import math
+import configparser
import requests
import lxml.etree
@@ -15,6 +16,7 @@
from opi.backends import get_backend, BackendConstants
from opi import pager
+from opi import config
OBS_APIROOT = {
'openSUSE': 'https://api.opensuse.org',
@@ -22,6 +24,8 @@
}
PROXY_URL = 'https://opi-proxy.opensuse.org/'
+REPO_DIR = "/etc/zypp/repos.d/"
+
###################
### System Info ###
@@ -81,7 +85,7 @@
###############
def add_packman_repo(dup=False):
- project = get_distribution(use_releasever_variable=True)
+ project = get_distribution(use_releasever_variable=config.get_key_from_config("use_releasever_var"))
project = project.replace(':', '_')
project = project.replace('Factory', 'Tumbleweed')
@@ -107,6 +111,23 @@
### ZYPP/DNF ###
################
+def url_normalize(url):
+ return re.sub(r"^https?", "", url).rstrip('/').replace('$releasever', get_version() or '$releasever')
+
+def get_repos():
+ for repo_file in os.listdir(REPO_DIR):
+ cp = configparser.ConfigParser()
+ cp.read(os.path.join(REPO_DIR, repo_file))
+ mainsec = cp.sections()[0]
+ if not bool(int(cp.get(mainsec, "enabled"))):
+ continue
+ yield (re.sub(r"\.repo$", "", repo_file), cp.get(mainsec, "baseurl"))
+
+def get_enabled_repo_by_url(url):
+ for repo, repo_url in get_repos():
+ if url_normalize(repo_url) == url_normalize(url):
+ return repo
+
def add_repo(filename, name, url, enabled=True, gpgcheck=True, gpgkey=None, repo_type='rpm-md', auto_import_key=False, auto_refresh=False, priority=None):
tf = tempfile.NamedTemporaryFile('w')
tf.file.write("[%s]\n" % filename)
@@ -123,8 +144,8 @@
if priority:
tf.file.write("priority=%i\n" % priority)
tf.file.flush()
- subprocess.call(['sudo', 'cp', tf.name, '/etc/zypp/repos.d/%s.repo' % filename])
- subprocess.call(['sudo', 'chmod', '644', '/etc/zypp/repos.d/%s.repo' % filename])
+ subprocess.call(['sudo', 'cp', tf.name, os.path.join(REPO_DIR, '%s.repo' % filename)])
+ subprocess.call(['sudo', 'chmod', '644', os.path.join(REPO_DIR, '%s.repo' % filename)])
tf.file.close()
refresh_cmd = []
if get_backend() == BackendConstants.zypp:
@@ -279,26 +300,36 @@
# Install from Packman Repo
add_packman_repo()
install_packman_packages([name_with_arch])
- elif is_official_project(project):
- # Install from official repos (don't add a repo)
- install_packages([name_with_arch])
else:
repo_alias = project.replace(':', '_')
project_path = project.replace(':', ':/')
- version = get_version()
- if version:
- # version is None on tw
- repository = repository.replace(version, '$releasever')
- add_repo(
- filename = repo_alias,
- name = project,
- url = "https://download.opensuse.org/repositories/%s/%s/" % (project_path, repository),
- gpgkey = "https://download.opensuse.org/repositories/%s/%s/repodata/repomd.xml.key" % (project_path, repository),
- gpgcheck = True,
- auto_refresh = True
- )
- install_packages([name_with_arch], from_repo=repo_alias, allow_downgrade=True, allow_arch_change=True, allow_name_change=True, allow_vendor_change=True)
- ask_keep_repo(repo_alias)
+ if config.get_key_from_config("use_releasever_var"):
+ version = get_version()
+ if version:
+ # version is None on tw
+ repository = repository.replace(version, '$releasever')
+ url = "https://download.opensuse.org/repositories/%s/%s/" % (project_path, repository)
+ gpgkey = "https://download.opensuse.org/repositories/%s/%s/repodata/repomd.xml.key" % (project_path, repository)
+ existing_repo = get_enabled_repo_by_url(url)
+ if existing_repo:
+ # Install from existing repos (don't add a repo)
+ install_packages([name_with_arch])
+ else:
+ add_repo(
+ filename = repo_alias,
+ name = project,
+ url = url,
+ gpgkey = gpgkey,
+ gpgcheck = True,
+ auto_refresh = True
+ )
+ install_packages([name_with_arch], from_repo=repo_alias,
+ allow_downgrade=True,
+ allow_arch_change=True,
+ allow_name_change=True,
+ allow_vendor_change=True
+ )
+ ask_keep_repo(repo_alias)
########################
@@ -364,7 +395,7 @@
if get_backend() == BackendConstants.zypp:
subprocess.call(['sudo', 'zypper', 'rr', repo])
if get_backend() == BackendConstants.dnf:
- subprocess.call(['sudo', 'rm', '/etc/zypp/repos.d/' + repo + '.repo'])
+ subprocess.call(['sudo', 'rm', os.path.join(REPO_DIR, '%s.repo' % repo)])
def format_binary_option(binary, table=True):
if is_official_project(binary['project']):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opi-2.5.0/opi/config/__init__.py new/opi-2.6.0/opi/config/__init__.py
--- old/opi-2.5.0/opi/config/__init__.py 2022-05-16 17:08:24.000000000 +0200
+++ new/opi-2.6.0/opi/config/__init__.py 2022-05-31 16:44:37.000000000 +0200
@@ -1,34 +1,32 @@
import os
import pwd
import subprocess
-import json
+import configparser
-cache = {}
+parser = configparser.ConfigParser()
+parser.read("/etc/opi.cfg")
+
+default_config = {
+ "backend": "zypp",
+ "use_releasever_var": True
+}
+
+config_cache = None
class ConfigError(Exception):
pass
-def create_default_config():
- path = pwd.getpwuid(os.getuid()).pw_dir + "/.config/opi/"
- subprocess.call(["mkdir", "-p", path])
- config = {
- "backend": "zypp"
- }
- config_file = open(path + 'config.json', 'w')
- json.dump(config, config_file, indent=4)
-
def get_key_from_config(key: str):
- if not key in cache:
- path = pwd.getpwuid(os.getuid()).pw_dir + "/.config/opi/config.json"
- if not os.path.isfile(path):
- create_default_config()
- config = json.loads(open(path).read())
- cache[key] = config[key]
- return cache[key]
- else:
- return cache[key]
-
-path = pwd.getpwuid(os.getuid()).pw_dir + "/.config/opi/config.json"
-if not os.path.isfile(path):
- create_default_config()
-
+ global config_cache
+ if not config_cache:
+ config_cache = default_config.copy()
+ path = os.environ.get('OPI_CONFIG', '/etc/opi.cfg')
+ if os.path.exists(path):
+ cp = configparser.ConfigParser()
+ cp.read(path)
+ ocfg = cp['opi']
+ config_cache.update({
+ 'backend': ocfg.get('backend'),
+ 'use_releasever_var': ocfg.getboolean('use_releasever_var')
+ })
+ return config_cache[key]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opi-2.5.0/opi/plugins/teamviewer.py new/opi-2.6.0/opi/plugins/teamviewer.py
--- old/opi-2.5.0/opi/plugins/teamviewer.py 2022-05-16 17:08:24.000000000 +0200
+++ new/opi-2.6.0/opi/plugins/teamviewer.py 2022-05-31 16:44:37.000000000 +0200
@@ -1,4 +1,5 @@
import opi
+import os
from opi.plugins import BasePlugin
import subprocess
@@ -21,5 +22,5 @@
opi.install_packages(['teamviewer-suse'])
# Teamviewer packages its own repo file so our repo file got saved as rpmorig
- subprocess.call(['sudo', 'rm', '-f', '/etc/zypp/repos.d/teamviewer.repo.rpmorig'])
+ subprocess.call(['sudo', 'rm', '-f', os.path.join(opi.REPO_DIR, 'teamviewer.repo.rpmorig')])
opi.ask_keep_repo('teamviewer')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opi-2.5.0/opi/version.py new/opi-2.6.0/opi/version.py
--- old/opi-2.5.0/opi/version.py 2022-05-16 17:08:24.000000000 +0200
+++ new/opi-2.6.0/opi/version.py 2022-05-31 16:44:37.000000000 +0200
@@ -1 +1 @@
-__version__ = '2.5.0'
+__version__ = '2.6.0'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opi-2.5.0/opi.changes new/opi-2.6.0/opi.changes
--- old/opi-2.5.0/opi.changes 2022-05-16 17:08:24.000000000 +0200
+++ new/opi-2.6.0/opi.changes 2022-05-31 16:44:37.000000000 +0200
@@ -1,4 +1,12 @@
-------------------------------------------------------------------
+Tue May 31 14:44:14 UTC 2022 - Dominik Heidler <dheidler(a)suse.de>
+
+- Version 2.6.0
+- Move to global config in /etc/opi.cfg
+- Check if desired repo is already added instead of relying on prefix
+- Add config option use_releasever_var
+
+-------------------------------------------------------------------
Mon May 16 15:07:53 UTC 2022 - Dominik Heidler <dheidler(a)suse.de>
- Version 2.5.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opi-2.5.0/opi.default.cfg new/opi-2.6.0/opi.default.cfg
--- old/opi-2.5.0/opi.default.cfg 1970-01-01 01:00:00.000000000 +0100
+++ new/opi-2.6.0/opi.default.cfg 2022-05-31 16:44:37.000000000 +0200
@@ -0,0 +1,3 @@
+[opi]
+backend = zypp
+use_releasever_var = true
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opi-2.5.0/release.sh new/opi-2.6.0/release.sh
--- old/opi-2.5.0/release.sh 2022-05-16 17:08:24.000000000 +0200
+++ new/opi-2.6.0/release.sh 2022-05-31 16:44:37.000000000 +0200
@@ -18,6 +18,7 @@
osc up
sed -i -e "s/^\(Version: *\)[^ ]*$/\1${version}/" opi.spec
osc vc -m "Version ${version}\n${changes}"
+vi opi.changes
osc rm opi-*.tar.gz
osc service dr
osc add opi-*.tar.gz
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opi-2.5.0/test/run_container_test.sh new/opi-2.6.0/test/run_container_test.sh
--- old/opi-2.5.0/test/run_container_test.sh 2022-05-16 17:08:24.000000000 +0200
+++ new/opi-2.6.0/test/run_container_test.sh 2022-05-31 16:44:37.000000000 +0200
@@ -1,12 +1,12 @@
-#!/bin/bash
+#!/bin/bash -x
base_image="${2:-opensuse/tumbleweed}"
opi_base_image="opi_base_${base_image/\//_}"
# prepare container image
-if ! podman images exists $opi_base_image ; then
+if ! podman image exists $opi_base_image ; then
echo "Preparing container"
- podman run -td --dns=1.1.1.1 --name=opi_base ${2:-opensuse/tumbleweed}
+ podman run -td --dns=1.1.1.1 --name=opi_base $base_image
podman exec -it opi_base zypper -n ref
# opi dependencies
podman exec -it opi_base zypper -n install sudo python3 python3-requests python3-lxml python3-termcolor python3-curses curl
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package k3s-install for openSUSE:Factory checked in at 2022-05-31 17:38:11
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/k3s-install (Old)
and /work/SRC/openSUSE:Factory/.k3s-install.new.1548 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "k3s-install"
Tue May 31 17:38:11 2022 rev:2 rq:980111 version:1.23.6+k3s1
Changes:
--------
--- /work/SRC/openSUSE:Factory/k3s-install/k3s-install.changes 2021-07-16 22:13:35.658468909 +0200
+++ /work/SRC/openSUSE:Factory/.k3s-install.new.1548/k3s-install.changes 2022-05-31 17:38:24.743032052 +0200
@@ -1,0 +2,459 @@
+Tue May 31 14:00:18 UTC 2022 - Frederic Crozat <fcrozat(a)suse.com>
+
+- Drop inform-user-of-current-k3s-SELinux-support.patch, no longer
+ needed.
+- Add dependency on container-selinux.
+- Drop dependencies on containerd, cni-plugins, conntrack-tools,
+ runc packages since k3s ships its own stack.
+- Update to version 1.23.6+k3s1:
+ * Fix issue with datastore corruption on cluster-reset (#5515)
+ * Bump containerd for selinux fix (#5507)
+ * Secrets Encryption: Add RetryOnConflict around updating nodes (#5495)
+ * Fix issue with long-running apiserver endpoints watch (#5478)
+ * Update Kubernetes to v1.23.6 (#5477)
+ * Fix default ipv6 cidr (#5467)
+ * E2E Validation Improvements (#5444)
+ * Add s390x arch support for k3s (#5018)
+ * Bump etcd to 3.5.3-k3s1
+ * Move IPv4/v6 selection into helpers
+ * Fix issue with RKE2 servers hanging on listing apiserver addresses
+ * Print a helpful error when trying to join additional servers but etcd is not in use
+ * Use core constants for cert user/group values
+ * Bump containerd to v1.5.11-k3s1
+ * Added option to deploy hardened k3s (#5415)
+ * Added support for repeated extra arguments
+ * update sonobuoy to 0.56.4 (#5419)
+ * Bump Reencryption Test timeout, improve comments (#5431)
+ * Added default endpoint for IPv6
+ * Update golangci-lint to 1.45.2
+ * fixes and updates to jenkinsfile (#5370)
+ * Fixed flannel backend helper text
+ * update trivy to 0.25.3
+ * fix: non-idiomatic returning of boolean expression (#5343)
+ * Add certificate rotation integration tests (#5393)
+ * Update helm-controller version
+ * Move the apiserver addresses controller into the etcd package
+ * Updated wireguard-native options and added log message
+ * Added new flannel backend to use wireguard from flannel
+ * Fix crash on early snapshot
+ * Don't print password conversion rate
+ * Allow agents to query non-apiserver supervisors for apiserver endpoints
+ * Add client certificate authentication support to core Authenticator
+ * Redact datastore and etcd snapshot config from serialization
+ * netpol: Add dual-stack support
+ * Allow using flannel wireguard backend in a custom config
+ * Fixed http URL on etcd
+ * Fixed loadbalancer in case of IPv6 addresses
+ * Fixed etcd register
+ * Fixed client URL
+ * Skip setting up client tls when etcd server does not have tls enabled
+ * add a wrapper around the containerd.New call to fix and pass the proper npipe connector
+ * Updated localhost address on IPv6 only setup
+ * Defragment etcd datastore before clearing alarms
+ * Fix etcd-only secrets encryption rotation
+ * Properly attach secrets-encrypt events to the node resource
+ * Fix log spam due to servicelb event recorder namespace conflict
+ * Ensure that apiserver ready channel checks re-dial every time
+ * Fixed etcd URL in case of IPv6 address
+ * vagrant: Set mount options for NFS
+ * vagrant: Enable IPv6 and IP forwarding
+ * go generate
+ * Bump coredns to v1.9.1
+ * Update Kubernetes to v1.23.5-k3s1
+ * Refactor automation using terraform (#5268)
+ * Defer ensuring node passwords on etcd-only nodes during initial cluster bootstrap
+ * Replace CentOS 8 with Rocky Linux 8 for install testing (#5279)
+ * E2E Split Server Test (#5286)
+ * Handle empty entries in bootstrap path map
+ * Update helm-controller
+ * Track upstream changes to kubectl command execution
+ * Add cross-compilation as sanity check (#5255)
+ * Close additional leaked GPRC clients
+ * Testing directory and documentation rework. (#5256)
+ * Changed ipv6 config on flannel setup
+ * Added ipv6 only support with flannel
+ * fix function arg call (#5234)
+ * Populate EtcdConfig in runtime from datastore when etcd is disabled (#5222)
+ * Fixed log in case of ipv6 only config
+ * Added switch case to check netMode
+ * Fixed in case of empty address
+ * Updated flannel to 0.17
+ * Support MixedProtocolLBService and clean up Daemonsets on type change.
+ * Update Fossa API key variable to match what the plugin wants
+ * Bump containerd to v1.5.10-k3s1
+ * Mark 1.22.7 as stable (#5192)
+ * [master] changing package to k3s-io (#4846)
+ * servicelb pool selector
+ * Switch to drone-fossa plugin
+ * E2E Add external DB options to ValidateCluster test (#5157)
+ * Bootstrap the executor even when the agent is disabled
+ * Fix etcd-snapshot commands by making setup more consistent.
+ * Ignore cluster membership errors when reconciling from temp etcd
+ * Move temporary etcd startup into etcd module
+ * Wait for process to exit before returning from kill helper
+ * Add function to clear local alarms on etcd startup
+ * E2E secrets encryption test (#5144)
+ * Add http/2 support to API server (#5149)
+ * Disable ineffassign CI plugin for excessive false positives
+ * Fix adding etcd-only node to existing cluster
+ * Bump up github.com/containerd/stargz-snapshotter (v0.11.0) (#5032)
+ * Remove unnecessary copies of etcdconfig struct
+ * Remove unnecessary copies of runtime struct
+ * Fix cluster bootstrap test
+ * Add contributors documentation (#5154)
+ * Add `--json` flag for `k3s secrets-encrypt status` (#5127)
+ * add ability to specify etcd snapshot list output format (#5132)
+ * Create encryption hash file if it doesn't exist (#5140)
+ * Move testing lock from server creation to test start (#5155)
+ * Update to V1.23.4 k3s1 (#5135)
+ * Fix deploy controller resource deletion
+ * Fix annoying netpol log
+ * Add support for IPv6 only mode
+ * E2E Test Improvements (#5102)
+ * Migrate Ginkgo testing framework to V2, consolidate integration tests (#5097)
+ * Add k3s etcd restoration integration test (#5014)
+ * Remove the iptables rules from ipmasq flannel
+ * Fix cluster validation and add upgrade cluster test (#5020)
+ * Update CentOS 8 smoke vm's with vault repositories (#5092)
+ * netpol: Use kube-router as a library
+ * Check for `--kubeconfig` flag with embedded `kubectl` (#5064)
+ * Update legacy-unknown-cert and legacy-unknown-key (#5057)
+ * Bump K3s stable to v1.22.6 (#5050)
+ * Update versions:
+ * Fixes to Drone CI Stability (#4897)
+ * Add server flag to access nonlocal/nondefault k3s server (#5016)
+ * Update to v1.23.3 (#5027)
+ * Add Rocket.Chat to list of adopters (#5017)
+ * Move containerd wait into exported function
+ * Update to v1.23.2 (#4997)
+ * Add new upgradecluster E2E test (#4900)
+ * Update packaged components
+ * go generate
+ * Upgrade: metrics server version bump from v0.5.0 to v0.5.2
+ * Remove ip6table rules when cleaning up k3s
+ * Added debug log for IPv6 Masquerading rule
+ * Bump etcd and containerd to track upstream
+ * Skip CGroup v2 evac when agent is disabled
+ * Added flannel-ipv6-masq flag to enable IPv6 nat
+ * Added iptables masquerade rules for ipv6 on flannel
+ * Adds the ability to compress etcd snapshots (#4866)
+ * Enable logging on all subcommands (#4921)
+ * Move ClusterResetRestore handling ControlConfig setup
+ * Update building documentation for macOS (#4850)
+ * Add basic etcd join test
+ * Fix handling of agent-token fallback to token
+ * Fix use of agent creds for secrets-encrypt and config validate
+ * Don't skip the dev image when skipping airgap
+ * Fix a typo: advertise-up -> advertise-ip (#4827)
+ * Integration tests utilities improvements (#4832)
+ * Enable make generate to use dapper and standardize go and gzip versions (#4861)
+ * linter doesn't actually run on windows, found these while getting it running on a windows machine
+ * Update channel.yaml for 1.23
+ * Export default parser
+ * Require integration test to be run as sudo/root (#4824)
+ * Fix cgroup smoke test (#4823)
+ * Update golang
+ * Update modules for Kubernetes v1.23
+ * Add tests to use vagrantfile (#4722)
+ * Bump stable to v1.22.5+k3s1 (#4821)
+ * package rename wasnt approved yet, backing out cruft that snuck into last pr
+ * Fix panic checking name of uninitialized etcd member
+ * Add etcd sonobuoy tests
+ * Add variable to enforce max test concurrency
+ * Fix previous channel detection
+ * More codespell ignores
+ * Update bootstrap logic to output all changed files on disk (#4800)
+ * delete vendor dir
+ * code changes to drop the vendor dir
+ * Move flannel logs to logrus
+ * Close agentReady channel only in k3s (#4792)
+ * Close etcd clients to avoid leaking GRPC connections
+ * Remove Disables, Skips and DisableKubeProxy from the comparing configs
+ * Add initial skeleton ADOPTERS.md to better track large use cases (#4764)
+ * Add ADR
+ * Build standalone containerd
+ * Build script cleanups
+ * Bump k3s-root to v0.10.1
+ * Fix cold boot and reconcilation on secondary servers (#4747)
+ * docs: adrs: Dual-stack in network policy agent
+ * Fix snapshot restoration on fresh nodes (#4737)
+ * Resolve Bootstrap Migration Edge Case (#4730)
+ * Add in docs/adr to ensure we capture decisions properly during design calls (#4707)
+ * Resolve restore bootstrap (#4704)
+ * Update wharfie usage in windows code path
+ * [master] Add validation to certificate rotation (#4692)
+ * Bump runc to v1.0.3
+ * Add `SKIP_AIRGAP` enviroment variable for make (#4688)
+ * Include node-external-ip in serving-kubelet.crt SANs (#4620)
+ * Secrets-encryption rotation (#4372)
+ * Check HA network parameters
+ * Bump wharfie to v0.5.1 and use shared decompression code
+ * bump kine to v0.8.1
+ * Update dynamiclistener
+ * Nighlty automation vagrant rework (#4574)
+ * Bump stable to v1.21.7+k3s1 (#4636)
+ * Add cert rotation command (#4495)
+ * Update maintainers list (#4622)
+ * Improved cleanup for etcd unit test (#4537)
++++ 262 more lines (skipped)
++++ between /work/SRC/openSUSE:Factory/k3s-install/k3s-install.changes
++++ and /work/SRC/openSUSE:Factory/.k3s-install.new.1548/k3s-install.changes
Old:
----
inform-user-of-current-k3s-SELinux-support.patch
k3s-1.21.2+k3s1.tar.gz
New:
----
k3s-1.23.6+k3s1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ k3s-install.spec ++++++
--- /var/tmp/diff_new_pack.QEkJGK/_old 2022-05-31 17:38:25.351032357 +0200
+++ /var/tmp/diff_new_pack.QEkJGK/_new 2022-05-31 17:38:25.359032361 +0200
@@ -1,7 +1,7 @@
#
# spec file for package k3s-install
#
-# Copyright (c) 2021 SUSE LLC
+# Copyright (c) 2022 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -15,23 +15,19 @@
# Please submit bugfixes or comments via https://bugs.opensuse.org/
#
+
Name: k3s-install
-Version: 1.21.2+k3s1
+Version: 1.23.6+k3s1
Release: 0
Summary: Installer for k3s optimised for openSUSE MicroOS
License: Apache-2.0
Group: System/Management
URL: https://k3s.io
Source0: https://github.com/k3s-io/k3s/archive/v%{version}.tar.gz#/k3s-%{version}.ta…
-# PATCH-FIX-UPSTREAM inform-user-of-current-k3s-SELinux-support.patch gh#k3s-io/k3s/#3088
-Patch1: inform-user-of-current-k3s-SELinux-support.patch
-Requires: cni-plugins
-Requires: conntrack-tools
-Requires: containerd
+Requires: container-selinux
Requires: iptables
-Requires: runc
-Conflicts: kubectl
Conflicts: cri-tools
+Conflicts: kubectl
Conflicts: kubernetes-client
Conflicts: kubernetes-client-provider
++++++ _service ++++++
--- /var/tmp/diff_new_pack.QEkJGK/_old 2022-05-31 17:38:25.387032375 +0200
+++ /var/tmp/diff_new_pack.QEkJGK/_new 2022-05-31 17:38:25.391032377 +0200
@@ -2,7 +2,7 @@
<service name="tar_scm" mode="disabled">
<param name="url">https://github.com/k3s-io/k3s.git</param>
<param name="scm">git</param>
- <param name="revision">v1.21.2+k3s1</param>
+ <param name="revision">v1.23.6+k3s1</param>
<param name="versionformat">@PARENT_TAG@</param>
<param name="changesgenerate">enable</param>
<param name="versionrewrite-pattern">v(.*)</param>
++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.QEkJGK/_old 2022-05-31 17:38:25.411032387 +0200
+++ /var/tmp/diff_new_pack.QEkJGK/_new 2022-05-31 17:38:25.427032395 +0200
@@ -1,6 +1,6 @@
<servicedata>
<service name="tar_scm">
<param name="url">https://github.com/k3s-io/k3s.git</param>
- <param name="changesrevision">5a67e8dc473f8945e8e181f6f0b0dbbc387f6fca</param></service></servicedata>
+ <param name="changesrevision">418c3fa858b69b12b9cefbcff0526f666a6236b9</param></service></servicedata>
(No newline at EOF)
++++++ k3s-1.21.2+k3s1.tar.gz -> k3s-1.23.6+k3s1.tar.gz ++++++
/work/SRC/openSUSE:Factory/k3s-install/k3s-1.21.2+k3s1.tar.gz /work/SRC/openSUSE:Factory/.k3s-install.new.1548/k3s-1.23.6+k3s1.tar.gz differ: char 12, line 1
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package konstraint for openSUSE:Factory checked in at 2022-05-31 17:38:10
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/konstraint (Old)
and /work/SRC/openSUSE:Factory/.konstraint.new.1548 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "konstraint"
Tue May 31 17:38:10 2022 rev:6 rq:980107 version:0.21.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/konstraint/konstraint.changes 2022-05-19 22:49:10.854324192 +0200
+++ /work/SRC/openSUSE:Factory/.konstraint.new.1548/konstraint.changes 2022-05-31 17:38:19.571029452 +0200
@@ -1,0 +2,18 @@
+Tue May 31 11:08:59 UTC 2022 - kastl(a)b1-systems.de
+
+- Update to version 0.21.0:
+ * Add command to convert legacy annotations to OPA Metadata annotations (#294)
+ * Fix OPA Metadata parameters validation (fix #293) (#295)
+ * Bump github.com/spf13/viper from 1.11.0 to 1.12.0 (#292)
+ * Bump k8s.io/apimachinery from 0.24.0 to 0.24.1 (#291)
+ * Check parent as well as exact match when resolving imports (#286)
+ * Bump golang from 1.18.1-alpine to 1.18.2-alpine (#290)
+ * Bump alpine from 3.15.4 to 3.16.0 (#289)
+ * Have Dependabot run more often (#288)
+ * Bump k8s.io/apimachinery from 0.23.6 to 0.24.0 (#285)
+ * Add support for using OPA Metadata Annotations (#281)
+ * Run e2e tests weekly (#284)
+ * Run e2e tests weekly (#283)
+ * Run e2e tests weekly (#282)
+
+-------------------------------------------------------------------
Old:
----
konstraint-0.20.0.tar.gz
New:
----
konstraint-0.21.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ konstraint.spec ++++++
--- /var/tmp/diff_new_pack.asjE6t/_old 2022-05-31 17:38:23.723031539 +0200
+++ /var/tmp/diff_new_pack.asjE6t/_new 2022-05-31 17:38:23.727031541 +0200
@@ -19,7 +19,7 @@
%define __arch_install_post export NO_BRP_STRIP_DEBUG=true
Name: konstraint
-Version: 0.20.0
+Version: 0.21.0
Release: 0
Summary: A policy management tool for interacting with Gatekeeper
License: Apache-2.0
++++++ _service ++++++
--- /var/tmp/diff_new_pack.asjE6t/_old 2022-05-31 17:38:23.755031555 +0200
+++ /var/tmp/diff_new_pack.asjE6t/_new 2022-05-31 17:38:23.759031557 +0200
@@ -3,7 +3,7 @@
<param name="url">https://github.com/plexsystems/konstraint</param>
<param name="scm">git</param>
<param name="exclude">.git</param>
- <param name="revision">v0.20.0</param>
+ <param name="revision">v0.21.0</param>
<param name="versionformat">@PARENT_TAG@</param>
<param name="changesgenerate">enable</param>
<param name="versionrewrite-pattern">v(.*)</param>
@@ -16,7 +16,7 @@
<param name="compression">gz</param>
</service>
<service name="go_modules" mode="disabled">
- <param name="archive">konstraint-0.20.0.tar.gz</param>
+ <param name="archive">konstraint-0.21.0.tar.gz</param>
</service>
</services>
++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.asjE6t/_old 2022-05-31 17:38:23.775031565 +0200
+++ /var/tmp/diff_new_pack.asjE6t/_new 2022-05-31 17:38:23.779031567 +0200
@@ -1,6 +1,6 @@
<servicedata>
<service name="tar_scm">
<param name="url">https://github.com/plexsystems/konstraint</param>
- <param name="changesrevision">34583df96caee09df52a9ff512f6c0d018b9431a</param></service></servicedata>
+ <param name="changesrevision">3c829d8b13312627d67f04f18eeb0b8e49dee801</param></service></servicedata>
(No newline at EOF)
++++++ konstraint-0.20.0.tar.gz -> konstraint-0.21.0.tar.gz ++++++
++++ 3442 lines of diff (skipped)
++++++ vendor.tar.gz ++++++
++++ 15598 lines of diff (skipped)
1
0
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 2022-05-31 17:38:09
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/openSUSE-release-tools (Old)
and /work/SRC/openSUSE:Factory/.openSUSE-release-tools.new.1548 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "openSUSE-release-tools"
Tue May 31 17:38:09 2022 rev:434 rq:980103 version:20220531.7e00d7d8
Changes:
--------
--- /work/SRC/openSUSE:Factory/openSUSE-release-tools/openSUSE-release-tools.changes 2022-05-31 15:49:01.968053969 +0200
+++ /work/SRC/openSUSE:Factory/.openSUSE-release-tools.new.1548/openSUSE-release-tools.changes 2022-05-31 17:38:17.927028625 +0200
@@ -1,0 +2,6 @@
+Tue May 31 14:06:09 UTC 2022 - opensuse-releaseteam(a)opensuse.org
+
+- Update to version 20220531.7e00d7d8:
+ * Introduce a new docker-publisher bot
+
+-------------------------------------------------------------------
Old:
----
openSUSE-release-tools-20220531.932157b8.obscpio
New:
----
openSUSE-release-tools-20220531.7e00d7d8.obscpio
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ openSUSE-release-tools.spec ++++++
--- /var/tmp/diff_new_pack.iYTSFT/_old 2022-05-31 17:38:18.563028945 +0200
+++ /var/tmp/diff_new_pack.iYTSFT/_new 2022-05-31 17:38:18.567028947 +0200
@@ -20,7 +20,7 @@
%define source_dir openSUSE-release-tools
%define announcer_filename factory-package-news
Name: openSUSE-release-tools
-Version: 20220531.932157b8
+Version: 20220531.7e00d7d8
Release: 0
Summary: Tools to aid in staging and release work for openSUSE/SUSE
License: GPL-2.0-or-later AND MIT
@@ -113,6 +113,18 @@
%description check-source
Check source review bot that performs basic source analysis and assigns reviews.
+%package docker-publisher
+Summary: Docker image publishing bot
+Group: Development/Tools/Other
+BuildArch: noarch
+Requires: python3-lxml
+Requires: python3-requests
+Requires(pre): shadow
+
+%description docker-publisher
+A docker image publishing bot which regularly pushes built docker images from
+several sources (Repo, URL) to several destinations (git, Docker registries)
+
%package maintenance
Summary: Maintenance related services
Group: Development/Tools/Other
@@ -301,6 +313,14 @@
%postun check-source
%{systemd_postun}
+%pre docker-publisher
+getent passwd osrt-docker-publisher > /dev/null || \
+ useradd -r -m -s /sbin/nologin -c "user for openSUSE-release-tools-docker-publisher" osrt-docker-publisher
+exit 0
+
+%postun docker-publisher
+%{systemd_postun}
+
%pre maintenance
getent passwd osrt-maintenance > /dev/null || \
useradd -r -m -s /sbin/nologin -c "user for openSUSE-release-tools-maintenance" osrt-maintenance
@@ -372,6 +392,8 @@
%exclude %{_datadir}/%{source_dir}/check_maintenance_incidents.py
%exclude %{_datadir}/%{source_dir}/check_source.py
%exclude %{_datadir}/%{source_dir}/devel-project.py
+%exclude %{_datadir}/%{source_dir}/docker_publisher.py
+%exclude %{_datadir}/%{source_dir}/docker_registry.py
%exclude %{_datadir}/%{source_dir}/metrics
%exclude %{_datadir}/%{source_dir}/metrics.py
%exclude %{_datadir}/%{source_dir}/metrics_release.py
@@ -409,6 +431,13 @@
%{_bindir}/osrt-check_source
%{_datadir}/%{source_dir}/check_source.py
+%files docker-publisher
+%{_bindir}/osrt-docker_publisher
+%{_datadir}/%{source_dir}/docker_publisher.py
+%{_datadir}/%{source_dir}/docker_registry.py
+%{_unitdir}/osrt-docker-publisher.service
+%{_unitdir}/osrt-docker-publisher.timer
+
%files maintenance
%{_bindir}/osrt-check_maintenance_incidents
%{_datadir}/%{source_dir}/check_maintenance_incidents.py
++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.iYTSFT/_old 2022-05-31 17:38:18.611028969 +0200
+++ /var/tmp/diff_new_pack.iYTSFT/_new 2022-05-31 17:38:18.615028971 +0200
@@ -1,7 +1,7 @@
<servicedata>
<service name="tar_scm">
<param name="url">https://github.com/openSUSE/openSUSE-release-tools.git</param>
- <param name="changesrevision">ba3b4174aa37bddbca58f6887913c86bf14ed67b</param>
+ <param name="changesrevision">7e00d7d8cbc711305dcee3e12918d148c1173fec</param>
</service>
</servicedata>
++++++ openSUSE-release-tools-20220531.932157b8.obscpio -> openSUSE-release-tools-20220531.7e00d7d8.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20220531.932157b8/.noserc new/openSUSE-release-tools-20220531.7e00d7d8/.noserc
--- old/openSUSE-release-tools-20220531.932157b8/.noserc 2022-05-31 14:59:40.000000000 +0200
+++ new/openSUSE-release-tools-20220531.7e00d7d8/.noserc 2022-05-31 16:04:46.000000000 +0200
@@ -1,2 +1,3 @@
[nosetests]
ignore-files=metrics_release\.py
+ignore-files=docker_.+\.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20220531.932157b8/dist/package/openSUSE-release-tools.spec new/openSUSE-release-tools-20220531.7e00d7d8/dist/package/openSUSE-release-tools.spec
--- old/openSUSE-release-tools-20220531.932157b8/dist/package/openSUSE-release-tools.spec 2022-05-31 14:59:40.000000000 +0200
+++ new/openSUSE-release-tools-20220531.7e00d7d8/dist/package/openSUSE-release-tools.spec 2022-05-31 16:04:46.000000000 +0200
@@ -113,6 +113,18 @@
%description check-source
Check source review bot that performs basic source analysis and assigns reviews.
+%package docker-publisher
+Summary: Docker image publishing bot
+Group: Development/Tools/Other
+BuildArch: noarch
+Requires: python3-requests
+Requires: python3-lxml
+Requires(pre): shadow
+
+%description docker-publisher
+A docker image publishing bot which regularly pushes built docker images from
+several sources (Repo, URL) to several destinations (git, Docker registries)
+
%package maintenance
Summary: Maintenance related services
Group: Development/Tools/Other
@@ -301,6 +313,14 @@
%postun check-source
%{systemd_postun}
+%pre docker-publisher
+getent passwd osrt-docker-publisher > /dev/null || \
+ useradd -r -m -s /sbin/nologin -c "user for openSUSE-release-tools-docker-publisher" osrt-docker-publisher
+exit 0
+
+%postun docker-publisher
+%{systemd_postun}
+
%pre maintenance
getent passwd osrt-maintenance > /dev/null || \
useradd -r -m -s /sbin/nologin -c "user for openSUSE-release-tools-maintenance" osrt-maintenance
@@ -372,6 +392,8 @@
%exclude %{_datadir}/%{source_dir}/check_maintenance_incidents.py
%exclude %{_datadir}/%{source_dir}/check_source.py
%exclude %{_datadir}/%{source_dir}/devel-project.py
+%exclude %{_datadir}/%{source_dir}/docker_publisher.py
+%exclude %{_datadir}/%{source_dir}/docker_registry.py
%exclude %{_datadir}/%{source_dir}/metrics
%exclude %{_datadir}/%{source_dir}/metrics.py
%exclude %{_datadir}/%{source_dir}/metrics_release.py
@@ -409,6 +431,13 @@
%{_bindir}/osrt-check_source
%{_datadir}/%{source_dir}/check_source.py
+%files docker-publisher
+%{_bindir}/osrt-docker_publisher
+%{_datadir}/%{source_dir}/docker_publisher.py
+%{_datadir}/%{source_dir}/docker_registry.py
+%{_unitdir}/osrt-docker-publisher.service
+%{_unitdir}/osrt-docker-publisher.timer
+
%files maintenance
%{_bindir}/osrt-check_maintenance_incidents
%{_datadir}/%{source_dir}/check_maintenance_incidents.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20220531.932157b8/docker_publisher.py new/openSUSE-release-tools-20220531.7e00d7d8/docker_publisher.py
--- old/openSUSE-release-tools-20220531.932157b8/docker_publisher.py 1970-01-01 01:00:00.000000000 +0100
+++ new/openSUSE-release-tools-20220531.7e00d7d8/docker_publisher.py 2022-05-31 16:04:46.000000000 +0200
@@ -0,0 +1,475 @@
+#!/usr/bin/python3
+#
+# Copyright (c) 2022 SUSE LLC
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
+# This script's job is to listen for new releases of products with docker images
+# and publish those.
+
+import argparse
+import json
+import os
+import re
+import requests
+import subprocess
+import sys
+import tempfile
+from lxml import etree as xml
+
+import docker_registry
+
+REPOMD_NAMESPACES = {'md': "http://linux.duke.edu/metadata/common",
+ 'repo': "http://linux.duke.edu/metadata/repo",
+ 'rpm': "http://linux.duke.edu/metadata/rpm"}
+
+
+class DockerImagePublisher:
+ """Base class for handling the publishing of docker images.
+ This handles multiple architectures, which have different layers
+ and therefore versions."""
+
+ def releasedDockerImageVersion(self, arch):
+ """This function returns an identifier for the released docker
+ image's version."""
+ raise Exception("pure virtual")
+
+ def prepareReleasing(self):
+ """Prepare the environment to allow calls to releaseDockerImage."""
+ raise Exception("pure virtual")
+
+ def addImage(self, version, arch, image_path):
+ """This function adds the docker image with the image manifest, config layers
+ in image_path."""
+ raise Exception("pure virtual")
+
+ def finishReleasing(self):
+ """This function publishes the released layers."""
+ raise Exception("pure virtual")
+
+
+class DockerPublishException(Exception):
+ pass
+
+
+class DockerImageFetcher:
+ """Base class for handling the acquiring of docker images."""
+
+ def currentVersion(self):
+ """This function returns the version of the latest available version
+ of the image for the product."""
+ raise Exception("pure virtual")
+
+ def getDockerImage(self, callback):
+ """This function downloads the root fs layer and calls callback
+ with its path as argument."""
+ raise Exception("pure virtual")
+
+
+class DockerFetchException(Exception):
+ pass
+
+
+class DockerImagePublisherRegistry(DockerImagePublisher):
+ """The DockerImagePublisherRegistry class works by using a manifest list to
+ describe a tag. The list contains a manifest for each architecture.
+ The manifest will be edited instead of replaced, which means if you don't
+ call addImage for an architecture, the existing released image stays in place."""
+ MAP_ARCH_RPM_DOCKER = {'i586': ("386", None),
+ 'x86_64': ("amd64", None),
+ 'armv6l': ("arm", "v6"),
+ 'armv7l': ("arm", "v7"),
+ 'aarch64': ("arm64", "v8"),
+ 'ppc64le': ("ppc64le", None),
+ 's390x': ("s390x", None)}
+
+ def __init__(self, dhc, tag, aliases=[]):
+ """Construct a DIPR by passing a DockerRegistryClient instance as dhc
+ and a name for a tag as tag.
+ Optionally, add tag aliases as aliases. Those will only be written to,
+ never read."""
+ self.dhc = dhc
+ self.tag = tag
+ self.aliases = aliases
+ # The manifestlist for the tag is only downloaded if this cache is empty,
+ # so needs to be set to None to force a redownload.
+ self.cached_manifestlist = None
+ # Construct a new manifestlist for the tag.
+ self.new_manifestlist = None
+
+ def getDockerArch(self, arch):
+ if arch not in self.MAP_ARCH_RPM_DOCKER:
+ raise DockerPublishException("Unknown arch %s" % arch)
+
+ return self.MAP_ARCH_RPM_DOCKER[arch]
+
+ def _getManifestlist(self):
+ if self.cached_manifestlist is None:
+ self.cached_manifestlist = self.dhc.getManifest(self.tag)
+
+ return self.cached_manifestlist
+
+ def releasedDockerImageVersion(self, arch):
+ docker_arch, docker_variant = self.getDockerArch(arch)
+
+ manifestlist = self._getManifestlist()
+
+ if manifestlist is None:
+ # No manifest -> force outdated version
+ return "0"
+
+ for manifest in manifestlist['manifests']:
+ if docker_variant is not None:
+ if 'variant' not in manifest['platform'] or manifest['platform']['variant'] != docker_variant:
+ continue
+
+ if manifest['platform']['architecture'] == docker_arch:
+ if 'vnd-opensuse-version' in manifest:
+ return manifest['vnd-opensuse-version']
+
+ # Arch not in the manifest -> force outdated version
+ return "0"
+
+ def prepareReleasing(self):
+ if self.new_manifestlist is not None:
+ raise DockerPublishException("Did not finish publishing")
+
+ self.new_manifestlist = self._getManifestlist()
+
+ # Generate an empty manifestlist
+ if not self.new_manifestlist:
+ self.new_manifestlist = {'schemaVersion': 2,
+ 'tag': self.tag,
+ 'mediaType': "application/vnd.docker.distribution.manifest.list.v2+json",
+ 'manifests': []}
+
+ return True
+
+ def getV2ManifestEntry(self, path, filename, mediaType):
+ """For V1 -> V2 schema conversion. filename has to contain the digest"""
+ digest = filename
+
+ if re.match(r"^[a-f0-9]{64}", digest):
+ digest = "sha256:" + os.path.splitext(digest)[0]
+
+ if not digest.startswith("sha256"):
+ raise DockerPublishException("Invalid manifest contents")
+
+ return {'mediaType': mediaType,
+ 'size': os.path.getsize(path + "/" + filename),
+ 'digest': digest,
+ 'x-osdp-filename': filename}
+
+ def convertV1ToV2Manifest(self, path, manifest_v1):
+ """Converts the v1 manifest in manifest_v1 to a V2 manifest and returns it"""
+
+ layers = []
+ # The order of layers changed in V1 -> V2
+ for layer_filename in manifest_v1['Layers'][::-1]:
+ layers += [self.getV2ManifestEntry(path, layer_filename,
+ "application/vnd.docker.image.rootfs.diff.tar.gzip")]
+
+ return {'schemaVersion': 2,
+ 'mediaType': "application/vnd.docker.distribution.manifest.v2+json",
+ 'config': self.getV2ManifestEntry(path, manifest_v1['Config'],
+ "application/vnd.docker.container.image.v1+json"),
+ 'layers': layers}
+
+ def addImage(self, version, arch, image_path):
+ docker_arch, docker_variant = self.getDockerArch(arch)
+
+ manifest = None
+
+ with open(image_path + "/manifest.json") as manifest_file:
+ manifest = json.load(manifest_file)
+
+ manifest_v2 = self.convertV1ToV2Manifest(image_path, manifest[0])
+ # Upload blobs
+ if not self.dhc.uploadBlob(image_path + "/" + manifest_v2['config']['x-osdp-filename'],
+ manifest_v2['config']['digest']):
+ raise DockerPublishException("Could not upload the image config")
+
+ for layer in manifest_v2['layers']:
+ if not self.dhc.uploadBlob(image_path + "/" + layer['x-osdp-filename'],
+ layer['digest']):
+ raise DockerPublishException("Could not upload an image layer")
+
+ # Upload the manifest
+ manifest_content = json.dumps(manifest_v2).encode("utf-8")
+ manifest_digest = self.dhc.uploadManifest(manifest_content)
+
+ if manifest_digest is False:
+ raise DockerPublishException("Could not upload the manifest")
+
+ # Register the manifest in the list
+ replaced = False
+ for manifest in self.new_manifestlist['manifests']:
+ if 'variant' in manifest['platform'] and manifest['platform']['variant'] != docker_variant:
+ continue
+
+ if manifest['platform']['architecture'] == docker_arch:
+ manifest['mediaType'] = manifest_v2['mediaType']
+ manifest['size'] = len(manifest_content)
+ manifest['digest'] = manifest_digest
+ manifest['vnd-opensuse-version'] = version
+ if docker_variant is not None:
+ manifest['platform']['variant'] = docker_variant
+
+ replaced = True
+
+ if not replaced:
+ # Add it instead
+ manifest = {'mediaType': manifest_v2['mediaType'],
+ 'size': len(manifest_content),
+ 'digest': manifest_digest,
+ 'vnd-opensuse-version': version,
+ 'platform': {
+ 'architecture': docker_arch,
+ 'os': "linux"}
+ }
+ if docker_variant is not None:
+ manifest['platform']['variant'] = docker_variant
+
+ self.new_manifestlist['manifests'] += [manifest]
+
+ return True
+
+ def finishReleasing(self):
+ # Generate the manifest content
+ manifestlist_content = json.dumps(self.new_manifestlist).encode('utf-8')
+
+ # Push the aliases
+ for alias in self.aliases:
+ if not self.dhc.uploadManifest(manifestlist_content, alias):
+ raise DockerPublishException("Could not push an manifest list alias")
+
+ # Push the new manifest list
+ if not self.dhc.uploadManifest(manifestlist_content, self.tag):
+ raise DockerPublishException("Could not upload the new manifest list")
+
+ self.new_manifestlist = None
+ self.cached_manifestlist = None # force redownload
+
+ return True
+
+
+class DockerImageFetcherURL(DockerImageFetcher):
+ """A trivial implementation. It downloads a (compressed) tar archive and passes
+ the decompressed contents to the callback.
+ The version number can't be determined automatically (it would need to extract
+ the image and look at /etc/os-release each time - too expensive.) so it
+ has to be passed manually."""
+ def __init__(self, version, url):
+ self.version = version
+ self.url = url
+
+ def currentVersion(self):
+ return self.version
+
+ def getDockerImage(self, callback):
+ """Download the tar and extract it"""
+ with tempfile.NamedTemporaryFile() as tar_file:
+ tar_file.write(requests.get(self.url).content)
+ with tempfile.TemporaryDirectory() as tar_dir:
+ # Extract the .tar.xz into the dir
+ subprocess.call("tar -xaf '%s' -C '%s'" % (tar_file.name, tar_dir), shell=True)
+ return callback(tar_dir)
+
+
+class DockerImageFetcherOBS(DockerImageFetcher):
+ """Uses the OBS API to access the build artifacts.
+ Url has to be https://build.opensuse.org/public/build/<project>/<repo>/<arch>/<pkgname>
+ If maintenance_release is True, it picks the buildcontainer released last with that name.
+ e.g. for "foo" it would pick "foo.2019" instead of "foo" or "foo.2018"."""
+ def __init__(self, url, maintenance_release=False):
+ self.url = url
+ self.newest_release_url = None
+ if not maintenance_release:
+ self.newest_release_url = url
+
+ def _isMaintenanceReleaseOf(self, release, source):
+ """Returns whether release describes a maintenance release of source.
+ E.g. "foo.2019", "foo" -> True, "foo-asdf", "foo" -> False"""
+ sourcebuildflavor = source.split(":")[1] if ":" in source else None
+ releasebuildflavor = release.split(":")[1] if ":" in release else None
+ return sourcebuildflavor == releasebuildflavor and release.startswith(source.split(":")[0] + ".")
+
+ def _getNewestReleaseUrl(self):
+ if self.newest_release_url is None:
+ buildcontainername = self.url.split("/")[-1]
+ prjurl = self.url + "/.."
+ buildcontainerlist_req = requests.get(prjurl)
+ buildcontainerlist = xml.fromstring(buildcontainerlist_req.content)
+ releases = [entry for entry in buildcontainerlist.xpath("entry/@name") if
+ self._isMaintenanceReleaseOf(entry, buildcontainername)]
+ releases.sort()
+ # Pick the first one with binaries
+ for release in releases[::-1] + [buildcontainername]:
+ self.newest_release_url = prjurl + "/" + release
+ try:
+ self._getFilename()
+ break
+ except DockerFetchException:
+ continue
+
+ return self.newest_release_url
+
+ def _getFilename(self):
+ """Return the name of the binary at the URL with the filename ending in
+ .docker.tar."""
+ binarylist_req = requests.get(self._getNewestReleaseUrl())
+ binarylist = xml.fromstring(binarylist_req.content)
+ for binary in binarylist.xpath("binary/@filename"):
+ if binary.endswith(".docker.tar"):
+ return binary
+
+ raise DockerFetchException("No docker image built in the repository")
+
+ def currentVersion(self):
+ """Return {version}-?({flavor}-)Build{build} of the docker file."""
+ filename = self._getFilename()
+ # Capture everything between arch and filename suffix
+ return re.match(r'[^.]*\.[^.]+-(.*)\.docker\.tar$', filename).group(1)
+
+ def getDockerImage(self, callback):
+ """Download the tar and extract it"""
+ filename = self._getFilename()
+ with tempfile.NamedTemporaryFile() as tar_file:
+ tar_file.write(requests.get(self.newest_release_url + "/" + filename).content)
+ with tempfile.TemporaryDirectory() as tar_dir:
+ # Extract the .tar into the dir
+ subprocess.call("tar -xaf '%s' -C '%s'" % (tar_file.name, tar_dir), shell=True)
+ return callback(tar_dir)
+
+
+def run():
+ drc_tw = docker_registry.DockerRegistryClient(os.environ['REGISTRY'], os.environ['REGISTRY_USER'], os.environ['REGISTRY_PASSWORD'],
+ os.environ['REGISTRY_REPO_TW'])
+ drc_leap = docker_registry.DockerRegistryClient(os.environ['REGISTRY'], os.environ['REGISTRY_USER'], os.environ['REGISTRY_PASSWORD'],
+ os.environ['REGISTRY_REPO_LEAP'])
+
+ config = {
+ 'tumbleweed': {
+ 'fetchers': {
+ 'i586': DockerImageFetcherOBS(url="https://build.opensuse.org/public/build/openSUSE:Containers:Tumbleweed/cont…", maintenance_release=True), # noqa: E501
+ 'x86_64': DockerImageFetcherOBS(url="https://build.opensuse.org/public/build/openSUSE:Containers:Tumbleweed/cont…", maintenance_release=True), # noqa: E501
+ 'aarch64': DockerImageFetcherOBS(url="https://build.opensuse.org/public/build/openSUSE:Containers:Tumbleweed/cont…", maintenance_release=True), # noqa: E501
+ 'armv7l': DockerImageFetcherOBS(url="https://build.opensuse.org/public/build/openSUSE:Containers:Tumbleweed/cont…", maintenance_release=True), # noqa: E501
+ 'armv6l': DockerImageFetcherOBS(url="https://build.opensuse.org/public/build/openSUSE:Containers:Tumbleweed/cont…", maintenance_release=True), # noqa: E501
+ 'ppc64le': DockerImageFetcherOBS(url="https://build.opensuse.org/public/build/openSUSE:Containers:Tumbleweed/cont…", maintenance_release=True), # noqa: E501
+ 's390x': DockerImageFetcherOBS(url="https://build.opensuse.org/public/build/openSUSE:Containers:Tumbleweed/cont…", maintenance_release=True), # noqa: E501
+ },
+ 'publisher': DockerImagePublisherRegistry(drc_tw, "latest"),
+ },
+ 'leap-15.3': {
+ 'fetchers': {
+ 'x86_64': DockerImageFetcherOBS(url="https://build.opensuse.org/public/build/openSUSE:Containers:Leap:15.3/conta…", maintenance_release=True), # noqa: E501
+ 'aarch64': DockerImageFetcherOBS(url="https://build.opensuse.org/public/build/openSUSE:Containers:Leap:15.3/conta…", maintenance_release=True), # noqa: E501
+ 'armv7l': DockerImageFetcherOBS(url="https://build.opensuse.org/public/build/openSUSE:Containers:Leap:15.3/conta…", maintenance_release=True), # noqa: E501
+ 'ppc64le': DockerImageFetcherOBS(url="https://build.opensuse.org/public/build/openSUSE:Containers:Leap:15.3/conta…", maintenance_release=True), # noqa: E501
+ 's390x': DockerImageFetcherOBS(url="https://build.opensuse.org/public/build/openSUSE:Containers:Leap:15.3/conta…", maintenance_release=True), # noqa: E501
+ },
+ 'publisher': DockerImagePublisherRegistry(drc_leap, "latest", ["15.3", "15"]),
+ },
+ 'leap-15.4': {
+ 'fetchers': {
+ 'x86_64': DockerImageFetcherOBS(url="https://build.opensuse.org/public/build/openSUSE:Containers:Leap:15.4/conta…", maintenance_release=True), # noqa: E501
+ 'aarch64': DockerImageFetcherOBS(url="https://build.opensuse.org/public/build/openSUSE:Containers:Leap:15.4/conta…", maintenance_release=True), # noqa: E501
+ 'ppc64le': DockerImageFetcherOBS(url="https://build.opensuse.org/public/build/openSUSE:Containers:Leap:15.4/conta…", maintenance_release=True), # noqa: E501
+ 's390x': DockerImageFetcherOBS(url="https://build.opensuse.org/public/build/openSUSE:Containers:Leap:15.4/conta…", maintenance_release=True), # noqa: E501
+ },
+ 'publisher': DockerImagePublisherRegistry(drc_leap, "15.4"),
+ },
+ }
+
+ # Parse args after defining the config - the available distros are included
+ # in the help output
+ parser = argparse.ArgumentParser(description="Docker image publish script",
+ formatter_class=argparse.ArgumentDefaultsHelpFormatter)
+ parser.add_argument("distros", metavar="distro", type=str, nargs="*",
+ default=[key for key in config],
+ help="Which distros to check for images to publish.")
+
+ args = parser.parse_args()
+
+ success = True
+
+ for distro in args.distros:
+ print("Handling %s" % distro)
+
+ archs_to_update = {}
+ fetchers = config[distro]['fetchers']
+ publisher = config[distro]['publisher']
+
+ for arch in fetchers:
+ print("\tArchitecture %s" % arch)
+ try:
+ current = fetchers[arch].currentVersion()
+ print("\t\tAvailable version: %s" % current)
+
+ released = publisher.releasedDockerImageVersion(arch)
+ print("\t\tReleased version: %s" % released)
+
+ if current != released:
+ archs_to_update[arch] = current
+ except Exception as e:
+ print("\t\tException during version fetching: %s" % e)
+
+ if not archs_to_update:
+ print("\tNothing to do.")
+ continue
+
+ if not publisher.prepareReleasing():
+ print("\tCould not prepare the publishing")
+ success = False
+ continue
+
+ need_to_upload = False
+
+ for arch, version in archs_to_update.items():
+ print("\tUpdating %s image to version %s" % (arch, version))
+ try:
+ fetchers[arch].getDockerImage(lambda image_path: publisher.addImage(version=version,
+ arch=arch,
+ image_path=image_path))
+ need_to_upload = True
+
+ except DockerFetchException as dfe:
+ print("\t\tCould not fetch the image: %s" % dfe)
+ success = False
+ continue
+ except DockerPublishException as dpe:
+ print("\t\tCould not publish the image: %s" % dpe)
+ success = False
+ continue
+
+ # If nothing got added to the publisher, don't try to upload it.
+ # For docker hub it'll just update the "last pushed" time without any change
+ if not need_to_upload:
+ continue
+
+ if not publisher.finishReleasing():
+ print("\tCould not publish the image")
+ continue
+
+ return 0 if success else 1
+
+
+if __name__ == "__main__":
+ sys.exit(run())
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20220531.932157b8/docker_registry.py new/openSUSE-release-tools-20220531.7e00d7d8/docker_registry.py
--- old/openSUSE-release-tools-20220531.932157b8/docker_registry.py 1970-01-01 01:00:00.000000000 +0100
+++ new/openSUSE-release-tools-20220531.7e00d7d8/docker_registry.py 2022-05-31 16:04:46.000000000 +0200
@@ -0,0 +1,214 @@
+#!/usr/bin/python3
+#
+# Copyright (c) 2018 SUSE LLC
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
+# This is a very basic client for the Docker Registry V2 API.
+# It exists for a single reason: All clients either:
+# - Don't work
+# - Don't support uploading
+# - Don't support multi-arch images (manifest lists)
+# and some even all three.
+
+import hashlib
+import json
+import os
+import urllib.parse
+import requests
+
+
+class DockerRegistryClient():
+ def __init__(self, url, username, password, repository):
+ self.url = url
+ self.username = username
+ self.password = password
+ self.repository = repository
+ self.scopes = ["repository:%s:pull,push,delete" % repository]
+ self.token = None
+
+ class DockerRegistryError(Exception):
+ """Some nicer display of docker registry errors"""
+ def __init__(self, errors):
+ self.errors = errors
+
+ def __str__(self):
+ ret = "Docker Registry errors:"
+ for error in self.errors:
+ ret += "\n" + str(error)
+
+ return ret
+
+ def _updateToken(self, www_authenticate):
+ bearer_parts = www_authenticate[len("Bearer "):].split(",")
+ bearer_dict = {}
+ for part in bearer_parts:
+ assignment = part.split('=')
+ bearer_dict[assignment[0]] = assignment[1].strip('"')
+
+ scope_param = "&scope=".join([""] + [urllib.parse.quote(scope) for scope in self.scopes])
+ response = requests.get("%s?service=%s%s" % (bearer_dict['realm'], bearer_dict['service'], scope_param),
+ auth=(self.username, self.password))
+ self.token = response.json()['token']
+
+ def doHttpCall(self, method, url, **kwargs):
+ """This method wraps the requested method from the requests module to
+ add the token for authorization."""
+ try_update_token = True
+
+ # Relative to the host
+ if url.startswith("/"):
+ url = self.url + url
+
+ if "headers" not in kwargs:
+ kwargs['headers'] = {}
+
+ while True:
+ resp = None
+ if self.token is not None:
+ kwargs['headers']['Authorization'] = "Bearer " + self.token
+
+ methods = {'POST': requests.post,
+ 'GET': requests.get,
+ 'HEAD': requests.head,
+ 'PUT': requests.put,
+ 'DELETE': requests.delete}
+
+ if method not in methods:
+ return False
+
+ resp = methods[method](url, **kwargs)
+
+ if resp.status_code == 401 or resp.status_code == 403:
+ if try_update_token:
+ try_update_token = False
+ self._updateToken(resp.headers['Www-Authenticate'])
+ continue
+
+ if resp.status_code > 400 and resp.status_code < 404:
+ try:
+ errors = resp.json()['errors']
+ raise self.DockerRegistryError(errors)
+ except ValueError:
+ pass
+
+ return resp
+
+ def uploadManifest(self, content, reference=None):
+ """Upload a manifest. Data is given as bytes in content, the digest/tag in reference.
+ If reference is None, the digest is computed and used as reference.
+ On success, the used reference is returned. False otherwise."""
+ content_json = json.loads(content.decode('utf-8'))
+ if "mediaType" not in content_json:
+ raise Exception("Invalid manifest")
+
+ if reference is None:
+ alg = hashlib.sha256()
+ alg.update(content)
+ reference = "sha256:" + alg.hexdigest()
+
+ resp = self.doHttpCall("PUT", "/v2/%s/manifests/%s" % (self.repository, reference),
+ headers={'Content-Type': content_json['mediaType']},
+ data=content)
+
+ if resp.status_code != 201:
+ return False
+
+ return reference
+
+ def uploadManifestFile(self, filename, reference=None):
+ """Upload a manifest. If the filename doesn't equal the digest, it's computed.
+ If reference is None, the digest is used. You can use the manifest's tag
+ for example.
+ On success, the used reference is returned. False otherwise."""
+ with open(filename, "rb") as manifest:
+ content = manifest.read()
+
+ if reference is None:
+ basename = os.path.basename(filename)
+ if basename.startswith("sha256:"):
+ reference = basename
+
+ if reference is None:
+ raise Exception("No reference determined")
+
+ return self.uploadManifest(content, reference)
+
+ def getManifest(self, reference):
+ """Get a (json-parsed) manifest with the given reference (digest or tag).
+ If the manifest does not exist, return None. For other errors, False."""
+ resp = self.doHttpCall("GET", "/v2/%s/manifests/%s" % (self.repository, reference),
+ headers={'Accept': "application/vnd.docker.distribution.manifest.list.v2+json,application/vnd.docker.distribution.manifest.v2+json"}) # noqa: E501
+
+ if resp.status_code == 404:
+ return None
+
+ if resp.status_code != 200:
+ return False
+
+ return resp.json()
+
+ def getManifestDigest(self, reference):
+ """Return the digest of the manifest with the given reference.
+ If the manifest doesn't exist or the request fails, it returns False."""
+ resp = self.doHttpCall("HEAD", "/v2/%s/manifests/%s" % (self.repository, reference),
+ headers={'Accept': "application/vnd.docker.distribution.manifest.list.v2+json,application/vnd.docker.distribution.manifest.v2+json"}) # noqa: E501
+
+ if resp.status_code != 200:
+ return False
+
+ return resp.headers['Docker-Content-Digest']
+
+ def deleteManifest(self, digest):
+ """Delete the manifest with the given reference."""
+ resp = self.doHttpCall("DELETE", "/v2/%s/manifests/%s" % (self.repository, digest))
+
+ return resp.status_code == 202
+
+ def uploadBlob(self, filename, digest=None):
+ """Upload the blob with the given filename and digest. If digest is None,
+ the basename has to equal the digest.
+ Returns True if blob already exists or upload succeeded."""
+
+ if digest is None:
+ digest = os.path.basename(filename)
+
+ if not digest.startswith("sha256:"):
+ raise Exception("Invalid digest")
+
+ # Check whether the blob already exists - don't upload it needlessly.
+ stat_request = self.doHttpCall("HEAD", "/v2/%s/blobs/%s" % (self.repository, digest))
+ if stat_request.status_code == 200 or stat_request.status_code == 307:
+ return True
+
+ # For now we can do a single upload call with everything inlined
+ # (which also means completely in ram, but currently it's never > 50 MiB)
+ content = None
+ with open(filename, "rb") as blob:
+ content = blob.read()
+
+ # First request an upload "slot", we get an URL we can PUT to back
+ upload_request = self.doHttpCall("POST", "/v2/%s/blobs/uploads/" % self.repository)
+ if upload_request.status_code == 202:
+ location = upload_request.headers['Location']
+ upload = self.doHttpCall("PUT", location + "&digest=" + digest,
+ data=content)
+ return upload.status_code == 201
+
+ return False
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20220531.932157b8/gocd/dockerhub-publisher.yaml new/openSUSE-release-tools-20220531.7e00d7d8/gocd/dockerhub-publisher.yaml
--- old/openSUSE-release-tools-20220531.932157b8/gocd/dockerhub-publisher.yaml 1970-01-01 01:00:00.000000000 +0100
+++ new/openSUSE-release-tools-20220531.7e00d7d8/gocd/dockerhub-publisher.yaml 2022-05-31 16:04:46.000000000 +0200
@@ -0,0 +1,26 @@
+format_version: 3
+pipelines:
+ openSUSE.DockerHub.Publish:
+ group: openSUSE.Checkers
+ lock_behavior: unlockWhenFinished
+ environment_variables:
+ REGISTRY: 'https://registry-1.docker.io'
+ REGISTRY_USER: 'opensusereleasebot'
+ REGISTRY_PASSWORD: '{{SECRET:[opensuse.secrets][REGISTRY_PASSWORD]}}'
+ REGISTRY_REPO_TW: 'opensuse/tumbleweed'
+ REGISTRY_REPO_LEAP: 'opensuse/leap'
+ materials:
+ git:
+ git: https://github.com/Vogtinator/opensuse-release-tools.git
+ branch: docker-release-gocd
+ timer:
+ spec: 0 */15 * ? * *
+ only_on_changes: false
+ stages:
+ - Run:
+ approval: manual
+ resources:
+ - staging-bot
+ tasks:
+ - script:
+ ./docker_publisher.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20220531.932157b8/systemd/osrt-docker-publisher.service new/openSUSE-release-tools-20220531.7e00d7d8/systemd/osrt-docker-publisher.service
--- old/openSUSE-release-tools-20220531.932157b8/systemd/osrt-docker-publisher.service 1970-01-01 01:00:00.000000000 +0100
+++ new/openSUSE-release-tools-20220531.7e00d7d8/systemd/osrt-docker-publisher.service 2022-05-31 16:04:46.000000000 +0200
@@ -0,0 +1,10 @@
+[Unit]
+Description=openSUSE Release Tools: Docker image publisher
+
+[Service]
+User=osrt-docker-publisher
+EnvironmentFile=/home/osrt-docker-publisher/.config/osrt-docker_publisher
+ExecStart=/usr/bin/osrt-docker_publisher
+
+[Install]
+WantedBy=multi-user.target
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20220531.932157b8/systemd/osrt-docker-publisher.timer new/openSUSE-release-tools-20220531.7e00d7d8/systemd/osrt-docker-publisher.timer
--- old/openSUSE-release-tools-20220531.932157b8/systemd/osrt-docker-publisher.timer 1970-01-01 01:00:00.000000000 +0100
+++ new/openSUSE-release-tools-20220531.7e00d7d8/systemd/osrt-docker-publisher.timer 2022-05-31 16:04:46.000000000 +0200
@@ -0,0 +1,10 @@
+[Unit]
+Description=openSUSE Release Tools: Docker image publisher
+
+[Timer]
+OnBootSec=120
+OnUnitInactiveSec=15 min
+Unit=osrt-docker-publisher.service
+
+[Install]
+WantedBy=timers.target
++++++ openSUSE-release-tools.obsinfo ++++++
--- /var/tmp/diff_new_pack.iYTSFT/_old 2022-05-31 17:38:19.323029327 +0200
+++ /var/tmp/diff_new_pack.iYTSFT/_new 2022-05-31 17:38:19.323029327 +0200
@@ -1,5 +1,5 @@
name: openSUSE-release-tools
-version: 20220531.932157b8
-mtime: 1654001980
-commit: 932157b819255f884b3c1638ac5a8468385924f6
+version: 20220531.7e00d7d8
+mtime: 1654005886
+commit: 7e00d7d8cbc711305dcee3e12918d148c1173fec
1
0