More fixes for editor config compliance

This commit is contained in:
Stephan Kulow
2023-01-02 16:02:03 +01:00
parent 32eac54470
commit 1e3883dc9f
18 changed files with 196 additions and 169 deletions

View File

@@ -1,4 +1,4 @@
[report]
omit =
*/site-packages/*
tests/*.py
*/site-packages/*
tests/*.py

4
.ecrc
View File

@@ -1,8 +1,8 @@
{
"Verbose": false,
"IgnoreDefaults": false,
"Exclude": ["tests/fixtures", "LICENSE"],
"SpacesAfterTabs": false,
"Exclude": ["tests/fixtures", "LICENSE", "\\.py$", "publish_distro", "bs_copy"],
"SpacesAfterTabs": true,
"Disable": {
"EndOfLine": false,
"Indentation": false,

View File

@@ -27,3 +27,18 @@ indent_style = tab
[**.{pl,py}]
indent_style = space
indent_size = 4
[staging_templates/create_new_staging]
indent_style = tab
[publish_distro_conf/*.config]
indent_style = tab
[osc-staging-workflow.dot]
indent_size = 3
[factory-package-news/rsyslog/factory-package-news.conf]
indent_style = tab
[data/repos.json]
indent_size = 3

View File

@@ -27,11 +27,11 @@ jobs:
- name: Run tests
run: docker-compose -f dist/ci/docker-compose.yml run test
env:
# Specifies how many jobs you would like to run in parallel,
# used for partitioning
CI_NODE_TOTAL: ${{ matrix.ci_node_total }}
# Use the index from matrix as an environment variable
CI_NODE_INDEX: ${{ matrix.ci_node_index }}
# Specifies how many jobs you would like to run in parallel,
# used for partitioning
CI_NODE_TOTAL: ${{ matrix.ci_node_total }}
# Use the index from matrix as an environment variable
CI_NODE_INDEX: ${{ matrix.ci_node_index }}
- name: Submit coverage report to Codecov
uses: codecov/codecov-action@v1.5.2

View File

@@ -142,7 +142,7 @@ def test_basic(self):
# Keep the workflow in local scope so that ending the test case will destroy it.
# Destroying the workflow will also delete all created projects and packages. The
# created workflow has a target project, but most of the test assets need to be created
# as needed
# as needed
wf = OBSLocal.FactoryWorkflow()
staging = wf.create_staging('A', freeze=True)
wf.create_submit_request('devel:wine', 'wine')

View File

@@ -1,8 +1,8 @@
<!doctype html>
{% block head %}
<title>{% block title %}{% endblock %}</title>
<meta charset=utf-8>
<link rel=stylesheet type=text/css href="{{ url_for('static', filename='style.css') }}">
<title>{% block title %}{% endblock %}</title>
<meta charset=utf-8>
<link rel=stylesheet type=text/css href="{{ url_for('static', filename='style.css') }}">
<link rel="stylesheet" href="https://static.opensuse.org/themes/bento/css/style.fluid.css" media="screen" />
{% endblock %}
{% for message in get_flashed_messages() %}

View File

@@ -74,37 +74,37 @@
</td>
{% endif %}
<td>
{% if project.ttm_version %}
<a href="https://build.opensuse.org/package/show/{{ project.name }}/000product">{{ project.ttm_version }}</a>
{% else %}
n.a.
{% endif %}
{% if project.ttm_version %}
<a href="https://build.opensuse.org/package/show/{{ project.name }}/000product">{{ project.ttm_version }}</a>
{% else %}
n.a.
{% endif %}
</td>
<td>
{% set ttm_testing = project.ttm_status.get('testing') %}
{% if ttm_testing %}
{% if project.openqa_version %}
<a href='https://openqa.opensuse.org/tests/overview?version={{ project.openqa_version }}&groupid={{ project.openqa_id }}'>{{ ttm_testing }}</a>
{% else %}
{{ ttm_testing }}
{% endif %}
{% else %}
n.a.
{% endif %}
</td>
<td>
{% set ttm_published = project.ttm_status.get('published', None) %}
{% if ttm_published %}
<a href="{{ project.download_url }}">{{ ttm_published }}</a>
{% set ttm_testing = project.ttm_status.get('testing') %}
{% if ttm_testing %}
{% if project.openqa_version %}
<a href='https://openqa.opensuse.org/tests/overview?version={{ project.openqa_version }}&groupid={{ project.openqa_id }}'>{{ ttm_testing }}</a>
{% else %}
n.a.
{% endif %}
{{ ttm_testing }}
{% endif %}
{% else %}
n.a.
{% endif %}
</td>
<td>
{% set openqa_summary = project.openqa_summary() %}
{% for state in openqa_summary.keys() %}
{{ state }}: {{ openqa_summary[state]|length }}
{% endfor %}
{% set ttm_published = project.ttm_status.get('published', None) %}
{% if ttm_published %}
<a href="{{ project.download_url }}">{{ ttm_published }}</a>
{% else %}
n.a.
{% endif %}
</td>
<td>
{% set openqa_summary = project.openqa_summary() %}
{% for state in openqa_summary.keys() %}
{{ state }}: {{ openqa_summary[state]|length }}
{% endfor %}
</td>
</tr>
{% endfor %}

View File

@@ -15,5 +15,5 @@
, <a href="https://build.opensuse.org/project/monitor/{{ project.name }}?unresolvable=1&defaults=0&repo_{{repository}}=1&{{project.all_archs}}">{{ progress['unresolvable'] }} unresolvable</a>
{% endif %}
{% else %}
n.a.
n.a.
{% endif %}

View File

@@ -1,9 +1,9 @@
{
"openSUSE:Leap:15.3:Update": {
"DISTRI": "opensuse",
"FLAVOR": "DVD-Incidents",
"VERSION": "15.3",
"ARCH": "x86_64"
"DISTRI": "opensuse",
"FLAVOR": "DVD-Incidents",
"VERSION": "15.3",
"ARCH": "x86_64"
},
"openSUSE:Backports:SLE-15-SP3:Update": {
"DISTRI": "opensuse",
@@ -12,10 +12,13 @@
"ARCH": "x86_64"
},
"openSUSE:Leap:15.4:Update": {
"DISTRI": "opensuse",
"FLAVOR": "DVD-Incidents",
"VERSION": "15.4",
"ARCH": ["x86_64", "aarch64"]
"DISTRI": "opensuse",
"FLAVOR": "DVD-Incidents",
"VERSION": "15.4",
"ARCH": [
"x86_64",
"aarch64"
]
},
"openSUSE:Backports:SLE-15-SP4:Update": {
"DISTRI": "opensuse",

View File

@@ -1,64 +1,64 @@
{
"https://openqa.opensuse.org" : {
"openSUSE:Leap:15.3:Update" : {
"settings" : {
"OS_TEST_ISSUES" : "",
"FLAVOR" : "DVD-Updates",
"DISTRI" : "opensuse",
"VERSION" : "15.3",
"ARCH" : "x86_64"
"https://openqa.opensuse.org": {
"openSUSE:Leap:15.3:Update": {
"settings": {
"OS_TEST_ISSUES": "",
"FLAVOR": "DVD-Updates",
"DISTRI": "opensuse",
"VERSION": "15.3",
"ARCH": "x86_64"
},
"test" : "kde",
"repos" : [
"test": "kde",
"repos": [
"http://download.opensuse.org/update/leap/15.3/oss/",
"http://download.opensuse.org/update/leap/15.3/non-oss/",
"http://download.opensuse.org/update/leap/15.3/backports/",
"http://download.opensuse.org/update/leap/15.3/sle/"
]
},
"openSUSE:Backports:SLE-15-SP3:Update" : {
"settings" : {
"OS_TEST_ISSUES" : "",
"FLAVOR" : "DVD-Backports-Incidents",
"DISTRI" : "opensuse",
"VERSION" : "15.3",
"ARCH" : "x86_64"
},
"test" : "kde",
"repos" : [
"http://download.opensuse.org/update/leap/15.3/backports/",
"http://download.opensuse.org/update/leap/15.3/sle/"
]
},
"openSUSE:Leap:15.4:Update" : {
"settings" : {
"OS_TEST_ISSUES" : "",
"FLAVOR" : "DVD-Updates",
"DISTRI" : "opensuse",
"VERSION" : "15.4",
"ARCH" : "x86_64"
"openSUSE:Backports:SLE-15-SP3:Update": {
"settings": {
"OS_TEST_ISSUES": "",
"FLAVOR": "DVD-Backports-Incidents",
"DISTRI": "opensuse",
"VERSION": "15.3",
"ARCH": "x86_64"
},
"test" : "textmode",
"repos" : [
"test": "kde",
"repos": [
"http://download.opensuse.org/update/leap/15.3/backports/",
"http://download.opensuse.org/update/leap/15.3/sle/"
]
},
"openSUSE:Leap:15.4:Update": {
"settings": {
"OS_TEST_ISSUES": "",
"FLAVOR": "DVD-Updates",
"DISTRI": "opensuse",
"VERSION": "15.4",
"ARCH": "x86_64"
},
"test": "textmode",
"repos": [
"http://download.opensuse.org/update/leap/15.4/oss/",
"http://download.opensuse.org/update/leap/15.4/non-oss/",
"http://download.opensuse.org/update/leap/15.4/backports/",
"http://download.opensuse.org/update/leap/15.4/sle/"
]
},
"openSUSE:Backports:SLE-15-SP4:Update" : {
"settings" : {
"OS_TEST_ISSUES" : "",
"FLAVOR" : "DVD-Backports-Incidents",
"DISTRI" : "opensuse",
"VERSION" : "15.4",
"ARCH" : "x86_64"
},
"test" : "textmode",
"repos" : [
"http://download.opensuse.org/update/leap/15.4/backports/",
"http://download.opensuse.org/update/leap/15.4/sle/"
]
}
"openSUSE:Backports:SLE-15-SP4:Update": {
"settings": {
"OS_TEST_ISSUES": "",
"FLAVOR": "DVD-Backports-Incidents",
"DISTRI": "opensuse",
"VERSION": "15.4",
"ARCH": "x86_64"
},
"test": "textmode",
"repos": [
"http://download.opensuse.org/update/leap/15.4/backports/",
"http://download.opensuse.org/update/leap/15.4/sle/"
]
}
}
}

View File

@@ -18,7 +18,7 @@ ci_node=$1
for file in tests/*_tests.py; do
if test -n "$ci_node"; then
if test "$ci_node" == "Rest"; then
if test "$ci_node" == "Rest"; then
if grep -q '# CI-Node' $file; then
echo "Skipping $file in 'Rest'"
continue
@@ -27,7 +27,7 @@ for file in tests/*_tests.py; do
if ! grep -q "# CI-Node: $ci_node" $file; then
continue
fi
fi
fi
fi
if ! test -f /code/.without-coverage; then
COVER_ARGS="--cov=. --cov-append --cov-report=xml"

View File

@@ -20,9 +20,9 @@ services:
<<: *obs
command: >
chroot --userspec=wwwrun / /bin/bash -c "cd /srv/www/obs/api &&
RAILS_ENV=production ./bin/rake ts:rebuild &&
RAILS_ENV=production ./script/delayed_job.api.rb --queues=staging,quick start &&
./bin/bundle exec rails s -e production"
RAILS_ENV=production ./bin/rake ts:rebuild &&
RAILS_ENV=production ./script/delayed_job.api.rb --queues=staging,quick start &&
./bin/bundle exec rails s -e production"
depends_on:
- db
- cache

View File

@@ -6,11 +6,11 @@ RUN zypper -n ar http://download.opensuse.org/repositories/openSUSE:/Tools/openS
RUN zypper --gpg-auto-import-keys ref
RUN zypper in -y osc python3-pytest python3-httpretty python3-pyxdg python3-PyYAML \
python3-pika python3-mock python3-cmdln python3-lxml python3-python-dateutil python3-colorama \
python3-influxdb python3-pytest-cov libxml2-tools curl python3-flake8 \
shadow vim vim-data strace git sudo patch openSUSE-release openSUSE-release-ftp \
perl-Net-SSLeay perl-Text-Diff perl-XML-Simple perl-XML-Parser build \
obs-service-download_files obs-service-format_spec_file obs-scm-bridge
python3-pika python3-mock python3-cmdln python3-lxml python3-python-dateutil python3-colorama \
python3-influxdb python3-pytest-cov libxml2-tools curl python3-flake8 \
shadow vim vim-data strace git sudo patch openSUSE-release openSUSE-release-ftp \
perl-Net-SSLeay perl-Text-Diff perl-XML-Simple perl-XML-Parser build \
obs-service-download_files obs-service-format_spec_file obs-scm-bridge
RUN useradd tester -d /code/tests/home
COPY run_as_tester /usr/bin

View File

@@ -12,45 +12,52 @@ The generated release spec files are split into 000release-packages to avoid nee
The package list generator reads several files. The most important are group*.yml (traditionally only groups.yml) within 000package-groups.
### supportstatus.txt
The file lists the packages and their support level. It's only necessary to list packages here that have a different level than the default level specificied in the groups. The format is plain text: <package name> <level> - the level is handed over 1:1 to KIWI file. Currently used values are: unsupported, l2 and l3
### group*.yml
The file is a list of package lists and the special hash 'OUTPUT'. OUTPUT contains an entry for every group file that needs to be written out. The group name of it needs to exist as package list as well. OUTPUT also contains flags for the groups.
We currently support:
* default-support
Sets the support level in case there is no explicitly entry in [supportstatus.txt](#supportstatustxt), defaults to 'unsupported'
* recommends
If the solver should take recommends into account when solving the package list, defaults to false.
* includes
Adds package lists to the group to be solved. Allows to organize different topics into the same group. By default there are no package lists added - the package list with the group name is always there.
* excludes
Removes all packages from the __solved__ groups listed. Used to build addons to main products.
* conflicts
Sets package groups not to be part of the same product. Influences the [overlap calculation](#overlap-calculation) only.
* **default-support**
Sets the support level in case there is no explicitly entry in [supportstatus.txt](#supportstatustxt), defaults to 'unsupported'
* **recommends**
If the solver should take recommends into account when solving the package list, defaults to false.
* **includes**
Adds package lists to the group to be solved. Allows to organize different topics into the same group. By default there are no package lists added - the package list with the group name is always there.
* **excludes**
Removes all packages from the __solved__ groups listed. Used to build addons to main products.
* **conflicts**
Sets package groups not to be part of the same product. Influences the [overlap calculation](#overlap-calculation) only.
Be aware that group names must not contain a '-'.
You can also adapt the solving on a package level by putting a hash into the package list. Normally the package name is a string, in case it's a hash the key needs to be the package name and the value is a list of following modifiers:
* recommended
Evaluate also 'Recommends' in package to determine dependencies. Otherwise only 'required' are considered. Used mainly for patterns in SLE. It can not be combined with platforms, For architecture specific recommends, use patterns.
* suggested
Evaluate also 'Suggests' in package to determine dependencies. This implies recommended
* architecture (e.g. x86_64,s390x,ppc64le,aarch64)
Makes the entry specific to the listed architectures. Will get ignored if used in combination with 'recommended'.
* locked
Do not put the package into this group. Used to *force* certain packages into other modules
* silent
Use this package for dependency solving of groups "on top", but do not output the package for this group. Mainly to mark the product to use by adding release packages. Use with care, this breaks dependency chains!
* required
If the package is missing or is uninstallable, don't leave a comment but put the error as package entry for OBS to create unresolvable error to avoid building a DVD
* **recommended**
Evaluate also 'Recommends' in package to determine dependencies. Otherwise only 'required' are considered. Used mainly for patterns in SLE. It can not be combined with platforms, For architecture specific recommends, use patterns.
* **suggested**
Evaluate also 'Suggests' in package to determine dependencies. This implies recommended
* **architecture (e.g. x86_64,s390x,ppc64le,aarch64)**
Makes the entry specific to the listed architectures. Will get ignored if used in combination with 'recommended'.
* **locked**
Do not put the package into this group. Used to *force* certain packages into other modules
* **silent**
Use this package for dependency solving of groups "on top", but do not output the package for this group. Mainly to mark the product to use by adding release packages. Use with care, this breaks dependency chains!
* **required**
If the package is missing or is uninstallable, don't leave a comment but put the error as package entry for OBS to create unresolvable error to avoid building a DVD
Note that you can write yaml lists in 2 ways. You can put the modifier lists as multiple lines starting with -, but it's recommended to put them as [M1,M2] behind the package name. See the difference between pkg4 and pkg5 in the example.
#### Example:
#### Example
```
```yaml
OUTPUT:
- group1:
includes:
@@ -88,9 +95,11 @@ list2:
```
## Overlap calculation
TODO
TODO
## Handling in staging workflow
If 000package-groups contains a file named summary-staging.txt, the bot will trigger a diff mode on staging projects.
It will create an equal summary-staging.txt in 000product and create a comment with a human readable diff in the staging
project. This comment can be replied to. If the reply starts with 'approve', staging accept will apply the diff to this

View File

@@ -88,24 +88,24 @@ are:
* *accept* Accept all requests assigned to a staging project.
* *check* Check the status of the different request inside the staging
project, including the status in openQA.
project, including the status in openQA.
* *cleanup_rings* Check the status of the different rings in Factory.
* *rebase* Freeze the packages that are not affected in a staging project.
In the past, this command used to be called 'freeze', which is still
a valid alias.
In the past, this command used to be called 'freeze', which is still
a valid alias.
* *list* Accept all the requests from packages that are not in any
ring, detect request that supersede the current ones that are
actually tracked in staging projects, and list the remaining
requests.
ring, detect request that supersede the current ones that are
actually tracked in staging projects, and list the remaining
requests.
* *select* Move a request (or a list of requests) to a staging
project, or move requests between staging projects.
project, or move requests between staging projects.
* *unselect* Remove a request from a staging project, and publish it
again into the backlog.
again into the backlog.
List

View File

@@ -153,7 +153,7 @@ while(<FL>) {
$prv = 0;
next;
}
s/ .*//; # no version stuff;
s/ .*//; # no version stuff;
push @{$whatprovides{$_}}, $pkg;
next;
}
@@ -162,7 +162,7 @@ while(<FL>) {
$con = 0;
next;
}
s/ .*//; # no version stuff;
s/ .*//; # no version stuff;
s/^otherproviders\((.*)\)$/$1/;
push @{$con{$pkg}}, $_;
next;
@@ -172,7 +172,7 @@ while(<FL>) {
$obs= 0;
next;
}
s/ .*//; # no version stuff;
s/ .*//; # no version stuff;
push @{$obs{$pkg}}, $_;
next;
}
@@ -282,7 +282,7 @@ print STDERR "now ".@dirs." directories\n";
if (@implicit_conflicts) {
print STDERR "have implicit conflicts, calculating dir owners\n";
my @pdirs; # parent dirs
my @pdirs; # parent dirs
for (@dirs) {
next unless /^(.*\/)(.*?)\/$/;
$pdirs[$dirs{$_}] = $dirs{$1};
@@ -322,7 +322,7 @@ if (@implicit_conflicts) {
}
}
%files = (); # free mem
%files = (); # free mem
# reduce all-dir conflicts and trivial multiarch conflicts
print STDERR "reducing trivial conflicts\n";
@@ -363,7 +363,7 @@ my %pkgneeded;
my %tocheck;
my %tocheck_files;
for my $f (sort keys %filesc) {
my @p = sort(@{$filesc{$f}}); # normalize
my @p = sort(@{$filesc{$f}}); # normalize
$filesc{$f} = [ @p ];
s/\/.*// for @p;
$pkgneeded{$_} = 1 for @p;
@@ -419,28 +419,28 @@ for my $tc (sort keys %tocheck) {
next if $conflicts{"$p1\n$p2"};
my @con;
for my $f (@{$tocheck_files{$tc}}) {
my @pp = grep {s/^(?:\Q$p1\E|\Q$p2\E)\///} map {$_} @{$filesc{$f}};
next unless @pp;
# ignore if (all directories or all ghosts or all links) and all same mode;
my %allm = map {$_ => 1} @pp;
my $info = '';
if (keys(%allm) == 1) {
my $m = (keys(%allm))[0];
# all modes/flags are the same
# no conflict if all dirs or all ghosts or all links
next if $modes_type[$m] == 040000 || $modes_type[$m] == 0120000 || $modes_ghost[$m] == 0100;
} else {
# don't report mode mismatches for files/symlinks that are not ghosts
for my $m (keys %allm) {
if (($modes_type[$m] != 0100000 && $modes_type[$m] != 0120000) || $modes_ghost[$m] == 0100) {
$info = ' [mode mismatch: '.join(', ', map {beautify_mode($_)} @pp).']';
last;
}
}
}
# got one!
$f =~ /^(\d+)\/(.*)/;
push @con, "$dirs[$1]$2$info" unless "$dirs[$1]$2" =~ m{/etc/uefi/certs/.*crt};
my @pp = grep {s/^(?:\Q$p1\E|\Q$p2\E)\///} map {$_} @{$filesc{$f}};
next unless @pp;
# ignore if (all directories or all ghosts or all links) and all same mode;
my %allm = map {$_ => 1} @pp;
my $info = '';
if (keys(%allm) == 1) {
my $m = (keys(%allm))[0];
# all modes/flags are the same
# no conflict if all dirs or all ghosts or all links
next if $modes_type[$m] == 040000 || $modes_type[$m] == 0120000 || $modes_ghost[$m] == 0100;
} else {
# don't report mode mismatches for files/symlinks that are not ghosts
for my $m (keys %allm) {
if (($modes_type[$m] != 0100000 && $modes_type[$m] != 0120000) || $modes_ghost[$m] == 0100) {
$info = ' [mode mismatch: '.join(', ', map {beautify_mode($_)} @pp).']';
last;
}
}
}
# got one!
$f =~ /^(\d+)\/(.*)/;
push @con, "$dirs[$1]$2$info" unless "$dirs[$1]$2" =~ m{/etc/uefi/certs/.*crt};
}
next unless @con;
my @sp1 = split(' ', $p1);

View File

@@ -2,5 +2,5 @@
omit_hostname = true
[[outputs.influxdb]]
urls = ["http://localhost:8086"]
database = "osrt_telegraf"
urls = ["http://localhost:8086"]
database = "osrt_telegraf"

View File

@@ -10,7 +10,7 @@ digraph staging {
review [ label="Review team", shape=ellipse, style=dashed ];
factory [ label="openSUSE Factory" ];
staging [ label="Staging project" ];
devel -> review [ label="Developer submits fixes from staging repo" ];
devel -> review [ label="Developer submits packages" ];
review -> review [ label="Initial grouping of requests" ];