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
November 2023
- 1 participants
- 1691 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 grype for openSUSE:Factory checked in at 2023-11-30 22:04:49
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/grype (Old)
and /work/SRC/openSUSE:Factory/.grype.new.25432 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "grype"
Thu Nov 30 22:04:49 2023 rev:45 rq:1130055 version:0.73.4
Changes:
--------
--- /work/SRC/openSUSE:Factory/grype/grype.changes 2023-11-20 21:20:41.633338101 +0100
+++ /work/SRC/openSUSE:Factory/.grype.new.25432/grype.changes 2023-11-30 22:06:05.211773452 +0100
@@ -1,0 +2,12 @@
+Thu Nov 30 16:24:35 UTC 2023 - kastl(a)b1-systems.de
+
+- Update to version 0.73.4:
+ * chore: bump to syft v0.98.0 in quality gate tests (#1623)
+ * chore: update syft; go mod tidy (#1621)
+ * chore(deps): bump github.com/spf13/afero from 1.10.0 to 1.11.0
+ (#1618)
+ * chore: explicitly test maven suffixes (#1617)
+ * chore(deps): bump anchore/sbom-action from 0.14.3 to 0.15.0
+ (#1611)
+
+-------------------------------------------------------------------
Old:
----
grype-0.73.3.obscpio
New:
----
grype-0.73.4.obscpio
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ grype.spec ++++++
--- /var/tmp/diff_new_pack.HJXNFj/_old 2023-11-30 22:06:06.499820916 +0100
+++ /var/tmp/diff_new_pack.HJXNFj/_new 2023-11-30 22:06:06.503821063 +0100
@@ -19,7 +19,7 @@
%define __arch_install_post export NO_BRP_STRIP_DEBUG=true
Name: grype
-Version: 0.73.3
+Version: 0.73.4
Release: 0
Summary: A vulnerability scanner for container images and filesystems
License: Apache-2.0
++++++ _service ++++++
--- /var/tmp/diff_new_pack.HJXNFj/_old 2023-11-30 22:06:06.527821948 +0100
+++ /var/tmp/diff_new_pack.HJXNFj/_new 2023-11-30 22:06:06.531822095 +0100
@@ -3,7 +3,7 @@
<param name="url">https://github.com/anchore/grype</param>
<param name="scm">git</param>
<param name="exclude">.git</param>
- <param name="revision">v0.73.3</param>
+ <param name="revision">v0.73.4</param>
<param name="versionformat">@PARENT_TAG@</param>
<param name="changesgenerate">enable</param>
<param name="versionrewrite-pattern">v(.*)</param>
++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.HJXNFj/_old 2023-11-30 22:06:06.547822684 +0100
+++ /var/tmp/diff_new_pack.HJXNFj/_new 2023-11-30 22:06:06.551822832 +0100
@@ -1,6 +1,6 @@
<servicedata>
<service name="tar_scm">
<param name="url">https://github.com/anchore/grype</param>
- <param name="changesrevision">dbe2a9515a99ef1c78e22ead0cbf17b29fb1b674</param></service></servicedata>
+ <param name="changesrevision">a4bced160291e81dbdeaa415d20e64b8741ee00d</param></service></servicedata>
(No newline at EOF)
++++++ grype-0.73.3.obscpio -> grype-0.73.4.obscpio ++++++
/work/SRC/openSUSE:Factory/grype/grype-0.73.3.obscpio /work/SRC/openSUSE:Factory/.grype.new.25432/grype-0.73.4.obscpio differ: char 49, line 1
++++++ grype.obsinfo ++++++
--- /var/tmp/diff_new_pack.HJXNFj/_old 2023-11-30 22:06:06.583824011 +0100
+++ /var/tmp/diff_new_pack.HJXNFj/_new 2023-11-30 22:06:06.587824159 +0100
@@ -1,5 +1,5 @@
name: grype
-version: 0.73.3
-mtime: 1700256427
-commit: dbe2a9515a99ef1c78e22ead0cbf17b29fb1b674
+version: 0.73.4
+mtime: 1701354154
+commit: a4bced160291e81dbdeaa415d20e64b8741ee00d
++++++ vendor.tar.gz ++++++
/work/SRC/openSUSE:Factory/grype/vendor.tar.gz /work/SRC/openSUSE:Factory/.grype.new.25432/vendor.tar.gz differ: char 5, line 1
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package aardvark-dns for openSUSE:Factory checked in at 2023-11-30 22:04:46
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/aardvark-dns (Old)
and /work/SRC/openSUSE:Factory/.aardvark-dns.new.25432 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "aardvark-dns"
Thu Nov 30 22:04:46 2023 rev:7 rq:1130036 version:1.9.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/aardvark-dns/aardvark-dns.changes 2023-10-17 20:25:30.320346913 +0200
+++ /work/SRC/openSUSE:Factory/.aardvark-dns.new.25432/aardvark-dns.changes 2023-11-30 22:06:03.435708004 +0100
@@ -1,0 +2,23 @@
+Thu Nov 30 07:05:22 UTC 2023 - danish.prakash(a)suse.com
+
+- Update to version 1.9.0:
+ * Release v1.9.0
+ * v1.9.0 Update release notes
+ * run cargo update
+ * chore(deps): update dependency containers/automation_images to v20231116
+ * fix(deps): update rust crate tokio to 1.34.0
+ * fix(deps): update rust crate async-broadcast to 0.6.0
+ * update trust-dns to hickory
+ * fix(deps): update rust crate futures-util to 0.3.29
+ * fix(deps): update rust crate trust-dns-server to 0.23.2
+ * fix(deps): update rust crate trust-dns-proto to 0.23.2
+ * tmt: initial enablement
+ * aardvark main: change error reporting
+ * chore(deps): update dependency containers/automation_images to v20231004
+ * fix(deps): update rust crate trust-dns-proto to 0.23.1
+ * fix(deps): update rust crate trust-dns-client to 0.23.1
+ * clippy: some format fixes
+ * fix(deps): update rust crate tokio to 1.33.0
+ * Bump to v1.9.0-dev
+
+-------------------------------------------------------------------
Old:
----
aardvark-dns-1.8.0.tar.gz
New:
----
aardvark-dns-1.9.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ aardvark-dns.spec ++++++
--- /var/tmp/diff_new_pack.kNBl45/_old 2023-11-30 22:06:04.603751046 +0100
+++ /var/tmp/diff_new_pack.kNBl45/_new 2023-11-30 22:06:04.607751194 +0100
@@ -17,7 +17,7 @@
Name: aardvark-dns
-Version: 1.8.0
+Version: 1.9.0
Release: 0
Summary: Authoritative dns server for A/AAAA container records
License: Apache-2.0
++++++ _service ++++++
--- /var/tmp/diff_new_pack.kNBl45/_old 2023-11-30 22:06:04.639752373 +0100
+++ /var/tmp/diff_new_pack.kNBl45/_new 2023-11-30 22:06:04.639752373 +0100
@@ -3,7 +3,7 @@
<param name="url">https://github.com/containers/aardvark-dns</param>
<param name="versionformat">@PARENT_TAG@</param>
<param name="scm">git</param>
- <param name="revision">v1.8.0</param>
+ <param name="revision">v1.9.0</param>
<param name="match-tag">*</param>
<param name="versionrewrite-pattern">v(\d+\.\d+\.\d+)</param>
<param name="versionrewrite-replacement">\1</param>
++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.kNBl45/_old 2023-11-30 22:06:04.659753110 +0100
+++ /var/tmp/diff_new_pack.kNBl45/_new 2023-11-30 22:06:04.663753257 +0100
@@ -1,6 +1,6 @@
<servicedata>
<service name="tar_scm">
<param name="url">https://github.com/containers/aardvark-dns</param>
- <param name="changesrevision">1ed940206e0f39887fc35943ab852387dec9f794</param></service></servicedata>
+ <param name="changesrevision">e4785bd5430e7f3006bb537e95c2a0f9311f85bc</param></service></servicedata>
(No newline at EOF)
++++++ aardvark-dns-1.8.0.tar.gz -> aardvark-dns-1.9.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aardvark-dns-1.8.0/.cirrus.yml new/aardvark-dns-1.9.0/.cirrus.yml
--- old/aardvark-dns-1.8.0/.cirrus.yml 2023-09-27 19:03:24.000000000 +0200
+++ new/aardvark-dns-1.9.0/.cirrus.yml 2023-11-20 21:01:52.000000000 +0100
@@ -19,7 +19,7 @@
NETAVARK_URL: "https://api.cirrus-ci.com/v1/artifact/github/containers/netavark/success/bi…"
# Save a little typing (path relative to $CIRRUS_WORKING_DIR)
SCRIPT_BASE: "./contrib/cirrus"
- IMAGE_SUFFIX: "c20230816t191118z-f38f37d13"
+ IMAGE_SUFFIX: "c20231116t174419z-f39f38d13"
FEDORA_NETAVARK_IMAGE: "fedora-netavark-${IMAGE_SUFFIX}"
FEDORA_NETAVARK_AMI: "fedora-netavark-aws-arm64-${IMAGE_SUFFIX}"
EC2_INST_TYPE: "t4g.xlarge"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aardvark-dns-1.8.0/.fmf/version new/aardvark-dns-1.9.0/.fmf/version
--- old/aardvark-dns-1.8.0/.fmf/version 1970-01-01 01:00:00.000000000 +0100
+++ new/aardvark-dns-1.9.0/.fmf/version 2023-11-20 21:01:52.000000000 +0100
@@ -0,0 +1 @@
+1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aardvark-dns-1.8.0/.packit.yaml new/aardvark-dns-1.9.0/.packit.yaml
--- old/aardvark-dns-1.8.0/.packit.yaml 2023-09-27 19:03:24.000000000 +0200
+++ new/aardvark-dns-1.9.0/.packit.yaml 2023-11-20 21:01:52.000000000 +0100
@@ -16,16 +16,22 @@
notifications:
failure_comment:
message: "Ephemeral COPR build failed. @containers/packit-build please check."
- enable_net: true
targets:
- - fedora-all-x86_64
- - fedora-all-aarch64
- - centos-stream+epel-next-8-x86_64
- - centos-stream+epel-next-8-aarch64
- - centos-stream+epel-next-9-x86_64
- - centos-stream+epel-next-9-aarch64
+ fedora-all-x86_64: {}
+ fedora-all-aarch64: {}
+ fedora-eln-x86_64:
+ additional_repos:
+ - "https://kojipkgs.fedoraproject.org/repos/eln-build/latest/x86_64/"
+ fedora-eln-aarch64:
+ additional_repos:
+ - "https://kojipkgs.fedoraproject.org/repos/eln-build/latest/aarch64/"
+ epel-8-x86_64: {}
+ epel-8-aarch64: {}
+ epel-9-x86_64: {}
+ epel-9-aarch64: {}
additional_repos:
- "copr://rhcontainerbot/podman-next"
+ enable_net: true
# Run on commit to main branch
- job: copr_build
@@ -38,6 +44,68 @@
project: podman-next
enable_net: true
+ # Validate test
+ - job: tests
+ trigger: pull_request
+ skip_build: true
+ targets:
+ # Only need to test on one target
+ - fedora-latest-stable-x86_64
+ identifier: validate_test
+ tmt_plan: "/plans/validate_test"
+
+ # Unit tests
+ - job: tests
+ trigger: pull_request
+ skip_build: true
+ targets: &pr_test_targets
+ - fedora-all-x86_64
+ - fedora-all-aarch64
+ - epel-8-x86_64
+ - epel-8-aarch64
+ - epel-9-x86_64
+ - epel-9-aarch64
+ identifier: unit_test
+ tmt_plan: "/plans/unit_test"
+
+ # Integration tests
+ - job: tests
+ trigger: pull_request
+ targets: *pr_test_targets
+ identifier: integration_test
+ tmt_plan: "/plans/integration_test"
+
+ # Unit tests on RHEL
+ - job: tests
+ trigger: pull_request
+ skip_build: true
+ use_internal_tf: true
+ notifications:
+ failure_comment:
+ message: "podman e2e tests failed on RHEL. @containers/packit-build please check."
+ targets: &pr_test_targets_rhel
+ epel-8-aarch64:
+ distros: [RHEL-8.9.0-Nightly,RHEL-8.10.0-Nightly]
+ epel-8-x86_64:
+ distros: [RHEL-8.9.0-Nightly,RHEL-8.10.0-Nightly]
+ epel-9-aarch64:
+ distros: [RHEL-9.3.0-Nightly,RHEL-9.4.0-Nightly]
+ epel-9-x86_64:
+ distros: [RHEL-9.3.0-Nightly,RHEL-9.4.0-Nightly]
+ identifier: unit_test_internal
+ tmt_plan: "/plans/unit_test"
+
+ # Integration tests on RHEL
+ - job: tests
+ trigger: pull_request
+ use_internal_tf: true
+ notifications:
+ failure_comment:
+ message: "podman system tests failed on RHEL. @containers/packit-build please check."
+ targets: *pr_test_targets_rhel
+ identifier: integration_test_internal
+ tmt_plan: "/plans/integration_test"
+
- job: propose_downstream
trigger: release
update_release: false
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aardvark-dns-1.8.0/Cargo.lock new/aardvark-dns-1.9.0/Cargo.lock
--- old/aardvark-dns-1.8.0/Cargo.lock 2023-09-27 19:03:24.000000000 +0200
+++ new/aardvark-dns-1.9.0/Cargo.lock 2023-11-20 21:01:52.000000000 +0100
@@ -4,13 +4,16 @@
[[package]]
name = "aardvark-dns"
-version = "1.8.0"
+version = "1.9.0"
dependencies = [
"anyhow",
"async-broadcast",
"chrono",
"clap",
"futures-util",
+ "hickory-client",
+ "hickory-proto",
+ "hickory-server",
"libc",
"log",
"nix",
@@ -18,9 +21,6 @@
"signal-hook",
"syslog",
"tokio",
- "trust-dns-client",
- "trust-dns-proto",
- "trust-dns-server",
]
[[package]]
@@ -70,15 +70,15 @@
[[package]]
name = "anstyle"
-version = "1.0.2"
+version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "15c4c2c83f81532e5845a733998b6971faca23490340a418e9b72a3ec9de12ea"
+checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87"
[[package]]
name = "anstyle-parse"
-version = "0.2.1"
+version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "938874ff5980b03a87c5524b3ae5b59cf99b1d6bc836848df7bc5ada9643c333"
+checksum = "317b9a89c1868f5ea6ff1d9539a69f45dffc21ce321ac1fd1160dfa48c8e2140"
dependencies = [
"utf8parse",
]
@@ -110,19 +110,20 @@
[[package]]
name = "async-broadcast"
-version = "0.5.1"
+version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7c48ccdbf6ca6b121e0f586cbc0e73ae440e56c67c30fa0873b4e110d9c26d2b"
+checksum = "334d75cf09b33bede6cbc20e52515853ae7bee3d4eadd9540e13ce92af983d34"
dependencies = [
"event-listener",
+ "event-listener-strategy",
"futures-core",
]
[[package]]
name = "async-trait"
-version = "0.1.73"
+version = "0.1.74"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bc00ceb34980c03614e35a3a4e218276a0a824e911d07651cd0d858a51e8c0f0"
+checksum = "a66537f1bb974b254c98ed142ff995236e81b9d0fe4db0575f46612cb15eb0f9"
dependencies = [
"proc-macro2",
"quote",
@@ -152,9 +153,9 @@
[[package]]
name = "bitflags"
-version = "2.4.0"
+version = "2.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635"
+checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07"
[[package]]
name = "bumpalo"
@@ -234,9 +235,9 @@
[[package]]
name = "clap_lex"
-version = "0.5.0"
+version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2da6da31387c7e4ef160ffab6d5e7f00c42626fe39aea70a7b0f1773f7dd6c1b"
+checksum = "cd7cc57abe963c6d3b9d8be5b06ba7c8957a930305ca90304f24ef040aa6f961"
[[package]]
name = "colorchoice"
@@ -245,24 +246,42 @@
checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
[[package]]
+name = "concurrent-queue"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f057a694a54f12365049b0958a1685bb52d567f5593b355fbf685838e873d400"
+dependencies = [
+ "crossbeam-utils",
+]
+
+[[package]]
name = "core-foundation-sys"
version = "0.8.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
[[package]]
+name = "crossbeam-utils"
+version = "0.8.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
name = "data-encoding"
version = "2.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308"
[[package]]
-name = "drain"
-version = "0.1.1"
+name = "deranged"
+version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2f1a0abf3fcefad9b4dd0e414207a7408e12b68414a01e6bb19b897d5bd7632d"
+checksum = "0f32d04922c60427da6f9fef14d042d9edddef64cb9d4ce0d64d0685fbeb1fd3"
dependencies = [
- "tokio",
+ "powerfmt",
]
[[package]]
@@ -284,33 +303,16 @@
]
[[package]]
-name = "equivalent"
-version = "1.0.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
-
-[[package]]
name = "errno"
-version = "0.3.3"
+version = "0.3.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "136526188508e25c6fef639d7927dfb3e0e3084488bf202267829cf7fc23dbdd"
+checksum = "f258a7194e7f7c2a7837a8913aeab7fd8c383457034fa20ce4dd3dcb813e8eb8"
dependencies = [
- "errno-dragonfly",
"libc",
"windows-sys",
]
[[package]]
-name = "errno-dragonfly"
-version = "0.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
-dependencies = [
- "cc",
- "libc",
-]
-
-[[package]]
name = "error-chain"
version = "0.12.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -321,9 +323,24 @@
[[package]]
name = "event-listener"
-version = "2.5.3"
+version = "3.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0"
+checksum = "d93877bcde0eb80ca09131a08d23f0a5c18a620b01db137dba666d18cd9b30c2"
+dependencies = [
+ "concurrent-queue",
+ "parking",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "event-listener-strategy"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "15c97b4e30ea7e4b7e7b429d6e2d8510433ba8cee4e70dfb3243794e539d29fd"
+dependencies = [
+ "event-listener",
+ "pin-project-lite",
+]
[[package]]
name = "form_urlencoded"
@@ -336,47 +353,42 @@
[[package]]
name = "futures-channel"
-version = "0.3.28"
+version = "0.3.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2"
+checksum = "ff4dd66668b557604244583e3e1e1eada8c5c2e96a6d0d6653ede395b78bbacb"
dependencies = [
"futures-core",
]
[[package]]
name = "futures-core"
-version = "0.3.28"
+version = "0.3.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c"
+checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c"
[[package]]
-name = "futures-executor"
-version = "0.3.28"
+name = "futures-io"
+version = "0.3.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0"
-dependencies = [
- "futures-core",
- "futures-task",
- "futures-util",
-]
+checksum = "8bf34a163b5c4c52d0478a4d757da8fb65cabef42ba90515efee0f6f9fa45aaa"
[[package]]
-name = "futures-io"
-version = "0.3.28"
+name = "futures-sink"
+version = "0.3.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964"
+checksum = "e36d3378ee38c2a36ad710c5d30c2911d752cb941c00c72dbabfb786a7970817"
[[package]]
name = "futures-task"
-version = "0.3.28"
+version = "0.3.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65"
+checksum = "efd193069b0ddadc69c46389b740bbccdd97203899b48d09c5f7969591d6bae2"
[[package]]
name = "futures-util"
-version = "0.3.28"
+version = "0.3.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533"
+checksum = "a19526d624e703a3179b3d322efec918b6246ea0fa51d41124525f00f1cc8104"
dependencies = [
"futures-core",
"futures-task",
@@ -387,9 +399,9 @@
[[package]]
name = "getrandom"
-version = "0.2.10"
+version = "0.2.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
+checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f"
dependencies = [
"cfg-if",
"libc",
@@ -403,12 +415,6 @@
checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0"
[[package]]
-name = "hashbrown"
-version = "0.14.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a"
-
-[[package]]
name = "heck"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -421,6 +427,69 @@
checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7"
[[package]]
+name = "hickory-client"
+version = "0.24.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f3e08124cf0ddda93b1186d4af73599de401f3b52f14cd9aaa719049379462e"
+dependencies = [
+ "cfg-if",
+ "data-encoding",
+ "futures-channel",
+ "futures-util",
+ "hickory-proto",
+ "once_cell",
+ "radix_trie",
+ "rand",
+ "thiserror",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "hickory-proto"
+version = "0.24.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "091a6fbccf4860009355e3efc52ff4acf37a63489aad7435372d44ceeb6fbbcf"
+dependencies = [
+ "async-trait",
+ "cfg-if",
+ "data-encoding",
+ "enum-as-inner",
+ "futures-channel",
+ "futures-io",
+ "futures-util",
+ "idna",
+ "ipnet",
+ "once_cell",
+ "rand",
+ "thiserror",
+ "tinyvec",
+ "tokio",
+ "tracing",
+ "url",
+]
+
+[[package]]
+name = "hickory-server"
+version = "0.24.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fbbb45bc4dcb456445732c705e3cfdc7393b8bcae5c36ecec36b9d76bd67cb5"
+dependencies = [
+ "async-trait",
+ "bytes",
+ "cfg-if",
+ "enum-as-inner",
+ "futures-util",
+ "hickory-proto",
+ "serde",
+ "thiserror",
+ "time",
+ "tokio",
+ "tokio-util",
+ "tracing",
+]
+
+[[package]]
name = "hostname"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -433,16 +502,16 @@
[[package]]
name = "iana-time-zone"
-version = "0.1.57"
+version = "0.1.58"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2fad5b825842d2b38bd206f3e81d6957625fd7f0a361e345c30e01a0ae2dd613"
+checksum = "8326b86b6cff230b97d0d312a6c40a60726df3332e721f72a1b035f451663b20"
dependencies = [
"android_system_properties",
"core-foundation-sys",
"iana-time-zone-haiku",
"js-sys",
"wasm-bindgen",
- "windows",
+ "windows-core",
]
[[package]]
@@ -465,20 +534,10 @@
]
[[package]]
-name = "indexmap"
-version = "2.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d"
-dependencies = [
- "equivalent",
- "hashbrown",
-]
-
-[[package]]
name = "ipnet"
-version = "2.8.0"
+version = "2.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6"
+checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3"
[[package]]
name = "is-terminal"
@@ -499,24 +558,24 @@
[[package]]
name = "js-sys"
-version = "0.3.64"
+version = "0.3.65"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a"
+checksum = "54c0c35952f67de54bb584e9fd912b3023117cbafc0a77d8f3dee1fb5f572fe8"
dependencies = [
"wasm-bindgen",
]
[[package]]
name = "libc"
-version = "0.2.148"
+version = "0.2.150"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9cdc71e17332e86d2e1d38c1f99edcb6288ee11b815fb1a4b049eaa2114d369b"
+checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c"
[[package]]
name = "linux-raw-sys"
-version = "0.4.7"
+version = "0.4.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1a9bad9f94746442c783ca431b22403b519cd7fbeed0533fdd6328b2f2212128"
+checksum = "969488b55f8ac402214f3f5fd243ebb7206cf82de60d3172994707a4bcc2b829"
[[package]]
name = "log"
@@ -532,9 +591,9 @@
[[package]]
name = "memchr"
-version = "2.6.3"
+version = "2.6.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8f232d6ef707e1956a43342693d2a31e72989554d58299d7a88738cc95b0d35c"
+checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167"
[[package]]
name = "miniz_oxide"
@@ -547,9 +606,9 @@
[[package]]
name = "mio"
-version = "0.8.8"
+version = "0.8.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2"
+checksum = "3dce281c5e46beae905d4de1870d8b1509a9142b62eedf18b443b011ca8343d0"
dependencies = [
"libc",
"wasi",
@@ -578,9 +637,9 @@
[[package]]
name = "num-traits"
-version = "0.2.16"
+version = "0.2.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2"
+checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c"
dependencies = [
"autocfg",
]
@@ -620,6 +679,12 @@
checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
[[package]]
+name = "parking"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae"
+
+[[package]]
name = "percent-encoding"
version = "2.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -638,6 +703,12 @@
checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
[[package]]
+name = "powerfmt"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
+
+[[package]]
name = "ppv-lite86"
version = "0.2.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -645,9 +716,9 @@
[[package]]
name = "proc-macro2"
-version = "1.0.67"
+version = "1.0.69"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3d433d9f1a3e8c1263d9456598b16fec66f4acc9a74dacffd35c7bb09b3a1328"
+checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da"
dependencies = [
"unicode-ident",
]
@@ -724,9 +795,9 @@
[[package]]
name = "rustix"
-version = "0.38.14"
+version = "0.38.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "747c788e9ce8e92b12cd485c49ddf90723550b654b32508f979b71a7b1ecda4f"
+checksum = "dc99bc2d4f1fed22595588a013687477aedf3cdcfb26558c559edb67b4d9b22e"
dependencies = [
"bitflags",
"errno",
@@ -737,18 +808,18 @@
[[package]]
name = "serde"
-version = "1.0.188"
+version = "1.0.192"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cf9e0fcba69a370eed61bcf2b728575f726b50b55cba78064753d708ddc7549e"
+checksum = "bca2a08484b285dcb282d0f67b26cadc0df8b19f8c12502c13d966bf9482f001"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
-version = "1.0.188"
+version = "1.0.192"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4eca7ac642d82aa35b60049a6eccb4be6be75e599bd2e9adb5f875a737654af2"
+checksum = "d6c7207fbec9faa48073f3e3074cbe553af6ea512d7c21ba46e434e70ea9fbc1"
dependencies = [
"proc-macro2",
"quote",
@@ -756,15 +827,6 @@
]
[[package]]
-name = "serde_spanned"
-version = "0.6.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "96426c9936fd7a0124915f9185ea1d20aa9445cc9821142f0a73bc9207a2e186"
-dependencies = [
- "serde",
-]
-
-[[package]]
name = "signal-hook"
version = "0.3.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -794,15 +856,15 @@
[[package]]
name = "smallvec"
-version = "1.11.1"
+version = "1.11.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "942b4a808e05215192e39f4ab80813e599068285906cc91aa64f923db842bd5a"
+checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970"
[[package]]
name = "socket2"
-version = "0.5.4"
+version = "0.5.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4031e820eb552adee9295814c0ced9e5cf38ddf1e8b7d566d6de8e2538ea989e"
+checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9"
dependencies = [
"libc",
"windows-sys",
@@ -816,9 +878,9 @@
[[package]]
name = "syn"
-version = "2.0.37"
+version = "2.0.39"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7303ef2c05cd654186cb250d29049a24840ca25d2747c25c0381c8d9e2f582e8"
+checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a"
dependencies = [
"proc-macro2",
"quote",
@@ -840,18 +902,18 @@
[[package]]
name = "thiserror"
-version = "1.0.48"
+version = "1.0.50"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9d6d7a740b8a666a7e828dd00da9c0dc290dff53154ea77ac109281de90589b7"
+checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2"
dependencies = [
"thiserror-impl",
]
[[package]]
name = "thiserror-impl"
-version = "1.0.48"
+version = "1.0.50"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "49922ecae66cc8a249b77e68d1d0623c1b2c514f0060c27cdc68bd62a1219d35"
+checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8"
dependencies = [
"proc-macro2",
"quote",
@@ -860,13 +922,15 @@
[[package]]
name = "time"
-version = "0.3.23"
+version = "0.3.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "59e399c068f43a5d116fedaf73b203fa4f9c519f17e2b34f63221d3792f81446"
+checksum = "c4a34ab300f2dee6e562c10a046fc05e358b29f9bf92277f30c3c8d82275f6f5"
dependencies = [
+ "deranged",
"itoa",
"libc",
"num_threads",
+ "powerfmt",
"serde",
"time-core",
"time-macros",
@@ -874,15 +938,15 @@
[[package]]
name = "time-core"
-version = "0.1.1"
+version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb"
+checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3"
[[package]]
name = "time-macros"
-version = "0.2.10"
+version = "0.2.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "96ba15a897f3c86766b757e5ac7221554c6750054d74d5b28844fce5fb36a6c4"
+checksum = "4ad70d68dba9e1f8aceda7aa6711965dfec1cac869f311a51bd08b3a2ccbce20"
dependencies = [
"time-core",
]
@@ -904,9 +968,9 @@
[[package]]
name = "tokio"
-version = "1.32.0"
+version = "1.34.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "17ed6077ed6cd6c74735e21f37eb16dc3935f96878b1fe961074089cc80893f9"
+checksum = "d0c014766411e834f7af5b8f4cf46257aab4036ca95e9d2c144a10f59ad6f5b9"
dependencies = [
"backtrace",
"bytes",
@@ -921,9 +985,9 @@
[[package]]
name = "tokio-macros"
-version = "2.1.0"
+version = "2.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e"
+checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b"
dependencies = [
"proc-macro2",
"quote",
@@ -931,46 +995,24 @@
]
[[package]]
-name = "toml"
-version = "0.7.8"
+name = "tokio-util"
+version = "0.7.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257"
+checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15"
dependencies = [
- "serde",
- "serde_spanned",
- "toml_datetime",
- "toml_edit",
-]
-
-[[package]]
-name = "toml_datetime"
-version = "0.6.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b"
-dependencies = [
- "serde",
-]
-
-[[package]]
-name = "toml_edit"
-version = "0.19.15"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421"
-dependencies = [
- "indexmap",
- "serde",
- "serde_spanned",
- "toml_datetime",
- "winnow",
+ "bytes",
+ "futures-core",
+ "futures-sink",
+ "pin-project-lite",
+ "tokio",
]
[[package]]
name = "tracing"
-version = "0.1.37"
+version = "0.1.40"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
+checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef"
dependencies = [
- "cfg-if",
"pin-project-lite",
"tracing-attributes",
"tracing-core",
@@ -978,9 +1020,9 @@
[[package]]
name = "tracing-attributes"
-version = "0.1.26"
+version = "0.1.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab"
+checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
dependencies = [
"proc-macro2",
"quote",
@@ -989,80 +1031,14 @@
[[package]]
name = "tracing-core"
-version = "0.1.31"
+version = "0.1.32"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a"
+checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54"
dependencies = [
"once_cell",
]
[[package]]
-name = "trust-dns-client"
-version = "0.23.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8e1bcca49cb7115ce70857db94ebff3f2903b50e3e5c20b1def5cf9b1273455f"
-dependencies = [
- "cfg-if",
- "data-encoding",
- "futures-channel",
- "futures-util",
- "once_cell",
- "radix_trie",
- "rand",
- "thiserror",
- "tokio",
- "tracing",
- "trust-dns-proto",
-]
-
-[[package]]
-name = "trust-dns-proto"
-version = "0.23.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0dc775440033cb114085f6f2437682b194fa7546466024b1037e82a48a052a69"
-dependencies = [
- "async-trait",
- "cfg-if",
- "data-encoding",
- "enum-as-inner",
- "futures-channel",
- "futures-io",
- "futures-util",
- "idna",
- "ipnet",
- "once_cell",
- "rand",
- "smallvec",
- "thiserror",
- "tinyvec",
- "tokio",
- "tracing",
- "url",
-]
-
-[[package]]
-name = "trust-dns-server"
-version = "0.23.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0f2863cefc06d1d5605ea937bfd8939e23687bb44dd5d136217ad9378582f9cc"
-dependencies = [
- "async-trait",
- "bytes",
- "cfg-if",
- "drain",
- "enum-as-inner",
- "futures-executor",
- "futures-util",
- "serde",
- "thiserror",
- "time",
- "tokio",
- "toml",
- "tracing",
- "trust-dns-proto",
-]
-
-[[package]]
name = "unicode-bidi"
version = "0.3.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1114,9 +1090,9 @@
[[package]]
name = "wasm-bindgen"
-version = "0.2.87"
+version = "0.2.88"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342"
+checksum = "7daec296f25a1bae309c0cd5c29c4b260e510e6d813c286b19eaadf409d40fce"
dependencies = [
"cfg-if",
"wasm-bindgen-macro",
@@ -1124,9 +1100,9 @@
[[package]]
name = "wasm-bindgen-backend"
-version = "0.2.87"
+version = "0.2.88"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd"
+checksum = "e397f4664c0e4e428e8313a469aaa58310d302159845980fd23b0f22a847f217"
dependencies = [
"bumpalo",
"log",
@@ -1139,9 +1115,9 @@
[[package]]
name = "wasm-bindgen-macro"
-version = "0.2.87"
+version = "0.2.88"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d"
+checksum = "5961017b3b08ad5f3fe39f1e79877f8ee7c23c5e5fd5eb80de95abc41f1f16b2"
dependencies = [
"quote",
"wasm-bindgen-macro-support",
@@ -1149,9 +1125,9 @@
[[package]]
name = "wasm-bindgen-macro-support"
-version = "0.2.87"
+version = "0.2.88"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b"
+checksum = "c5353b8dab669f5e10f5bd76df26a9360c748f054f862ff5f3f8aae0c7fb3907"
dependencies = [
"proc-macro2",
"quote",
@@ -1162,9 +1138,9 @@
[[package]]
name = "wasm-bindgen-shared"
-version = "0.2.87"
+version = "0.2.88"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1"
+checksum = "0d046c5d029ba91a1ed14da14dca44b68bf2f124cfbaf741c54151fdb3e0750b"
[[package]]
name = "winapi"
@@ -1189,10 +1165,10 @@
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
[[package]]
-name = "windows"
-version = "0.48.0"
+name = "windows-core"
+version = "0.51.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f"
+checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64"
dependencies = [
"windows-targets",
]
@@ -1262,12 +1238,3 @@
version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
-
-[[package]]
-name = "winnow"
-version = "0.5.15"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7c2e3184b9c4e92ad5167ca73039d0c42476302ab603e2fec4487511f38ccefc"
-dependencies = [
- "memchr",
-]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aardvark-dns-1.8.0/Cargo.toml new/aardvark-dns-1.9.0/Cargo.toml
--- old/aardvark-dns-1.8.0/Cargo.toml 2023-09-27 19:03:24.000000000 +0200
+++ new/aardvark-dns-1.9.0/Cargo.toml 2023-11-20 21:01:52.000000000 +0100
@@ -1,7 +1,7 @@
[package]
name = "aardvark-dns"
# This version specification right below is reused by .packit.sh to generate rpm version
-version = "1.8.0"
+version = "1.9.0"
edition = "2018"
authors = ["github.com/containers"]
license = "Apache-2.0"
@@ -25,14 +25,14 @@
clap = { version = "~4.3.24", features = ["derive"] }
syslog = "^6.1.0"
log = "0.4.20"
-trust-dns-server = "0.23.0"
-trust-dns-proto = "0.23.0"
-trust-dns-client = "0.23.0"
+hickory-server = "0.24.0"
+hickory-proto = "0.24.0"
+hickory-client = "0.24.0"
anyhow = "1.0.75"
-futures-util = { version = "0.3.28", default-features = false }
+futures-util = { version = "0.3.29", default-features = false }
signal-hook = "0.3.17"
-tokio = { version = "1.32.0", features = ["macros", "rt-multi-thread", "net"] }
-async-broadcast = "0.5.1"
+tokio = { version = "1.34.0", features = ["macros", "rt-multi-thread", "net"] }
+async-broadcast = "0.6.0"
resolv-conf = "0.7.0"
nix = { version = "0.27.1", features = ["fs", "signal"] }
libc = "0.2"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aardvark-dns-1.8.0/RELEASE_NOTES.md new/aardvark-dns-1.9.0/RELEASE_NOTES.md
--- old/aardvark-dns-1.8.0/RELEASE_NOTES.md 2023-09-27 19:03:24.000000000 +0200
+++ new/aardvark-dns-1.9.0/RELEASE_NOTES.md 2023-11-20 21:01:52.000000000 +0100
@@ -1,5 +1,10 @@
# Release Notes
+## v1.9.0
+* update trust-dns to hickory
+* never report an error when the syslog init fails
+* dependency updates
+
## v1.8.0
* dependency updates
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aardvark-dns-1.8.0/plans/main.fmf new/aardvark-dns-1.9.0/plans/main.fmf
--- old/aardvark-dns-1.8.0/plans/main.fmf 1970-01-01 01:00:00.000000000 +0100
+++ new/aardvark-dns-1.9.0/plans/main.fmf 2023-11-20 21:01:52.000000000 +0100
@@ -0,0 +1,37 @@
+prepare:
+ - name: Distro specific setup
+ how: shell
+ script: bash ./plans/prepare.sh
+ - name: Install dependencies
+ how: install
+ package:
+ - bats
+ - bind-utils
+ - cargo
+ - clippy
+ - go-md2man
+ - iptables
+ - jq
+ - make
+ - netavark
+ - nmap-ncat
+ - rustfmt
+ - slirp4netns
+
+/validate_test:
+ summary: Run validate test
+ execute:
+ how: tmt
+ script: make validate
+
+/unit_test:
+ summary: Run unit tests
+ execute:
+ how: tmt
+ script: make unit
+
+/integration_test:
+ summary: Run integration tests
+ execute:
+ how: tmt
+ script: make AARDVARK=/usr/libexec/podman/aardvark-dns integration
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aardvark-dns-1.8.0/plans/prepare.sh new/aardvark-dns-1.9.0/plans/prepare.sh
--- old/aardvark-dns-1.8.0/plans/prepare.sh 1970-01-01 01:00:00.000000000 +0100
+++ new/aardvark-dns-1.9.0/plans/prepare.sh 2023-11-20 21:01:52.000000000 +0100
@@ -0,0 +1,34 @@
+#!/usr/bin/env bash
+
+set -eox pipefail
+
+RHEL_RELEASE=$(rpm --eval %{?rhel})
+ARCH=$(uname -m)
+
+# disable container-tools module on el8
+if [ $RHEL_RELEASE -eq 8 ]; then
+ dnf -y module disable container-tools
+fi
+
+# install epel-release on centos stream and rhel
+if [ -f /etc/centos-release ]; then
+ dnf -y install epel-release
+elif [ $RHEL_RELEASE -ge 8 ]; then
+ dnf -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-$RHEL_RELEASE.noa…
+ dnf config-manager --set-enabled epel
+fi
+
+if [ -f /etc/fedora-release ]; then
+ echo "Resizing tmpfs..."
+ mount -o remount,size=10G /tmp
+fi
+
+
+# Some envs like containers don't have the copr plugin installed
+dnf -y install 'dnf-command(copr)'
+
+# Enable podman-next copr
+dnf -y copr enable rhcontainerbot/podman-next
+
+# Set podman-next to higher priority than default
+dnf config-manager --save --setopt="*:rhcontainerbot:podman-next.priority=5"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aardvark-dns-1.8.0/src/config/mod.rs new/aardvark-dns-1.9.0/src/config/mod.rs
--- old/aardvark-dns-1.8.0/src/config/mod.rs 2023-09-27 19:03:24.000000000 +0200
+++ new/aardvark-dns-1.9.0/src/config/mod.rs 2023-11-20 21:01:52.000000000 +0100
@@ -96,20 +96,18 @@
match ip {
IpAddr::V4(a) => listen_ips_4
.entry(network_name.clone())
- .or_insert_with(Vec::new)
+ .or_default()
.push(a),
IpAddr::V6(b) => listen_ips_6
.entry(network_name.clone())
- .or_insert_with(Vec::new)
+ .or_default()
.push(b),
}
}
for entry in parsed_network_config.container_entry {
// Container network membership
- let ctr_networks = network_membership
- .entry(entry.id.clone())
- .or_insert_with(Vec::new);
+ let ctr_networks = network_membership.entry(entry.id.clone()).or_default();
// Keep the network deduplicated
if !ctr_networks.contains(&network_name) {
@@ -122,9 +120,9 @@
for ip in v4 {
reverse
.entry(network_name.clone())
- .or_insert_with(HashMap::new)
+ .or_default()
.entry(IpAddr::V4(ip))
- .or_insert_with(Vec::new)
+ .or_default()
.append(&mut entry.aliases.clone());
ctr_dns_server.insert(IpAddr::V4(ip), entry.dns_servers.clone());
new_ctr_ips.push(IpAddr::V4(ip));
@@ -134,26 +132,22 @@
for ip in v6 {
reverse
.entry(network_name.clone())
- .or_insert_with(HashMap::new)
+ .or_default()
.entry(IpAddr::V6(ip))
- .or_insert_with(Vec::new)
+ .or_default()
.append(&mut entry.aliases.clone());
ctr_dns_server.insert(IpAddr::V6(ip), entry.dns_servers.clone());
new_ctr_ips.push(IpAddr::V6(ip));
}
}
- let ctr_ips = container_ips
- .entry(entry.id.clone())
- .or_insert_with(Vec::new);
+ let ctr_ips = container_ips.entry(entry.id.clone()).or_default();
ctr_ips.append(&mut new_ctr_ips.clone());
// Network aliases to IPs map.
- let network_aliases = network_names
- .entry(network_name.clone())
- .or_insert_with(HashMap::new);
+ let network_aliases = network_names.entry(network_name.clone()).or_default();
for alias in entry.aliases {
- let alias_entries = network_aliases.entry(alias).or_insert_with(Vec::new);
+ let alias_entries = network_aliases.entry(alias).or_default();
alias_entries.append(&mut new_ctr_ips.clone());
}
}
@@ -169,7 +163,7 @@
match network_membership.get(&ctr_id) {
Some(s) => {
for ip in ips {
- let ip_networks = ctrs.entry(ip).or_insert_with(Vec::new);
+ let ip_networks = ctrs.entry(ip).or_default();
ip_networks.append(&mut s.clone());
}
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aardvark-dns-1.8.0/src/dns/coredns.rs new/aardvark-dns-1.9.0/src/dns/coredns.rs
--- old/aardvark-dns-1.8.0/src/dns/coredns.rs 2023-09-27 19:03:24.000000000 +0200
+++ new/aardvark-dns-1.9.0/src/dns/coredns.rs 2023-11-20 21:01:52.000000000 +0100
@@ -2,6 +2,14 @@
use crate::backend::DNSResult;
use futures_util::StreamExt;
use futures_util::TryStreamExt;
+use hickory_client::{client::AsyncClient, proto::xfer::SerialMessage, rr::rdata, rr::Name};
+use hickory_proto::{
+ op::{Message, MessageType, ResponseCode},
+ rr::{DNSClass, RData, Record, RecordType},
+ udp::{UdpClientStream, UdpStream},
+ xfer::{dns_handle::DnsHandle, BufDnsStreamHandle, DnsRequest},
+ DnsStreamHandle,
+};
use log::{debug, error, trace, warn};
use resolv_conf;
use resolv_conf::ScopedIp;
@@ -12,14 +20,6 @@
use std::net::{IpAddr, SocketAddr};
use std::sync::{Arc, Mutex};
use tokio::net::UdpSocket;
-use trust_dns_client::{client::AsyncClient, proto::xfer::SerialMessage, rr::Name};
-use trust_dns_proto::{
- op::{Message, MessageType, ResponseCode},
- rr::{DNSClass, RData, Record, RecordType},
- udp::{UdpClientStream, UdpStream},
- xfer::{dns_handle::DnsHandle, BufDnsStreamHandle, DnsRequest},
- DnsStreamHandle,
-};
// Containers can be recreated with different ips quickly so
// do not let the clients cache to dns response for to long,
@@ -108,7 +108,7 @@
async fn register_port(&mut self) -> anyhow::Result<()> {
debug!("Starting listen on udp {:?}:{}", self.address, self.port);
- let no_proxy: bool = matches!(env::var("AARDVARK_NO_PROXY"), Ok(_));
+ let no_proxy: bool = env::var("AARDVARK_NO_PROXY").is_ok();
// Do we need to serve on tcp anywhere in future ?
let socket = UdpSocket::bind(format!("{}:{}", self.address, self.port)).await?;
@@ -221,7 +221,7 @@
.set_ttl(CONTAINER_TTL)
.set_rr_type(RecordType::PTR)
.set_dns_class(DNSClass::IN)
- .set_data(Some(RData::PTR(trust_dns_client::rr::rdata::PTR(answer))))
+ .set_data(Some(RData::PTR(rdata::PTR(answer))))
.clone(),
);
}
@@ -303,7 +303,7 @@
.set_ttl(CONTAINER_TTL)
.set_rr_type(RecordType::A)
.set_dns_class(DNSClass::IN)
- .set_data(Some(RData::A(trust_dns_client::rr::rdata::A(ipv4))))
+ .set_data(Some(RData::A(rdata::A(ipv4))))
.clone(),
);
}
@@ -317,7 +317,7 @@
.set_ttl(CONTAINER_TTL)
.set_rr_type(RecordType::AAAA)
.set_dns_class(DNSClass::IN)
- .set_data(Some(RData::AAAA(trust_dns_client::rr::rdata::AAAA(ipv6))))
+ .set_data(Some(RData::AAAA(rdata::AAAA(ipv6))))
.clone(),
);
}
@@ -422,7 +422,7 @@
}
}
-async fn forward_dns_req(mut cl: AsyncClient, message: Message) -> Option<Message> {
+async fn forward_dns_req(cl: AsyncClient, message: Message) -> Option<Message> {
let req = DnsRequest::new(message, Default::default());
let id = req.id();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aardvark-dns-1.8.0/src/main.rs new/aardvark-dns-1.9.0/src/main.rs
--- old/aardvark-dns-1.8.0/src/main.rs 2023-09-27 19:03:24.000000000 +0200
+++ new/aardvark-dns-1.9.0/src/main.rs 2023-11-20 21:01:52.000000000 +0100
@@ -44,24 +44,22 @@
Ok(val) => match Level::from_str(&val) {
Ok(level) => level,
Err(e) => {
- eprintln!("failed to parse RUST_LOG level: {}", e);
+ eprintln!("aardvark-dns: failed to parse RUST_LOG level: {}", e);
Level::Info
}
},
+ // if env is not set default to info
Err(_) => Level::Info,
};
- match syslog::unix(formatter) {
- Ok(logger) => {
- if let Err(e) = log::set_boxed_logger(Box::new(BasicLogger::new(logger)))
- .map(|()| log::set_max_level(log_level.to_level_filter()))
- {
- eprintln!("failed to initialize syslog logger: {}", e)
- };
- }
- Err(e) => {
- eprintln!("failed to connect to syslog: {}", e);
- }
+ // On error do nothing, running on system without syslog is fine and we should not clutter
+ // logs with meaningless errors, https://github.com/containers/podman/issues/19809.
+ if let Ok(logger) = syslog::unix(formatter) {
+ if let Err(e) = log::set_boxed_logger(Box::new(BasicLogger::new(logger)))
+ .map(|()| log::set_max_level(log_level.to_level_filter()))
+ {
+ eprintln!("aardvark-dns: failed to initialize syslog logger: {}", e)
+ };
}
let opts = Opts::parse();
@@ -79,7 +77,7 @@
match result {
Ok(_) => {}
Err(err) => {
- println!("{}", err);
+ eprintln!("aardvark-dns: {}", err);
std::process::exit(1);
}
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aardvark-dns-1.8.0/src/test/test.rs new/aardvark-dns-1.9.0/src/test/test.rs
--- old/aardvark-dns-1.8.0/src/test/test.rs 2023-09-27 19:03:24.000000000 +0200
+++ new/aardvark-dns-1.9.0/src/test/test.rs 2023-11-20 21:01:52.000000000 +0100
@@ -100,7 +100,7 @@
IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)),
IpAddr::V6(Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 2)),
];
- let test_cases_source = vec!["10.88.0.2", "10.88.0.3", "10.88.0.4", "10.88.0.5"];
+ let test_cases_source = ["10.88.0.2", "10.88.0.3", "10.88.0.4", "10.88.0.5"];
// verify if network scoped resolvers for all the containers is equivalent to
// expectedDNSServers
for container in test_cases_source.iter() {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aardvark-dns-1.8.0/test/100-basic-name-resolution.bats new/aardvark-dns-1.9.0/test/100-basic-name-resolution.bats
--- old/aardvark-dns-1.8.0/test/100-basic-name-resolution.bats 2023-09-27 19:03:24.000000000 +0200
+++ new/aardvark-dns-1.9.0/test/100-basic-name-resolution.bats 2023-11-20 21:01:52.000000000 +0100
@@ -5,14 +5,14 @@
load helpers
-# custom DNS server is set to `10.10.10.10` which is invalid DNS server
+# custom DNS server is set to `127.0.0.255` which is invalid DNS server
# hence all the external request must fail, this test is expected to fail
# with exit code 124
@test "basic container - dns itself (custom bad dns server)" {
setup_slirp4netns
subnet_a=$(random_subnet 5)
- create_config network_name="podman1" container_id=$(random_string 64) container_name="aone" subnet="$subnet_a" custom_dns_server='"10.10.10.10"' aliases='"a1", "1a"'
+ create_config network_name="podman1" container_id=$(random_string 64) container_name="aone" subnet="$subnet_a" custom_dns_server='"127.0.0.255"' aliases='"a1", "1a"'
config_a1=$config
ip_a1=$(echo "$config_a1" | jq -r .networks.podman1.static_ips[0])
gw=$(echo "$config_a1" | jq -r .network_info.podman1.subnets[0].gateway)
++++++ vendor.tar.gz ++++++
/work/SRC/openSUSE:Factory/aardvark-dns/vendor.tar.gz /work/SRC/openSUSE:Factory/.aardvark-dns.new.25432/vendor.tar.gz differ: char 5, line 1
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 2023-11-30 22:04:27
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/openSUSE-release-tools (Old)
and /work/SRC/openSUSE:Factory/.openSUSE-release-tools.new.25432 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "openSUSE-release-tools"
Thu Nov 30 22:04:27 2023 rev:515 rq:1130002 version:20231130.29c388e
Changes:
--------
--- /work/SRC/openSUSE:Factory/openSUSE-release-tools/openSUSE-release-tools.changes 2023-11-23 21:43:38.762116474 +0100
+++ /work/SRC/openSUSE:Factory/.openSUSE-release-tools.new.25432/openSUSE-release-tools.changes 2023-11-30 22:05:53.191330504 +0100
@@ -1,0 +2,7 @@
+Thu Nov 30 13:49:15 UTC 2023 - opensuse-releaseteam(a)opensuse.org
+
+- Update to version 20231130.29c388e:
+ * Drop bs_mirrorfull
+ * Rewrite bs_mirrorfull as osclib component
+
+-------------------------------------------------------------------
Old:
----
openSUSE-release-tools-20231123.24f3d6b.obscpio
New:
----
openSUSE-release-tools-20231130.29c388e.obscpio
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ openSUSE-release-tools.spec ++++++
--- /var/tmp/diff_new_pack.VQTE0c/_old 2023-11-30 22:05:54.527379737 +0100
+++ /var/tmp/diff_new_pack.VQTE0c/_new 2023-11-30 22:05:54.531379884 +0100
@@ -20,7 +20,7 @@
%define source_dir openSUSE-release-tools
%define announcer_filename factory-package-news
Name: openSUSE-release-tools
-Version: 20231123.24f3d6b
+Version: 20231130.29c388e
Release: 0
Summary: Tools to aid in staging and release work for openSUSE/SUSE
License: GPL-2.0-or-later AND MIT
@@ -63,10 +63,6 @@
Requires: python3-typing_extensions
%endif
-# bs_mirrorfull
-Requires: perl-Net-SSLeay
-Requires: perl-XML-Parser
-
# Spec related requirements.
Requires: osclib = %{version}
@@ -363,7 +359,6 @@
%files
%doc README.md
%{_bindir}/osrt-biarchtool
-%{_bindir}/osrt-bs_mirrorfull
%{_bindir}/osrt-bugowner
%{_bindir}/osrt-build-fail-reminder
%{_bindir}/osrt-checknewer
++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.VQTE0c/_old 2023-11-30 22:05:54.567381211 +0100
+++ /var/tmp/diff_new_pack.VQTE0c/_new 2023-11-30 22:05:54.567381211 +0100
@@ -1,7 +1,7 @@
<servicedata>
<service name="tar_scm">
<param name="url">https://github.com/openSUSE/openSUSE-release-tools.git</param>
- <param name="changesrevision">24f3d6b5fa5617368de7bac471f4b63ecb6f2d14</param>
+ <param name="changesrevision">29c388e47a11b36300bb7deab1f31dcf544d7372</param>
</service>
</servicedata>
++++++ openSUSE-release-tools-20231123.24f3d6b.obscpio -> openSUSE-release-tools-20231130.29c388e.obscpio ++++++
++++ 4108 lines of diff (skipped)
++++++ openSUSE-release-tools.obsinfo ++++++
--- /var/tmp/diff_new_pack.VQTE0c/_old 2023-11-30 22:05:55.279407449 +0100
+++ /var/tmp/diff_new_pack.VQTE0c/_new 2023-11-30 22:05:55.279407449 +0100
@@ -1,5 +1,5 @@
name: openSUSE-release-tools
-version: 20231123.24f3d6b
-mtime: 1700736689
-commit: 24f3d6b5fa5617368de7bac471f4b63ecb6f2d14
+version: 20231130.29c388e
+mtime: 1701352091
+commit: 29c388e47a11b36300bb7deab1f31dcf544d7372
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package mesheryctl for openSUSE:Factory checked in at 2023-11-30 22:04:01
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/mesheryctl (Old)
and /work/SRC/openSUSE:Factory/.mesheryctl.new.25432 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "mesheryctl"
Thu Nov 30 22:04:01 2023 rev:16 rq:1129986 version:0.6.185
Changes:
--------
--- /work/SRC/openSUSE:Factory/mesheryctl/mesheryctl.changes 2023-11-27 22:44:50.905095068 +0100
+++ /work/SRC/openSUSE:Factory/.mesheryctl.new.25432/mesheryctl.changes 2023-11-30 22:05:38.114774941 +0100
@@ -1,0 +2,71 @@
+Thu Nov 30 12:01:18 UTC 2023 - Johannes Kastl <kastl(a)b1-systems.de>
+
+- update to 0.6.185:
+ * General
+ - updated polygons @aabidsofi19 (#9500)
+ - update comp generator @MUzairS15 (#9492)
+ - Delete binding.rego @MUzairS15 (#9491)
+ * - Meshery CLI
+ - [cli][system][fix]: return error if detected while creating
+ manifests folder @VihasMakwana (#9469)
+ * - Meshery UI
+ - [MeshSync] Fix Sorting MeshSync table @senali-d (#9498)
+ - [bug] Resolve connections bug and UI @sudhanshutech (#9488)
+ * - Documentation
+ - Docs Meshsync CRD @KiptoonKipkurui (#9463)
+ - Remove broken links in project/index.md @dmarcoux (#9499)
+ - [Docs] Meshery Operator, MeshSync, Broker Troubleshooting
+ Guide @leecalcote (#9479)
+
+-------------------------------------------------------------------
+Thu Nov 30 11:54:47 UTC 2023 - Johannes Kastl <kastl(a)b1-systems.de>
+
+- update to 0.6.184:
+ * Meshery UI
+ - [bug] Update config.js @theBeginner86 (#9486)
+ * Bug Fixes
+ - [bug] Update config.js @theBeginner86 (#9486)
+
+-------------------------------------------------------------------
+Thu Nov 30 11:46:16 UTC 2023 - Johannes Kastl <kastl(a)b1-systems.de>
+
+- update to 0.6.183:
+ * Meshery UI
+ - fix node tab crash ( missing null checks) @aabidsofi19
+ (#9483)
+ - [fix] missing dashboard overview charts @aabidsofi19 (#9482)
+
+-------------------------------------------------------------------
+Thu Nov 30 09:50:18 UTC 2023 - Johannes Kastl <kastl(a)b1-systems.de>
+
+- update to 0.6.182:
+ * What's Changed
+ - [CI] fix eslint issue failing lint check by @sudhanshutech in
+ #9454
+ - [dashboard] fix opacity for view all span by @sudhanshutech
+ in #9455
+ - [UI] Add hide/unhide support in search for mobile compatible
+ by @sudhanshutech in #9456
+ - [UI] fix zindex issues by @sudhanshutech in #9462
+ - [Server] Update MeshModel components API. by @MUzairS15 in
+ #9464
+ - [UI] Enhance Meshmodel Registry UI by @sudhanshutech in #9465
+ - [Server] MeshSync fingerprinting support. by @MUzairS15 in
+ #9442
+ - [utility] Custom infiniteScroll utility function by
+ @sudhanshutech in #9466
+ - [FIXED] mesheryctl golangci_lint failure by @zakisk in #9468
+ - Added feature: mesheryctl exp model search [query-text]
+ command by @zakisk in #9436
+ - [Feature] Model: aws shape components by @leecalcote in #9457
+ - Add Config Map Icon by @ShatilKhan in #8829
+ - Add pod metrics icons by @Akshun-01 in #9330
+ - add list item hover in theme by @aabidsofi19 in #9475
+ - [Meshmodel] Use capabilites by @aabidsofi19 in #9474
+ - [UI] FIx UI Dashboard Crash by @MUzairS15 in #9477
+ - Meshmodel capabilites by @aabidsofi19 in #9478
+ - [Meshmodel] meshery operator by @aabidsofi19 in #9480
+ - [Meshmodel] remove ellipse and roundbarrel by @aabidsofi19 in
+ #9481
+
+-------------------------------------------------------------------
Old:
----
meshery-0.6.181.obscpio
New:
----
meshery-0.6.185.obscpio
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ mesheryctl.spec ++++++
--- /var/tmp/diff_new_pack.XWMdnU/_old 2023-11-30 22:05:44.006992066 +0100
+++ /var/tmp/diff_new_pack.XWMdnU/_new 2023-11-30 22:05:44.006992066 +0100
@@ -19,7 +19,7 @@
%define __arch_install_post export NO_BRP_STRIP_DEBUG=true
Name: mesheryctl
-Version: 0.6.181
+Version: 0.6.185
Release: 0
Summary: CLI for the meshery cloud native management plane
License: Apache-2.0
++++++ _service ++++++
--- /var/tmp/diff_new_pack.XWMdnU/_old 2023-11-30 22:05:44.034993098 +0100
+++ /var/tmp/diff_new_pack.XWMdnU/_new 2023-11-30 22:05:44.038993245 +0100
@@ -3,7 +3,7 @@
<param name="url">https://github.com/meshery/meshery</param>
<param name="scm">git</param>
<param name="exclude">.git</param>
- <param name="revision">v0.6.181</param>
+ <param name="revision">v0.6.185</param>
<param name="versionformat">@PARENT_TAG@</param>
<param name="changesgenerate">disable</param>
<param name="versionrewrite-pattern">v(.*)</param>
@@ -17,7 +17,7 @@
<param name="compression">gz</param>
</service>
<service name="go_modules" mode="manual">
- <param name="archive">meshery-0.6.181.obscpio</param>
+ <param name="archive">meshery-0.6.185.obscpio</param>
</service>
</services>
++++++ meshery-0.6.181.obscpio -> meshery-0.6.185.obscpio ++++++
/work/SRC/openSUSE:Factory/mesheryctl/meshery-0.6.181.obscpio /work/SRC/openSUSE:Factory/.mesheryctl.new.25432/meshery-0.6.185.obscpio differ: char 50, line 1
++++++ meshery.obsinfo ++++++
--- /var/tmp/diff_new_pack.XWMdnU/_old 2023-11-30 22:05:44.082994866 +0100
+++ /var/tmp/diff_new_pack.XWMdnU/_new 2023-11-30 22:05:44.082994866 +0100
@@ -1,5 +1,5 @@
name: meshery
-version: 0.6.181
-mtime: 1700870498
-commit: 9d7de53c6540c3aee9886d36fc1e29b16059aba0
+version: 0.6.185
+mtime: 1701294557
+commit: 59586314bd3b444f150a0bfbf01dedb37170ca9a
++++++ vendor.tar.gz ++++++
/work/SRC/openSUSE:Factory/mesheryctl/vendor.tar.gz /work/SRC/openSUSE:Factory/.mesheryctl.new.25432/vendor.tar.gz differ: char 5, line 1
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-osc-tiny for openSUSE:Factory checked in at 2023-11-30 22:03:58
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-osc-tiny (Old)
and /work/SRC/openSUSE:Factory/.python-osc-tiny.new.25432 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-osc-tiny"
Thu Nov 30 22:03:58 2023 rev:29 rq:1129978 version:0.8.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-osc-tiny/python-osc-tiny.changes 2023-03-06 18:56:46.137037468 +0100
+++ /work/SRC/openSUSE:Factory/.python-osc-tiny.new.25432/python-osc-tiny.changes 2023-11-30 22:05:16.573981173 +0100
@@ -1,0 +2,12 @@
+Wed Nov 29 18:03:47 UTC 2023 - Chen Huang <chhuang(a)suse.com>
+
+- Release 0.8.0
+ * Added the attributes extension
+ * Project.get_meta: target the /_project path to really get specific revisions
+ * Add an optional rev parameter to Project.get_meta
+ * Reusable function to extract error message from responses and converted get_objectified_xml into standalone function
+ * Removed backport of lru_cache
+ * Session optimizations
+ * Add Build.get_log
+
+-------------------------------------------------------------------
Old:
----
osc-tiny-0.7.12.tar.gz
New:
----
osc-tiny-0.8.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-osc-tiny.spec ++++++
--- /var/tmp/diff_new_pack.dlsPBR/_old 2023-11-30 22:05:17.234005494 +0100
+++ /var/tmp/diff_new_pack.dlsPBR/_new 2023-11-30 22:05:17.234005494 +0100
@@ -1,7 +1,7 @@
#
# spec file for package python-osc-tiny
#
-# Copyright (c) 2022 SUSE LLC
+# Copyright (c) 2023 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -18,7 +18,7 @@
%define skip_python2 1
Name: python-osc-tiny
-Version: 0.7.12
+Version: 0.8.0
Release: 0
Summary: Client API for openSUSE BuildService
License: MIT
++++++ osc-tiny-0.7.12.tar.gz -> osc-tiny-0.8.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osc-tiny-0.7.12/PKG-INFO new/osc-tiny-0.8.0/PKG-INFO
--- old/osc-tiny-0.7.12/PKG-INFO 2023-03-06 07:03:02.507382900 +0100
+++ new/osc-tiny-0.8.0/PKG-INFO 2023-11-29 15:48:58.173556800 +0100
@@ -1,11 +1,12 @@
Metadata-Version: 2.1
Name: osc-tiny
-Version: 0.7.12
+Version: 0.8.0
Summary: Client API for openSUSE BuildService
-Home-page: http://github.com/crazyscientist/osc-tiny
-Download-URL: http://github.com/crazyscientist/osc-tiny/tarball/master
+Home-page: https://github.com/SUSE/osc-tiny
Author: Andreas Hasenkopf
Author-email: ahasenkopf(a)suse.com
+Maintainer: SUSE Maintenance Automation Engineering team
+Maintainer-email: maintenance-automation-team(a)suse.de
License: MIT
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
@@ -18,8 +19,14 @@
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
+Classifier: Programming Language :: Python :: 3.12
Description-Content-Type: text/markdown
License-File: LICENSE
+Requires-Dist: lxml
+Requires-Dist: requests
+Requires-Dist: python-dateutil
+Requires-Dist: pytz
+Requires-Dist: pyyaml
OSC Tiny
========
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osc-tiny-0.7.12/osc_tiny.egg-info/PKG-INFO new/osc-tiny-0.8.0/osc_tiny.egg-info/PKG-INFO
--- old/osc-tiny-0.7.12/osc_tiny.egg-info/PKG-INFO 2023-03-06 07:03:02.000000000 +0100
+++ new/osc-tiny-0.8.0/osc_tiny.egg-info/PKG-INFO 2023-11-29 15:48:58.000000000 +0100
@@ -1,11 +1,12 @@
Metadata-Version: 2.1
Name: osc-tiny
-Version: 0.7.12
+Version: 0.8.0
Summary: Client API for openSUSE BuildService
-Home-page: http://github.com/crazyscientist/osc-tiny
-Download-URL: http://github.com/crazyscientist/osc-tiny/tarball/master
+Home-page: https://github.com/SUSE/osc-tiny
Author: Andreas Hasenkopf
Author-email: ahasenkopf(a)suse.com
+Maintainer: SUSE Maintenance Automation Engineering team
+Maintainer-email: maintenance-automation-team(a)suse.de
License: MIT
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
@@ -18,8 +19,14 @@
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
+Classifier: Programming Language :: Python :: 3.12
Description-Content-Type: text/markdown
License-File: LICENSE
+Requires-Dist: lxml
+Requires-Dist: requests
+Requires-Dist: python-dateutil
+Requires-Dist: pytz
+Requires-Dist: pyyaml
OSC Tiny
========
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osc-tiny-0.7.12/osc_tiny.egg-info/SOURCES.txt new/osc-tiny-0.8.0/osc_tiny.egg-info/SOURCES.txt
--- old/osc-tiny-0.7.12/osc_tiny.egg-info/SOURCES.txt 2023-03-06 07:03:02.000000000 +0100
+++ new/osc-tiny-0.8.0/osc_tiny.egg-info/SOURCES.txt 2023-11-29 15:48:58.000000000 +0100
@@ -13,6 +13,7 @@
osctiny/__init__.py
osctiny/osc.py
osctiny/extensions/__init__.py
+osctiny/extensions/attributes.py
osctiny/extensions/bs_requests.py
osctiny/extensions/buildresults.py
osctiny/extensions/comments.py
@@ -25,9 +26,9 @@
osctiny/extensions/users.py
osctiny/tests/__init__.py
osctiny/tests/base.py
+osctiny/tests/test_attributes.py
osctiny/tests/test_basic.py
osctiny/tests/test_build.py
-osctiny/tests/test_cache.py
osctiny/tests/test_comments.py
osctiny/tests/test_datadir.py
osctiny/tests/test_distributions.py
@@ -47,4 +48,5 @@
osctiny/utils/changelog.py
osctiny/utils/conf.py
osctiny/utils/errors.py
-osctiny/utils/mapping.py
\ No newline at end of file
+osctiny/utils/mapping.py
+osctiny/utils/xml.py
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osc-tiny-0.7.12/osctiny/__init__.py new/osc-tiny-0.8.0/osctiny/__init__.py
--- old/osc-tiny-0.7.12/osctiny/__init__.py 2023-03-06 07:02:53.000000000 +0100
+++ new/osc-tiny-0.8.0/osctiny/__init__.py 2023-11-29 15:48:50.000000000 +0100
@@ -6,4 +6,4 @@
__all__ = ['Osc', 'bs_requests', 'buildresults', 'comments', 'packages',
'projects', 'search', 'users']
-__version__ = "0.7.12"
+__version__ = "0.8.0"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osc-tiny-0.7.12/osctiny/extensions/attributes.py new/osc-tiny-0.8.0/osctiny/extensions/attributes.py
--- old/osc-tiny-0.7.12/osctiny/extensions/attributes.py 1970-01-01 01:00:00.000000000 +0100
+++ new/osc-tiny-0.8.0/osctiny/extensions/attributes.py 2023-11-29 15:48:50.000000000 +0100
@@ -0,0 +1,73 @@
+"""
+Attributes extension
+--------------------
+
+.. versionadded:: 0.8.0
+"""
+import typing
+from urllib.parse import urljoin
+
+from lxml.objectify import ObjectifiedElement
+
+from ..utils.base import ExtensionBase
+
+
+class Attribute(ExtensionBase):
+ """
+ Access attribute namespaces and definitions
+ """
+ base_path = "/attribute"
+
+ def list_namespaces(self) -> typing.List[str]:
+ """
+ Get a list of all namespaces
+
+ :return: List of namespace names
+ """
+ response = self.osc.request(
+ url=urljoin(self.osc.url, f"{self.base_path}/"),
+ method="GET"
+ )
+ content = self.osc.get_objectified_xml(response)
+ return [entry.get("name") for entry in content.findall("entry")]
+
+ def get_namespace_meta(self, namespace: str) -> ObjectifiedElement:
+ """
+ Get the meta of the namespace
+
+ :param namespace: namespace name
+ :return: Objectified XML element
+ """
+ response = self.osc.request(
+ url=urljoin(self.osc.url, f"{self.base_path}/{namespace}/_meta"),
+ method="GET"
+ )
+ return self.osc.get_objectified_xml(response)
+
+ def list_attributes(self, namespace: str) -> typing.List[str]:
+ """
+ List the attributes available in namespace
+
+ :param namespace: Namespace name
+ :return: List of attribute names
+ """
+ response = self.osc.request(
+ url=urljoin(self.osc.url, f"{self.base_path}/{namespace}"),
+ method="GET"
+ )
+ content = self.osc.get_objectified_xml(response)
+ return [entry.get("name") for entry in content.findall("entry")]
+
+ def get_attribute_meta(self, namespace: str, name: str) -> ObjectifiedElement:
+ """
+ Get meta data for attribute
+
+ :param namespace: Namespace name
+ :param name: Attribute name
+ :return: Objectified XML element
+ """
+ response = self.osc.request(
+ url=urljoin(self.osc.url, f"{self.base_path}/{namespace}/{name}/_meta"),
+ method="GET"
+ )
+ return self.osc.get_objectified_xml(response)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osc-tiny-0.7.12/osctiny/extensions/buildresults.py new/osc-tiny-0.8.0/osctiny/extensions/buildresults.py
--- old/osc-tiny-0.7.12/osctiny/extensions/buildresults.py 2023-03-06 07:02:53.000000000 +0100
+++ new/osc-tiny-0.8.0/osctiny/extensions/buildresults.py 2023-11-29 15:48:50.000000000 +0100
@@ -68,6 +68,28 @@
return self.osc.get_objectified_xml(response)
+ def get_log(self, project, repo, arch, package):
+ """
+ Get the build log of a package
+
+ :param project: Project name
+ :param repo: Repository name
+ :param arch: Architecture name
+ :param package: Package name
+ :return: The package build log file
+ :rtype: str
+
+ .. versionadded:: 0.8.0
+ """
+
+ response = self.osc.request(
+ method="GET",
+ url=urljoin(self.osc.url, "{}/{}/{}/{}/{}/_log".format(self.base_path,
+ project,repo,arch,package))
+ )
+
+ return response.text
+
def get_package_list(self, project, repo, arch):
"""
Get a list of packages for which build results exist
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osc-tiny-0.7.12/osctiny/extensions/issues.py new/osc-tiny-0.8.0/osctiny/extensions/issues.py
--- old/osc-tiny-0.7.12/osctiny/extensions/issues.py 2023-03-06 07:02:53.000000000 +0100
+++ new/osc-tiny-0.8.0/osctiny/extensions/issues.py 2023-11-29 15:48:50.000000000 +0100
@@ -2,11 +2,11 @@
Issues extension
----------------
"""
+from functools import lru_cache
import os
from urllib.parse import urljoin
-from ..utils.backports import lru_cache
from ..utils.base import ExtensionBase
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osc-tiny-0.7.12/osctiny/extensions/origin.py new/osc-tiny-0.8.0/osctiny/extensions/origin.py
--- old/osc-tiny-0.7.12/osctiny/extensions/origin.py 2023-03-06 07:02:53.000000000 +0100
+++ new/osc-tiny-0.8.0/osctiny/extensions/origin.py 2023-11-29 15:48:50.000000000 +0100
@@ -22,12 +22,13 @@
"""
# pylint: disable=too-many-ancestors,ungrouped-imports
from collections import defaultdict
+from functools import lru_cache
import re
from warnings import warn
from yaml import load
-from ..utils.backports import lru_cache, cached_property
+from ..utils.backports import cached_property
from ..utils.base import ExtensionBase
from ..utils.mapping import LazyOscMappable
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osc-tiny-0.7.12/osctiny/extensions/projects.py new/osc-tiny-0.8.0/osctiny/extensions/projects.py
--- old/osc-tiny-0.7.12/osctiny/extensions/projects.py 2023-03-06 07:02:53.000000000 +0100
+++ new/osc-tiny-0.8.0/osctiny/extensions/projects.py 2023-11-29 15:48:50.000000000 +0100
@@ -42,20 +42,26 @@
return self.osc.get_objectified_xml(response)
- def get_meta(self, project):
+ def get_meta(self, project, rev=None):
"""
Get project metadata
+
+ .. versionchanged:: 0.8.0
+ Added the ``rev`` parameter
:param project: name of project
+ :param rev: optional revision ID
+ :type rev: int
:return: Objectified XML element
:rtype: lxml.objectify.ObjectifiedElement
"""
response = self.osc.request(
url=urljoin(
self.osc.url,
- "{}/{}/_meta".format(self.base_path, project)
+ "{}/{}/_project/_meta".format(self.base_path, project)
),
- method="GET"
+ method="GET",
+ params={"rev": rev} if rev else None
)
return self.osc.get_objectified_xml(response)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osc-tiny-0.7.12/osctiny/osc.py new/osc-tiny-0.8.0/osctiny/osc.py
--- old/osc-tiny-0.7.12/osctiny/osc.py 2023-03-06 07:02:53.000000000 +0100
+++ new/osc-tiny-0.8.0/osctiny/osc.py 2023-11-29 15:48:50.000000000 +0100
@@ -7,6 +7,7 @@
from base64 import b64encode
import typing
import errno
+from http.cookiejar import CookieJar
from io import BufferedReader, BytesIO, StringIO
import gc
import logging
@@ -19,13 +20,12 @@
from urllib.parse import quote, parse_qs, urlparse
import warnings
-# pylint: disable=no-name-in-module
-from lxml.objectify import fromstring, makeparser
from requests import Session, Request
from requests.auth import HTTPBasicAuth
from requests.cookies import RequestsCookieJar, cookiejar_from_dict
from requests.exceptions import ConnectionError as _ConnectionError
+from .extensions.attributes import Attribute
from .extensions.buildresults import Build
from .extensions.comments import Comment
from .extensions.distributions import Distribution
@@ -38,13 +38,10 @@
from .extensions.users import Group, Person
from .utils.auth import HttpSignatureAuth
from .utils.backports import cached_property
-from .utils.conf import BOOLEAN_PARAMS, get_credentials
+from .utils.conf import BOOLEAN_PARAMS, get_credentials, get_cookie_jar
from .utils.errors import OscError
+from .utils.xml import get_xml_parser, get_objectified_xml
-try:
- from cachecontrol import CacheControl
-except ImportError:
- CacheControl = None
THREAD_LOCAL = threading.local()
@@ -88,13 +85,14 @@
- :py:attr:`distributions`
* - :py:class:`osctiny.extensions.origin.Origin`
- :py:attr:`origins`
+ * - :py:class:`osctiny.extensions.attributes.Attribute`
+ - :py:attr:`attributes`
:param url: API URL of a BuildService instance
:param username: Username
:param password: Password; this is either the user password (``ssh_key_file`` is ``None``) or
the SSH passphrase, if ``ssh_key_file`` is defined
:param verify: See `SSL Cert Verification`_ for more details
- :param cache: Store API responses in a cache
:param ssh_key_file: Path to SSH private key file
:raises osctiny.errors.OscError: if no credentials are provided
@@ -120,6 +118,10 @@
Support for 2FA authentication (i.e. added the ``ssh_key_file`` parameter and changed the
meaning of the ``password`` parameter
+ .. versionchanged:: 0.8.0
+ * Removed the ``cache`` parameter
+ * Added the ``attributes`` extensions
+
.. _SSL Cert Verification:
http://docs.python-requests.org/en/master/user/advanced/
#ssl-cert-verification
@@ -133,14 +135,12 @@
def __init__(self, url: typing.Optional[str] = None, username: typing.Optional[str] = None,
password: typing.Optional[str] = None, verify: typing.Optional[str] = None,
- cache: bool = False,
ssh_key_file: typing.Optional[typing.Union[Path, str]] = None):
# Basic URL and authentication settings
self.url = url or self.url
self.username = username or self.username
self.password = password or self.password
self.verify = verify
- self.cache = cache
self.ssh_key = ssh_key_file
if self.ssh_key is not None and not isinstance(self.ssh_key, Path):
self.ssh_key = Path(self.ssh_key)
@@ -152,6 +152,7 @@
raise OscError from error
# API endpoints
+ self.attributes = Attribute(osc_obj=self)
self.build = Build(osc_obj=self)
self.comments = Comment(osc_obj=self)
self.distributions = Distribution(osc_obj=self)
@@ -174,7 +175,7 @@
return f"session_{session_hash}_{os.getpid()}_{threading.get_ident()}"
@property
- def _session(self) -> Session:
+ def session(self) -> Session:
"""
Session object
"""
@@ -183,6 +184,11 @@
session = Session()
session.verify = self.verify or get_default_verify_paths().capath
+ cookies = get_cookie_jar()
+ if cookies is not None:
+ cookies.load()
+ session.cookies = cookies
+
if self.ssh_key is not None:
session.auth = HttpSignatureAuth(username=self.username, password=self.password,
ssh_key_file=self.ssh_key)
@@ -194,49 +200,31 @@
return session
@property
- def session(self) -> typing.Union[CacheControl, Session]:
- """
- Session object
-
- Possibly wrapped in CacheControl, if installed.
- """
- if not self.cache or CacheControl is None:
- return self._session
-
- key = f"cached_{self._session_id}"
- session = getattr(THREAD_LOCAL, key, None)
- if not session:
- session = CacheControl(self._session)
- setattr(THREAD_LOCAL, key, session)
-
- return session
-
- @property
def cookies(self) -> RequestsCookieJar:
"""
Access session cookies
"""
- return self._session.cookies
+ return self.session.cookies
@cookies.setter
- def cookies(self, value: RequestsCookieJar):
- if not isinstance(value, (RequestsCookieJar, dict)):
+ def cookies(self, value: typing.Union[CookieJar, dict]):
+ if not isinstance(value, (CookieJar, dict)):
raise TypeError(f"Expected a cookie jar or dict. Got instead: {type(value)}")
- if isinstance(value, RequestsCookieJar):
- self._session.cookies = value
+ if isinstance(value, CookieJar):
+ self.session.cookies = value
else:
- self._session.cookies = cookiejar_from_dict(value)
+ self.session.cookies = cookiejar_from_dict(value)
@property
def parser(self):
"""
Explicit parser instance
- """
- if not hasattr(THREAD_LOCAL, "parser"):
- THREAD_LOCAL.parser = makeparser(huge_tree=True)
- return THREAD_LOCAL.parser
+ .. versionchanged:: 0.8.0
+ Content moved to :py:fun:`osctiny.utils.xml.get_xml_parser`
+ """
+ return get_xml_parser()
def request(self, url, method="GET", stream=False, data=None, params=None,
raise_for_status=True, timeout=None):
@@ -247,9 +235,6 @@
a dictionary and contains a key ``comment``, this value is passed on as
a POST parameter.
- If ``stream`` is True, the server response does not get cached because
- the returned file might be large or huge.
-
if ``raise_for_status`` is True, the used ``requests`` framework will
raise an exception for occured errors.
@@ -292,21 +277,16 @@
"""
timeout = timeout or self.default_timeout
- if stream:
- session = self._session
- else:
- session = self.session
-
req = Request(
method,
url.replace("#", quote("#")).replace("?", quote("?")),
data=self.handle_params(url=url, method=method, params=data),
params=self.handle_params(url=url, method=method, params=params)
)
- prepped_req = session.prepare_request(req)
+ prepped_req = self.session.prepare_request(req)
prepped_req.headers['Content-Type'] = "application/octet-stream"
prepped_req.headers['Accept'] = "application/xml"
- settings = session.merge_environment_settings(
+ settings = self.session.merge_environment_settings(
prepped_req.url, {}, None, None, None
)
settings["stream"] = stream
@@ -327,7 +307,7 @@
else parse_qs(req.params, keep_blank_values=True)
).items()))
try:
- response = session.send(prepped_req, **settings)
+ response = self.session.send(prepped_req, **settings)
except _ConnectionError as error:
warnings.warn("Problem connecting to server: {}".format(error))
log_method = logger.error if i < 1 else logger.warning
@@ -489,25 +469,8 @@
Allow ``response`` to be a string
- :param response: An API response or XML string
- :rtype response: :py:class:`requests.Response`
- :return: :py:class:`lxml.objectify.ObjectifiedElement`
- """
- if isinstance(response, str):
- text = response
- else:
- text = response.text
+ .. versionchanged:: 0.8.0
- try:
- return fromstring(text, self.parser)
- except ValueError:
- # Just in case OBS returns a Unicode string with encoding
- # declaration
- if isinstance(text, str) and \
- "encoding=" in text:
- return fromstring(
- re.sub(r'encoding="[^"]+"', "", text)
- )
-
- # This might be something else
- raise
+ Content moved to :py:fun:`osctiny.utils.xml.get_objectified_xml`
+ """
+ return get_objectified_xml(response=response)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osc-tiny-0.7.12/osctiny/tests/test_attributes.py new/osc-tiny-0.8.0/osctiny/tests/test_attributes.py
--- old/osc-tiny-0.7.12/osctiny/tests/test_attributes.py 1970-01-01 01:00:00.000000000 +0100
+++ new/osc-tiny-0.8.0/osctiny/tests/test_attributes.py 2023-11-29 15:48:50.000000000 +0100
@@ -0,0 +1,52 @@
+import responses
+
+from .base import OscTest
+
+
+class TestAttribute(OscTest):
+ def setUp(self):
+ super().setUp()
+
+ self.mock_request(
+ method=responses.GET,
+ url=self.osc.url + '/attribute/',
+ body="<directory><entry name='Foo'/><entry name='Bar'/></directory>"
+ )
+
+ self.mock_request(
+ method=responses.GET,
+ url=self.osc.url + '/attribute/Foo/_meta',
+ body="<namespace name='Foo'><modifiable_by user='A'/></namespace>"
+ )
+
+ self.mock_request(
+ method=responses.GET,
+ url=self.osc.url + '/attribute/Foo',
+ body="<directory><entry name='Hello'/><entry name='World'/></directory>"
+ )
+
+ self.mock_request(
+ method=responses.GET,
+ url=self.osc.url + '/attribute/Foo/Hello/_meta',
+ body="<definition name='Hello' namespace='Foo'><description>Lorem ipsum</description>"
+ "<count>1</count><modifiable_by role='B'/></definition>"
+ )
+
+ @responses.activate
+ def test_list_namespace(self):
+ self.assertEqual(["Foo", "Bar"], self.osc.attributes.list_namespaces())
+
+ @responses.activate
+ def test_get_namespace_meta(self):
+ meta = self.osc.attributes.get_namespace_meta("Foo")
+ self.assertEqual(meta.get("name"), "Foo")
+
+ @responses.activate
+ def test_list_attributes(self):
+ self.assertEqual(["Hello", "World"], self.osc.attributes.list_attributes("Foo"))
+
+ @responses.activate
+ def test_get_attribute_meta(self):
+ meta = self.osc.attributes.get_attribute_meta("Foo", "Hello")
+ self.assertEqual(meta.get("name"), "Hello")
+ self.assertEqual(meta.get("namespace"), "Foo")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osc-tiny-0.7.12/osctiny/tests/test_cache.py new/osc-tiny-0.8.0/osctiny/tests/test_cache.py
--- old/osc-tiny-0.7.12/osctiny/tests/test_cache.py 2023-03-06 07:02:53.000000000 +0100
+++ new/osc-tiny-0.8.0/osctiny/tests/test_cache.py 1970-01-01 01:00:00.000000000 +0100
@@ -1,24 +0,0 @@
-from unittest import skipUnless
-
-from .test_search import TestSearch
-from osctiny import Osc
-
-try:
- import cachecontrol
-except ImportError:
- with_cache = False
-else:
- with_cache = True
-
-
-@skipUnless(with_cache, "No cache module present, therefore not testing")
-class TestSearch(TestSearch):
- @classmethod
- def setUpClass(cls):
- super().setUpClass()
- cls.osc = Osc(
- url="http://api.example.com",
- username="foobar",
- password="helloworld",
- cache=True
- )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osc-tiny-0.7.12/osctiny/tests/test_projects.py new/osc-tiny-0.8.0/osctiny/tests/test_projects.py
--- old/osc-tiny-0.7.12/osctiny/tests/test_projects.py 2023-03-06 07:02:53.000000000 +0100
+++ new/osc-tiny-0.8.0/osctiny/tests/test_projects.py 2023-11-29 15:48:50.000000000 +0100
@@ -93,6 +93,10 @@
</status>
"""
headers['request-id'] = '728d329e-0e86-11e4-a748-0c84dc037c13'
+ if "rev" in request.params:
+ revision = request.params["rev"]
+ body = body.replace('<project name="Devel:ARM:Factory">',
+ f'<project name="Devel:ARM:Factory:r{revision}">')
return status, headers, body
self.mock_request(
@@ -111,6 +115,10 @@
self.assertRaises(
HTTPError, self.osc.projects.get_meta, "Devel:ARM:Fbctory"
)
+ with self.subTest("existing project with revision"):
+ response = self.osc.projects.get_meta("Devel:ARM:Factory", rev=2)
+ self.assertEqual(response.tag, "project")
+ self.assertEqual(response.get("name"), "Devel:ARM:Factory:r2")
@responses.activate
def test_set_meta(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osc-tiny-0.7.12/osctiny/tests/test_utils.py new/osc-tiny-0.8.0/osctiny/tests/test_utils.py
--- old/osc-tiny-0.7.12/osctiny/tests/test_utils.py 2023-03-06 07:02:53.000000000 +0100
+++ new/osc-tiny-0.8.0/osctiny/tests/test_utils.py 2023-11-29 15:48:50.000000000 +0100
@@ -10,10 +10,11 @@
import sys
from tempfile import mkstemp
from types import GeneratorType
+import warnings
from dateutil.parser import parse
from pytz import _UTC, timezone
-from requests import Response
+from requests import Response, HTTPError
import responses
from ..osc import Osc, THREAD_LOCAL
@@ -21,6 +22,7 @@
from ..utils.changelog import ChangeLog, Entry
from ..utils.conf import get_config_path, get_credentials
from ..utils.mapping import Mappable
+from ..utils.errors import get_http_error_details
sys.path.append(os.path.dirname(__file__))
@@ -489,3 +491,65 @@
"Basic realm=\"Use your developer account\", "})
response = self.osc.session.get("https://api.example.com/hello-world")
self.do_assertions(response, True)
+
+
+class TestError(TestCase):
+ url = "http://example.com"
+ @property
+ def osc(self) -> Osc:
+ return Osc(url=self.url, username="nemo", password="password")
+
+ @responses.activate
+ def test_get_http_error_details(self):
+ status = 400
+ summary = "Bla Bla Bla"
+ responses.add(
+ responses.GET,
+ "http://example.com",
+ body=f"""<status code="foo"><summary>{summary}</summary></status>""",
+ status=status
+ )
+
+ response = self.osc.session.get(self.url)
+
+ with self.subTest("Response"):
+ self.assertEqual(response.status_code, status)
+ self.assertEqual(get_http_error_details(response), summary)
+
+ with self.subTest("Exception"):
+ try:
+ response.raise_for_status()
+ except HTTPError as error:
+ self.assertEqual(get_http_error_details(error), summary)
+ else:
+ self.fail("No exception was raised")
+
+ @responses.activate
+ def test_get_http_error_details__bad_response(self):
+ status = 502
+ responses.add(
+ responses.GET,
+ "http://example.com",
+ body=f"""Bad Gateway HTML message""",
+ status=status
+ )
+
+ response = self.osc.session.get(self.url)
+
+ with self.subTest("Response"):
+ self.assertEqual(response.status_code, status)
+ with warnings.catch_warnings(record=True) as emitted_warnings:
+ self.assertIn("Server replied with:", get_http_error_details(response))
+ self.assertEqual(len(emitted_warnings), 1)
+ self.assertIn("Start tag expected", str(emitted_warnings[-1].message))
+
+ with self.subTest("Exception"):
+ try:
+ response.raise_for_status()
+ except HTTPError as error:
+ with warnings.catch_warnings(record=True) as emitted_warnings:
+ self.assertIn("Server replied with:", get_http_error_details(error))
+ self.assertEqual(len(emitted_warnings), 1)
+ self.assertIn("Start tag expected", str(emitted_warnings[-1].message))
+ else:
+ self.fail("No exception was raised")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osc-tiny-0.7.12/osctiny/utils/backports.py new/osc-tiny-0.8.0/osctiny/utils/backports.py
--- old/osc-tiny-0.7.12/osctiny/utils/backports.py 2023-03-06 07:02:53.000000000 +0100
+++ new/osc-tiny-0.8.0/osctiny/utils/backports.py 2023-11-29 15:48:50.000000000 +0100
@@ -3,21 +3,11 @@
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. versionadded:: 0.3.0
-"""
-try:
- # pylint: disable=unused-import
- from functools import lru_cache
-except ImportError:
- # Whoever had the grandiose idea to backport this to Python2?
- # pylint: disable=unused-argument
- def lru_cache(*args, **kwargs):
- """Dummy wrapper"""
- def wrapper(fun):
- return fun
-
- return wrapper
+.. versionchanged:: 0.8.0
+ Removed function ``lru_cache``
+"""
try:
# pylint: disable=unused-import
from functools import cached_property
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osc-tiny-0.7.12/osctiny/utils/conf.py new/osc-tiny-0.8.0/osctiny/utils/conf.py
--- old/osc-tiny-0.7.12/osctiny/utils/conf.py 2023-03-06 07:02:53.000000000 +0100
+++ new/osc-tiny-0.8.0/osctiny/utils/conf.py 2023-11-29 15:48:50.000000000 +0100
@@ -12,6 +12,7 @@
from base64 import b64decode
from bz2 import decompress
from configparser import ConfigParser, NoSectionError
+from http.cookiejar import LWPCookieJar
import os
from pathlib import Path
@@ -189,3 +190,25 @@
raise ValueError(f"`osc` config provides no password or SSH key for URL {url}")
return username, password if sshkey is None else None, sshkey
+
+
+def get_cookie_jar() -> typing.Optional[LWPCookieJar]:
+ """
+ Get cookies from a persistent osc cookiejar
+
+ .. versionadded:: 0.8.0
+ """
+ if _conf is not None:
+ path = _conf._identify_osccookiejar() # pylint: disable=protected-access
+ if os.path.isfile(path):
+ return LWPCookieJar(filename=path)
+
+ path_suffix = Path("osc", "cookiejar")
+ paths = [Path(os.getenv("XDG_STATE_HOME", "/tmp")).joinpath(path_suffix),
+ Path.home().joinpath(".local", "state").joinpath(path_suffix)]
+
+ for path in paths:
+ if path.is_file():
+ return LWPCookieJar(filename=str(path)) # compatibility for Python < 3.8
+
+ return None
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osc-tiny-0.7.12/osctiny/utils/errors.py new/osc-tiny-0.8.0/osctiny/utils/errors.py
--- old/osc-tiny-0.7.12/osctiny/utils/errors.py 2023-03-06 07:02:53.000000000 +0100
+++ new/osc-tiny-0.8.0/osctiny/utils/errors.py 2023-11-29 15:48:50.000000000 +0100
@@ -1,10 +1,42 @@
"""
-Base classes for osc-tiny specific exceptions
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+Exception base classes and utilities
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
"""
+import typing
+from warnings import warn
+
+from requests import HTTPError, Response
+
+from .xml import get_objectified_xml
+
+
+def get_http_error_details(error: typing.Union[HTTPError, Response]) -> str:
+ """
+ Extract user-friendly error message from exception
+
+ .. versionadded:: 0.8.0
+ """
+ if isinstance(error, HTTPError):
+ response = error.response
+ elif isinstance(error, Response):
+ response = error
+ else:
+ raise TypeError("Expected a Response of HTTPError instance!")
+
+ try:
+ xml_obj = get_objectified_xml(response)
+ except Exception as error2:
+ warn(message=f"Failed to extract error message due to another error: {error2}",
+ category=RuntimeWarning)
+ else:
+ summary = xml_obj.find("summary")
+ if summary is not None:
+ return summary.text
+
+ return f"Server replied with: {response.status_code} {response.reason}"
class OscError(Exception):
"""
- Base class for expcetions to be raised by ``osctiny``
+ Base class for exceptions to be raised by ``osctiny``
"""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osc-tiny-0.7.12/osctiny/utils/xml.py new/osc-tiny-0.8.0/osctiny/utils/xml.py
--- old/osc-tiny-0.7.12/osctiny/utils/xml.py 1970-01-01 01:00:00.000000000 +0100
+++ new/osc-tiny-0.8.0/osctiny/utils/xml.py 2023-11-29 15:48:50.000000000 +0100
@@ -0,0 +1,74 @@
+"""
+XML parsing
+^^^^^^^^^^^
+
+.. versionadded:: 0.8.0
+"""
+import re
+import threading
+import typing
+
+from lxml.etree import XMLParser
+from lxml.objectify import fromstring, makeparser, ObjectifiedElement
+from requests import Response
+
+
+THREAD_LOCAL = threading.local()
+
+
+def get_xml_parser() -> XMLParser:
+ """
+ Get a parser object
+
+ .. versionchanged:: 0.8.0
+
+ Carved out from the ``Osc`` class
+ """
+ if not hasattr(THREAD_LOCAL, "parser"):
+ THREAD_LOCAL.parser = makeparser(huge_tree=True)
+
+ return THREAD_LOCAL.parser
+
+
+def get_objectified_xml(response: typing.Union[Response, str]) -> ObjectifiedElement:
+ """
+ Return API response as an XML object
+
+ .. versionchanged:: 0.1.6
+
+ Allow parsing of "huge" XML inputs
+
+ .. versionchanged:: 0.2.4
+
+ Allow ``response`` to be a string
+
+ .. versionchanged:: 0.8.0
+
+ Carved out from ``Osc`` class
+
+ :param response: An API response or XML string
+ :rtype response: :py:class:`requests.Response`
+ :return: :py:class:`lxml.objectify.ObjectifiedElement`
+ """
+ if isinstance(response, str):
+ text = response
+ elif isinstance(response, Response):
+ text = response.text
+ else:
+ raise TypeError(f"Expected a string or response object. Got {type(response)} instead.")
+
+ parser = get_xml_parser()
+
+ try:
+ return fromstring(text, parser)
+ except ValueError:
+ # Just in case OBS returns a Unicode string with encoding
+ # declaration
+ if isinstance(text, str) and \
+ "encoding=" in text:
+ return fromstring(
+ re.sub(r'encoding="[^"]+"', "", text)
+ )
+
+ # This might be something else
+ raise
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osc-tiny-0.7.12/setup.py new/osc-tiny-0.8.0/setup.py
--- old/osc-tiny-0.7.12/setup.py 2023-03-06 07:02:53.000000000 +0100
+++ new/osc-tiny-0.8.0/setup.py 2023-11-29 15:48:50.000000000 +0100
@@ -26,14 +26,15 @@
setup(
name='osc-tiny',
- version='0.7.12',
+ version='0.8.0',
description='Client API for openSUSE BuildService',
long_description=long_description,
long_description_content_type="text/markdown",
author='Andreas Hasenkopf',
author_email='ahasenkopf(a)suse.com',
- url='http://github.com/crazyscientist/osc-tiny',
- download_url='http://github.com/crazyscientist/osc-tiny/tarball/master',
+ maintainer='SUSE Maintenance Automation Engineering team',
+ maintainer_email='maintenance-automation-team(a)suse.de',
+ url='https://github.com/SUSE/osc-tiny',
packages=find_packages(),
license='MIT',
install_requires=get_requires(),
@@ -49,5 +50,6 @@
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
+ "Programming Language :: Python :: 3.12",
]
)
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package libpff for openSUSE:Factory checked in at 2023-11-30 22:03:55
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libpff (Old)
and /work/SRC/openSUSE:Factory/.libpff.new.25432 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libpff"
Thu Nov 30 22:03:55 2023 rev:15 rq:1129964 version:20231130
Changes:
--------
--- /work/SRC/openSUSE:Factory/libpff/libpff.changes 2023-08-09 17:25:30.865477827 +0200
+++ /work/SRC/openSUSE:Factory/.libpff.new.25432/libpff.changes 2023-11-30 22:05:14.369899953 +0100
@@ -1,0 +2,7 @@
+Thu Nov 30 09:53:56 UTC 2023 - Jan Engelhardt <jengelh(a)inai.de>
+
+- Update to release 20231130
+ * RTF body decompression used wrong argument order, now fixed
+ * Improved Python Unicode handling
+
+-------------------------------------------------------------------
Old:
----
_service
libpff-snapshot-20230325.tar.asc
libpff-snapshot-20230325.tar.xz
New:
----
libpff-alpha-20231130.tar.gz
libpff-alpha-20231130.tar.gz.asc
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ libpff.spec ++++++
--- /var/tmp/diff_new_pack.ypOS8T/_old 2023-11-30 22:05:15.109927223 +0100
+++ /var/tmp/diff_new_pack.ypOS8T/_new 2023-11-30 22:05:15.109927223 +0100
@@ -18,16 +18,14 @@
Name: libpff
%define lname libpff1
-Version: 20230325
+Version: 20231130
Release: 0
Summary: Library and tools to access Microsoft PFF/OFF/PST/OST/PAB files
License: GFDL-1.1-or-later AND LGPL-3.0-or-later AND GFDL-1.3-or-later
Group: Productivity/File utilities
URL: https://github.com/libyal/libpff
-Source: %name-snapshot-%version.tar.xz
-Source2: %name-snapshot-%version.tar.asc
-#Source: https://github.com/libyal/libpff/releases/download/%version/libpff-alpha-%v…
-#Source2: https://github.com/libyal/libpff/releases/download/%version/libpff-alpha-%v…
+Source: https://github.com/libyal/libpff/releases/download/%version/libpff-alpha-%v…
+Source2: https://github.com/libyal/libpff/releases/download/%version/libpff-alpha-%v…
Source3: %name.keyring
Source12: PFF_Forensics_-_analyzing_the_horrible_reference_file_format.pdf
Source13: PFF_forensics_-_e-mail_and_appoinment_falsification_analysis.pdf
@@ -48,13 +46,13 @@
BuildRequires: pkgconfig(libcsplit) >= 20220109
BuildRequires: pkgconfig(libcthreads) >= 20220102
BuildRequires: pkgconfig(libfcache) >= 20230115
-BuildRequires: pkgconfig(libfdata) >= 20230119
+BuildRequires: pkgconfig(libfdata) >= 20230319
BuildRequires: pkgconfig(libfdatetime) >= 20220112
BuildRequires: pkgconfig(libfguid) >= 20220113
-BuildRequires: pkgconfig(libfmapi) >= 20220114
+BuildRequires: pkgconfig(libfmapi) >= 20230408
BuildRequires: pkgconfig(libfvalue) >= 20220120
-BuildRequires: pkgconfig(libfwnt) >= 20220922
-BuildRequires: pkgconfig(libuna) >= 20220611
+BuildRequires: pkgconfig(libfwnt) >= 20231124
+BuildRequires: pkgconfig(libuna) >= 20230710
BuildRequires: pkgconfig(zlib)
%python_subpackages
# Various notes: https://en.opensuse.org/libyal
@@ -105,7 +103,7 @@
applications that want to make use of libpff.
%prep
-%autosetup -p1 -n %name
+%autosetup -p1
cp -av %_sourcedir/*.pdf .
%build
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package opentofu for openSUSE:Factory checked in at 2023-11-30 22:03:53
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/opentofu (Old)
and /work/SRC/openSUSE:Factory/.opentofu.new.25432 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "opentofu"
Thu Nov 30 22:03:53 2023 rev:5 rq:1129954 version:1.6.0~beta1
Changes:
--------
--- /work/SRC/openSUSE:Factory/opentofu/opentofu.changes 2023-11-16 20:31:04.565931956 +0100
+++ /work/SRC/openSUSE:Factory/.opentofu.new.25432/opentofu.changes 2023-11-30 22:05:11.593797655 +0100
@@ -1,0 +2,40 @@
+Thu Nov 30 09:09:15 UTC 2023 - kastl(a)b1-systems.de
+
+- Update to version 1.6.0~beta1:
+ * Bump version to first beta. (#943)
+ * docs: fix: quote URLs; add security & behaviorial opts (fixes
+ #936) (#935)
+ * Fixing broken docs page symlink (#934)
+ * Add dependencies for integration tests with Kubernetes as
+ backend (#933)
+ * website: submodule/enable live editing (#890)
+ * Add dependencies for integration tests with Consul as backend
+ (#932)
+ * Add Azure integration test runbook. (#924)
+ * Change references to opentofu.org (#902)
+ * Fixes #913: Incorrect installation instructions for RPM (#917)
+ * Add definition of integration tests with Postgres backend
+ (#920)
+ * Add MAINTAINER and update CODEOWNERS (#919)
+ * Align the module fetching logic with the OpenTofu registry v1
+ protocol (#901)
+ * Fixes #859: Removing apt and yum installation instructions
+ (moved to intro section) (#903)
+ * Weekly update for the 2023-11-21. (#905)
+ * Fixes #539: Setting both "Type" and "NestedType" removes other
+ validation error messages (#897)
+ * Add `no_proxy` and `https_proxy` attributes to s3 backend
+ schema (#896)
+ * Add `tofu test` command definition (#886)
+ * website: Split installation instructions (#887)
+ * Fix workspaces configuration using environment varariable
+ TF_WORKSPACE (#867)
+ * Use correct location for LICENSE file during installation
+ (opentofu instead of nfpm) (#889)
+ * Weekly update 2023-11-15. (#883)
+ * Fix S3 Remote State Backend Validation (#876)
+ * Update s3 remote state tests (#865)
+ * Add missing argument to PackageCloud install instructions
+ (#873)
+
+-------------------------------------------------------------------
Old:
----
opentofu-1.6.0~alpha5.obscpio
New:
----
opentofu-1.6.0~beta1.obscpio
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ opentofu.spec ++++++
--- /var/tmp/diff_new_pack.e1qqZG/_old 2023-11-30 22:05:13.793878727 +0100
+++ /var/tmp/diff_new_pack.e1qqZG/_new 2023-11-30 22:05:13.793878727 +0100
@@ -19,7 +19,7 @@
%define executable_name tofu
Name: opentofu
-Version: 1.6.0~alpha5
+Version: 1.6.0~beta1
Release: 0
Summary: Declaratively manage your cloud infrastructure
License: MPL-2.0
++++++ _service ++++++
--- /var/tmp/diff_new_pack.e1qqZG/_old 2023-11-30 22:05:13.825879906 +0100
+++ /var/tmp/diff_new_pack.e1qqZG/_new 2023-11-30 22:05:13.825879906 +0100
@@ -2,7 +2,7 @@
<service name="obs_scm" mode="manual">
<param name="url">https://github.com/opentofu/opentofu/</param>
<param name="scm">git</param>
- <param name="revision">v1.6.0-alpha5</param>
+ <param name="revision">v1.6.0-beta1</param>
<param name="versionformat">@PARENT_TAG@</param>
<param name="versionrewrite-pattern">v(.*)-(.*)</param>
<param name="versionrewrite-replacement">\1~\2</param>
++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.e1qqZG/_old 2023-11-30 22:05:13.845880643 +0100
+++ /var/tmp/diff_new_pack.e1qqZG/_new 2023-11-30 22:05:13.845880643 +0100
@@ -1,6 +1,6 @@
<servicedata>
<service name="tar_scm">
<param name="url">https://github.com/opentofu/opentofu/</param>
- <param name="changesrevision">b8e2fad8e24cdd98c5a81d5c08bc8fe417cfdfc5</param></service></servicedata>
+ <param name="changesrevision">aabe1c95be5ac3fd31d33a36a6b241dc85c51f7e</param></service></servicedata>
(No newline at EOF)
++++++ opentofu.obsinfo ++++++
--- /var/tmp/diff_new_pack.e1qqZG/_old 2023-11-30 22:05:13.877881823 +0100
+++ /var/tmp/diff_new_pack.e1qqZG/_new 2023-11-30 22:05:13.881881970 +0100
@@ -1,5 +1,5 @@
name: opentofu
-version: 1.6.0~alpha5
-mtime: 1699972367
-commit: b8e2fad8e24cdd98c5a81d5c08bc8fe417cfdfc5
+version: 1.6.0~beta1
+mtime: 1701274679
+commit: aabe1c95be5ac3fd31d33a36a6b241dc85c51f7e
++++++ vendor.tar.gz ++++++
/work/SRC/openSUSE:Factory/opentofu/vendor.tar.gz /work/SRC/openSUSE:Factory/.opentofu.new.25432/vendor.tar.gz differ: char 5, line 1
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package kor for openSUSE:Factory checked in at 2023-11-30 22:01:46
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/kor (Old)
and /work/SRC/openSUSE:Factory/.kor.new.25432 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "kor"
Thu Nov 30 22:01:46 2023 rev:7 rq:1129949 version:0.3.1
Changes:
--------
--- /work/SRC/openSUSE:Factory/kor/kor.changes 2023-11-16 20:29:31.382496265 +0100
+++ /work/SRC/openSUSE:Factory/.kor.new.25432/kor.changes 2023-11-30 22:02:35.667891075 +0100
@@ -1,0 +2,11 @@
+Thu Nov 30 09:08:31 UTC 2023 - kastl(a)b1-systems.de
+
+- Update to version 0.3.1:
+ * fix ingress flag as used (#169)
+ * Feat: Find unused pv (#163)
+ * feat:add version flag to ldflags and print version in banner
+ (#158)
+ * Bump k8s.io/apiextensions-apiserver from 0.28.3 to 0.28.4
+ (#162)
+
+-------------------------------------------------------------------
Old:
----
kor-0.3.0.obscpio
New:
----
kor-0.3.1.obscpio
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ kor.spec ++++++
--- /var/tmp/diff_new_pack.bl0bKQ/_old 2023-11-30 22:02:42.612155229 +0100
+++ /var/tmp/diff_new_pack.bl0bKQ/_new 2023-11-30 22:02:42.612155229 +0100
@@ -19,7 +19,7 @@
%define __arch_install_post export NO_BRP_STRIP_DEBUG=true
Name: kor
-Version: 0.3.0
+Version: 0.3.1
Release: 0
Summary: Tool to discover unused Kubernetes Resources
License: MIT
++++++ _service ++++++
--- /var/tmp/diff_new_pack.bl0bKQ/_old 2023-11-30 22:02:42.640156294 +0100
+++ /var/tmp/diff_new_pack.bl0bKQ/_new 2023-11-30 22:02:42.644156446 +0100
@@ -3,7 +3,7 @@
<param name="url">https://github.com/yonahd/kor</param>
<param name="scm">git</param>
<param name="exclude">.git</param>
- <param name="revision">v0.3.0</param>
+ <param name="revision">v0.3.1</param>
<param name="versionformat">@PARENT_TAG@</param>
<param name="changesgenerate">enable</param>
<param name="versionrewrite-pattern">v(.*)</param>
++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.bl0bKQ/_old 2023-11-30 22:02:42.660157055 +0100
+++ /var/tmp/diff_new_pack.bl0bKQ/_new 2023-11-30 22:02:42.660157055 +0100
@@ -1,6 +1,6 @@
<servicedata>
<service name="tar_scm">
<param name="url">https://github.com/yonahd/kor</param>
- <param name="changesrevision">062aec60fe8a9a4fcab4711ca8217f8051582d16</param></service></servicedata>
+ <param name="changesrevision">a459be1a0dfcf5d96ab0ed8c86ec8dc2d675de39</param></service></servicedata>
(No newline at EOF)
++++++ kor-0.3.0.obscpio -> kor-0.3.1.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kor-0.3.0/.goreleaser.yml new/kor-0.3.1/.goreleaser.yml
--- old/kor-0.3.0/.goreleaser.yml 2023-11-15 16:26:18.000000000 +0100
+++ new/kor-0.3.1/.goreleaser.yml 2023-11-29 19:52:39.000000000 +0100
@@ -6,6 +6,8 @@
main: ./main.go
env:
- CGO_ENABLED=0
+ ldflags:
+ - -X github.com/yonahd/kor/pkg/utils.Version={{.Version}}
goos:
- linux
goarch:
@@ -17,6 +19,8 @@
main: ./main.go
env:
- CGO_ENABLED=0
+ ldflags:
+ - -X github.com/yonahd/kor/pkg/utils.Version={{.Version}}
goos:
- darwin
goarch:
@@ -32,7 +36,7 @@
- amd64
ldflags:
- -buildmode=exe
-
+ - -X github.com/yonahd/kor/pkg/utils.Version={{.Version}}
archives:
- format: tar.gz
name_template: >-
@@ -57,3 +61,5 @@
- 'README'
- Merge pull request
- Merge branch
+snapshot:
+ name_template: "{{ .Version }}"
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kor-0.3.0/README.md new/kor-0.3.1/README.md
--- old/kor-0.3.0/README.md 2023-11-15 16:26:18.000000000 +0100
+++ new/kor-0.3.1/README.md 2023-11-29 19:52:39.000000000 +0100
@@ -21,6 +21,7 @@
- Ingresses
- PDBs
- CRDs
+- PVs
![Kor Screenshot](/images/screenshot.png)
@@ -82,9 +83,10 @@
- `role` - Gets unused Roles for the specified namespace or all namespaces.
- `hpa` - Gets unused HPAs for the specified namespace or all namespaces.
- `pvc` - Gets unused PVCs for the specified namespace or all namespaces.
+- `pv` - Gets unused PVs in the cluster(non namespaced resource).
- `ingress` - Gets unused Ingresses for the specified namespace or all namespaces.
- `pdb` - Gets unused PDBs for the specified namespace or all namespaces.
-- `crd` - Gets unused CRDs in the cluster.
+- `crd` - Gets unused CRDs in the cluster(non namespaced resource).
- `exporter` - Export Prometheus metrics.
### Supported Flags
@@ -133,6 +135,7 @@
| Ingresses | Ingresses not pointing at any Service | |
| Hpas | HPAs not used in Deployments<br/> HPAs not used in StatefulSets | |
| CRDs | CRDs not used the cluster | |
+| Pvs | PVs not bound to a PVC | |
| Pdbs | PDBs not used in Deployments<br/> PDBs not used in StatefulSets | |
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kor-0.3.0/cmd/kor/pv.go new/kor-0.3.1/cmd/kor/pv.go
--- old/kor-0.3.0/cmd/kor/pv.go 1970-01-01 01:00:00.000000000 +0100
+++ new/kor-0.3.1/cmd/kor/pv.go 2023-11-29 19:52:39.000000000 +0100
@@ -0,0 +1,31 @@
+package kor
+
+import (
+ "fmt"
+
+ "github.com/spf13/cobra"
+ "github.com/yonahd/kor/pkg/kor"
+ "github.com/yonahd/kor/pkg/utils"
+)
+
+var pvCmd = &cobra.Command{
+ Use: "persistentvolume",
+ Aliases: []string{"pv", "persistentvolumes"},
+ Short: "Gets unused pvs",
+ Args: cobra.NoArgs,
+ Run: func(cmd *cobra.Command, args []string) {
+ clientset := kor.GetKubeClient(kubeconfig)
+
+ if response, err := kor.GetUnusedPvs(filterOptions, clientset, outputFormat, opts); err != nil {
+ fmt.Println(err)
+ } else {
+ utils.PrintLogo(outputFormat)
+ fmt.Println(response)
+ }
+
+ },
+}
+
+func init() {
+ rootCmd.AddCommand(pvCmd)
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kor-0.3.0/go.mod new/kor-0.3.1/go.mod
--- old/kor-0.3.0/go.mod 2023-11-15 16:26:18.000000000 +0100
+++ new/kor-0.3.1/go.mod 2023-11-29 19:52:39.000000000 +0100
@@ -8,10 +8,10 @@
github.com/prometheus/client_golang v1.17.0
github.com/spf13/cobra v1.8.0
github.com/stretchr/testify v1.8.4
- k8s.io/api v0.28.3
- k8s.io/apiextensions-apiserver v0.28.3
- k8s.io/apimachinery v0.28.3
- k8s.io/client-go v0.28.3
+ k8s.io/api v0.28.4
+ k8s.io/apiextensions-apiserver v0.28.4
+ k8s.io/apimachinery v0.28.4
+ k8s.io/client-go v0.28.4
k8s.io/utils v0.0.0-20230406110748-d93618cff8a2
sigs.k8s.io/yaml v1.4.0
)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kor-0.3.0/go.sum new/kor-0.3.1/go.sum
--- old/kor-0.3.0/go.sum 2023-11-15 16:26:18.000000000 +0100
+++ new/kor-0.3.1/go.sum 2023-11-29 19:52:39.000000000 +0100
@@ -181,14 +181,14 @@
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-k8s.io/api v0.28.3 h1:Gj1HtbSdB4P08C8rs9AR94MfSGpRhJgsS+GF9V26xMM=
-k8s.io/api v0.28.3/go.mod h1:MRCV/jr1dW87/qJnZ57U5Pak65LGmQVkKTzf3AtKFHc=
-k8s.io/apiextensions-apiserver v0.28.3 h1:Od7DEnhXHnHPZG+W9I97/fSQkVpVPQx2diy+2EtmY08=
-k8s.io/apiextensions-apiserver v0.28.3/go.mod h1:NE1XJZ4On0hS11aWWJUTNkmVB03j9LM7gJSisbRt8Lc=
-k8s.io/apimachinery v0.28.3 h1:B1wYx8txOaCQG0HmYF6nbpU8dg6HvA06x5tEffvOe7A=
-k8s.io/apimachinery v0.28.3/go.mod h1:uQTKmIqs+rAYaq+DFaoD2X7pcjLOqbQX2AOiO0nIpb8=
-k8s.io/client-go v0.28.3 h1:2OqNb72ZuTZPKCl+4gTKvqao0AMOl9f3o2ijbAj3LI4=
-k8s.io/client-go v0.28.3/go.mod h1:LTykbBp9gsA7SwqirlCXBWtK0guzfhpoW4qSm7i9dxo=
+k8s.io/api v0.28.4 h1:8ZBrLjwosLl/NYgv1P7EQLqoO8MGQApnbgH8tu3BMzY=
+k8s.io/api v0.28.4/go.mod h1:axWTGrY88s/5YE+JSt4uUi6NMM+gur1en2REMR7IRj0=
+k8s.io/apiextensions-apiserver v0.28.4 h1:AZpKY/7wQ8n+ZYDtNHbAJBb+N4AXXJvyZx6ww6yAJvU=
+k8s.io/apiextensions-apiserver v0.28.4/go.mod h1:pgQIZ1U8eJSMQcENew/0ShUTlePcSGFq6dxSxf2mwPM=
+k8s.io/apimachinery v0.28.4 h1:zOSJe1mc+GxuMnFzD4Z/U1wst50X28ZNsn5bhgIIao8=
+k8s.io/apimachinery v0.28.4/go.mod h1:wI37ncBvfAoswfq626yPTe6Bz1c22L7uaJ8dho83mgg=
+k8s.io/client-go v0.28.4 h1:Np5ocjlZcTrkyRJ3+T3PkXDpe4UpatQxj85+xjaD2wY=
+k8s.io/client-go v0.28.4/go.mod h1:0VDZFpgoZfelyP5Wqu0/r/TRYcLYuJ2U1KEeoaPa1N4=
k8s.io/klog/v2 v2.100.1 h1:7WCHKK6K8fNhTqfBhISHQ97KrnJNFZMcQvKp7gP/tmg=
k8s.io/klog/v2 v2.100.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9 h1:LyMgNKD2P8Wn1iAwQU5OhxCKlKJy0sHc+PcDwFB24dQ=
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kor-0.3.0/pkg/kor/all.go new/kor-0.3.1/pkg/kor/all.go
--- old/kor-0.3.0/pkg/kor/all.go 2023-11-15 16:26:18.000000000 +0100
+++ new/kor-0.3.1/pkg/kor/all.go 2023-11-29 19:52:39.000000000 +0100
@@ -121,12 +121,21 @@
}
func getUnusedCrds(apiExtClient apiextensionsclientset.Interface, dynamicClient dynamic.Interface) ResourceDiff {
- pdbDiff, err := processCrds(apiExtClient, dynamicClient)
+ crdDiff, err := processCrds(apiExtClient, dynamicClient)
if err != nil {
fmt.Fprintf(os.Stderr, "Failed to get %s: %v\n", "Crds", err)
}
- namespacePdbDiff := ResourceDiff{"Crd", pdbDiff}
- return namespacePdbDiff
+ allCrdDiff := ResourceDiff{"Crd", crdDiff}
+ return allCrdDiff
+}
+
+func getUnusedPvs(clientset kubernetes.Interface, filterOpts *FilterOptions) ResourceDiff {
+ pvDiff, err := processPvs(clientset, filterOpts)
+ if err != nil {
+ fmt.Fprintf(os.Stderr, "Failed to get %s: %v\n", "Pvs", err)
+ }
+ allPvDiff := ResourceDiff{"Pv", pvDiff}
+ return allPvDiff
}
func GetUnusedAll(includeExcludeLists IncludeExcludeLists, filterOpts *FilterOptions, clientset kubernetes.Interface, apiExtClient apiextensionsclientset.Interface, dynamicClient dynamic.Interface, outputFormat string, opts Opts) (string, error) {
@@ -173,13 +182,24 @@
}
var allDiffs []ResourceDiff
+ noNamespaceResourceMap := make(map[string][]string)
crdDiff := getUnusedCrds(apiExtClient, dynamicClient)
- allDiffs = append(allDiffs, crdDiff)
+ crdOutput := FormatOutputAll("", []ResourceDiff{crdDiff}, opts)
+ outputBuffer.WriteString(crdOutput)
+ outputBuffer.WriteString("\n")
+ noNamespaceResourceMap[crdDiff.resourceType] = crdDiff.diff
+
+ pvDiff := getUnusedPvs(clientset, filterOpts)
+ pvOutput := FormatOutputAll("", []ResourceDiff{pvDiff}, opts)
+ outputBuffer.WriteString(pvOutput)
+ outputBuffer.WriteString("\n")
+ noNamespaceResourceMap[pvDiff.resourceType] = pvDiff.diff
output := FormatOutputAll("", allDiffs, opts)
outputBuffer.WriteString(output)
outputBuffer.WriteString("\n")
+ response[""] = noNamespaceResourceMap
jsonResponse, err := json.MarshalIndent(response, "", " ")
if err != nil {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kor-0.3.0/pkg/kor/create_test_resources.go new/kor-0.3.1/pkg/kor/create_test_resources.go
--- old/kor-0.3.0/pkg/kor/create_test_resources.go 2023-11-15 16:26:18.000000000 +0100
+++ new/kor-0.3.1/pkg/kor/create_test_resources.go 2023-11-29 19:52:39.000000000 +0100
@@ -216,6 +216,17 @@
}
}
+func CreateTestPv(name, phase string) *corev1.PersistentVolume {
+ return &corev1.PersistentVolume{
+ ObjectMeta: v1.ObjectMeta{
+ Name: name,
+ },
+ Status: corev1.PersistentVolumeStatus{
+ Phase: corev1.PersistentVolumePhase(phase),
+ },
+ }
+}
+
func CreateTestPdb(namespace, name string, matchLabels map[string]string) *policyv1.PodDisruptionBudget {
return &policyv1.PodDisruptionBudget{
ObjectMeta: v1.ObjectMeta{
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kor-0.3.0/pkg/kor/delete.go new/kor-0.3.1/pkg/kor/delete.go
--- old/kor-0.3.0/pkg/kor/delete.go 2023-11-15 16:26:18.000000000 +0100
+++ new/kor-0.3.1/pkg/kor/delete.go 2023-11-29 19:52:39.000000000 +0100
@@ -10,7 +10,7 @@
appsv1 "k8s.io/api/apps/v1"
autoscalingv1 "k8s.io/api/autoscaling/v1"
corev1 "k8s.io/api/core/v1"
- networkingv1beta1 "k8s.io/api/networking/v1beta1"
+ networkingv1 "k8s.io/api/networking/v1"
policyv1beta1 "k8s.io/api/policy/v1beta1"
rbacv1 "k8s.io/api/rbac/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -35,7 +35,7 @@
return clientset.AutoscalingV1().HorizontalPodAutoscalers(namespace).Delete(context.TODO(), name, metav1.DeleteOptions{})
},
"Ingress": func(clientset kubernetes.Interface, namespace, name string) error {
- return clientset.NetworkingV1beta1().Ingresses(namespace).Delete(context.TODO(), name, metav1.DeleteOptions{})
+ return clientset.NetworkingV1().Ingresses(namespace).Delete(context.TODO(), name, metav1.DeleteOptions{})
},
"PDB": func(clientset kubernetes.Interface, namespace, name string) error {
return clientset.PolicyV1beta1().PodDisruptionBudgets(namespace).Delete(context.TODO(), name, metav1.DeleteOptions{})
@@ -52,6 +52,9 @@
"ServiceAccount": func(clientset kubernetes.Interface, namespace, name string) error {
return clientset.CoreV1().ServiceAccounts(namespace).Delete(context.TODO(), name, metav1.DeleteOptions{})
},
+ "PV": func(clientset kubernetes.Interface, namespace, name string) error {
+ return clientset.CoreV1().PersistentVolumes().Delete(context.TODO(), name, metav1.DeleteOptions{})
+ },
}
return deleteResourceApiMap
@@ -92,7 +95,7 @@
case "HPA":
return clientset.AutoscalingV1().HorizontalPodAutoscalers(namespace).Update(context.TODO(), resource.(*autoscalingv1.HorizontalPodAutoscaler), metav1.UpdateOptions{})
case "Ingress":
- return clientset.NetworkingV1beta1().Ingresses(namespace).Update(context.TODO(), resource.(*networkingv1beta1.Ingress), metav1.UpdateOptions{})
+ return clientset.NetworkingV1().Ingresses(namespace).Update(context.TODO(), resource.(*networkingv1.Ingress), metav1.UpdateOptions{})
case "PDB":
return clientset.PolicyV1beta1().PodDisruptionBudgets(namespace).Update(context.TODO(), resource.(*policyv1beta1.PodDisruptionBudget), metav1.UpdateOptions{})
case "Roles":
@@ -103,6 +106,8 @@
return clientset.AppsV1().StatefulSets(namespace).Update(context.TODO(), resource.(*appsv1.StatefulSet), metav1.UpdateOptions{})
case "ServiceAccount":
return clientset.CoreV1().ServiceAccounts(namespace).Update(context.TODO(), resource.(*corev1.ServiceAccount), metav1.UpdateOptions{})
+ case "PV":
+ return clientset.CoreV1().PersistentVolumes().Update(context.TODO(), resource.(*corev1.PersistentVolume), metav1.UpdateOptions{})
}
return nil, fmt.Errorf("resource type '%s' is not supported", resourceType)
}
@@ -120,7 +125,7 @@
case "HPA":
return clientset.AutoscalingV1().HorizontalPodAutoscalers(namespace).Get(context.TODO(), resourceName, metav1.GetOptions{})
case "Ingress":
- return clientset.NetworkingV1beta1().Ingresses(namespace).Get(context.TODO(), resourceName, metav1.GetOptions{})
+ return clientset.NetworkingV1().Ingresses(namespace).Get(context.TODO(), resourceName, metav1.GetOptions{})
case "PDB":
return clientset.PolicyV1beta1().PodDisruptionBudgets(namespace).Get(context.TODO(), resourceName, metav1.GetOptions{})
case "Roles":
@@ -131,6 +136,8 @@
return clientset.AppsV1().StatefulSets(namespace).Get(context.TODO(), resourceName, metav1.GetOptions{})
case "ServiceAccount":
return clientset.CoreV1().ServiceAccounts(namespace).Get(context.TODO(), resourceName, metav1.GetOptions{})
+ case "PV":
+ return clientset.CoreV1().PersistentVolumes().Get(context.TODO(), resourceName, metav1.GetOptions{})
}
return nil, fmt.Errorf("resource type '%s' is not supported", resourceType)
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kor-0.3.0/pkg/kor/ingresses.go new/kor-0.3.1/pkg/kor/ingresses.go
--- old/kor-0.3.0/pkg/kor/ingresses.go 2023-11-15 16:26:18.000000000 +0100
+++ new/kor-0.3.1/pkg/kor/ingresses.go 2023-11-29 19:52:39.000000000 +0100
@@ -34,10 +34,6 @@
usedIngresses := []string{}
for _, ingress := range ingresses.Items {
- if ingress.Labels["kor/used"] == "true" {
- continue
- }
-
// checks if the resource has any labels that match the excluded selector specified in opts.ExcludeLabels.
// If it does, the resource is skipped.
if excluded, _ := HasExcludedLabel(ingress.Labels, filterOpts.ExcludeLabels); excluded {
@@ -83,6 +79,9 @@
}
names := make([]string, 0, len(ingresses.Items))
for _, ingress := range ingresses.Items {
+ if ingress.Labels["kor/used"] == "true" {
+ continue
+ }
names = append(names, ingress.Name)
}
return names, nil
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kor-0.3.0/pkg/kor/kor.go new/kor-0.3.1/pkg/kor/kor.go
--- old/kor-0.3.0/pkg/kor/kor.go 2023-11-15 16:26:18.000000000 +0100
+++ new/kor-0.3.1/pkg/kor/kor.go 2023-11-29 19:52:39.000000000 +0100
@@ -210,7 +210,7 @@
table.Render()
if namespace == "" {
- return fmt.Sprintf("Unused CRDs: \n%s", buf.String())
+ return fmt.Sprintf("Unused %ss: \n%s", allDiffs[0].resourceType, buf.String())
}
return fmt.Sprintf("Unused Resources in Namespace: %s\n%s", namespace, buf.String())
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kor-0.3.0/pkg/kor/multi.go new/kor-0.3.1/pkg/kor/multi.go
--- old/kor-0.3.0/pkg/kor/multi.go 2023-11-15 16:26:18.000000000 +0100
+++ new/kor-0.3.1/pkg/kor/multi.go 2023-11-29 19:52:39.000000000 +0100
@@ -12,20 +12,33 @@
"k8s.io/client-go/kubernetes"
)
-func retrieveNoNamespaceDiff(apiExtClient apiextensionsclientset.Interface, dynamicClient dynamic.Interface, outputFormat string, opts Opts, resourceList []string) ([]ResourceDiff, []string) {
+func retrieveNoNamespaceDiff(clientset kubernetes.Interface, apiExtClient apiextensionsclientset.Interface, dynamicClient dynamic.Interface, resourceList []string, filterOpts *FilterOptions) ([]ResourceDiff, []string) {
var noNamespaceDiff []ResourceDiff
+ markedForRemoval := make([]bool, len(resourceList))
+ updatedResourceList := resourceList
+
for counter, resource := range resourceList {
- if resource == "crd" || resource == "customresourcedefinition" || resource == "customresourcedefinitions" {
+ switch resource {
+ case "crd", "customresourcedefinition", "customresourcedefinitions":
crdDiff := getUnusedCrds(apiExtClient, dynamicClient)
noNamespaceDiff = append(noNamespaceDiff, crdDiff)
- updatedResourceList := append(resourceList[:counter], resourceList[counter+1:]...)
- return noNamespaceDiff, updatedResourceList
- } else {
- resourceList[counter] = resource
+ markedForRemoval[counter] = true
+ case "pv", "persistentvolume", "persistentvolumes":
+ pvDiff := getUnusedPvs(clientset, filterOpts)
+ noNamespaceDiff = append(noNamespaceDiff, pvDiff)
+ markedForRemoval[counter] = true
+ }
+ }
+
+ // Remove elements marked for removal
+ var clearedResourceList []string
+ for i, marked := range markedForRemoval {
+ if !marked {
+ clearedResourceList = append(clearedResourceList, updatedResourceList[i])
}
}
- return noNamespaceDiff, resourceList
+ return noNamespaceDiff, clearedResourceList
}
func retrieveNamespaceDiffs(clientset kubernetes.Interface, namespace string, resourceList []string, filterOpts *FilterOptions) []ResourceDiff {
@@ -72,14 +85,22 @@
response := make(map[string]map[string][]string)
var err error
- crdDiff, resourceList := retrieveNoNamespaceDiff(apiExtClient, dynamicClient, outputFormat, opts, resourceList)
- if len(crdDiff) != 0 {
- output := FormatOutputAll("", crdDiff, opts)
- outputBuffer.WriteString(output)
- outputBuffer.WriteString("\n")
+ noNamespaceDiff, resourceList := retrieveNoNamespaceDiff(clientset, apiExtClient, dynamicClient, resourceList, filterOpts)
+ if len(noNamespaceDiff) != 0 {
+ for _, diff := range noNamespaceDiff {
+ if len(diff.diff) != 0 {
+ output := FormatOutputAll("", []ResourceDiff{diff}, opts)
+ outputBuffer.WriteString(output)
+ outputBuffer.WriteString("\n")
+
+ resourceMap := make(map[string][]string)
+ resourceMap[diff.resourceType] = diff.diff
+ response[""] = resourceMap
+ }
+ }
resourceMap := make(map[string][]string)
- for _, diff := range crdDiff {
+ for _, diff := range noNamespaceDiff {
resourceMap[diff.resourceType] = diff.diff
}
response[""] = resourceMap
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kor-0.3.0/pkg/kor/pv.go new/kor-0.3.1/pkg/kor/pv.go
--- old/kor-0.3.0/pkg/kor/pv.go 1970-01-01 01:00:00.000000000 +0100
+++ new/kor-0.3.1/pkg/kor/pv.go 2023-11-29 19:52:39.000000000 +0100
@@ -0,0 +1,89 @@
+package kor
+
+import (
+ "bytes"
+ "context"
+ "encoding/json"
+ "fmt"
+ "os"
+
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ "k8s.io/client-go/kubernetes"
+ _ "k8s.io/client-go/plugin/pkg/client/auth/oidc"
+)
+
+func processPvs(clientset kubernetes.Interface, filterOpts *FilterOptions) ([]string, error) {
+ pvs, err := clientset.CoreV1().PersistentVolumes().List(context.TODO(), metav1.ListOptions{})
+ if err != nil {
+ return nil, err
+ }
+
+ var unusedPvs []string
+
+ for _, pv := range pvs.Items {
+ if pv.Labels["kor/used"] == "true" {
+ continue
+ }
+
+ if excluded, _ := HasExcludedLabel(pv.Labels, filterOpts.ExcludeLabels); excluded {
+ continue
+ }
+
+ if included, _ := HasIncludedAge(pv.CreationTimestamp, filterOpts); !included {
+ continue
+ }
+
+ if pv.Status.Phase != "Bound" {
+ unusedPvs = append(unusedPvs, pv.Name)
+ }
+
+ }
+
+ return unusedPvs, nil
+
+}
+
+func GetUnusedPvs(filterOpts *FilterOptions, clientset kubernetes.Interface, outputFormat string, opts Opts) (string, error) {
+ var outputBuffer bytes.Buffer
+ response := make(map[string]map[string][]string)
+
+ diff, err := processPvs(clientset, filterOpts)
+ if err != nil {
+ fmt.Fprintf(os.Stderr, "Failed to process pvs: %v\n", err)
+ }
+
+ if len(diff) > 0 {
+ // We consider cluster scope resources in "" (empty string) namespace, as it is common in k8s
+ if response[""] == nil {
+ response[""] = make(map[string][]string)
+ }
+ response[""]["Pv"] = diff
+ }
+
+ if opts.DeleteFlag {
+ if diff, err = DeleteResource(diff, clientset, "", "PV", opts.NoInteractive); err != nil {
+ fmt.Fprintf(os.Stderr, "Failed to delete PV %s: %v\n", diff, err)
+ }
+ }
+
+ output := FormatOutput("", diff, "PVs", opts)
+ if output != "" {
+ outputBuffer.WriteString(output)
+ outputBuffer.WriteString("\n")
+
+ response[""]["Pv"] = diff
+
+ }
+
+ jsonResponse, err := json.MarshalIndent(response, "", " ")
+ if err != nil {
+ return "", err
+ }
+
+ unusedPvs, err := unusedResourceFormatter(outputFormat, outputBuffer, opts, jsonResponse)
+ if err != nil {
+ fmt.Printf("err: %v\n", err)
+ }
+
+ return unusedPvs, nil
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kor-0.3.0/pkg/kor/pv_test.go new/kor-0.3.1/pkg/kor/pv_test.go
--- old/kor-0.3.0/pkg/kor/pv_test.go 1970-01-01 01:00:00.000000000 +0100
+++ new/kor-0.3.1/pkg/kor/pv_test.go 2023-11-29 19:52:39.000000000 +0100
@@ -0,0 +1,79 @@
+package kor
+
+import (
+ "context"
+ "encoding/json"
+ "reflect"
+ "testing"
+
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ "k8s.io/client-go/kubernetes/fake"
+)
+
+func createTestPvs(t *testing.T) *fake.Clientset {
+ clientset := fake.NewSimpleClientset()
+
+ pv1 := CreateTestPv("test-pv1", "Bound")
+ pv2 := CreateTestPv("test-pv2", "Available")
+ _, err := clientset.CoreV1().PersistentVolumes().Create(context.TODO(), pv1, v1.CreateOptions{})
+ if err != nil {
+ t.Fatalf("Error creating fake %s: %v", "PV", err)
+ }
+
+ _, err = clientset.CoreV1().PersistentVolumes().Create(context.TODO(), pv2, v1.CreateOptions{})
+ if err != nil {
+ t.Fatalf("Error creating fake %s: %v", "PV", err)
+ }
+
+ return clientset
+}
+
+func TestProcessPvs(t *testing.T) {
+ clientset := createTestPvs(t)
+ usedPvs, err := processPvs(clientset, &FilterOptions{})
+ if err != nil {
+ t.Errorf("Expected no error, got %v", err)
+ }
+
+ if len(usedPvs) != 1 {
+ t.Errorf("Expected 1 used pv, got %d", len(usedPvs))
+ }
+
+ if usedPvs[0] != "test-pv2" {
+ t.Errorf("Expected 'test-pv2', got %s", usedPvs[0])
+ }
+}
+
+func TestGetUnusedPvs(t *testing.T) {
+ clientset := createTestPvs(t)
+
+ opts := Opts{
+ WebhookURL: "",
+ Channel: "",
+ Token: "",
+ DeleteFlag: false,
+ NoInteractive: true,
+ }
+
+ output, err := GetUnusedPvs(&FilterOptions{}, clientset, "json", opts)
+ if err != nil {
+ t.Fatalf("Error calling GetUnusedPvs: %v", err)
+ }
+
+ expectedOutput := map[string]map[string][]string{
+ "": {
+ "Pv": {"test-pv2"},
+ },
+ }
+
+ var actualOutput map[string]map[string][]string
+ if err := json.Unmarshal([]byte(output), &actualOutput); err != nil {
+ t.Fatalf("Error unmarshaling actual output: %v", err)
+ }
+
+ if !reflect.DeepEqual(expectedOutput, actualOutput) {
+ t.Errorf("Expected output does not match actual output")
+ }
+}
+
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kor-0.3.0/pkg/utils/banner.go new/kor-0.3.1/pkg/utils/banner.go
--- old/kor-0.3.0/pkg/utils/banner.go 2023-11-15 16:26:18.000000000 +0100
+++ new/kor-0.3.1/pkg/utils/banner.go 2023-11-29 19:52:39.000000000 +0100
@@ -1,9 +1,13 @@
package utils
import (
+ "fmt"
+
"github.com/fatih/color"
)
+var Version = "dev"
+
func PrintLogo(outputFormat string) {
boldBlue := color.New(color.FgHiBlue, color.Bold)
asciiLogo := `
@@ -15,7 +19,7 @@
`
// processing of the `outputFormat` happens inside of the rootCmd so this requires a pretty large change
// to keep the banner. Instead just loop through os args and find if the format was set and handle it there
-
+ fmt.Printf("version: v%s\n", Version)
if outputFormat != "yaml" && outputFormat != "json" {
boldBlue.Println(asciiLogo)
}
++++++ kor.obsinfo ++++++
--- /var/tmp/diff_new_pack.bl0bKQ/_old 2023-11-30 22:02:42.784161772 +0100
+++ /var/tmp/diff_new_pack.bl0bKQ/_new 2023-11-30 22:02:42.784161772 +0100
@@ -1,5 +1,5 @@
name: kor
-version: 0.3.0
-mtime: 1700061978
-commit: 062aec60fe8a9a4fcab4711ca8217f8051582d16
+version: 0.3.1
+mtime: 1701283959
+commit: a459be1a0dfcf5d96ab0ed8c86ec8dc2d675de39
++++++ vendor.tar.gz ++++++
/work/SRC/openSUSE:Factory/kor/vendor.tar.gz /work/SRC/openSUSE:Factory/.kor.new.25432/vendor.tar.gz differ: char 5, line 1
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package kubeaudit for openSUSE:Factory checked in at 2023-11-30 22:01:43
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/kubeaudit (Old)
and /work/SRC/openSUSE:Factory/.kubeaudit.new.25432 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "kubeaudit"
Thu Nov 30 22:01:43 2023 rev:2 rq:1129947 version:0.22.1
Changes:
--------
--- /work/SRC/openSUSE:Factory/kubeaudit/kubeaudit.changes 2023-04-17 17:41:19.834232510 +0200
+++ /work/SRC/openSUSE:Factory/.kubeaudit.new.25432/kubeaudit.changes 2023-11-30 22:02:24.887480998 +0100
@@ -1,0 +2,8 @@
+Thu Nov 30 09:13:08 UTC 2023 - kastl(a)b1-systems.de
+
+- Update to version 0.22.1:
+ * version bump: patch. prepare release (#577)
+ * capture exit code for sarif (#576)
+ * go releaser action (#539)
+
+-------------------------------------------------------------------
Old:
----
kubeaudit-0.22.0.obscpio
New:
----
kubeaudit-0.22.1.obscpio
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ kubeaudit.spec ++++++
--- /var/tmp/diff_new_pack.R2OXfm/_old 2023-11-30 22:02:32.195758998 +0100
+++ /var/tmp/diff_new_pack.R2OXfm/_new 2023-11-30 22:02:32.207759455 +0100
@@ -19,7 +19,7 @@
%define __arch_install_post export NO_BRP_STRIP_DEBUG=true
Name: kubeaudit
-Version: 0.22.0
+Version: 0.22.1
Release: 0
Summary: Audit your Kubernetes clusters against common security controls
License: MIT
++++++ _service ++++++
--- /var/tmp/diff_new_pack.R2OXfm/_old 2023-11-30 22:02:32.431767976 +0100
+++ /var/tmp/diff_new_pack.R2OXfm/_new 2023-11-30 22:02:32.463769193 +0100
@@ -1,14 +1,14 @@
<services>
- <service name="obs_scm" mode="disabled">
+ <service name="obs_scm" mode="manual">
<param name="url">https://github.com/Shopify/kubeaudit</param>
<param name="scm">git</param>
<param name="exclude">.git</param>
- <param name="revision">v0.22.0</param>
+ <param name="revision">v0.22.1</param>
<param name="versionformat">@PARENT_TAG@</param>
<param name="changesgenerate">enable</param>
<param name="versionrewrite-pattern">v(.*)</param>
</service>
- <service name="set_version" mode="disabled">
+ <service name="set_version" mode="manual">
<param name="basename">kubeaudit</param>
</service>
<service name="tar" mode="buildtime"/>
@@ -16,7 +16,7 @@
<param name="file">*.tar</param>
<param name="compression">gz</param>
</service>
- <service name="go_modules" mode="disabled">
+ <service name="go_modules" mode="manual">
</service>
</services>
++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.R2OXfm/_old 2023-11-30 22:02:32.647776193 +0100
+++ /var/tmp/diff_new_pack.R2OXfm/_new 2023-11-30 22:02:32.687777714 +0100
@@ -1,6 +1,6 @@
<servicedata>
<service name="tar_scm">
<param name="url">https://github.com/Shopify/kubeaudit</param>
- <param name="changesrevision">3ac358b48288bd44a272a74e516d5786f4ad5ffb</param></service></servicedata>
+ <param name="changesrevision">76fe452b9d9ef3638afa365304d3de3226c9e01f</param></service></servicedata>
(No newline at EOF)
++++++ kubeaudit-0.22.0.obscpio -> kubeaudit-0.22.1.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kubeaudit-0.22.0/.github/workflows/release.yml new/kubeaudit-0.22.1/.github/workflows/release.yml
--- old/kubeaudit-0.22.0/.github/workflows/release.yml 2023-03-16 15:01:58.000000000 +0100
+++ new/kubeaudit-0.22.1/.github/workflows/release.yml 2023-11-27 23:20:12.000000000 +0100
@@ -23,15 +23,6 @@
fetch-depth: 0
-
- name: GPG config
- run: |
- mkdir -p ~/.gnupg
- cat << EOF >> ~/.gnupg/options
- keyserver keys.openpgp.org
- keyserver-options auto-key-retrieve
- EOF
-
- -
name: Log into registry ${{ env.REGISTRY }}
uses: docker/login-action@f4ef78c080cd8ba55a85445d5b36e214a81df20a
with:
@@ -46,12 +37,6 @@
go-version: 1.19
check-latest: true
cache: true
- -
- name: Build release changelog
- run: |
- version=${GITHUB_REF#refs/tags/v*}
- mkdir -p tmp
- sed '/^# \['$version'\]/,/^# \[/!d;//d;/^\s*$/d' CHANGELOG.md > tmp/release_changelog.md
-
name: Release
@@ -59,6 +44,6 @@
with:
distribution: goreleaser
version: v1.10.3
- args: release --rm-dist --release-notes=tmp/release_changelog.md
+ args: release --rm-dist
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kubeaudit-0.22.0/CHANGELOG.md new/kubeaudit-0.22.1/CHANGELOG.md
--- old/kubeaudit-0.22.0/CHANGELOG.md 2023-03-16 15:01:58.000000000 +0100
+++ new/kubeaudit-0.22.1/CHANGELOG.md 1970-01-01 01:00:00.000000000 +0100
@@ -1,15 +0,0 @@
-# Unreleased
-* tba
-
-# 0.22.0
-
-* support for metadata info on sarif result
-* Makefile fix for go mod tidy
-* test without Kind by default
-* deprecate kubernetes.io in override labels
-
-
-# 0.21.0
-* the Seccomp auditor has been updated to flag missing Seccomp profiles in securityContext instead of deprecated seccomp annotations. Thank you @Ser87ch, for your amazing contribution! 👏
-
-* Override added for the unconfined apparmor profile! Once again, thank you @Ser87ch! 😍
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kubeaudit-0.22.0/cmd/commands/VERSION new/kubeaudit-0.22.1/cmd/commands/VERSION
--- old/kubeaudit-0.22.0/cmd/commands/VERSION 2023-03-16 15:01:58.000000000 +0100
+++ new/kubeaudit-0.22.1/cmd/commands/VERSION 2023-11-27 23:20:12.000000000 +0100
@@ -1 +1 @@
-0.22.0
+0.22.1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kubeaudit-0.22.0/cmd/commands/root.go new/kubeaudit-0.22.1/cmd/commands/root.go
--- old/kubeaudit-0.22.0/cmd/commands/root.go 2023-03-16 15:01:58.000000000 +0100
+++ new/kubeaudit-0.22.1/cmd/commands/root.go 2023-11-27 23:20:12.000000000 +0100
@@ -89,6 +89,10 @@
log.WithError(err).Fatal("Error generating the SARIF output")
}
sarifReport.PrettyWrite(os.Stdout)
+
+ if report.HasErrors() {
+ os.Exit(rootConfig.exitCode)
+ }
return
case "json":
printOptions = append(printOptions, kubeaudit.WithFormatter(&log.JSONFormatter{}))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kubeaudit-0.22.0/docs/release.md new/kubeaudit-0.22.1/docs/release.md
--- old/kubeaudit-0.22.0/docs/release.md 2023-03-16 15:01:58.000000000 +0100
+++ new/kubeaudit-0.22.1/docs/release.md 2023-11-27 23:20:12.000000000 +0100
@@ -24,26 +24,17 @@
git push origin v0.11.6
```
-5. You will need a Github token in order for Goreleaser to be able to create a release in Github. If you already have one, skip to the next step.
-[Create a Github token](https://github.com/settings/tokens/new) with the `repo` scope.
-
-6. Run Goreleaser
-
-```
-GITHUB_TOKEN=<YOUR TOKEN> goreleaser --rm-dist
-```
-
-7. Publish the release in Github
-
-Goreleaser is set to draft mode which means it will create a draft release in Github, allowing you to double check the release and make changes to the Changelog. Find the [draft release](https://github.com/Shopify/kubeaudit/releases) and make sure there are no commits to main since the release.
+5. Once you push the tag, the release Github action will be triggered and generate a draft release in Github, allowing you to double check it and make changes to the Changelog. Find the [draft release](https://github.com/Shopify/kubeaudit/releases) and make sure there are no commits to main since the release.
> If there are commits to main since the release, this may mean you didn't make the tag on main or your main is out of date.
-Click `Edit` on the right of the draft release and tidy up the Changelog if necessary. We like to add thank you's to external contributors, for example:
+6. Click `Edit` on the right of the draft release and tidy up the Changelog if necessary. We like to add thank you's to external contributors, for example:
```
202e355 Fixed code quality issues using DeepSource (#315) - Thank you @withshubh for the contribution!
```
-Click on `Publish release` at the bottom.
+Optionally, you can click on "Generate release notes", which adds Markdown for all the merged pull requests from the diff and contributors of the release.
+
+7. Click on `Publish release` at the bottom.
++++++ kubeaudit.obsinfo ++++++
--- /var/tmp/diff_new_pack.R2OXfm/_old 2023-11-30 22:02:33.091793083 +0100
+++ /var/tmp/diff_new_pack.R2OXfm/_new 2023-11-30 22:02:33.123794300 +0100
@@ -1,5 +1,5 @@
name: kubeaudit
-version: 0.22.0
-mtime: 1678975318
-commit: 3ac358b48288bd44a272a74e516d5786f4ad5ffb
+version: 0.22.1
+mtime: 1701123612
+commit: 76fe452b9d9ef3638afa365304d3de3226c9e01f
++++++ vendor.tar.gz ++++++
1
0