openSUSE Commits
Threads by month
- ----- 2024 -----
- 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
- 1690 discussions
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
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package apko for openSUSE:Factory checked in at 2023-11-30 22:01:41
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/apko (Old)
and /work/SRC/openSUSE:Factory/.apko.new.25432 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "apko"
Thu Nov 30 22:01:41 2023 rev:4 rq:1129950 version:0.12.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/apko/apko.changes 2023-11-16 20:30:43.401151607 +0100
+++ /work/SRC/openSUSE:Factory/.apko.new.25432/apko.changes 2023-11-30 22:02:17.371199958 +0100
@@ -1,0 +2,11 @@
+Thu Nov 30 09:08:12 UTC 2023 - kastl(a)b1-systems.de
+
+- Update to version 0.12.0:
+ * Update NEWS.md for 0.12.0
+ * Allow existing packages to replace installed pkg
+ * Fix packages with multiple Replaces
+ * Add binary to generate json schema.
+ * review feedback
+ * fix and continuously validate SBOMs
+
+-------------------------------------------------------------------
Old:
----
apko-0.11.3.obscpio
New:
----
apko-0.12.0.obscpio
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ apko.spec ++++++
--- /var/tmp/diff_new_pack.ply8hy/_old 2023-11-30 22:02:22.483389548 +0100
+++ /var/tmp/diff_new_pack.ply8hy/_new 2023-11-30 22:02:22.483389548 +0100
@@ -19,7 +19,7 @@
%define __arch_install_post export NO_BRP_STRIP_DEBUG=true
Name: apko
-Version: 0.11.3
+Version: 0.12.0
Release: 0
Summary: Build OCI images from APK packages directly without Dockerfile
License: Apache-2.0
++++++ _service ++++++
--- /var/tmp/diff_new_pack.ply8hy/_old 2023-11-30 22:02:22.511390613 +0100
+++ /var/tmp/diff_new_pack.ply8hy/_new 2023-11-30 22:02:22.515390766 +0100
@@ -3,7 +3,7 @@
<param name="url">https://github.com/chainguard-dev/apko</param>
<param name="scm">git</param>
<param name="exclude">.git</param>
- <param name="revision">v0.11.3</param>
+ <param name="revision">v0.12.0</param>
<param name="versionformat">@PARENT_TAG@</param>
<param name="changesgenerate">enable</param>
<param name="versionrewrite-pattern">v(.*)</param>
++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.ply8hy/_old 2023-11-30 22:02:22.535391526 +0100
+++ /var/tmp/diff_new_pack.ply8hy/_new 2023-11-30 22:02:22.535391526 +0100
@@ -1,6 +1,6 @@
<servicedata>
<service name="tar_scm">
<param name="url">https://github.com/chainguard-dev/apko</param>
- <param name="changesrevision">4f9a4c617d079adc838c47303154d90a5ee4455e</param></service></servicedata>
+ <param name="changesrevision">691fe51dd1d536460f8a955d1357eaba974208b5</param></service></servicedata>
(No newline at EOF)
++++++ apko-0.11.3.obscpio -> apko-0.12.0.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apko-0.11.3/.github/workflows/build-samples.yml new/apko-0.12.0/.github/workflows/build-samples.yml
--- old/apko-0.11.3/.github/workflows/build-samples.yml 2023-11-16 11:19:06.000000000 +0100
+++ new/apko-0.12.0/.github/workflows/build-samples.yml 2023-11-29 20:49:11.000000000 +0100
@@ -6,10 +6,12 @@
workflow_dispatch:
jobs:
+ # Build a single-arch nginx image for each arch.
build-nginx-on-all-arches:
name: build-nginx-all-arches
runs-on: ubuntu-latest
strategy:
+ fail-fast: false
matrix:
arch: [x86_64, "386", armv7, aarch64, riscv64, s390x, ppc64le]
@@ -20,16 +22,47 @@
go-version-file: 'go.mod'
- name: Setup QEMU
uses: docker/setup-qemu-action@68827325e0b33c7199eb31dd4e31fbe9023e06e3 # v3.0.0
+ - run: |
+ make apko
+ ./apko build ./examples/nginx.yaml nginx:build /tmp/nginx-${{ matrix.arch }}.tar --debug --arch ${{ matrix.arch }}
- - name: build
+ - name: Check SBOM Conformance
run: |
+ set -euxo pipefail
+ if ! ls *.spdx.json; then
+ echo "no SBOMs found!"
+ exit 1
+ fi
+ for f in *.spdx.json; do
+ echo ::group::sbom.json
+ cat $f
+ echo ::endgroup::
+ docker run --rm -v $(pwd)/$f:/sbom.json cgr.dev/chainguard/ntia-conformance-checker -v --file /sbom.json
+ done
+
+ # Build a multi-arch nginx image for all archs.
+ build-nginx-multiarch:
+ name: build-nginx-multiarch
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
+ - uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v2.1.5
+ with:
+ go-version-file: 'go.mod'
+ - run: |
make apko
- ./apko version
+ ./apko build ./examples/nginx.yaml nginx:build /tmp/nginx.tar --debug
- - name: build image
- timeout-minutes: 15
+ - name: Check SBOM Conformance
run: |
- ./apko build ./examples/nginx.yaml nginx:build /tmp/nginx-${{ matrix.arch }}.tar --debug --arch ${{ matrix.arch }}
+ set -euxo pipefail
+ for f in *.spdx.json; do
+ echo ::group::sbom.json
+ cat $f
+ echo ::endgroup::
+ docker run --rm -v $(pwd)/$f:/sbom.json cgr.dev/chainguard/ntia-conformance-checker -v --file /sbom.json
+ done
build-all-examples-one-arch:
name: build-all-examples-amd64
@@ -43,16 +76,9 @@
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v2.1.5
with:
- go-version: "1.21"
- check-latest: true
- - name: build
- run: |
+ go-version-file: 'go.mod'
+ - run: |
make apko
- ./apko version
-
- - name: build images
- timeout-minutes: 15
- run: |
for cfg in $(find ./examples/ -name '*.yaml'); do
name=$(basename ${cfg} .yaml)
./apko build ${cfg} ${name}:build /tmp/${name}.tar --debug --arch amd64
@@ -66,26 +92,16 @@
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v2.1.5
with:
- go-version: "1.21"
- check-latest: true
- - name: Setup QEMU
- uses: docker/setup-qemu-action@68827325e0b33c7199eb31dd4e31fbe9023e06e3 # v3.0.0
-
- - name: build
- run: |
- make apko
- ./apko version
-
+ go-version-file: 'go.mod'
- uses: chainguard-dev/actions/setup-registry@main
with:
port: 5000
- name: build image (w/ source date epoch)
- shell: bash
- timeout-minutes: 15
env:
SOURCE_DATE_EPOCH: "0"
run: |
+ make apko
FIRST=$(./apko publish ./examples/alpine-base.yaml localhost:5000/alpine 2> /dev/null)
for idx in {2..10}
@@ -108,24 +124,14 @@
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v2.1.5
with:
- go-version: "1.21"
- check-latest: true
- - name: Setup QEMU
- uses: docker/setup-qemu-action@68827325e0b33c7199eb31dd4e31fbe9023e06e3 # v3.0.0
-
- - name: build
- run: |
- make apko
- ./apko version
-
+ go-version-file: 'go.mod'
- uses: chainguard-dev/actions/setup-registry@main
with:
port: 5000
- name: build image (w/ build date epoch)
- shell: bash
- timeout-minutes: 15
run: |
+ make apko
# Without SOURCE_DATE_EPOCH set, the timestamp of the image will be computed to be
# the maximum build date of the resolved APKs.
FIRST=$(./apko publish ./examples/alpine-base.yaml localhost:5000/alpine 2> /dev/null)
@@ -155,10 +161,8 @@
- uses: chainguard-dev/actions/setup-registry@main
with:
port: 5000
- - name: build
- run: |
+ - run: |
make apko
- ./apko version
# Build image with annotations.
ref=$(./apko publish ./examples/nginx.yaml localhost:5000/nginx)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apko-0.11.3/NEWS.md new/apko-0.12.0/NEWS.md
--- old/apko-0.11.3/NEWS.md 2023-11-16 11:19:06.000000000 +0100
+++ new/apko-0.12.0/NEWS.md 2023-11-29 20:49:11.000000000 +0100
@@ -1,3 +1,19 @@
+# Changes from 0.11.3 to 0.12.0
+
+* Fix installing packages with multiple replaces.
+* Fix files paths within SBOMs.
+
+# Changes from 0.11.2 to 0.11.3
+
+* Build with go 1.21.
+* Remove unused flags:
+ * `--use-docker-mediatypes`
+ * `--package-version-tag`
+ * `--package-version-tag-stem`
+ * `--package-version-tag-prefix`
+ * `--tag-suffix`
+ * `--stage-tags`
+
# Changes from 0.11.1 to 0.11.2
* Fix a bug in version selection.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apko-0.11.3/go.mod new/apko-0.12.0/go.mod
--- old/apko-0.11.3/go.mod 2023-11-16 11:19:06.000000000 +0100
+++ new/apko-0.12.0/go.mod 2023-11-29 20:49:11.000000000 +0100
@@ -3,13 +3,14 @@
go 1.21
require (
- github.com/chainguard-dev/go-apk v0.0.0-20231113174935-f86aaf233502
+ github.com/chainguard-dev/go-apk v0.0.0-20231120201550-7b08e8f3b0fc
github.com/dominodatalab/os-release v0.0.0-20190522011736-bcdb4a3e3c2f
github.com/go-git/go-git/v5 v5.10.0
github.com/google/go-cmp v0.6.0
github.com/google/go-containerregistry v0.16.1
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510
github.com/hashicorp/go-multierror v1.1.1
+ github.com/invopop/jsonschema v0.12.0
github.com/jinzhu/copier v0.4.0
github.com/klauspost/pgzip v1.2.6
github.com/package-url/packageurl-go v0.1.2
@@ -36,6 +37,8 @@
github.com/ProtonMail/go-crypto v0.0.0-20230923063757-afb1ddc0824c // indirect
github.com/acomagu/bufpipe v1.0.4 // indirect
github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect
+ github.com/bahlo/generic-list-go v0.2.0 // indirect
+ github.com/buger/jsonparser v1.1.1 // indirect
github.com/cloudflare/circl v1.3.5 // indirect
github.com/common-nighthawk/go-figure v0.0.0-20210622060536-734e95fb86be // indirect
github.com/containerd/stargz-snapshotter/estargz v0.14.3 // indirect
@@ -92,6 +95,7 @@
github.com/spf13/pflag v1.0.5 // indirect
github.com/titanous/rocacheck v0.0.0-20171023193734-afe73141d399 // indirect
github.com/vbatts/tar-split v0.11.5 // indirect
+ github.com/wk8/go-ordered-map/v2 v2.1.8 // indirect
github.com/xanzy/ssh-agent v0.3.3 // indirect
go.lsp.dev/uri v0.3.0 // indirect
go.mongodb.org/mongo-driver v1.12.1 // indirect
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apko-0.11.3/go.sum new/apko-0.12.0/go.sum
--- old/apko-0.11.3/go.sum 2023-11-16 11:19:06.000000000 +0100
+++ new/apko-0.12.0/go.sum 2023-11-29 20:49:11.000000000 +0100
@@ -21,13 +21,17 @@
github.com/asaskevich/govalidator v0.0.0-20200907205600-7a23bdc65eef/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw=
github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 h1:DklsrG3dyBCFEj5IhUbnKptjxatkF07cF2ak3yi77so=
github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw=
+github.com/bahlo/generic-list-go v0.2.0 h1:5sz/EEAK+ls5wF+NeqDpk5+iNdMDXrh3z3nPnH1Wvgk=
+github.com/bahlo/generic-list-go v0.2.0/go.mod h1:2KvAjgMlE5NNynlg/5iLrrCCZ2+5xWbdbCW3pNTGyYg=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
+github.com/buger/jsonparser v1.1.1 h1:2PnMjfWD7wBILjqQbt530v576A/cAbQvEW9gGIpYMUs=
+github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0=
github.com/bwesterb/go-ristretto v1.2.3/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0=
github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/chainguard-dev/go-apk v0.0.0-20231113174935-f86aaf233502 h1:xYYl90jArqY6gFWTNA+6hRlrtKqHJ0lsWPluieS/xO8=
-github.com/chainguard-dev/go-apk v0.0.0-20231113174935-f86aaf233502/go.mod h1:y0BbOQALsoi1T2Lt5KmFNn92G+fRFSUuogQI2171HS8=
+github.com/chainguard-dev/go-apk v0.0.0-20231120201550-7b08e8f3b0fc h1:Car7PYrE9RD5qBN7ScGuTnDyzg6s6HFFDeUf8cFHlVI=
+github.com/chainguard-dev/go-apk v0.0.0-20231120201550-7b08e8f3b0fc/go.mod h1:y0BbOQALsoi1T2Lt5KmFNn92G+fRFSUuogQI2171HS8=
github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA=
github.com/cloudflare/circl v1.3.5 h1:g+wWynZqVALYAlpSQFAa7TscDnUK8mKYtrxMpw6AUKo=
github.com/cloudflare/circl v1.3.5/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA=
@@ -175,6 +179,8 @@
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
+github.com/invopop/jsonschema v0.12.0 h1:6ovsNSuvn9wEQVOyc72aycBMVQFKz7cPdMJn10CvzRI=
+github.com/invopop/jsonschema v0.12.0/go.mod h1:ffZ5Km5SWWRAIN6wbDXItl95euhFz2uON45H2qjYt+0=
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A=
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo=
github.com/jinzhu/copier v0.4.0 h1:w3ciUoD19shMCRargcpm0cm91ytaBhDvuRpz1ODO/U8=
@@ -314,6 +320,8 @@
github.com/tmc/dot v0.0.0-20210901225022-f9bc17da75c0/go.mod h1:DV83s9TfD0rgoKcqvDmM+aYdz6BXmTkquwd+bI/8tlo=
github.com/vbatts/tar-split v0.11.5 h1:3bHCTIheBm1qFTcgh9oPu+nNBtX+XJIupG/vacinCts=
github.com/vbatts/tar-split v0.11.5/go.mod h1:yZbwRsSeGjusneWgA781EKej9HF8vme8okylkAeNKLk=
+github.com/wk8/go-ordered-map/v2 v2.1.8 h1:5h/BUHu93oj4gIdvHHHGsScSTMijfx5PeYkE/fJgbpc=
+github.com/wk8/go-ordered-map/v2 v2.1.8/go.mod h1:5nJHM5DyteebpVlHnWMV0rPz6Zp7+xBAnxjb1X5vnTw=
github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM=
github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw=
github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI=
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apko-0.11.3/internal/cli/build.go new/apko-0.12.0/internal/cli/build.go
--- old/apko-0.11.3/internal/cli/build.go 2023-11-16 11:19:06.000000000 +0100
+++ new/apko-0.12.0/internal/cli/build.go 2023-11-29 20:49:11.000000000 +0100
@@ -72,8 +72,11 @@
bill of materials) describing the image contents.
`,
Example: ` apko build <config.yaml> <tag> <output.tar|oci-layout-dir/>`,
- Args: cobra.ExactArgs(3),
RunE: func(cmd *cobra.Command, args []string) error {
+ if len(args) != 3 {
+ return fmt.Errorf("requires 3 arg: 1 config file, a tag for the image, and an output path")
+ }
+
if len(logPolicy) == 0 {
if quietEnabled {
logPolicy = []string{"builtin:discard"}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apko-0.11.3/internal/cli/publish_test.go new/apko-0.12.0/internal/cli/publish_test.go
--- old/apko-0.11.3/internal/cli/publish_test.go 2023-11-16 11:19:06.000000000 +0100
+++ new/apko-0.12.0/internal/cli/publish_test.go 2023-11-29 20:49:11.000000000 +0100
@@ -104,7 +104,7 @@
// This test will fail if we ever make a change in apko that changes the SBOM.
// Sometimes, this is intentional, and we need to change this and bump the version.
- swant := "sha256:8dcaffc88372c0b3bf08a04d5c7bb70e59fe22c7ff781f868f3bb8ea3d093eda"
+ swant := "sha256:2cbdb42a7b4160cdcd44836a583fa23985532e1641f026365f653006545ad90c"
require.Equal(t, swant, got)
im, err := idx.IndexManifest()
@@ -113,8 +113,8 @@
// We also want to check the children SBOMs because the index SBOM does not have
// references to the children SBOMs, just the children!
wantBoms := []string{
- "sha256:24a4f1a47dd353ca8e33b0c6bad00b7efc8cabeb27338e3288c2290fd8aaf389",
- "sha256:db34ca4a2ac9a03f037edbe0e208fb546e9ccd602d918bf10191ab6056ef8413",
+ "sha256:a6acf3531effec2dd296834096fccff905d73f6838d9f680419c9bfbedad42f7",
+ "sha256:91097a5a791914cf2456e540671d47d369ae980c5376844ae978e56c15e8957c",
}
for i, m := range im.Manifests {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apko-0.11.3/internal/gen-jsonschema/generate.go new/apko-0.12.0/internal/gen-jsonschema/generate.go
--- old/apko-0.11.3/internal/gen-jsonschema/generate.go 1970-01-01 01:00:00.000000000 +0100
+++ new/apko-0.12.0/internal/gen-jsonschema/generate.go 2023-11-29 20:49:11.000000000 +0100
@@ -0,0 +1,16 @@
+// Copyright 2023 Chainguard, Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+//go:generate go run . -o ../../pkg/build/types/schema.json
+package main
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apko-0.11.3/internal/gen-jsonschema/main.go new/apko-0.12.0/internal/gen-jsonschema/main.go
--- old/apko-0.11.3/internal/gen-jsonschema/main.go 1970-01-01 01:00:00.000000000 +0100
+++ new/apko-0.12.0/internal/gen-jsonschema/main.go 2023-11-29 20:49:11.000000000 +0100
@@ -0,0 +1,41 @@
+package main
+
+import (
+ "bytes"
+ "encoding/json"
+ "flag"
+ "log"
+ "os"
+
+ "github.com/invopop/jsonschema"
+
+ "chainguard.dev/apko/pkg/build/types"
+)
+
+var (
+ outputFlag = flag.String("o", "", "output path")
+)
+
+func main() {
+ flag.Parse()
+
+ if *outputFlag == "" {
+ log.Fatal("output path is required")
+ }
+
+ r := new(jsonschema.Reflector)
+ if err := r.AddGoComments("chainguard.dev/apko/pkg/build", "../../pkg/build/types"); err != nil {
+ log.Fatal(err)
+ }
+ schema := r.Reflect(types.ImageConfiguration{})
+ b := new(bytes.Buffer)
+ enc := json.NewEncoder(b)
+ enc.SetIndent("", " ")
+ if err := enc.Encode(schema); err != nil {
+ log.Fatal(err)
+ }
+ //nolint:gosec // gosec wants us to use 0600, but making this globally readable is preferred.
+ if err := os.WriteFile(*outputFlag, b.Bytes(), 0644); err != nil {
+ log.Fatal(err)
+ }
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apko-0.11.3/pkg/build/busybox_test.go new/apko-0.12.0/pkg/build/busybox_test.go
--- old/apko-0.11.3/pkg/build/busybox_test.go 2023-11-16 11:19:06.000000000 +0100
+++ new/apko-0.12.0/pkg/build/busybox_test.go 2023-11-29 20:49:11.000000000 +0100
@@ -41,7 +41,7 @@
require.NoError(t, err)
err = fsys.MkdirAll("/lib/apk/db", 0755)
require.NoError(t, err)
- pkgLines := apk.PackageToIndex(pkg)
+ pkgLines := apk.PackageToInstalled(pkg)
err = fsys.WriteFile("/lib/apk/db/installed", []byte(strings.Join(pkgLines, "\n")+"\n\n"), 0755)
require.NoError(t, err)
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apko-0.11.3/pkg/build/types/schema.json new/apko-0.12.0/pkg/build/types/schema.json
--- old/apko-0.11.3/pkg/build/types/schema.json 1970-01-01 01:00:00.000000000 +0100
+++ new/apko-0.12.0/pkg/build/types/schema.json 2023-11-29 20:49:11.000000000 +0100
@@ -0,0 +1,346 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://chainguard.dev/apko/pkg/build/types/image-configuration",
+ "$ref": "#/$defs/ImageConfiguration",
+ "$defs": {
+ "AccountsOption": {
+ "properties": {
+ "RunAs": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "RunAs"
+ ],
+ "description": "AccountsOption describes an optional deviation to an apko environment's run-as setting."
+ },
+ "BuildOption": {
+ "properties": {
+ "Contents": {
+ "$ref": "#/$defs/ContentsOption"
+ },
+ "Accounts": {
+ "$ref": "#/$defs/AccountsOption"
+ },
+ "Environment": {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ "Entrypoint": {
+ "$ref": "#/$defs/ImageEntrypoint"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "Contents",
+ "Accounts",
+ "Environment",
+ "Entrypoint"
+ ],
+ "description": "BuildOption describes an optional deviation to an apko environment."
+ },
+ "ContentsOption": {
+ "properties": {
+ "Packages": {
+ "$ref": "#/$defs/ListOption"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "Packages"
+ ],
+ "description": "ContentsOption describes an optional deviation to an apko environment's contents block."
+ },
+ "Group": {
+ "properties": {
+ "groupname": {
+ "type": "string",
+ "description": "Required: The name of the group"
+ },
+ "gid": {
+ "type": "integer",
+ "description": "Required: The group ID"
+ },
+ "members": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array",
+ "description": "Required: The list of members of the group"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object"
+ },
+ "ImageAccounts": {
+ "properties": {
+ "run-as": {
+ "type": "string",
+ "description": "Required: The user to run the container as. This can be a username or UID."
+ },
+ "users": {
+ "items": {
+ "$ref": "#/$defs/User"
+ },
+ "type": "array",
+ "description": "Required: List of users to populate the image with"
+ },
+ "groups": {
+ "items": {
+ "$ref": "#/$defs/Group"
+ },
+ "type": "array",
+ "description": "Required: List of groups to populate the image with"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object"
+ },
+ "ImageConfiguration": {
+ "properties": {
+ "contents": {
+ "$ref": "#/$defs/ImageContents",
+ "description": "Required: The apk packages in the container image"
+ },
+ "entrypoint": {
+ "$ref": "#/$defs/ImageEntrypoint",
+ "description": "Required: The entrypoint of the container image\n\nThis typically is the path to the executable to run. Since many of\nimages do not include a shell, this should be the full path\nto the executable."
+ },
+ "cmd": {
+ "type": "string",
+ "description": "Optional: The command of the container image\n\nThese are the additional arguments to pass to the entrypoint."
+ },
+ "stop-signal": {
+ "type": "string",
+ "description": "Optional: The stop signal used to suspend the execution of the containers process"
+ },
+ "work-dir": {
+ "type": "string",
+ "description": "Optional: The working directory of the container"
+ },
+ "accounts": {
+ "$ref": "#/$defs/ImageAccounts",
+ "description": "Optional: Account configuration for the container image"
+ },
+ "archs": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array",
+ "description": "Optional: List of CPU architectures to build the container image for\n\nThe list of supported architectures is: 386, amd64, arm64, arm/v6, arm/v7, ppc64le, riscv64, s390x"
+ },
+ "environment": {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object",
+ "description": "Optional: Envionment variables to set in the container image"
+ },
+ "paths": {
+ "items": {
+ "$ref": "#/$defs/PathMutation"
+ },
+ "type": "array",
+ "description": "Optional: List of paths mutations"
+ },
+ "os-release": {
+ "$ref": "#/$defs/OSRelease",
+ "description": "Optional: The /etc/os-release configuration for the container image"
+ },
+ "vcs-url": {
+ "type": "string",
+ "description": "Optional: The link to version control system for this container's source code"
+ },
+ "annotations": {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object",
+ "description": "Optional: Annotations to apply to the images manifests"
+ },
+ "include": {
+ "type": "string",
+ "description": "Optional: Path to a local file containing additional image configuration\n\nThe included configuration is deep merged with the parent configuration"
+ },
+ "options": {
+ "additionalProperties": {
+ "$ref": "#/$defs/BuildOption"
+ },
+ "type": "object",
+ "description": "Optional: A map of named build option deviations\n\nDeprecated: Use WithExtraPackages."
+ },
+ "volumes": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array",
+ "description": "Optional: A list of volumes to configure\n\nThis is _not_ the same as Paths, but refers to the OCI spec \"volumes\"\nfield used by some container runtimes (docker) to create volumes at\nruntime. For most use cases, this is not needed, but consider using this\nwhen the image requires special volume configuration at runtime for\nsupported container runtimes."
+ }
+ },
+ "additionalProperties": false,
+ "type": "object"
+ },
+ "ImageContents": {
+ "properties": {
+ "repositories": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array",
+ "description": "A list of apk repositories to use for pulling packages"
+ },
+ "keyring": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array",
+ "description": "A list of public keys used to verify the desired repositories"
+ },
+ "packages": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array",
+ "description": "A list of packages to include in the image"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object"
+ },
+ "ImageEntrypoint": {
+ "properties": {
+ "type": {
+ "type": "string",
+ "description": "Optional: The type of entrypoint. Only \"service-bundle\" is supported."
+ },
+ "command": {
+ "type": "string",
+ "description": "Required: The command of the entrypoint"
+ },
+ "shell-fragment": {
+ "type": "string",
+ "description": "Optional: The shell fragment of the entrypoint command"
+ },
+ "services": {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object"
+ },
+ "ListOption": {
+ "properties": {
+ "Add": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "Remove": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "Add",
+ "Remove"
+ ],
+ "description": "ListOption describes an optional deviation to a list, for example, a list of packages."
+ },
+ "OSRelease": {
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "Optional: The name of the OS"
+ },
+ "id": {
+ "type": "string",
+ "description": "Optional: The unique identifier for the OS"
+ },
+ "version-id": {
+ "type": "string",
+ "description": "Optional: The unique identifier for the version of the OS"
+ },
+ "pretty-name": {
+ "type": "string",
+ "description": "Optional: The human readable description of the OS"
+ },
+ "home-url": {
+ "type": "string",
+ "description": "Optional: The URL of the homepage for the OS"
+ },
+ "bug-report-url": {
+ "type": "string",
+ "description": "Optional: The URL of the bug reporting website for the OS"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object"
+ },
+ "PathMutation": {
+ "properties": {
+ "path": {
+ "type": "string",
+ "description": "The target path to mutate"
+ },
+ "type": {
+ "type": "string",
+ "description": "The type of mutation to perform\n\nThis can be one of: directory, empty-file, hardlink, symlink, permissions"
+ },
+ "uid": {
+ "type": "integer",
+ "description": "The mutation's desired user ID"
+ },
+ "gid": {
+ "type": "integer",
+ "description": "The mutation's desired group ID"
+ },
+ "permissions": {
+ "type": "integer",
+ "description": "The permission bits for the path"
+ },
+ "source": {
+ "type": "string",
+ "description": "The source path to mutate"
+ },
+ "recursive": {
+ "type": "boolean",
+ "description": "Toggle whether to mutate recursively"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object"
+ },
+ "User": {
+ "properties": {
+ "username": {
+ "type": "string",
+ "description": "Required: The name of the user"
+ },
+ "uid": {
+ "type": "integer",
+ "description": "Required: The user ID"
+ },
+ "gid": {
+ "type": "integer",
+ "description": "Required: The user's group ID"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object"
+ }
+ }
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apko-0.11.3/pkg/sbom/generator/spdx/spdx.go new/apko-0.12.0/pkg/sbom/generator/spdx/spdx.go
--- old/apko-0.11.3/pkg/sbom/generator/spdx/spdx.go 2023-11-16 11:19:06.000000000 +0100
+++ new/apko-0.12.0/pkg/sbom/generator/spdx/spdx.go 2023-11-29 20:49:11.000000000 +0100
@@ -115,9 +115,7 @@
if opts.ImageInfo.VCSUrl != "" {
if opts.ImageInfo.ImageDigest != "" {
- addSourcePackage(opts.ImageInfo.VCSUrl, doc, imagePackage)
- } else {
- addSourcePackage(opts.ImageInfo.VCSUrl, doc, layerPackage)
+ addSourcePackage(opts.ImageInfo.VCSUrl, doc, imagePackage, opts)
}
}
@@ -221,8 +219,6 @@
return nil
}
- // TODO: Logf("composing packages from %s into image SBOM", path)
-
internalDoc, err := sx.ParseInternalSBOM(opts, path)
if err != nil {
// TODO: Log error parsing apk SBOM
@@ -302,6 +298,8 @@
for _, f := range sourceDoc.Files {
if _, ok := todo[f.ID]; ok {
+ f.Name = strings.TrimPrefix(f.Name, "/") // Strip leading slashes, which SPDX doesn't like.
+
targetDoc.Files = append(targetDoc.Files, f)
done[f.ID] = struct{}{}
}
@@ -366,6 +364,8 @@
"SPDXRef-Package-%s", opts.ImageInfo.ImageDigest,
)),
Name: opts.ImageInfo.ImageDigest,
+ Version: opts.ImageInfo.ImageDigest,
+ Supplier: "Organization: " + opts.OS.Name,
DownloadLocation: NOASSERTION,
PrimaryPurpose: "CONTAINER",
FilesAnalyzed: false,
@@ -397,6 +397,7 @@
)),
Name: pkg.Name,
Version: pkg.Version,
+ Supplier: "Organization: " + opts.OS.Name,
FilesAnalyzed: false,
LicenseConcluded: pkg.License,
Description: pkg.Description,
@@ -436,6 +437,7 @@
Description: "apko operating system layer",
DownloadLocation: NOASSERTION,
Originator: "",
+ Supplier: "Organization: " + opts.OS.Name,
Checksums: []Checksum{},
ExternalRefs: []ExternalRef{
{
@@ -500,6 +502,7 @@
Description string `json:"description,omitempty"`
DownloadLocation string `json:"downloadLocation,omitempty"`
Originator string `json:"originator,omitempty"`
+ Supplier string `json:"supplier,omitempty"`
SourceInfo string `json:"sourceInfo,omitempty"`
CopyrightText string `json:"copyrightText,omitempty"`
PrimaryPurpose string `json:"primaryPackagePurpose,omitempty"`
@@ -560,6 +563,8 @@
indexPackage := Package{
ID: "SPDXRef-Package-" + stringToIdentifier(opts.ImageInfo.IndexDigest.DeepCopy().String()),
Name: opts.ImageInfo.IndexDigest.DeepCopy().String(),
+ Version: opts.ImageInfo.IndexDigest.DeepCopy().String(),
+ Supplier: "Organization: " + opts.OS.Name,
FilesAnalyzed: false,
Description: "Multi-arch image index",
SourceInfo: "Generated at image build time by apko",
@@ -592,6 +597,8 @@
doc.Packages = append(doc.Packages, Package{
ID: imagePackageID,
Name: fmt.Sprintf("sha256:%s", info.Digest.DeepCopy().Hex),
+ Version: fmt.Sprintf("sha256:%s", info.Digest.DeepCopy().Hex),
+ Supplier: "Organization: " + opts.OS.Name,
FilesAnalyzed: false,
DownloadLocation: NOASSERTION,
PrimaryPurpose: "CONTAINER",
@@ -620,7 +627,9 @@
})
}
- addSourcePackage(opts.ImageInfo.VCSUrl, doc, &indexPackage)
+ if opts.ImageInfo.VCSUrl != "" {
+ addSourcePackage(opts.ImageInfo.VCSUrl, doc, &indexPackage, opts)
+ }
if err := renderDoc(doc, path); err != nil {
return fmt.Errorf("rendering document: %w", err)
@@ -630,7 +639,7 @@
}
// addSourcePackage creates a package describing the source code
-func addSourcePackage(vcsURL string, doc *Document, parent *Package) {
+func addSourcePackage(vcsURL string, doc *Document, parent *Package, opts *options.Options) {
version := ""
checksums := []Checksum{}
packageName := vcsURL
@@ -648,16 +657,22 @@
packageName = strings.TrimPrefix(packageName, "git://")
packageName = strings.TrimPrefix(packageName, "https://")
+ downloadLocation := vcsURL
+ if vcsURL == "" {
+ downloadLocation = NOASSERTION
+ }
+
sourcePackage := Package{
ID: fmt.Sprintf("SPDXRef-Package-%s", stringToIdentifier(vcsURL)),
Name: packageName,
Version: version,
+ Supplier: "Organization: " + opts.OS.Name,
FilesAnalyzed: false,
HasFiles: []string{},
LicenseInfoFromFiles: []string{},
PrimaryPurpose: "SOURCE",
Description: "Image configuration source",
- DownloadLocation: vcsURL,
+ DownloadLocation: downloadLocation,
Checksums: checksums,
ExternalRefs: []ExternalRef{},
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apko-0.11.3/pkg/sbom/generator/spdx/spdx_test.go new/apko-0.12.0/pkg/sbom/generator/spdx/spdx_test.go
--- old/apko-0.11.3/pkg/sbom/generator/spdx/spdx_test.go 2023-11-16 11:19:06.000000000 +0100
+++ new/apko-0.12.0/pkg/sbom/generator/spdx/spdx_test.go 2023-11-29 20:49:11.000000000 +0100
@@ -131,7 +131,11 @@
}
// Call the function
- addSourcePackage(vcsURL, &doc, &imagePackage)
+ addSourcePackage(vcsURL, &doc, &imagePackage, &options.Options{
+ OS: options.OSInfo{
+ Name: "Testing",
+ },
+ })
// Verify the purl
require.Len(t, doc.Packages[0].ExternalRefs, 1)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apko-0.11.3/pkg/tarfs/fs.go new/apko-0.12.0/pkg/tarfs/fs.go
--- old/apko-0.11.3/pkg/tarfs/fs.go 2023-11-16 11:19:06.000000000 +0100
+++ new/apko-0.12.0/pkg/tarfs/fs.go 2023-11-29 20:49:11.000000000 +0100
@@ -490,8 +490,24 @@
return nil
}
+ // If the existing file's package replaces the package we want to install, we don't need to write this file.
+ for _, replace := range got.pkg.Replaces {
+ if want.pkg.Name == replace {
+ return nil
+ }
+ }
+
+ // Otherwise, determine if the package we are installing replaces the existing package.
+ replaces := false
+ for _, replace := range want.pkg.Replaces {
+ if got.pkg.Name == replace {
+ replaces = true
+ break
+ }
+ }
+
+ // Or if they're from the same origin.
sameOrigin := got.pkg.Origin == want.pkg.Origin
- replaces := got.pkg.Name == want.pkg.Replaces
// At this point we know the files conflict, but it's okay if this file replaces that one.
if !sameOrigin && !replaces {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apko-0.11.3/pkg/tarfs/fs_test.go new/apko-0.12.0/pkg/tarfs/fs_test.go
--- old/apko-0.11.3/pkg/tarfs/fs_test.go 2023-11-16 11:19:06.000000000 +0100
+++ new/apko-0.12.0/pkg/tarfs/fs_test.go 2023-11-29 20:49:11.000000000 +0100
@@ -99,7 +99,7 @@
t.Errorf("wanted conflicting checksum err, got nil")
}
- pkg.Replaces = pkg.Name
+ pkg.Replaces = []string{pkg.Name}
if err := tfs.WriteHeader(*file, tfs, &pkg.Package); err != nil {
t.Errorf("pkg replaces file, got %v", err)
}
++++++ apko.obsinfo ++++++
--- /var/tmp/diff_new_pack.ply8hy/_old 2023-11-30 22:02:22.719398526 +0100
+++ /var/tmp/diff_new_pack.ply8hy/_new 2023-11-30 22:02:22.719398526 +0100
@@ -1,5 +1,5 @@
name: apko
-version: 0.11.3
-mtime: 1700129946
-commit: 4f9a4c617d079adc838c47303154d90a5ee4455e
+version: 0.12.0
+mtime: 1701287351
+commit: 691fe51dd1d536460f8a955d1357eaba974208b5
++++++ vendor.tar.gz ++++++
++++ 5822 lines of diff (skipped)
1
0