Instructions for s3cmd maintainers for doing a tagged release and publishing on sourceforge.net. In the below, 1.5.0-rc1 is the example version being released. Salt to taste. 1. Make a fresh clone of the repo: git clone ssh+git://email@example.com/s3tools/s3cmd s3cmd-release 2. Run ./run-tests.py to verify it all works OK. 3. Update version to 1.5.0-rc1 in S3/PkgInfo.py 4. Update manpage with ./s3cmd --help | ./format-manpage.pl > s3cmd.1 5. Update NEWS with info about new features. Best to extract from git with: git log --no-merges v1.5.0-beta1.. (list all tags with: "git tag") 6. Verify the above changes: git diff --check && git diff git status (The only changed files should be NEWS, s3cmd.1, S3/PkgInfo.py) 7. Remove testsuite (intentionally inaccessible files break the next step): chmod -R +rwx testsuite/permission-tests/permission-denied-dir && rm -rf testsuite 8. Build the "Source Distribution": python setup.py sdist -> Creates dist/s3cmd-1.5.0-rc1.tar.gz and dist/s3cmd-1.5.0-rc1.zip 9. If everything worked fine commit the above changes: git commit -a -m "Update version to 1.5.0-rc1" 10. Tag it: git tag --sign -a v1.5.0-rc1 -m "Tag v1.5.0-rc1" 11. Push back to github: git push --tags That's it for building the release. Now upload it to SourceForge: 1. Login to sf.net 2. Go to https://sourceforge.net/p/s3tools/admin/ 3. Files -> s3cmd -> Add Folder -> Enter "1.5.0-rc1" -> Create 4. Go into 1.5.0-rc1 -> Add File -> upload dist/s3cmd-1.5.0-rc1.tar.gz 5. Once uploaded click the little "i" icon on the right and click "Select all" under "Default Download For:" to update the default download button to this new version. 6. Give it a few minutes and verify on the Summary page that the download button has been updated to s3cmd-1.5.0-rc1.tar.gz Now it's time to send out an announcement email to firstname.lastname@example.org and email@example.com (check out the s3cmd-announce archive for an inspiration :) And the last step is to ask the respective distribution maintainers (Fedora, Debian, Ubuntu, OpenSuse, ...?) to update the package in their builds.