diff options
author | Federico Mena Quintero <federico@gnome.org> | 2022-08-25 17:21:01 -0500 |
---|---|---|
committer | Federico Mena Quintero <federico@gnome.org> | 2022-08-25 17:21:01 -0500 |
commit | 1f85fa6723d3751decefc977d60bdf0f97543956 (patch) | |
tree | aa6463c409a5e0546ff1d23a4b016db4441f52ff | |
parent | 08249461e00a26359291c3dd3edac0042ac504cb (diff) | |
download | librsvg-1f85fa6723d3751decefc977d60bdf0f97543956.tar.gz |
Move the RELEASING.md document to the development guide
Part-of: <https://gitlab.gnome.org/GNOME/librsvg/-/merge_requests/735>
-rw-r--r-- | RELEASING.md | 219 | ||||
-rw-r--r-- | devel-docs/index.rst | 3 | ||||
-rw-r--r-- | devel-docs/releasing.rst | 239 |
3 files changed, 241 insertions, 220 deletions
diff --git a/RELEASING.md b/RELEASING.md deleted file mode 100644 index 4eab87ff..00000000 --- a/RELEASING.md +++ /dev/null @@ -1,219 +0,0 @@ -# Release process checklist for librsvg - -Feel free to print this document or copy it to a text editor to check -off items while making a release. - -- [ ] Refresh your memory with https://wiki.gnome.org/MaintainersCorner/Releasing -- [ ] Increase the package version number in `configure.ac` (it may - already be increased but not released; double-check it). -- [ ] Copy version number to `Cargo.toml`. -- [ ] Copy version number to `doc/librsvg.toml`. -- [ ] `cargo update` - needed because you tweaked `Cargo.toml`, and - also to get new dependencies. -- [ ] Tweak the library version number in `configure.ac` if the API changed; follow the steps there. -- [ ] Update `NEWS.md`, see below for the preferred format. -- [ ] Commit the changes above. -- [ ] Make a tarball with `./autogen.sh --enable-vala && make distcheck DESTDIR=/tmp/foo` - fix things until it passes. -- [ ] Create a signed tag - `git tag -s x.y.z` with the version number. -- [ ] `git push` to the appropriate branch to gitlab.gnome.org/GNOME/librsvg -- [ ] `git push` the signed tag to gitlab.gnome.org/GNOME/librsvg -- [ ] `scp librsvg-x.y.z.tar.xz master.gnome.org:` -- [ ] `ssh master.gnome.org` and then `ftpadmin install librsvg-x.y.z.tar.xz` -- [ ] Create a [release in Gitlab](#gitlab-release). - -For `x.y.0` releases, at least, do the following: - -- [ ] [Notify the release team][release-team] on whether to use this - `librsvg-x.y.0` for the next GNOME version via an issue on their - `GNOME/releng` project. - -- [ ] `cargo-audit audit` and ensure we don't have vulnerable dependencies. - -## Gitlab release - -- [ ] Go to https://gitlab.gnome.org/GNOME/librsvg/-/releases and click the **New release** button. - -- [ ] Select the tag `x.y.z` you created as part of the release steps. - -- [ ] If there is an associated milestone, select it too. - -- [ ] Fill in the release title - `x.y.z - stable` or `x.y.z - development`. - -- [ ] Copy the release notes from NEWS.md. - -- [ ] Add a release asset link to - `https://download.gnome.org/sources/librsvg/x.y/librsvg-x.y.z.tar.xz` - and call it `librsvg-x.y.z.tar.xz - release tarball`. - -- [ ] Add a release asset link to - `https://download.gnome.org/sources/librsvg/x.y/librsvg-x.y.z.sha256sum` - and call it `librsvg-x.y.z.sha256sum - release tarball - sha256sum`. - -## Version numbers - -`configure.ac` and `Cargo.toml` must have the same **package version** -number - this is the number that users of the library see. - -`configure.ac` is where the **library version** is defined; this is -what gets encoded in the SONAME of `librsvg.so`. - -Librsvg follows an even/odd numbering scheme for the **package -version**. For example, the 2.50.x series is for stable releases, and -2.51.x is for unstable/development ones. The [release-team] needs to -be notified when a new series comes about, so they can adjust their -tooling for the stable or development GNOME releases. File an issue -in their [repository][release-team] to indicate whether the new -`librsvg-x.y.0` is a stable or development series. - -## Minimum supported Rust version (MSRV) - -While it may seem desirable to always require the latest released -version of the Rust toolchain, to get new language features and such, -this is really inconvenient for distributors of librsvg which do not -update Rust all the time. So, we make a compromise. - -The `configure.ac` script defines `MININUM_RUST_MAJOR` and -`MINIMUM_RUST_MINOR` variables with librsvg's minimum supported Rust -version (MSRV). These ensure that distros will get an early failure during a -build, at the `configure` step, if they have a version of Rust that is -too old — instead of getting an obscure error message from `rustc` in -the middle of the build when it finds an unsupported language -construct. - -As of March 2021, Cargo does not allow setting a minimum supported -Rust version; you may want to keep an eye on [the MSRV RFC][msrv-rfc]. - -Sometimes librsvg's dependencies update their MSRV and librsvg may -need to increase it as well. Please consider the following before -doing this: - -* Absolutely do not require a nightly snapshot of the compiler, or - crates that only build on nightly. - -* Distributions with rolling releases usually keep their Rust - toolchains fairly well updated, maybe not always at the latest, but - within two or three releases earlier than the latest. If the MSRV - you want is within about six months of the latest, things are - probably safe. - -* Enterprise distributions update more slowly. It is useful to watch - for the MSRV that Firefox requires, although sometimes Firefox - updates Rust very slowly as well. Now that distributions are - shipping packages other than Firefox that require Rust, they will - probably start updating more frequently. - -Generally — two or three releases earlier than the latest stable Rust -is OK for rolling distros, probably perilous for enterprise distros. -Releases within a year of an enterprise distro's shipping date are -probably OK. - -If you are not sure, ask on the [forum for GNOME -distributors][distributors] about their plans! (That is, posts on -`discourse.gnome.org` with the `distributor` tag.) - -[msrv-rfc]: https://github.com/rust-lang/rfcs/pull/2495 -[distributors]: https://discourse.gnome.org/tag/distributor - -## Format for release notes in NEWS.md - -The `NEWS.md` file contains the release notes. Please use something -close to this format; it is not mandatory, but makes the formatting -consistent, and is what tooling expects elsewhere - also by writing -Markdown, you can just cut&paste it into a Gitlab release. You can -skim bits of the `NEWS.md` file for examples on style and content. - -New entries go at the **top** of the file. - -``` -Version x.y.z -============= - -Commentary on the release; put anything here that you want to -highlight. Note changes in the build process, if any, or any other -things that may trip up distributors. - -## Description of a special feature - -You can include headings with `##` in Markdown syntax. - -Blah blah blah. - - -Next is a list of features added and issues fixed; use gitlab's issue -numbers. I tend to use this order: first security bugs, then new -features and user-visible changes, finally regular bugs. The -rationale is that if people stop reading early, at least they will -have seen the most important stuff first. - -## Changes: - -- #123 - title of the issue, or short summary if it warrants more - discussion than just the title. - -- #456 - fix blah blah (Contributor's Name). - -## Special thanks for this release: - -- Any people that you want to highlight. Feel free to omit this - section if the release is otherwise unremarkable. -``` - -## Making a tarball - -``` -make distcheck DESTDIR=/tmp/foo -``` - -The `DESTDIR` is a quirk, required because otherwise the gdk-pixbuf -loader will try to install itself into the system's location for -pixbuf loaders, and it won't work. The `DESTDIR` is what Linux -distribution packaging scripts use to `make install` the compiled -artifacts to a temporary location before building a system package. - -## Copying the tarball to master.gnome.org - -If you don't have a maintainer account there, ask federico@gnome.org -to do it or [ask the release team][release-team] to do it by filing an -issue on their `GNOME/releng` project. - -[release-team]: https://gitlab.gnome.org/GNOME/releng/-/issues - -## Rust dependencies - -Release tarballs get generated with *vendored dependencies*, that is, -the source code for all the crates that librsvg depends on gets bundled -into the tarball itself. It is important to keep these dependencies -updated; you can do that regularly with the `cargo update` step listed -in the checklist above. - -[`cargo-audit`][cargo-audit] is very useful to scan the list of -dependencies for registered vulnerabilities in the [RustSec -vulnerability database][rustsec]. Run it especially before making a -new `x.y.0` release. - -Sometimes cargo-audit will report crates that are not vulnerable, but -that are unmaintained. Keep an eye of those; you may want to file -bugs upstream to see if the crates are really unmaintained or if they -should be substituted for something else. - -[cargo-audit]: https://github.com/RustSec/cargo-audit -[rustsec]: https://rustsec.org/ - -## Creating a stable release branch - -* Create a branch named `librsvg-xx.yy`, e.g. `librsvg-2.54` - -* Make the `BASE_TAG` in `ci/container-builds.yml` refer to the new - `librsvg-xx.yy` branch instead of `main`. - -* Push that branch to origin. - -* (Branches with that naming scheme are already automatically - protected in gitlab's Settings/Repository/Protected branches.) - -* Edit the badge for the stable branch so it points to the new branch: - Settings/General/Badges, find the existing badge for the stable - branch, click on the edit button that looks like a pencil. Change - the **Link** and **Badge image URL**; usually it is enough to just - change the version number in both. diff --git a/devel-docs/index.rst b/devel-docs/index.rst index a5b2af8c..e9084d26 100644 --- a/devel-docs/index.rst +++ b/devel-docs/index.rst @@ -12,6 +12,7 @@ Development guide for librsvg ci text_layout api_observability + releasing :maxdepth: 1 :caption: Contents: @@ -74,7 +75,7 @@ contributions. Information for maintainers --------------------------- -FIXME: Move RELEASING.md here +- :doc:`releasing` Overview of the maintainer's workflow. diff --git a/devel-docs/releasing.rst b/devel-docs/releasing.rst new file mode 100644 index 00000000..d17d3a0c --- /dev/null +++ b/devel-docs/releasing.rst @@ -0,0 +1,239 @@ +Release process checklist for librsvg +===================================== + +Feel free to print this document or copy it to a text editor to check +off items while making a release. + +- ☐ Refresh your memory with + https://wiki.gnome.org/MaintainersCorner/Releasing +- ☐ Increase the package version number in ``configure.ac`` (it may + already be increased but not released; double-check it). +- ☐ Copy version number to ``Cargo.toml``. +- ☐ Copy version number to ``doc/librsvg.toml``. +- ☐ ``cargo update`` - needed because you tweaked ``Cargo.toml``, and + also to get new dependencies. +- ☐ Tweak the library version number in ``configure.ac`` if the API + changed; follow the steps there. +- ☐ Update ``NEWS``, see below for the preferred format. +- ☐ Commit the changes above. +- ☐ Make a tarball with + ``./autogen.sh --enable-vala && make distcheck DESTDIR=/tmp/foo`` - + fix things until it passes. +- ☐ Create a signed tag - ``git tag -s x.y.z`` with the version number. +- ☐ ``git push`` to the appropriate branch to + gitlab.gnome.org/GNOME/librsvg +- ☐ ``git push`` the signed tag to gitlab.gnome.org/GNOME/librsvg +- ☐ ``scp librsvg-x.y.z.tar.xz master.gnome.org:`` +- ☐ ``ssh master.gnome.org`` and then + ``ftpadmin install librsvg-x.y.z.tar.xz`` +- ☐ Create a `release in Gitlab <https://gitlab.gnome.org/GNOME/librsvg/-/releases>`_. + +For ``x.y.0`` releases, at least, do the following: + +- ☐ `Notify the release + team <https://gitlab.gnome.org/GNOME/releng/-/issues>`__ on whether + to use this ``librsvg-x.y.0`` for the next GNOME version via an issue + on their ``GNOME/releng`` project. + +- ☐ ``cargo-audit audit`` and ensure we don’t have vulnerable + dependencies. + +Gitlab release +-------------- + +- ☐ Go to https://gitlab.gnome.org/GNOME/librsvg/-/releases and click + the **New release** button. + +- ☐ Select the tag ``x.y.z`` you created as part of the release steps. + +- ☐ If there is an associated milestone, select it too. + +- ☐ Fill in the release title - ``x.y.z - stable`` or + ``x.y.z - development``. + +- ☐ Copy the release notes from NEWS. + +- ☐ Add a release asset link to + ``https://download.gnome.org/sources/librsvg/x.y/librsvg-x.y.z.tar.xz`` + and call it ``librsvg-x.y.z.tar.xz - release tarball``. + +- ☐ Add a release asset link to + ``https://download.gnome.org/sources/librsvg/x.y/librsvg-x.y.z.sha256sum`` + and call it + ``librsvg-x.y.z.sha256sum - release tarball sha256sum``. + +Version numbers +--------------- + +``configure.ac`` and ``Cargo.toml`` must have the same **package +version** number - this is the number that users of the library see. + +``configure.ac`` is where the **library version** is defined; this is +what gets encoded in the SONAME of ``librsvg.so``. + +Librsvg follows an even/odd numbering scheme for the **package +version**. For example, the 2.50.x series is for stable releases, and +2.51.x is for unstable/development ones. The +`release-team <https://gitlab.gnome.org/GNOME/releng/-/issues>`__ needs +to be notified when a new series comes about, so they can adjust their +tooling for the stable or development GNOME releases. File an issue in +their `repository <https://gitlab.gnome.org/GNOME/releng/-/issues>`__ to +indicate whether the new ``librsvg-x.y.0`` is a stable or development +series. + +Minimum supported Rust version (MSRV) +------------------------------------- + +While it may seem desirable to always require the latest released +version of the Rust toolchain, to get new language features and such, +this is really inconvenient for distributors of librsvg which do not +update Rust all the time. So, we make a compromise. + +The ``configure.ac`` script defines ``MININUM_RUST_MAJOR`` and +``MINIMUM_RUST_MINOR`` variables with librsvg’s minimum supported Rust +version (MSRV). These ensure that distros will get an early failure +during a build, at the ``configure`` step, if they have a version of +Rust that is too old — instead of getting an obscure error message from +``rustc`` in the middle of the build when it finds an unsupported +language construct. + +As of March 2021, Cargo does not allow setting a minimum supported Rust +version; you may want to keep an eye on `the MSRV +RFC <https://github.com/rust-lang/rfcs/pull/2495>`__. + +Sometimes librsvg’s dependencies update their MSRV and librsvg may need +to increase it as well. Please consider the following before doing this: + +- Absolutely do not require a nightly snapshot of the compiler, or + crates that only build on nightly. + +- Distributions with rolling releases usually keep their Rust + toolchains fairly well updated, maybe not always at the latest, but + within two or three releases earlier than the latest. If the MSRV you + want is within about six months of the latest, things are probably + safe. + +- Enterprise distributions update more slowly. It is useful to watch + for the MSRV that Firefox requires, although sometimes Firefox + updates Rust very slowly as well. Now that distributions are shipping + packages other than Firefox that require Rust, they will probably + start updating more frequently. + +Generally — two or three releases earlier than the latest stable Rust is +OK for rolling distros, probably perilous for enterprise distros. +Releases within a year of an enterprise distro’s shipping date are +probably OK. + +If you are not sure, ask on the `forum for GNOME +distributors <https://discourse.gnome.org/tag/distributor>`__ about +their plans! (That is, posts on ``discourse.gnome.org`` with the +``distributor`` tag.) + +Format for release notes in NEWS +-------------------------------- + +The ``NEWS`` file contains the release notes. Please use something +close to this format; it is not mandatory, but makes the formatting +consistent, and is what tooling expects elsewhere - also by writing +Markdown, you can just cut&paste it into a Gitlab release. You can skim +bits of the ``NEWS`` file for examples on style and content. + +New entries go at the **top** of the file. + +:: + + Version x.y.z + ============= + + Commentary on the release; put anything here that you want to + highlight. Note changes in the build process, if any, or any other + things that may trip up distributors. + + ## Description of a special feature + + You can include headings with `##` in Markdown syntax. + + Blah blah blah. + + + Next is a list of features added and issues fixed; use gitlab's issue + numbers. I tend to use this order: first security bugs, then new + features and user-visible changes, finally regular bugs. The + rationale is that if people stop reading early, at least they will + have seen the most important stuff first. + + ## Changes: + + - #123 - title of the issue, or short summary if it warrants more + discussion than just the title. + + - #456 - fix blah blah (Contributor's Name). + + ## Special thanks for this release: + + - Any people that you want to highlight. Feel free to omit this + section if the release is otherwise unremarkable. + +Making a tarball +---------------- + +:: + + make distcheck DESTDIR=/tmp/foo + +The ``DESTDIR`` is a quirk, required because otherwise the gdk-pixbuf +loader will try to install itself into the system’s location for pixbuf +loaders, and it won’t work. The ``DESTDIR`` is what Linux distribution +packaging scripts use to ``make install`` the compiled artifacts to a +temporary location before building a system package. + +Copying the tarball to master.gnome.org +--------------------------------------- + +If you don’t have a maintainer account there, ask federico@gnome.org to +do it or `ask the release +team <https://gitlab.gnome.org/GNOME/releng/-/issues>`__ to do it by +filing an issue on their ``GNOME/releng`` project. + +Rust dependencies +----------------- + +Librsvg's `Cargo.lock` is checked into git because the resolved +versions of crates that it mentions are the ones that were actually +used to run the test suite automatically in CI, and are "known good". +In other words: `keep the results of dependency resolution in version +control, and update those results manually +<https://blog.ometer.com/2017/01/10/dear-package-managers-dependency-resolution-results-should-be-in-version-control/>`_. + +It is important to keep these dependencies updated; you can do that +regularly with the ``cargo update`` step listed in the checklist +above. + +`cargo-audit <https://github.com/RustSec/cargo-audit>`__ is very +useful to scan the list of dependencies for registered vulnerabilities +in the `RustSec vulnerability database <https://rustsec.org/>`__. Run +it especially before making a new ``x.y.0`` release. + +Sometimes cargo-audit will report crates that are not vulnerable, but +that are unmaintained. Keep an eye of those; you may want to file bugs +upstream to see if the crates are really unmaintained or if they should +be substituted for something else. + +Creating a stable release branch +-------------------------------- + +- Create a branch named ``librsvg-xx.yy``, e.g. ``librsvg-2.54`` + +- Make the ``BASE_TAG`` in ``ci/container-builds.yml`` refer to the new + ``librsvg-xx.yy`` branch instead of ``main``. + +- Push that branch to origin. + +- (Branches with that naming scheme are already automatically protected + in gitlab’s Settings/Repository/Protected branches.) + +- Edit the badge for the stable branch so it points to the new branch: + Settings/General/Badges, find the existing badge for the stable + branch, click on the edit button that looks like a pencil. Change the + **Link** and **Badge image URL**; usually it is enough to just change + the version number in both. |