agama/PACKAGING.md
2023-06-14 09:24:02 +02:00

133 lines
5.4 KiB
Markdown

# Packaging
This document summarizes the process we follow to build the Agama packages.
The Agama packages are available in two OBS projects:
- [systemsmanagement:Agama:Staging](
https://build.opensuse.org/project/show/systemsmanagement:Agama:Staging) -
contains the latest packages built from the `master` branch in Git. This
project contains unstable development version of Agama. It is intended for
development or testing new unfinished features.
These packages are automatically updated whenever the master branch is changed.
- [systemsmanagement:Agama:Devel](
https://build.opensuse.org/project/show/systemsmanagement:Agama:Devel) -
contains the latest released version of the Agama project. These packages
should be more stable than in the Staging project. It is intended for testing.
These packages are updated automatically when a new version is released. See
more detail in the [bumping the version](#bumping-the-version) section below.
You can find more details the automatic OBS synchronization in the
[obs_integration.md](doc/obs_integration.md) file.
The process to build each package is slightly different depending on the technology we are using.
While the Ruby-based one (`rubygem-agama`) is built as any other YaST package, the web UI
(`cockpit-agama`) and the CLI (`agama-cli`) rely on [OBS source
services](https://openbuildservice.org/help/manuals/obs-user-guide/cha.obs.source_service.html).
## Versioning Policy
We have decided to follow a single number schema: 1, 2, 3, etc. However, if we need to release a
hot-fix, we might use a dotted version (e.g., 2.1). Moreover, all the components share the same
version number. Releasing a new version implies that all of them get the new number, no matter if
they contain changes or not.
## Bumping the Version
In order to release a new version, we need to:
1. `(cd service; bundle install)` # Updates Gemfile.lock which is part of the repository
2. Add entries in the changes files.
`osc vc service/package`
`osc vc rust/package`
`osc vc web/package`
3. Open a pull request to get these changes into the repository.
4. Once the pull request is merged, tag the repository with the proper version number. The processes
to build the packages use this information to infer the version. You can set
the tag with the `rake tag` command.
```shell
# automatic version, use the current <major version> + 1
rake tag
# manual version, useful for releasing a hot fix with a minor version
rake tag[42.1]
```
You need to push the tag to the server manually, see the `rake tag` output.
After creating the tag on the server the GitHub Actions will publish the
packages in the [systemsmanagement:Agama:Devel](
https://build.opensuse.org/project/show/systemsmanagement:Agama:Devel)
project and create submit requests to openSUSE Factory.
## Building the Packages
The packages are updated automatically using the GitHub actions. Here are details
for manual update.
### Service
You can check the current package in
[systemsmanagement:Agama:Staging/rubygem-agama](
https://build.opensuse.org/package/show/systemsmanagement:Agama:Staging/rubygem-agama).
Use `rake` to update the package in OBS as you would do with any other YaST package:
cd service
rake osc:commit
If you just want to build the package locally, run:
rake osc:build
### The Cockpit Module
The current package is [systemsmanagement:Agama:Staging/cockpit-agama](
https://build.opensuse.org/package/show/systemsmanagement:Agama:Staging/cockpit-agama).
It relies on [OBS Source
Services](https://openbuildservice.org/help/manuals/obs-user-guide/cha.obs.source_service.html) to
fetch the sources (including the dependencies), set the version and build the package. You can
figure out most details by checking the [_service](web/package/_service) file.
To manually update the package in the build service, you just need to type:
sudo zypper install obs-service-node_modules
osc service manualrun
osc commit -m "Update sources"
If you want to build the package locally, just checkout (or branch) the package and run `osc build`.
The version number is inferred from the repository tags (see [Releasing a new
version](#releasing-a-new-version)): it uses the latest tag and the offset of the latest commit
respect such a tag. (e.g. `2.1+42`).
You can read more about the overall approach of this package in the following article: [Git work
flows in the upcoming 2.7 release](https://openbuildservice.org/2016/04/08/new_git_in_27/).
### Command-line Interface
The current package is [systemsmanagement:Agama:Staging/agama-cli](
https://build.opensuse.org/package/show/systemsmanagement:Agama:Staging/agama-cli).
To manually update the package in the build service, run the following commands:
sudo zypper install obs-service-cargo_vendor obs-service-cargo_audit # from Factory or devel:languages:rust
osc service manualrun
osc addremove *
osc commit -m "Update sources"
If you want to build the package locally, just checkout (or branch) the package and run `osc build`.
The version number is inferred from the repository tags (see [Releasing a new
version](#releasing-a-new-version)): it uses the latest tag and the offset of the latest commit
respect such a tag. (e.g. `2.1+42`).
### The Live ISO
The ISO is built and developed in [systemsmanagement:Agama:Staging/agama-live](
https://build.opensuse.org/package/show/systemsmanagement:Agama:Staging/agama-live).
See [IMAGE.md](./IMAGE.md) for more details.