make release: Enforce a clean source tree before release.

Where by clean, we check that no files are known to git to be
modified.
This commit is contained in:
Carl Worth 2010-04-15 20:03:30 -07:00
parent 8700de6fb7
commit 00263dd1a9
2 changed files with 21 additions and 6 deletions

View file

@ -69,7 +69,7 @@ dist: $(TAR_FILE)
# We invoke make recursively only to force ordering of our phony # We invoke make recursively only to force ordering of our phony
# targets in the case of parallel invocation of make (-j). # targets in the case of parallel invocation of make (-j).
.PHONY: release .PHONY: release
release: verify-version release: verify-no-dirty-code
$(MAKE) test $(MAKE) test
$(MAKE) $(GPG_FILE) $(MAKE) $(GPG_FILE)
$(MAKE) verify-newer $(MAKE) verify-newer
@ -116,6 +116,21 @@ release-message:
@echo "" @echo ""
@echo "For more about notmuch, see http://notmuchmail.org" @echo "For more about notmuch, see http://notmuchmail.org"
.PHONY: verify-no-dirty-code
verify-no-dirty-code: verify-version
@printf "Checking that source tree is clean..."
ifneq ($(shell git ls-files -m),)
@echo "No"
@echo "The following files have been modified since the most recent git commit:"
@echo ""
@git ls-files -m
@echo ""
@echo "The release will be made from the committed state, but perhaps you meant"
@echo "to commit this code first? Please clean this up to make it more clear."
@false
else
@echo "Good"
endif
.PHONY: verify-version .PHONY: verify-version
verify-version: verify-version:

View file

@ -37,17 +37,17 @@ repository. From here, there are just a few steps to release:
For the X.Y version, we'll generally just increment Y. But for For the X.Y version, we'll generally just increment Y. But for
major milestones of usability we're increment X as well. major milestones of usability we're increment X as well.
* Ensure that the caller passed VERSION=X.Y
* Verify that the source tree is clean
* Compile the current notmuch code (aborting release if it fails) * Compile the current notmuch code (aborting release if it fails)
* Run the notmuch test suite (aborting release if it fails) * Run the notmuch test suite (aborting release if it fails)
* Check that the notmuch version consists of only two components
* Check that no release exists with the current version
* Verify that "make dist" completes successfully
* Generate the final tar file * Generate the final tar file
* Generate an sha1sum file * Generate a .sha1 sum file for the tar file
* Sign the sha1sum using your GPG setup (asks for your GPG password) * Sign the sha1sum using your GPG setup (asks for your GPG password)
* Check that no release exists with the current version
* scp the three files to appear on http://notmuchmail.org/releases * scp the three files to appear on http://notmuchmail.org/releases
* Place local copies of the three files in the releases directory
* Create a LATEST-notmuch-version file (after deleting any old one) * Create a LATEST-notmuch-version file (after deleting any old one)
* Place local copies of the three files in the releases directory
* Tag the entire source tree with a tag of the form X.Y.Z, and sign * Tag the entire source tree with a tag of the form X.Y.Z, and sign
the tag with your GPG key (asks for your GPG password, and you the tag with your GPG key (asks for your GPG password, and you
may need to set GIT_COMMITTER_NAME and GIT_COMMITTER_EMAIL to match may need to set GIT_COMMITTER_NAME and GIT_COMMITTER_EMAIL to match