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:
commit
0377766f8e
81
.github/workflows/unittests.yaml
vendored
Normal file
81
.github/workflows/unittests.yaml
vendored
Normal 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
262
README
@ -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
179
README.md
Normal 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
|
13
setup.cfg
13
setup.cfg
@ -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
|
||||
|
13
setup.py
13
setup.py
@ -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,
|
||||
|
Loading…
Reference in New Issue
Block a user