From 34fcdf4eea133924b8057de0153b052e8f3a089f Mon Sep 17 00:00:00 2001 From: Simon Flood Date: Tue, 21 Nov 2023 16:05:12 +0000 Subject: [PATCH 1/5] Fix typo in server-migrator.sh (#7926) --- susemanager/bin/server-migrator.sh | 2 +- susemanager/susemanager.changes.simonflood.fix-wiht-typo | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 susemanager/susemanager.changes.simonflood.fix-wiht-typo diff --git a/susemanager/bin/server-migrator.sh b/susemanager/bin/server-migrator.sh index 2df6c0b6aed5..69a5825f7c44 100755 --- a/susemanager/bin/server-migrator.sh +++ b/susemanager/bin/server-migrator.sh @@ -37,7 +37,7 @@ zypper ar -n "Main Update Repository" http://download.opensuse.org/update/leap/$ zypper ar -n "Non-OSS Repository" http://download.opensuse.org/distribution/leap/${NEW_VERSION_ID}/repo/non-oss repo-non-oss zypper ar -n "Update Repository (Non-Oss)" http://download.opensuse.org/update/leap/${NEW_VERSION_ID}/non-oss/ repo-update-non-oss zypper ar -n "Uyuni Server Stable" https://download.opensuse.org/repositories/systemsmanagement:/Uyuni:/Stable/images/repo/Uyuni-Server-POOL-x86_64-Media1/ uyuni-server-stable -zypper ar -n "Update repository wiht updates from SUSE Linux Enterprise" http://download.opensuse.org/update/leap/${NEW_VERSION_ID}/sle repo-sle-update +zypper ar -n "Update repository with updates from SUSE Linux Enterprise" http://download.opensuse.org/update/leap/${NEW_VERSION_ID}/sle repo-sle-update zypper ar -n "Update repository of openSUSE Backports" http://download.opensuse.org/update/leap/${NEW_VERSION_ID}/backports/ repo-backports-update zypper ref zypper -n dup --allow-vendor-change diff --git a/susemanager/susemanager.changes.simonflood.fix-wiht-typo b/susemanager/susemanager.changes.simonflood.fix-wiht-typo new file mode 100644 index 000000000000..6f004b810a82 --- /dev/null +++ b/susemanager/susemanager.changes.simonflood.fix-wiht-typo @@ -0,0 +1 @@ +- fix typo in repo name within server-migrator.sh script From d7945ba601d36b49171b669633c2fe9856536f23 Mon Sep 17 00:00:00 2001 From: Jordi Massaguer Pla Date: Tue, 21 Nov 2023 17:08:17 +0100 Subject: [PATCH 2/5] gh actions: fix directories Because of https://github.com/uyuni-project/uyuni/pull/7651, package files are moved from /srv. However, this change is done at the RPM spec file, meaning it won't be available in the gh actions until the new RPM packages for uyuni have been released and published. Thus, meanwhile, we need to create those dirs by hand. Signed-off-by: Jordi Massaguer Pla --- testsuite/podman_runner/09_build_server_code.sh | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/testsuite/podman_runner/09_build_server_code.sh b/testsuite/podman_runner/09_build_server_code.sh index 04eaa20f523b..9023e2831ec5 100755 --- a/testsuite/podman_runner/09_build_server_code.sh +++ b/testsuite/podman_runner/09_build_server_code.sh @@ -1,8 +1,14 @@ #!/bin/bash set -xe sudo -i podman exec uyuni-server-all-in-one-test bash -c "cp /testsuite/podman_runner/debug_logging.properties /etc/tomcat/logging.properties" + +# Create missing directories that will be created by the new RPM https://github.com/uyuni-project/uyuni/pull/7651 +sudo -i podman exec uyuni-server-all-in-one-test bash -c "[ -d /usr/share/susemanager/www ] || mkdir -p /usr/share/susemanager/www" +sudo -i podman exec uyuni-server-all-in-one-test bash -c "[ -d /usr/share/susemanager/www/htdocs ] || mkdir -p /usr/share/susemanager/www/htdocs" +sudo -i podman exec uyuni-server-all-in-one-test bash -c "[ -d /usr/share/susemanager/www/tomcat/webapps ] || mkdir -p /usr/share/susemanager/www/tomcat/webapps" + sudo -i podman exec uyuni-server-all-in-one-test bash -c "cd /java && ant -f manager-build.xml ivy refresh-branding-jar deploy-local" -sudo -i podman exec uyuni-server-all-in-one-test bash -c "set -xe;cd /web/html/src;[ -d dist ] || mkdir dist;yarn install --force --ignore-optional --production=true --frozen-lockfile;yarn autoclean --force;yarn build:novalidate; rsync -a dist/ /srv/www/htdocs/" +sudo -i podman exec uyuni-server-all-in-one-test bash -c "set -xe;cd /web/html/src;[ -d dist ] || mkdir dist;yarn install --force --ignore-optional --production=true --frozen-lockfile;yarn autoclean --force;yarn build:novalidate; rsync -a dist/ /usr/share/susemanager/www/htdocs/" sudo -i podman exec uyuni-server-all-in-one-test bash -c "rctomcat restart" # mgr-push From 676308d23b82666faa65ab87fa5b8b013c703376 Mon Sep 17 00:00:00 2001 From: Jordi Massaguer Pla Date: Tue, 21 Nov 2023 17:22:47 +0100 Subject: [PATCH 3/5] gh-actions: do not set the download.opensuse.org nor other hosts We needed to set some of the hosts, because with avahi they were not resolvable when using containers. However, in the github actions, we use podman name resolution, so we do not have that problem, and so we do not have to set the hostname resolution. Let's remove the "--add-host" flags. This was the root cause of why deploy stopped to work, because it had hardcoded the download.opensuse.org to the old ip address. Signed-off-by: Jordi Massaguer Pla --- testsuite/podman_runner/07_start_server.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/testsuite/podman_runner/07_start_server.sh b/testsuite/podman_runner/07_start_server.sh index 53613ac8604e..063a31282027 100755 --- a/testsuite/podman_runner/07_start_server.sh +++ b/testsuite/podman_runner/07_start_server.sh @@ -2,5 +2,5 @@ set -xe src_dir=$(cd $(dirname "$0")/../.. && pwd -P) -sudo -i podman run --rm --tmpfs /run -v ${src_dir}/schema/spacewalk/spacewalk-schema-upgrade:/usr/bin/spacewalk-schema-upgrade -v${src_dir}/testsuite:/testsuite -v ${src_dir}/schema/spacewalk/upgrade/:/etc/sysconfig/rhn/schema-upgrade/ -v ${src_dir}/schema/reportdb/upgrade/:/etc/sysconfig/rhn/reportdb-schema-upgrade/ -v ${src_dir}/web:/web -v ${src_dir}/branding:/branding -v ${src_dir}/java:/java -v ${src_dir}/client:/client -v /sys/fs/cgroup:/sys/fs/cgroup:rw -v /tmp/test-all-in-one:/tmp --cgroupns=host --add-host=download.opensuse.org:195.135.223.226 --add-host=registry.npmjs.org:104.16.31.34 --add-host=registry.yarnpkg.com:104.16.29.34 -h uyuni-server-all-in-one-test -p 8443:443 -p 8080:80 -p 4505:4505 -p 4506:4506 -d --name=uyuni-server-all-in-one-test --network uyuni-network-1 ghcr.io/$UYUNI_PROJECT/uyuni/ci-test-server-all-in-one-dev:$UYUNI_VERSION +sudo -i podman run --rm --tmpfs /run -v ${src_dir}/schema/spacewalk/spacewalk-schema-upgrade:/usr/bin/spacewalk-schema-upgrade -v${src_dir}/testsuite:/testsuite -v ${src_dir}/schema/spacewalk/upgrade/:/etc/sysconfig/rhn/schema-upgrade/ -v ${src_dir}/schema/reportdb/upgrade/:/etc/sysconfig/rhn/reportdb-schema-upgrade/ -v ${src_dir}/web:/web -v ${src_dir}/branding:/branding -v ${src_dir}/java:/java -v ${src_dir}/client:/client -v /sys/fs/cgroup:/sys/fs/cgroup:rw -v /tmp/test-all-in-one:/tmp --cgroupns=host -h uyuni-server-all-in-one-test -p 8443:443 -p 8080:80 -p 4505:4505 -p 4506:4506 -d --name=uyuni-server-all-in-one-test --network uyuni-network-1 ghcr.io/$UYUNI_PROJECT/uyuni/ci-test-server-all-in-one-dev:$UYUNI_VERSION From 616f99fbfbecb9ed7893845e1c254cecacceec47 Mon Sep 17 00:00:00 2001 From: Welder Luz Date: Mon, 25 Sep 2023 09:17:54 -0300 Subject: [PATCH 4/5] Add option to filter packages by build time in CLM --- .../domain/contentmgmt/FilterCriteria.java | 5 +++ .../rhn/domain/contentmgmt/PackageFilter.java | 35 ++++++++++++++----- .../contentmgmt/test/ContentFilterTest.java | 33 +++++++++++++++++ ...s.welder.clm-filter-packages-by-build-time | 1 + .../list-filters/filter-form.tsx | 13 +++++++ .../shared/business/filters.enum.ts | 6 ++++ ...s.welder.clm-filter-packages-by-build-time | 1 + 7 files changed, 86 insertions(+), 8 deletions(-) create mode 100644 java/spacewalk-java.changes.welder.clm-filter-packages-by-build-time create mode 100644 web/spacewalk-web.changes.welder.clm-filter-packages-by-build-time diff --git a/java/code/src/com/redhat/rhn/domain/contentmgmt/FilterCriteria.java b/java/code/src/com/redhat/rhn/domain/contentmgmt/FilterCriteria.java index 431a85b94541..fe8e84b0b96f 100644 --- a/java/code/src/com/redhat/rhn/domain/contentmgmt/FilterCriteria.java +++ b/java/code/src/com/redhat/rhn/domain/contentmgmt/FilterCriteria.java @@ -37,6 +37,7 @@ import static com.redhat.rhn.domain.contentmgmt.FilterCriteria.Matcher.MODULE_NONE; import static com.redhat.rhn.domain.contentmgmt.FilterCriteria.Matcher.PROVIDES_NAME; import static com.redhat.rhn.domain.contentmgmt.FilterCriteria.Matcher.PTF_ALL; +import static com.redhat.rhn.domain.contentmgmt.PackageFilter.BUILD_DATE; import static com.redhat.rhn.domain.contentmgmt.PtfFilter.FIELD_PTF_ALL; import static com.redhat.rhn.domain.contentmgmt.PtfFilter.FIELD_PTF_NUMBER; import static com.redhat.rhn.domain.contentmgmt.PtfFilter.FIELD_PTF_PACKAGE; @@ -86,6 +87,10 @@ public class FilterCriteria { Triple.of(PACKAGE, GREATEREQ, "nevra"), Triple.of(PACKAGE, GREATER, "nevra"), Triple.of(PACKAGE, MATCHES, "name"), + Triple.of(PACKAGE, LOWER, BUILD_DATE), + Triple.of(PACKAGE, LOWEREQ, BUILD_DATE), + Triple.of(PACKAGE, GREATER, BUILD_DATE), + Triple.of(PACKAGE, GREATEREQ, BUILD_DATE), Triple.of(ERRATUM, EQUALS, "advisory_name"), Triple.of(ERRATUM, EQUALS, "advisory_type"), Triple.of(ERRATUM, EQUALS, "synopsis"), diff --git a/java/code/src/com/redhat/rhn/domain/contentmgmt/PackageFilter.java b/java/code/src/com/redhat/rhn/domain/contentmgmt/PackageFilter.java index 27eda68b7628..c6a0f832ebc0 100644 --- a/java/code/src/com/redhat/rhn/domain/contentmgmt/PackageFilter.java +++ b/java/code/src/com/redhat/rhn/domain/contentmgmt/PackageFilter.java @@ -18,6 +18,9 @@ import com.redhat.rhn.domain.rhnpackage.Package; import com.redhat.rhn.domain.rhnpackage.PackageEvr; +import java.time.Instant; +import java.time.ZonedDateTime; +import java.time.format.DateTimeFormatter; import java.util.regex.Pattern; import javax.persistence.DiscriminatorValue; @@ -31,6 +34,8 @@ @DiscriminatorValue("package") public class PackageFilter extends ContentFilter { + public static final String BUILD_DATE = "build_date"; + private Pattern pattern; @Override @@ -43,19 +48,15 @@ public boolean test(Package pack) { case CONTAINS: return getField(pack, field, String.class).contains(value); case LOWER: - return checkNameAndArch(field, value, pack) && pack.getPackageEvr().compareTo( - PackageEvr.parsePackageEvr(pack.getPackageType(), getEvr(field, value))) < 0; + return preCondition(pack, field, value) && compareField(pack, field, value) < 0; case LOWEREQ: - return checkNameAndArch(field, value, pack) && pack.getPackageEvr().compareTo( - PackageEvr.parsePackageEvr(pack.getPackageType(), getEvr(field, value))) <= 0; + return preCondition(pack, field, value) && compareField(pack, field, value) <= 0; case EQUALS: return getField(pack, field, String.class).equals(value); case GREATEREQ: - return checkNameAndArch(field, value, pack) && pack.getPackageEvr().compareTo( - PackageEvr.parsePackageEvr(pack.getPackageType(), getEvr(field, value))) >= 0; + return preCondition(pack, field, value) && compareField(pack, field, value) >= 0; case GREATER: - return checkNameAndArch(field, value, pack) && pack.getPackageEvr().compareTo( - PackageEvr.parsePackageEvr(pack.getPackageType(), getEvr(field, value))) > 0; + return preCondition(pack, field, value) && compareField(pack, field, value) > 0; case MATCHES: if (pattern == null) { pattern = Pattern.compile(value); @@ -70,6 +71,24 @@ public boolean test(Package pack) { } } + private int compareField(Package pack, String field, String value) { + return BUILD_DATE.equals(field) ? compareBuildDate(pack, value) : comparePackageEvr(pack, field, value); + } + + private boolean preCondition(Package pack, String field, String value) { + return BUILD_DATE.equals(field) ? pack.getBuildTime() != null : checkNameAndArch(field, value, pack); + } + + private int comparePackageEvr(Package pack, String field, String value) { + return pack.getPackageEvr().compareTo(PackageEvr.parsePackageEvr(pack.getPackageType(), getEvr(field, value))); + } + + private int compareBuildDate(Package pack, String value) { + Instant valDate = ZonedDateTime.parse(value, DateTimeFormatter.ISO_OFFSET_DATE_TIME).toInstant(); + Instant issueDate = pack.getBuildTime().toInstant(); + return issueDate.compareTo(valDate); + } + private static T getField(Package pack, String field, Class type) { switch (field) { case "name": diff --git a/java/code/src/com/redhat/rhn/domain/contentmgmt/test/ContentFilterTest.java b/java/code/src/com/redhat/rhn/domain/contentmgmt/test/ContentFilterTest.java index 7b5b4af37e73..85364d631e05 100644 --- a/java/code/src/com/redhat/rhn/domain/contentmgmt/test/ContentFilterTest.java +++ b/java/code/src/com/redhat/rhn/domain/contentmgmt/test/ContentFilterTest.java @@ -45,11 +45,13 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import java.text.SimpleDateFormat; import java.time.ZoneId; import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; import java.util.Collections; import java.util.Date; +import java.util.TimeZone; /** * Tests for {@link ContentFilter} @@ -418,6 +420,37 @@ public void testErrataByDate2Filter() throws Exception { " should be equal " + criteriaDate); } + /** + * Test basic Package filtering based on build_date + * + * @throws Exception if anything goes wrong + */ + @Test + public void testPackageByBuildDate() throws Exception { + var df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX"); + df.setTimeZone(TimeZone.getDefault()); + FilterCriteria criteria = new FilterCriteria(FilterCriteria.Matcher.GREATEREQ, "build_date", + "2022-05-12T01:34:49+00:00"); + ContentFilter filter = contentManager.createFilter("greatereq-filter", DENY, PACKAGE, criteria, user); + + Package pack = PackageTest.createTestPackage(user.getOrg()); + + pack.setBuildTime(df.parse("2022-05-12T01:34:49+00:00")); + assertTrue(filter.test(pack)); + pack.setBuildTime(df.parse("2022-05-07T21:49:36+00:00")); + assertFalse(filter.test(pack)); + + pack.setBuildTime(df.parse("2022-05-12T01:34:49+00:00")); + criteria.setMatcher(FilterCriteria.Matcher.GREATER); + assertFalse(filter.test(pack)); + + criteria.setMatcher(FilterCriteria.Matcher.LOWER); + assertFalse(filter.test(pack)); + + criteria.setMatcher(FilterCriteria.Matcher.LOWEREQ); + assertTrue(filter.test(pack)); + } + /** * Test basic Errata filtering based on equal match on synopsis * diff --git a/java/spacewalk-java.changes.welder.clm-filter-packages-by-build-time b/java/spacewalk-java.changes.welder.clm-filter-packages-by-build-time new file mode 100644 index 000000000000..89d3f567c47d --- /dev/null +++ b/java/spacewalk-java.changes.welder.clm-filter-packages-by-build-time @@ -0,0 +1 @@ +- Add option to filter packages by build time in CLM (jsc#SUMA-282) diff --git a/web/html/src/manager/content-management/list-filters/filter-form.tsx b/web/html/src/manager/content-management/list-filters/filter-form.tsx index 32954b4c047e..2821a267d018 100644 --- a/web/html/src/manager/content-management/list-filters/filter-form.tsx +++ b/web/html/src/manager/content-management/list-filters/filter-form.tsx @@ -46,6 +46,9 @@ const FilterForm = (props: Props) => { if (clmFilterOptions.ISSUE_DATE.key === filter.type) { draft[clmFilterOptions.ISSUE_DATE.key] = localizedMoment(); } + if (clmFilterOptions.PACKAGE_BUILD_DATE.key === filter.type) { + draft[clmFilterOptions.PACKAGE_BUILD_DATE.key] = localizedMoment(); + } }) ); } @@ -201,6 +204,16 @@ const FilterForm = (props: Props) => { /> )} + {clmFilterOptions.PACKAGE_BUILD_DATE.key === filterType && ( + + )} + {clmFilterOptions.SYNOPSIS.key === filterType && ( Date: Tue, 21 Nov 2023 20:40:12 +0100 Subject: [PATCH 5/5] GH Validation: Cache Ruby gems for the controller inside the container image (#7930) --- testsuite/dockerfiles/controller-dev/Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/testsuite/dockerfiles/controller-dev/Dockerfile b/testsuite/dockerfiles/controller-dev/Dockerfile index 2c949281214d..fee080e713c2 100644 --- a/testsuite/dockerfiles/controller-dev/Dockerfile +++ b/testsuite/dockerfiles/controller-dev/Dockerfile @@ -37,3 +37,4 @@ RUN zypper ref -f && \ zypper clean -a COPY etc_pam.d_sshd /etc/pam.d/sshd CMD ssh-keygen -A && /usr/sbin/sshd -De +RUN curl https://raw.githubusercontent.com/uyuni-project/uyuni/master/testsuite/Gemfile -o Gemfile && bundle.ruby2.5 install && rm Gemfile