
The ModemManager releases are generated using meson.

1) For major releases:
     * Increment minor component and reset micro component of 'version' in meson.build
     * Assuming API/ABI compatibility in libmm-glib, increment both
       mm_glib_lt_current and mm_glib_lt_age.

2) For stable branch releases:
     * Increment micro component of 'version' in meson.build.

3) Configure and build the whole project, making sure gtk-doc and introspection
   are enabled:
    $ meson setup build \
        --prefix=/usr \
        --buildtype=release \
        -Dintrospection=true \
        -Dgtk_doc=true
    $ ninja -C build

4) Run the test suite and install locally:
    $ ninja -C build dist
    $ sudo ninja -C build install

5) Push changes to a release MR on gitlab; once CI passes merge the PR.

6) Add signed tag pointing to the merge commit for the release MR:
    $ git tag -s 1.20.0

   The description included in the signed tag could be:
    Release 1.20.0

7) Create directories for the manpages and gtk-doc documentation in
   freedesktop.org, and also update the 'latest' links:
    $ ssh fd.o
    [fd.o] $ cd ${ModemManager}/man/
    [fd.o] $ rm latest
    [fd.o] $ mkdir -p ${VERSION}
    [fd.o] $ ln -s ${VERSION} latest
    [fd.o] $ cd ${ModemManager}/doc/
    [fd.o] $ rm latest
    [fd.o] $ mkdir -p ${VERSION}/ModemManager
    [fd.o] $ mkdir -p ${VERSION}/libmm-glib
    [fd.o] $ ln -s ${VERSION} latest

8) Generate HTML for the manpages:
    $ roffit < docs/man/mmcli.1 > mmcli.1.html
    $ roffit < docs/man/ModemManager.8 > ModemManager.8.html

9) Upload manpages in HTML to freedesktop.org:
    $ scp *.html fd.o:${ModemManager}/man/${VERSION}/

10) Copy documentation from /usr/share/gtk-doc and fix online references manually
    $ mkdir ModemManager-html
    $ cp -r /usr/share/gtk-doc/html/ModemManager/* ModemManager-html/
    $ for FILE in $(ls ModemManager-html/*.html); do \
        sed -i 's|<a[^>]* href="\.\./glib/[^"]*|<a href="https://docs.gtk.org/glib/|g' $FILE; \
        sed -i 's|<a[^>]* href="\.\./gobject/[^"]*|<a href="https://docs.gtk.org/gobject/|g' $FILE; \
        sed -i 's|<a[^>]* href="\.\./gio/[^"]*|<a href="https://docs.gtk.org/gio/|g' $FILE; \
      done
    $ mkdir libmm-glib-html
    $ cp -r /usr/share/gtk-doc/html/libmm-glib/* libmm-glib-html/
    $ for FILE in $(ls libmm-glib-html/*.html); do \
        sed -i 's|<a[^>]* href="\.\./glib/[^"]*|<a href="https://docs.gtk.org/glib/|g' $FILE; \
        sed -i 's|<a[^>]* href="\.\./gobject/[^"]*|<a href="https://docs.gtk.org/gobject/|g' $FILE; \
        sed -i 's|<a[^>]* href="\.\./gio/[^"]*|<a href="https://docs.gtk.org/gio/|g' $FILE; \
      done

11) Upload the modified HTML files to freedesktop.org:
    $ scp ModemManager-html/* fd.o:${ModemManager}/doc/${VERSION}/ModemManager/
    $ scp libmm-glib-html/* fd.o:${ModemManager}/doc/${VERSION}/libmm-glib/

12) For major releases:
     * Fork new stable branch (e.g. mm-${MAJOR}-${MINOR})
     * Post-release version bump in the main branch, increment minor 'version' component in meson.build.
     * Post-release version bump in the stable branch, increment micro 'version' component in meson.build.

13) For stable branch releases:
     * Post-release version bump, increment micro 'version' component in meson.build.

-------------------------------------------------------------------------------

*) Verifying the release signature requires the public key of the person who
   signed it, e.g.:

    $ curl https://www.freedesktop.org/software/ModemManager/0xAECE0239C6606AD5.asc | gpg --import
