release in Makefile is cumbersome, use shell
Signed-off-by: Nico Schottelius <nico@bento.schottelius.org>
This commit is contained in:
		
					parent
					
						
							
								7646375218
							
						
					
				
			
			
				commit
				
					
						dc2b37cec1
					
				
			
		
					 2 changed files with 76 additions and 46 deletions
				
			
		
							
								
								
									
										47
									
								
								Makefile
									
										
									
									
									
								
							
							
						
						
									
										47
									
								
								Makefile
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -170,39 +170,6 @@ $(FREECODE_FILE): $(CHANGELOG_FILE)
 | 
			
		|||
 | 
			
		||||
freecode-release: $(FREECODE_FILE)
 | 
			
		||||
 | 
			
		||||
################################################################################
 | 
			
		||||
# git and git dependent stuff
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
GIT_TAG_FILE=.git/refs/tags/$(CHANGELOG_VERSION)
 | 
			
		||||
GIT_SRC_BRANCH=master
 | 
			
		||||
GIT_DST_BRANCH=$(shell echo $(CHANGELOG_VERSION) | cut -d. -f '1,2')
 | 
			
		||||
GIT_CURRENT=.git-current-branch
 | 
			
		||||
 | 
			
		||||
git-tag: $(GIT_TAG_FILE)
 | 
			
		||||
 | 
			
		||||
$(GIT_TAG_FILE):
 | 
			
		||||
	@printf "Enter tag description for $(CHANGELOG_VERSION)> "
 | 
			
		||||
	@read tagmessage; git tag "$(CHANGELOG_VERSION)" -m "$$tagmessage"
 | 
			
		||||
 | 
			
		||||
git-branch-merge: git-checkout-stable
 | 
			
		||||
	git merge "$(CHANGELOG_VERSION)"
 | 
			
		||||
 | 
			
		||||
git-checkout-stable: git-tag
 | 
			
		||||
	@git rev-parse --abbrev-ref HEAD > $(GIT_CURRENT)
 | 
			
		||||
	@git checkout "$(GIT_DST_BRANCH)"
 | 
			
		||||
 | 
			
		||||
git-checkout-current:
 | 
			
		||||
	git checkout "$$(cat $(GIT_CURRENT))"
 | 
			
		||||
 | 
			
		||||
