The release process for Pidgin is kind of tedious but is described in great detail below.
A string freeze should be announced about a week before each release, or longer if a large number of strings have changed. This is a guarantee from the developers to the translators that no more strings will be added or changed so that the translators aren’t trying to hit a moving target.
po/ directory and run intltool-update --maintain. This will print warnings if there are files that need to be
                        added to either POTFILES.in or POTFILES.skip:Background
Transifex is configured to automatically pull pidgin.pot from
                    https://developer.pidgin.im/l10n/. When it gets a new pidgin.pot it merges the
                    updates to all translations and bumps the “last updated” timestamp. Because of
                    this it’s difficult to tell which translations have updates from translators.
                    Because of this we fetch and commit all translations from Transifex before
                    releasing.
Note
Ask Gary Kramlich or Richard Laager if you need administrative access to Pidgin’s Transifex project for the following steps.
Steps
cd pomake pidgin.pottx pull --force - Pulls all translations from Transifex, even if local
                        timestamp is newer than remote.XGETTEXT_ARGS=--no-location intltool-update --report - Merges current
                        strings into translations and strips filename and line numbers to keep
                        diffs smaller.find -name \*.po -exec msgfmt -cv {} \; - Check for mismatched c-format
                        specifiers. These can cause crashes so look at the output carefully!
                        If any are found, follow these steps:
                        1. Edit the translation in Transifex.
                        1. Remove the string with the mismatched c-format specifiers (leave it
                        blank).
                        1. tx pull --force --language=NN - Pull the updated translation from
                        Transifex.Other Pre-Release Steps
pidgin/gtkdialogs.c matches the Transifex
                        translations teams. (TODO: This is labor intensive and error prone. Should find a way to automate.)ChangeLog and
                        ChangeLog.APIpurple_version_suffix and gnt_version_suffix to [betaN] for
                        betas and [] for a full releasepidgin.spec.in, make sure that %define beta 7 is
                        commented/uncommented appropriatelymake distcheck and fix any problems it turns upTag the repository. The tag should have a v prefix. Ie: v2.12.0.
Extract the tagged code hg archive -r $TAG ../pidgin-$VERSION.
cd ../pidgin-$VERSION
Run ./autogen.sh
Run make release: This will perform the following steps (which can also be
                            done by hand at this point):
make commit-check - Checks a few files for correctness (UTF-8 encoding,
                            sort order, etc.).
make version-check - Make sure version string does not contain “dev,”
                            version is correct in ChangeLogs, and we’re building from a clean hg tag.
make distcheck - Standard automake target. Builds and verifies
                            tarballs. If “distcheck” fails and you’re sure the failure is innocuous
                            then you can use make dist, instead.
make sign-packages - Creates a gpg signature of the two tarballs.
[wiki:BuildingWinPidgin Build on Windows]
If there’s a new GTK Bundle, upload the zip file to
                            Sourceforge and
                            make sure that the BUNDLE_SHA1SUM in
                            pidgin/win32/nsis/generate_gtk_zip.sh is correct (this should have been
                            checked before make release).
Check the authenticode signature and timestamp for the installers (unfortunately needs to be done on a Windows box with the Platform SDK installed)
    signtool.exe verify /pa /tw pidgin-$VERSION-offline.exe
    signtool.exe verify /pa /tw pidgin-$VERSION.exe
Install pidgin-$VERSION-offline.exe and check the authenticode signature
                            and timestamp of pidgin.exe
    signtool.exe verify /pa /tw %ProgramFiles(x86)%\Pidgin\pidgin.exe
hg push the tag.
Upload the two tarballs, the two signatures, and the Windows builds to Sourceforge
Wait a few hours and let people test.
Build and upload new API docs.
make locally?scp docs/reference/libpurple/html nicobar.pidgin.im:/srv/www/developer.pidgin.im/doxygen/x.y.z/libpurple/scp docs/reference/pidgin/html nicobar.pidgin.im:/srv/www/developer.pidgin.im/doxygen/x.y.z/pidgin/scp docs/reference/finch/html nicobar.pidgin.im:/srv/www/developer.pidgin.im/doxygen/x.y.z/finch/Update the Pidgin website
inc/version.inc.php (only for full releases, not for betas)Send announcement email to announce and packagers mailing lists (sending to announce also sends to support and devel)
configure.ac & set purple_version_suffix and
                        gnt_version_suffix to devel#pidgin topic/srv/trac/developer.pidgin.im/mercurial_support/trac-hg-post-commit-hook.py
                        on nicobar.pidgin.im)