1
0
mirror of https://github.com/openSUSE/osc.git synced 2024-11-10 06:46:15 +01:00

Merge pull request #1059 from dmach/github-actions

Run unit tests in GitHub Actions
This commit is contained in:
Daniel Mach 2022-06-21 14:07:30 +02:00 committed by GitHub
commit 0377766f8e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 284 additions and 264 deletions

81
.github/workflows/unittests.yaml vendored Normal file
View File

@ -0,0 +1,81 @@
name: 'unit tests'
on:
push:
branches: ['master']
pull_request:
branches: ['master']
jobs:
test:
name: 'unit tests'
runs-on: 'ubuntu-latest'
strategy:
fail-fast: false
matrix:
# Testing per python-version using actions/setup-python is not possible,
# because rpm doesn't exist on pypi and cannot be installed via pip on ubuntu.
# That's why we're going to test on the target distros directly.
container:
# Fedora
- 'fedora:36'
- 'fedora:rawhide'
# OpenSUSE
# leap < 15.2 doesn't contain git-lfs which causes actions/checkout to fail
- 'opensuse/leap:15.2'
- 'opensuse/leap:15.3'
- 'opensuse/leap:15.4'
- 'opensuse/tumbleweed'
# CentOS Stream
# stream9 doesn't contain m2crypto required by osc
# - 'quay.io/centos/centos:stream9'
# Debian
- 'debian:stable'
- 'debian:unstable'
# Ubuntu
- 'ubuntu:latest'
container:
image: ${{ matrix.container }}
steps:
- name: 'Install packages (OpenSUSE)'
if: ${{ startsWith(matrix.container, 'opensuse/') }}
run: |
zypper --non-interactive --gpg-auto-import-keys refresh
zypper --non-interactive dist-upgrade
zypper --non-interactive install git-lfs
zypper --non-interactive install python3-pytest-cov
zypper --non-interactive install diffstat diffutils python3 python3-chardet python3-M2Crypto python3-pip python3-rpm python3-setuptools
- name: 'Install packages (Fedora/CentOS)'
if: ${{ startsWith(matrix.container, 'fedora:') || contains(matrix.container, 'centos:') }}
run: |
dnf -y makecache
dnf -y distro-sync
dnf -y install git-lfs
dnf -y install diffstat diffutils python3 python3-chardet python3-m2crypto python3-pip python3-rpm python3-setuptools
- name: 'Install packages (Debian/Ubuntu)'
if: ${{ startsWith(matrix.container, 'debian:') || startsWith(matrix.container, 'ubuntu:') }}
run: |
apt-get -y update
apt-get -y upgrade
apt-get -y --no-install-recommends install git-lfs
apt-get -y --no-install-recommends install diffstat diffutils python3 python3-chardet python3-m2crypto python3-pip python3-rpm python3-setuptools
- uses: actions/checkout@v3
- name: 'Run unit tests'
run: |
pip3 install -e .
python3 setup.py test
- name: 'Upload coverage reports to Codecov (OpenSUSE Tumbleweed)'
if: ${{ matrix.container == 'opensuse/tumbleweed' }}
uses: codecov/codecov-action@v3

262
README
View File

