Here are most of the steps we (maintainers) follow when making a release.

* Start from a clean, up-to-date git directory on "master":

    make -k maintainer-clean || { ./configure && make maintainer-clean; }
    git checkout master
    git pull origin master

* Ensure that the latest stable versions of autoconf, automake, etc.
  are in your PATH.  See the buildreq list in bootstrap.conf for
  the complete list of tools.

* Ensure that you have no uncommitted diffs.  This should produce no
  output:

    git diff

* Ensure that you've pushed all changes that belong in the release:

    git push origin master

* Check that the NixOS/Hydra autobuilder is reporting all is well:

    https://hydra.nixos.org/project/gnu/@PACKAGE@-master

* Run the following command to download any new translations:

    ./bootstrap && ./configure

* Pre-release testing: ensure that the following commands succeed:

    c=check ve=check-very-expensive; git grep -q "^$ve:\$" && c=$ve
    make $c syntax-check distcheck

* To (i) set the date, version number, and release TYPE on line 3 of
  NEWS, (ii) commit that, and (iii) tag the release, run

    # "TYPE" must be stable, beta or alpha
    make release-commit RELEASE='X.Y TYPE'

* Run the following to create release tarballs.  Your choice selects the
  corresponding upload-to destination in the emitted gnupload command.
  The different destinations are specified in cfg.mk.  See the definitions
  of gnu_ftp_host-{alpha,beta,stable}.

    make release RELEASE='X.Y TYPE'

* Test the tarball.  Copy it to a few odd-ball systems and ensure that
  it builds and passes all tests.

* While that's happening, write the release announcement that you will
  soon post.  Start with the template, $HOME/announce-@PACKAGE@-X.Y
  that was just created by that "make" command.

Once all the builds and tests have passed,

* Run the gnupload command that was suggested by your "make release"
  run above, or run

    make upload RELEASE='X.Y TYPE'

* Wait a few minutes (maybe up to 30?) and then use the release URLs to
  download all tarball/signature pairs and use gpg --verify to ensure
  that they're all valid.

* Push the NEWS-updating changes and the new tag:

    v=$(cat .prev-version)
    git push origin master tag v$v

* Announce it on Savannah first, so you can include the savannah.org
  announcement link in the email message.

  Go to the news-submission form:

    https://savannah.gnu.org/news/submit.php?group=@PACKAGE@

  If it does not work, then enable "News" for the project via this link:

    https://savannah.gnu.org/project/admin/editgroupfeatures.php?group=@PACKAGE@

  Write something like the following:

    Subject: @PACKAGE@-X.Y released [stable]
    +verbatim+
    ...paste the announcement here...
    -verbatim-

  Then go here to approve it:

    https://savannah.gnu.org/news/approve.php?group=@PACKAGE@

* Send the announcement email message.

* After each non-alpha release, run

    make web-manual-update

  to update the on-line manual accessible at

    https://www.gnu.org/software/@PACKAGE@/manual/
