Skip to content

Releasing new versions

Jeff Stafford edited this page Oct 17, 2023 · 5 revisions

This page documents the workflow for releasing new versions of onedriver. This happens infrequently enough and is complex enough (mostly on the Debian side) that I thought it would significantly speed things up in the future if it was documented here.

One special note for outsiders reading things - COPR and OpenSUSE Build Service (also Launchpad) build without network access by default, so we need to vendor all dependencies.

Fedora/OpenSUSE/RHEL and variants

All RPM-based distros currently have packages built via mock/COPR. COPR is preferred over OpenSUSE Build Service because it's easier to use and supports building directly from GitHub. If COPR supported Debian, that would be great. mock is the actual tool that COPR uses to build packages, so if it builds via mock, it is guaranteed to work on COPR.

Setting up mock

# install dev dependencies
sudo dnf install golang gcc webkit2gtk3-devel json-glib-devel pkg-config git \
    rsync rpmdevtools rpm-build mock
sudo usermod -aG mock $USER
newgrp mock

Testing the build process via mock

# test build process for current RPM distro
make rpm

# test build locally for other RPM distro
make srpm
mock -r /etc/mock/DISTRO_MOCK_FILE.cfg SRPM

Releasing new build via COPR

  • Login to COPR
  • Click "rebuild" and use tag as committish.

RPM conditional builds

https://en.opensuse.org/openSUSE:Build_Service_cross_distribution_howto

Pop!_OS/Debian/Ubuntu and variants

Setting up pbuilder

pbuilder and debhelper can be installed on Fedora via DNF (Fedora is recommended for cross-distribution building).

sudo apt update
sudo apt install golang gcc libwebkit2gtk-4.0-dev libjson-glib-dev pkg-config git \
    rsync devscripts debhelper build-essential pbuilder
sudo pbuilder create  # may need to add "--distribution focal" on ubuntu

Testing the build process via pbuilder

# build for default pbuilder chroot
make deb

# build for other distro
make dsc
sudo pbuilder --build DSC_FILE --distribution DISTRO_NAME

Testing the build process via osc

osc is a tool you can use to build packages for any OS

make clean
make dsc
osc build xUbuntu_20.04 x86_64
osc build openSUSE_Tumbleweed x86_64

Releasing build via OpenSUSE Build Service

OpenSUSE build service doesn't seem to have the ability to build on-demand from GitHub. This requires using the osc CLI tool (https://en.opensuse.org/openSUSE:OSC#Downloading_and_installing), which is basically a worse version of git.

# clean and build debian artifacts
make clean
make dsc

# list files in repo
osc ls home:jstaf/onedriver

# get status of repo (git status)
osc status

# remove old files (from "status")
osc rm FILE

# add new files (need the .debian.tar.xz .orig.tar.gz and the .dsc files)
osc add FILE

# commit changes and trigger a build for all distros
osc commit

# check status in the opensuse dashboard

If builds fail with the error "unresolvable: have choice for ______", see: https://en.opensuse.org/openSUSE:Build_Service_Tips_and_Tricks#Expansion_errors