openSUSE is migrating the package source management from osc to
git. I will try to explain here what it is the "git workflow" in
openSUSE and give some practical information for contributors and
maintainers.
You can find some documentation in the openSUSE wiki
Why?
openSUSE uses Open Build Service to
store package sources (.spec files and patches). The source control is
similar to subversion, so you can
osc checkout, osc commit, osc log, etc. to work with any package
source.
I don't know all the reasons to do the change, and different people
will find different reasons, to support the change or to be against
it. I will just write here what I consider a good reason to migrate:
- Almost everyone has moved to git now, so today,
git is the default source code management
(scm) tool, almost all the people knows about
github, so it's good to be "standard".
- With the concept of "cheap" branches in git, it could be
easier to maintain different versions of the same package, same
repository, different branches, instead of actual forks.
- Decouple the package source management from build. OBS does a lot of
things, moving source code and review process to
gitea could reduce the complexity (but requires
some integration).
From OBS to gitea
All the development happens in OBS, so the
classic workflow happens entirely there:
- developer: branch -> checkout -> modify -> commit -> submit request
- maintainer: review -> accept/decline
And everything is integrated in OBS that does the corresponding build
of the sources, checks with services, forward, etc.
The new workflow changes almost all the interaction from
OBS to gitea. OBS is still
a really important piece of software in the process, but in the new
workflow it's a build backend, so the user interaction will be with
the git repo in gitea.
The new git workflow happens in gitea:
- developer: fork -> clone -> modify -> commit -> push -> pull request
- maintainer: review -> approve/decline
As you may notice, the "default" workflow is very similar, the
difference is in the tools, the classic workflow occurs in
build.opensuse.org and the new workflow in
src.opensuse.org. And the tools to work with the
sources are also different, osc in the first one and git in
the new workflow.
And with this new workflow, there are some bots in gitea that sends
the changes to OBS, so for any pull request created you will have the
build results and approval from the bot if everything is building.
How to modify a package (leap 16.0)
Notice that you should have a openSUSE account to work with the
gitea instance, and don't forget to configure your ssh key to be
able to push using the gitea@src.opensuse.org remote.
So as a contributor, this is the basic workflow to follow to update a
package in openSUSE:
- Look for the source package in the pool
(https://src.opensuse.org/pool)
- Fork it in your user space, click the top right button. Skip this
step if you have forked before
- Clone your fork and work on that repo, create a new branch, modify
the spec file, add new soures, etc. And make sure to update the
.changes file accordingly, you can still use
osc vc to do that.
- You can build locally your package with
osc build, as usual, but
you will need to specify the build project:
$ git obs meta pull
$ git obs meta set --project openSUSE:Backports:SLE-16.0
$ osc build
- Once you are happy with your changes, you can commit, push to your
fork and then you can create a Pull Request. The pull request
should target the pool repo and desired product branch. Right
now you can just target
leap-16.0, as factory is not migrated
yet.
Devel projects
Some devel projects have been migrated now to git, so a similar
workflow is available to modify these packages in Tumbleweed. The
development of these packages is not happening in the pool, so you
need to find first the devel project.
There's no simple way to discover the actual package devel source, as
far as I know the easier way is:
- Look for the devel project of the package in the Factory list,
(ex python-pytest)
- Go to the devel project in OBS (ex devel:languages:python:pytest)
- Click on the link This project is managed in SCM
Once you have located the desired package to modify, the workflow is
similar to what I explained before, but instead of forking from
pool, you should fork from the devel project. For example if you
want to modify python-pytest you should fork from
https://src.opensuse.org/python-pytest/python-pytest,
and create the pull request for that repo, to the main branch.
Adding a new package follows a different process that's documented in
the wiki
What's migrated?
As I said, the migration is happening right now, so not everything is
migrated. The first project migrated was the Leap 16.0. And we are
slowly migrating some devel projects.
Right now from the python-maintainers team, we've started the
migration of two subprojects:
You can find more information about the migration current state in the
wiki: https://en.opensuse.org/opensuse:obs_to_git#codestream_project_status_table
There are comments.