@ -1,262 +0,0 @@
osc -- opensuse-commander with svn like handling
Patches can be submitted via
* mail to opensuse-buildservice@opensuse.org
* Bugzilla: https://bugzilla.opensuse.org/enter_bug.cgi?product=openSUSE.org&component=BuildService
* or the official Git repository on Github:
https://github.com/openSUSE/osc
INSTALLATION:
RPM packages are here (rpm-md repository):
http://download.opensuse.org/repositories/openSUSE:/Tools/
To install from git, do
python setup.py build
python setup.py install
# create a symlink 'osc' in your path pointing to osc.py.
ln -s osc-wrapper.py /usr/bin/osc
Alternatively, you can directly use osc-wrapper.py from the source dir
(which is easier if you develop on osc).
CONFIGURATION:
When you use it for the first time, it will ask you for your username and
password, and store it in ~/.oscrc.
CONFIGURATION MIGRATION (only affects versions >= 0.114):
Version 0.114 got some cleanups for the configfile handling and therefore some
options are now deprecated, namely:
* apisrv
* scheme
One new option was added:
* apiurl = <protocol>://<somehost> # use this as the default apiurl. If this
option isn't specified the default (https://api.opensuse.org) is used.
So far osc still has some backward compatibility for these options but it might
get removed in the future that's why it issues a deprecation warning in case
one of those options is still in use.
The new configuration scheme looks like the following:
# entry for an apiurl
[<protocol>://<apiurl>]
user = <username>
password = <password>
...
'''Before starting the migration please save your ~/.oscrc file!'''
If the migration doesn't work for whatever reason feel free to send me an email
or ask on the opensuse-buildservice mailinglist or in the #opensuse-buildservice
irc channel.
=== Migration case I (apisrv only) ===
The apisrv option is used to specify the default apihost. If apisrv isn't
specified at all the default ("api.opensuse.org") is used.
The current [general] section looks like this:
[general]
...
apisrv = <somehost>
# or
apisrv = <protocol>://<somehost>
apisrv got superseded by the new apiurl option which looks like this:
[general]
...
apiurl = <protocol>://<somehost>
If apisrv has no "<protocol>" https is used. Make sure all apiurl sections have
the new format which is described above. Afterwards apisrv can be removed.
=== Migration case II (scheme only) ===
The current [general] section looks like this:
[general]
...
scheme = <protocol>
This means every apiurl section which don't have the new format which is
described above for instance
[<somehost>]
user = <username>
password = <password>
...
has to be converted to
[<protocol>://<somehost>]
user = <username>
password = <password>
...
Afterwards the scheme option can be removed from the [general] section (it
might be the case that some sections already have the correct format).
=== Migration case III (apisrv and scheme) ===
The current [general] section looks like this:
[general]
...
apisrv = <somehost>
scheme = <protocol>
Both options can be removed if all apiurl sections have the new format which is
described above. So basically just adjust all apiurl sections (it might be the
case that some sections already have the correct format).
KEYRING USAGE
Osc now can store passwords in keyrings instead of ~/.oscrc. To use it,
you need python-keyring and either python-keyring-kde or -gnome.
If you want to switch to using a keyring you need to delete apiurl section
from ~/.oscrc and you will be asked for credentials again, which will be then
stored in the keyring application.
WORKING COPY INCONSISTENT (only affects version >= 0.130)
osc's working copy handling was rewritten in 0.130. Thus some
consistency checks were added. As a result osc might complain
that some old working copies are in an inconsistent state:
Your working copy '.' is in an inconsistent state.
Please run 'osc repairwc .' (Note this might _remove_
files from the .osc/ dir). Please check the state
of the working copy afterwards (via 'osc status .')
To fix this simply run "osc repairwc ." as suggested in the
error message. Note that "osc repairwc ." might need to contact
the api in order to fetch some missing files. Also it might remove
some files from the storedir (.osc/) but it won't touch any locally
modified files.
If it DOES NOT fix the problem please create a bug report and attach
your working copy to the bug (if possible).
USAGE EXAMPLES:
(online at http://en.opensuse.org/openSUSE:OSC )
To list existing content on the server
osc ls # list projects
osc ls Apache # list packages in a project
osc ls Apache subversion # list files of package of a project
Check out content
osc co Apache # entire project
osc co Apache subversion # a package
osc co Apache subversion foo # single file
Update a working copy
osc up
osc up [pac_dir] # update a single package by its path
osc up * # from within a project dir, update all packages
osc up # from within a project dir, update all packages
# AND check out all newly added packages
If an update can't be merged automatically, a file is in 'C' (conflict)
state, and conflicts are marked with special <<<<<<< and >>>>>>> lines.
After manually resolving the problem, use
osc resolved foo
Upload change content
osc ci # current dir
osc ci <dir>
osc ci file1 file2 ...
Show the status (which files have been changed locally)
osc st
osc st <directory>
osc st file1 file2 ...
Mark files to be added or removed on the next 'checkin'
osc add file1 file2 ...
osc rm file1 file2 ...
Adds all new files in local copy and removes all disappeared files.
osc addremove
Generates a diff, to view the changes
osc diff # current dir
osc diff file1 file2 ...
Shows the build results of the package
osc results
osc results [repository]
Shows the log file of a package (you need to be inside a package directory)
osc log <repository> <arch>
Shows the URLs of .repo files which are packages sources for Yum/YaST/smart
osc repourls [dir]
Triggers a package rebuild for all repositories/architectures of a package
osc rebuildpac [dir]
Shows available repository/build targets
osc repository
Shows the configured repository/build targets of a project
osc repository <project>
Shows meta information
osc meta Apache
osc meta Apache subversion
osc id username
Edit meta information
(Creates new package/project if it doesn't exist)
osc editmeta Apache
osc editmeta Apache subversion
Update package meta data with metadata taken from spec file
osc updatepacmetafromspec <dir>
There are other commands, which you may not need (they may be useful in scripts):
osc repos
osc buildconfig
osc buildinfo
Locally build a package (see 'osc help build' for more info):
osc build <repo> <arch> specfile [--clean|--noinit]
Update a package to a different sources (directory foo_package_source):
cp -a foo_package_source foo; cd foo; osc init <prj> <pac>; osc addremove; osc ci; cd $OLDPWD; rm -r foo
HINT FOR W3M USERS
Putting the following in the file ~/.w3m/passwd will make
w3m know the credentials for the buildservice servers:
"""
host api.opensuse.org
port 80
realm Authentication required
login foo
password bar
host build.opensuse.org
port 80
realm openSUSE Build Service
login foo
password bar
"""
chmod 0600 ~/.w3m/passwd
NOTES about the testsuite
A new test suite has been created and should run via doing
# ./setup.py test

179
README.md Normal file
View File

@ -0,0 +1,179 @@
[![unit tests](https://github.com/openSUSE/osc/actions/workflows/unittests.yaml/badge.svg)](https://github.com/openSUSE/osc/actions/workflows/unittests.yaml)
[![codecov](https://codecov.io/gh/openSUSE/osc/branch/master/graph/badge.svg)](https://codecov.io/gh/openSUSE/osc)
[![code climate](https://codeclimate.com/github/openSUSE/osc.png)](https://codeclimate.com/github/openSUSE/osc)
[![contributors](https://img.shields.io/github/contributors/openSUSE/osc.svg)](https://github.com/openSUSE/osc/graphs/contributors)
# openSUSE Commander
OpenSUSE Commander (osc) is a command-line interface to the
[Open Build Service (OBS)](https://github.com/openSUSE/open-build-service/).
## Installation
RPM packages are available in the [openSUSE:Tools](http://download.opensuse.org/repositories/openSUSE:/Tools/) repository.
zypper addrepo --repo http://download.opensuse.org/repositories/openSUSE:/Tools/openSUSE_Tumbleweed/openSUSE:Tools.repo
zypper install osc
To install from git, do
./setup.py build
./setup.py install
# create a symlink `osc` in your path pointing to osc-wrapper.py.
ln -s osc-wrapper.py /usr/local/bin/osc
Alternatively, you can directly use `./osc-wrapper.py` from the source directory,
which is easier if you develop on osc.
## Configuration
When you use osc for the first time, it will ask you for your username and
password, and store it in `~/.config/osc/oscrc`.
## Keyrings
Osc can store passwords in keyrings instead of `~/.config/osc/oscrc`.
To use them, you need python3-keyring with a backend of your choice installed:
- kwalletd5 (A pasword manager for KDE)
- secrets (A password manager for GNOME)
- python3-keyring-keyutils (A python-keyring backend for the kernel keyring)
If you want to switch to using a keyring you need to delete apiurl section
from `~/.config/osc/oscrc` and you will be asked for credentials again,
which will be then stored in the keyring application.
## Usage
For more details please check the [openSUSE wiki](https://en.opensuse.org/openSUSE:OSC).
To list existing content on the server
osc ls # list projects
osc ls Apache # list packages in a project
osc ls Apache subversion # list files of package of a project
Check out content
osc co Apache # entire project
osc co Apache subversion # a package
osc co Apache subversion foo # single file
Update a working copy
osc up
osc up [pac_dir] # update a single package by its path
osc up * # from within a project dir, update all packages
osc up # from within a project dir, update all packages
# AND check out all newly added packages
If an update can't be merged automatically, a file is in `C` (conflict)
state, and conflicts are marked with special `<<<<<<<` and `>>>>>>>` lines.
After manually resolving the problem, use
osc resolved foo
Upload change content
osc ci # current dir
osc ci <dir>
osc ci file1 file2 ...
Show the status (which files have been changed locally)
osc st
osc st <directory>
osc st file1 file2 ...
Mark files to be added or removed on the next 'checkin'
osc add file1 file2 ...
osc rm file1 file2 ...
Adds all new files in local copy and removes all disappeared files
osc addremove
Generates a diff, to view the changes
osc diff # current dir
osc diff file1 file2 ...
Shows the build results of the package
osc results
osc results [repository]
Shows the log file of a package (you need to be inside a package directory)
osc log <repository> <arch>
Shows the URLs of .repo files which are packages sources for Yum/YaST/smart
osc repourls [dir]
Triggers a package rebuild for all repositories/architectures of a package
osc rebuildpac [dir]
Shows available repository/build targets
osc repository
Shows the configured repository/build targets of a project
osc repository <project>
Shows meta information
osc meta Apache
osc meta Apache subversion
osc id username
Edit meta information
(Creates new package/project if it doesn't exist)
osc editmeta Apache
osc editmeta Apache subversion
Update package meta data with metadata taken from spec file
osc updatepacmetafromspec <dir>
There are other commands, which you may not need (they may be useful in scripts)
osc repos
osc buildconfig
osc buildinfo
Locally build a package (see 'osc help build' for more info)
osc build <repo> <arch> specfile [--clean|--noinit]
Update a package to a different sources (directory foo_package_source)
cp -a foo_package_source foo
cd foo
osc init <prj> <pac>
osc addremove
osc ci
cd $OLDPWD
rm -r foo
## Contributing
Report [issues](https://github.com/openSUSE/osc/issues)
or submit [pull-requests](https://github.com/openSUSE/osc/pulls)
to the [osc](https://github.com/openSUSE/osc/issues) project on GitHub.
## Testing
Unit tests can be run from a git checkout by executing
./setup.py test

View File

@ -1,3 +1,16 @@
[options]
setup_requires =
pytest-runner
tests_require =
pytest
pytest-cov
[aliases]
test=pytest
[flake8]
exclude = .git,__pycache__
max-line-length = 120
[tool:pytest]
addopts = --cov=osc

View File

@ -61,8 +61,17 @@ class install_data(install_data.install_data, object):
data_files = []
data_files.append((os.path.join('share', 'man', 'man1'), ['osc.1.gz']))
with open("README") as fh:
long_description = fh.read()
with open("README.md") as fh:
lines = fh.readlines()
while lines:
line = lines[0].strip()
if not line or line.startswith("["):
# skip leading empty lines
# skip leading lines with links to badges
lines.pop(0)
continue
break
long_description = "".join(lines)
cmdclass = {
'build': build_osc,