$(VERSION_FILE): .git/refs/heads/* .git/refs/tags/* .git/HEAD
 | 
			
		||||
	echo "VERSION = \"$$(git describe)\"" > $@
 | 
			
		||||
 | 
			
		||||
git-release: git-tag
 | 
			
		||||
	make git-branch-merge
 | 
			
		||||
	make git-checkout-current
 | 
			
		||||
	make pub
 | 
			
		||||
 | 
			
		||||
################################################################################
 | 
			
		||||
# pypi
 | 
			
		||||
#
 | 
			
		||||
| 
						 | 
				
			
			@ -236,20 +203,8 @@ archlinux-release: $(ARCHLINUX_FILE)
 | 
			
		|||
# Release
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
CHECKS=check-date check-unittest
 | 
			
		||||
 | 
			
		||||
check-unittest: $(VERSION_FILE)
 | 
			
		||||
 | 
			
		||||
RELEASE=speeches-dist web-release
 | 
			
		||||
RELEASE+=ml-release freecode-release
 | 
			
		||||
RELEASE+=man-dist pypi-release git-release
 | 
			
		||||
RELEASE+=archlinux-release
 | 
			
		||||
 | 
			
		||||
release: $(CHECKS) $(RELEASE)
 | 
			
		||||
	echo "Manual steps: linkedin, twitter"
 | 
			
		||||
 | 
			
		||||
# Code that is better handled in a shell script
 | 
			
		||||
check-%:
 | 
			
		||||
check-% release:
 | 
			
		||||
	$(helper) $@
 | 
			
		||||
 | 
			
		||||
################################################################################
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -173,11 +173,82 @@ eof
 | 
			
		|||
 | 
			
		||||
    ;;
 | 
			
		||||
 | 
			
		||||
    release-git-tag)
 | 
			
		||||
        target_version=$($0 changelog-version)
 | 
			
		||||
        if git rev-parse --verify refs/tags/$target_version; then
 | 
			
		||||
            echo "Tag for $target_version exists, aborting"
 | 
			
		||||
            exit 1
 | 
			
		||||
        fi
 | 
			
		||||
        printf "Enter tag description for ${target_version}: "
 | 
			
		||||
        read tagmessage
 | 
			
		||||
        git tag "$target_version" -m "$$tagmessage"
 | 
			
		||||
    ;;
 | 
			
		||||
 | 
			
		||||
    release)
 | 
			
		||||
        set -e
 | 
			
		||||
        target_version=$($0 changelog-version)
 | 
			
		||||
        target_branch=$($0 version-branch)
 | 
			
		||||
 | 
			
		||||
        echo "Beginning release process for $target_version"
 | 
			
		||||
 | 
			
		||||
        # First check everything is sane
 | 
			
		||||
        "$0" check-date
 | 
			
		||||
        "$0" check-unittest
 | 
			
		||||
 | 
			
		||||
        # Generate version file to be included in packaging
 | 
			
		||||
        "$0" version
 | 
			
		||||
 | 
			
		||||
        # Ensure the git status is clean, else abort
 | 
			
		||||
        if ! git diff-index --exit-code --quiet HEAD; then
 | 
			
		||||
            echo "Unclean tree, aborting"
 | 
			
		||||
            exit 1
 | 
			
		||||
        fi
 | 
			
		||||
 | 
			
		||||
        # Ensure we are on the master branch
 | 
			
		||||
        if [ "$(git rev-parse --abbrev-ref HEAD)" != "master" ]; then
 | 
			
		||||
            echo "Releases are happening from the master branch, aborting"
 | 
			
		||||
            exit 1
 | 
			
		||||
        fi
 | 
			
		||||
 | 
			
		||||
        # Ensure version branch exists
 | 
			
		||||
        if ! git rev-parse --verify refs/heads/$target_branch 2>/dev/null; then
 | 
			
		||||
            git branch "$target_branch"
 | 
			
		||||
        fi
 | 
			
		||||
 | 
			
		||||
        # Merge master branch into version branch
 | 
			
		||||
        git checkout "$target_branch"
 | 
			
		||||
        git merge master
 | 
			
		||||
 | 
			
		||||
        # Verify that after the merge everything works
 | 
			
		||||
        "$0" check-date
 | 
			
		||||
        "$0" check-unittest
 | 
			
		||||
 | 
			
		||||
        # Generate man pages (indirect check if they build)
 | 
			
		||||
        make man
 | 
			
		||||
 | 
			
		||||
        # Generate speeches (indirect check if they build)
 | 
			
		||||
        make speeches
 | 
			
		||||
 | 
			
		||||
        ############################################################# 
 | 
			
		||||
        # Everything green, let's do the release
 | 
			
		||||
 | 
			
		||||
        # Tag the current commit
 | 
			
		||||
        "$0" release-git-tag
 | 
			
		||||
 | 
			
		||||
        # Also merge back the version branch
 | 
			
		||||
        git checkout master
 | 
			
		||||
        git merge "$target_branch"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        exit 0
 | 
			
		||||
 | 
			
		||||
        make speeches-dist
 | 
			
		||||
 | 
			
		||||
    RELEASE=speeches-dist web-release
 | 
			
		||||
    RELEASE+=ml-release freecode-release
 | 
			
		||||
    RELEASE+=man-dist pypi-release git-release
 | 
			
		||||
    RELEASE+=archlinux-release
 | 
			
		||||
 | 
			
		||||
    ;;
 | 
			
		||||
 | 
			
		||||
    test)
 | 
			
		||||
| 
						 | 
				
			
			@ -190,6 +261,10 @@ eof
 | 
			
		|||
        fi
 | 
			
		||||
    ;;
 | 
			
		||||
 | 
			
		||||
    version-branch)
 | 
			
		||||
        "$0" changelog-version | cut -d. -f '1,2'
 | 
			
		||||
    ;;
 | 
			
		||||
 | 
			
		||||
    version)
 | 
			
		||||
        echo "VERSION = \"$(git describe)\"" > cdist/version.py
 | 
			
		||||
    ;;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue