Make signed github releases.
This commit is contained in:
		
					parent
					
						
							
								81fbf48702
							
						
					
				
			
			
				commit
				
					
						17de2d9b79
					
				
			
		
					 3 changed files with 139 additions and 2 deletions
				
			
		| 
						 | 
					@ -153,7 +153,70 @@ eof
 | 
				
			||||||
        fi
 | 
					        fi
 | 
				
			||||||
        printf "Enter tag description for ${target_version}: "
 | 
					        printf "Enter tag description for ${target_version}: "
 | 
				
			||||||
        read tagmessage
 | 
					        read tagmessage
 | 
				
			||||||
        git tag "$target_version" -m "$$tagmessage"
 | 
					
 | 
				
			||||||
 | 
					        # setup for signed tags:
 | 
				
			||||||
 | 
					        # gpg --fulL-gen-key
 | 
				
			||||||
 | 
					        # gpg --list-secret-keys --keyid-format LONG
 | 
				
			||||||
 | 
					        # git config --local user.signingkey <id>
 | 
				
			||||||
 | 
					        # for exporting pub key:
 | 
				
			||||||
 | 
					        #     gpg --armor --export <id> > pubkey.asc
 | 
				
			||||||
 | 
					        #     gpg --output pubkey.gpg --export <id>
 | 
				
			||||||
 | 
					        # show tag with signature
 | 
				
			||||||
 | 
					        # git show <tag>
 | 
				
			||||||
 | 
					        # verify tag signature
 | 
				
			||||||
 | 
					        # git tag -v <tag>
 | 
				
			||||||
 | 
					        #
 | 
				
			||||||
 | 
					        # gpg verify signature
 | 
				
			||||||
 | 
					        # gpg --verify <asc-file> <file>
 | 
				
			||||||
 | 
					        # gpg --no-default-keyring --keyring <pubkey.gpg> --verify <asc-file> <file>
 | 
				
			||||||
 | 
					        #
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        git tag -s "$target_version" -m "$tagmessage"
 | 
				
			||||||
 | 
					        git push --tags
 | 
				
			||||||
 | 
					    ;;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    sign-git-tag)
 | 
				
			||||||
 | 
					        if [ $# -lt 3 ]
 | 
				
			||||||
 | 
					        then
 | 
				
			||||||
 | 
					            printf "usage: $0 sign-git-tag TAG AUTHTOKEN\n"
 | 
				
			||||||
 | 
					            exit 1
 | 
				
			||||||
 | 
					        fi
 | 
				
			||||||
 | 
					        tag="$2"
 | 
				
			||||||
 | 
					        if ! git rev-parse -q --verify "${tag}" >/dev/null 2>&1
 | 
				
			||||||
 | 
					            printf "Tag \"${tag}\" not found.\n"
 | 
				
			||||||
 | 
					            exit 1
 | 
				
			||||||
 | 
					        fi
 | 
				
			||||||
 | 
					        token="$3"
 | 
				
			||||||
 | 
					        archivename="cdist-${tag}.tar.gz"
 | 
				
			||||||
 | 
					        git archive --prefix="cdist-${tag}" -o "${archivename}" "${tag}" \
 | 
				
			||||||
 | 
					            || exit 1
 | 
				
			||||||
 | 
					        gpg --armor --detach-sign "${archivename}" || exit 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # make github release
 | 
				
			||||||
 | 
					        curl -H "Authorization: token ${token}" \
 | 
				
			||||||
 | 
					            --request POST \
 | 
				
			||||||
 | 
					            --data "{ \"tag_name\":\"${tag}\", \
 | 
				
			||||||
 | 
					                      \"target_commitish\":\"master\", \
 | 
				
			||||||
 | 
					                      \"name\": \"${tag}\", \
 | 
				
			||||||
 | 
					                      \"body\":\"${tag}\", \
 | 
				
			||||||
 | 
					                      \"draft\":false, \
 | 
				
			||||||
 | 
					                      \"prerelease\": false}" \
 | 
				
			||||||
 | 
					            "https://api.github.com/repos/ungleich/cdist/releases" || exit 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # get release ID
 | 
				
			||||||
 | 
					        repoid=$(curl "https://api.github.com/repos/ungleich/cdist/releases/tags/${tag}" \
 | 
				
			||||||
 | 
					            || python3 -c 'import json; import sys; print(json.loads(sys.stdin.read())["id"])') \
 | 
				
			||||||
 | 
					            || exit 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        curl -H "Authorization: token ${token}" \
 | 
				
			||||||
 | 
					             -H "Accept: application/vnd.github.manifold-preview" \
 | 
				
			||||||
 | 
					             -H "Content-Type: application/pgp-signature" \
 | 
				
			||||||
 | 
					             --data-binary @${archivename}.asc \
 | 
				
			||||||
 | 
					            "https://uploads.github.com/repos/ungleich/cdist/releases/${repoid}/assets?name=${archivename}.asc" \
 | 
				
			||||||
 | 
					            || exit 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # remove generated files (archive and asc)
 | 
				
			||||||
 | 
					        rm -f "${archivename}" "${archivename}.asc"
 | 
				
			||||||
    ;;
 | 
					    ;;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    release)
 | 
					    release)
 | 
				
			||||||
| 
						 | 
					@ -219,6 +282,11 @@ eof
 | 
				
			||||||
        # Tag the current commit
 | 
					        # Tag the current commit
 | 
				
			||||||
        "$0" release-git-tag
 | 
					        "$0" release-git-tag
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # sign git tag
 | 
				
			||||||
 | 
					        printf "Enter github authentication token: "
 | 
				
			||||||
 | 
					        read token
 | 
				
			||||||
 | 
					        "$0" sign-git-tag "${target_version}" "${token}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # Also merge back the version branch
 | 
					        # Also merge back the version branch
 | 
				
			||||||
        if [ "$masterbranch" = yes ]; then
 | 
					        if [ "$masterbranch" = yes ]; then
 | 
				
			||||||
            git checkout master
 | 
					            git checkout master
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -188,7 +188,70 @@ eof
 | 
				
			||||||
        fi
 | 
					        fi
 | 
				
			||||||
        printf "Enter tag description for ${target_version}: "
 | 
					        printf "Enter tag description for ${target_version}: "
 | 
				
			||||||
        read tagmessage
 | 
					        read tagmessage
 | 
				
			||||||
        git tag "$target_version" -m "$$tagmessage"
 | 
					
 | 
				
			||||||
 | 
					        # setup for signed tags:
 | 
				
			||||||
 | 
					        # gpg --fulL-gen-key
 | 
				
			||||||
 | 
					        # gpg --list-secret-keys --keyid-format LONG
 | 
				
			||||||
 | 
					        # git config --local user.signingkey <id>
 | 
				
			||||||
 | 
					        # for exporting pub key:
 | 
				
			||||||
 | 
					        #     gpg --armor --export <id> > pubkey.asc
 | 
				
			||||||
 | 
					        #     gpg --output pubkey.gpg --export <id>
 | 
				
			||||||
 | 
					        # show tag with signature
 | 
				
			||||||
 | 
					        # git show <tag>
 | 
				
			||||||
 | 
					        # verify tag signature
 | 
				
			||||||
 | 
					        # git tag -v <tag>
 | 
				
			||||||
 | 
					        #
 | 
				
			||||||
 | 
					        # gpg verify signature
 | 
				
			||||||
 | 
					        # gpg --verify <asc-file> <file>
 | 
				
			||||||
 | 
					        # gpg --no-default-keyring --keyring <pubkey.gpg> --verify <asc-file> <file>
 | 
				
			||||||
 | 
					        #
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        git tag -s "$target_version" -m "$tagmessage"
 | 
				
			||||||
 | 
					        git push --tags
 | 
				
			||||||
 | 
					    ;;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    sign-git-tag)
 | 
				
			||||||
 | 
					        if [ $# -lt 3 ]
 | 
				
			||||||
 | 
					        then
 | 
				
			||||||
 | 
					            printf "usage: $0 sign-git-tag TAG TOKEN\n"
 | 
				
			||||||
 | 
					            exit 1
 | 
				
			||||||
 | 
					        fi
 | 
				
			||||||
 | 
					        tag="$2"
 | 
				
			||||||
 | 
					        if ! git rev-parse -q --verify "${tag}" >/dev/null 2>&1
 | 
				
			||||||
 | 
					            printf "Tag \"${tag}\" not found.\n"
 | 
				
			||||||
 | 
					            exit 1
 | 
				
			||||||
 | 
					        fi
 | 
				
			||||||
 | 
					        token="$3"
 | 
				
			||||||
 | 
					        archivename="cdist-${tag}.tar.gz"
 | 
				
			||||||
 | 
					        git archive --prefix="cdist-${tag}" -o "${archivename}" "${tag}" \
 | 
				
			||||||
 | 
					            || exit 1
 | 
				
			||||||
 | 
					        gpg --armor --detach-sign "${archivename}" || exit 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # make github release
 | 
				
			||||||
 | 
					        curl -H "Authorization: token ${token}" \
 | 
				
			||||||
 | 
					            --request POST \
 | 
				
			||||||
 | 
					            --data "{ \"tag_name\":\"${tag}\", \
 | 
				
			||||||
 | 
					                      \"target_commitish\":\"master\", \
 | 
				
			||||||
 | 
					                      \"name\": \"${tag}\", \
 | 
				
			||||||
 | 
					                      \"body\":\"${tag}\", \
 | 
				
			||||||
 | 
					                      \"draft\":false, \
 | 
				
			||||||
 | 
					                      \"prerelease\": false}" \
 | 
				
			||||||
 | 
					            "https://api.github.com/repos/ungleich/cdist/releases" || exit 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # get release ID
 | 
				
			||||||
 | 
					        repoid=$(curl "https://api.github.com/repos/ungleich/cdist/releases/tags/${tag}" \
 | 
				
			||||||
 | 
					            || python3 -c 'import json; import sys; print(json.loads(sys.stdin.read())["id"])') \
 | 
				
			||||||
 | 
					            || exit 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        curl -H "Authorization: token ${token}" \
 | 
				
			||||||
 | 
					             -H "Accept: application/vnd.github.manifold-preview" \
 | 
				
			||||||
 | 
					             -H "Content-Type: application/pgp-signature" \
 | 
				
			||||||
 | 
					             --data-binary @${archivename}.asc \
 | 
				
			||||||
 | 
					            "https://uploads.github.com/repos/ungleich/cdist/releases/${repoid}/assets?name=${archivename}.asc" \
 | 
				
			||||||
 | 
					            || exit 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # remove generated files (archive and asc)
 | 
				
			||||||
 | 
					        rm -f "${archivename}" "${archivename}.asc"
 | 
				
			||||||
    ;;
 | 
					    ;;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    release)
 | 
					    release)
 | 
				
			||||||
| 
						 | 
					@ -254,6 +317,11 @@ eof
 | 
				
			||||||
        # Tag the current commit
 | 
					        # Tag the current commit
 | 
				
			||||||
        "$0" release-git-tag
 | 
					        "$0" release-git-tag
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # sign git tag
 | 
				
			||||||
 | 
					        printf "Enter github authentication token: "
 | 
				
			||||||
 | 
					        read token
 | 
				
			||||||
 | 
					        "$0" sign-git-tag "${target_version}" "${token}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # Also merge back the version branch
 | 
					        # Also merge back the version branch
 | 
				
			||||||
        if [ "$masterbranch" = yes ]; then
 | 
					        if [ "$masterbranch" = yes ]; then
 | 
				
			||||||
            git checkout master
 | 
					            git checkout master
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,6 +2,7 @@ Changelog
 | 
				
			||||||
---------
 | 
					---------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
next:
 | 
					next:
 | 
				
			||||||
 | 
						* Build: Make github signed release (Darko Poljak)
 | 
				
			||||||
	* Core: pep8 (Darko Poljak)
 | 
						* Core: pep8 (Darko Poljak)
 | 
				
			||||||
	* Documentation: Restructure and fix and improve docs and manpages (Darko Poljak)
 | 
						* Documentation: Restructure and fix and improve docs and manpages (Darko Poljak)
 | 
				
			||||||
	* Core: Add files directory for static files (Darko Poljak)
 | 
						* Core: Add files directory for static files (Darko Poljak)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue