We put verify-version as a dependency, not a recursive action to keep
its output clean, (I know that I will always type "make release"
instead of "make VERSION=X.Y release" so I want a nice, neat
reminder).
Also, put the various ssh-based commands together, and after the
build, (so that it doesn't ask for a password/passphrase both before
and after building).
 # We invoke make recursively only to force ordering of our phony
 # targets in the case of parallel invocation of make (-j).
 .PHONY: release
-release:
-       $(MAKE) verify-newer
+release: verify-version
        $(MAKE) test
        $(MAKE) $(GPG_FILE)
-       mkdir -p releases
+       $(MAKE) verify-newer
        scp $(TAR_FILE) $(SHA1_FILE) $(GPG_FILE) $(RELEASE_HOST):$(RELEASE_DIR)
-       mv $(TAR_FILE) $(SHA1_FILE) $(GPG_FILE) releases
        ssh $(RELEASE_HOST) "rm -f $(RELEASE_DIR)/LATEST-$(PACKAGE)-[0-9]* && ln -s $(TAR_FILE) $(RELEASE_DIR)/LATEST-$(PACKAGE)-$(VERSION)"
+       mkdir -p releases
+       mv $(TAR_FILE) $(SHA1_FILE) $(GPG_FILE) releases
        git tag -s -m "$(PACKAGE) $(VERSION) release" $(VERSION)
        git push origin $(VERSION)
        @echo "Please send a release announcement as follows:"
        @echo "Good."
 
 .PHONY: verify-newer
-verify-newer: verify-version
+verify-newer:
        @echo -n "Checking that no $(VERSION) release already exists..."
        @ssh $(RELEASE_HOST) test ! -e $(RELEASE_DIR)/$(TAR_FILE) \
                || (echo "Ouch." && echo "Found: $(RELEASE_HOST):$(RELEASE_DIR)/$(TAR_FILE)" \