make: Improve release pipeline

Hopefully this makes releases a little better for users.
In particular, this avoids listing old build artifacts in the SHA256SUMS
files when we make new releases, and users can now download them
directly.

Now to make a release you run: `make tag && make release`.
After the first make session ends, you'll have a new tag released
publicly, and then during the second make session, the release target
will notice this new tag, build some assets, and upload them!
This commit is contained in:
James Shubin
2018-11-30 18:49:52 -05:00
parent 80931e1cb4
commit 0ec00fe57f
5 changed files with 69 additions and 72 deletions

112
Makefile
View File

@@ -16,7 +16,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
SHELL = /usr/bin/env bash
.PHONY: all art cleanart version program lang path deps run race bindata generate build build-debug crossbuild clean test gofmt yamlfmt format docs rpmbuild mkdirs rpm srpm spec tar upload upload-sources upload-srpms upload-rpms copr release release/mkdirs
.PHONY: all art cleanart version program lang path deps run race bindata generate build build-debug crossbuild clean test gofmt yamlfmt format docs rpmbuild mkdirs rpm srpm spec tar upload upload-sources upload-srpms upload-rpms copr tag release
.SILENT: clean bindata
# a large amount of output from this `find`, can cause `make` to be much slower!
@@ -48,9 +48,12 @@ GOOSARCHES ?= linux/amd64 linux/ppc64 linux/ppc64le linux/arm64 darwin/amd64
GOHOSTOS = $(shell go env GOHOSTOS)
GOHOSTARCH = $(shell go env GOHOSTARCH)
DEB_TAR = releases/mgmt_$(VERSION)_deb_amd64.tar.gz
RPM_TAR = releases/mgmt_$(VERSION)_rpm_x86_64.tar.gz
PACMAN_TAR = releases/mgmt_$(VERSION)_pacman_x86_64.tar.gz
RPM_PKG = releases/$(VERSION)/rpm/mgmt-$(VERSION)-1.x86_64.rpm
DEB_PKG = releases/$(VERSION)/deb/mgmt_$(VERSION)_amd64.deb
PACMAN_PKG = releases/$(VERSION)/pacman/mgmt-$(VERSION)-1-x86_64.pkg.tar.xz
SHA256SUMS = releases/$(VERSION)/SHA256SUMS
SHA256SUMS_ASC = $(SHA256SUMS).asc
default: build
@@ -327,82 +330,61 @@ upload-rpms: rpmbuild/RPMS/ rpmbuild/RPMS/SHA256SUMS rpmbuild/RPMS/SHA256SUMS.as
copr: upload-srpms ## build in copr
./misc/copr-build.py https://$(SERVER)/$(REMOTE_PATH)/SRPMS/$(SRPM_BASE)
#
# tag
#
tag: ## tags a new release
./misc/tag.sh
#
# release
#
release: releases/$(VERSION)/mgmt-release.url ## generates and uploads a release
release: releases/mgmt-$(VERSION)-release.url
releases/mgmt-$(VERSION)-release.url: $(DEB_TAR) $(RPM_TAR) $(PACMAN_TAR)
releases/$(VERSION)/mgmt-release.url: $(RPM_PKG) $(DEB_PKG) $(PACMAN_PKG) $(SHA256SUMS_ASC)
@echo "Creating github release..."
hub release create \
-F <( echo -e "$(VERSION)\n";echo "License: GPLv3" ) \
-a $(DEB_TAR) \
-a $(RPM_TAR) \
-a $(PACMAN_TAR) \
-F <( echo -e "$(VERSION)\n";echo "Verify the signatures of all packages before you use them. The signing key can be downloaded from https://purpleidea.com/contact/#pgp-key to verify the release." ) \
-a $(RPM_PKG) \
-a $(DEB_PKG) \
-a $(PACMAN_PKG) \
-a $(SHA256SUMS_ASC) \
$(VERSION) \
> releases/mgmt-$(VERSION)-release.url \
&& cat releases/mgmt-$(VERSION)-release.url \
|| rm -f releases/mgmt-$(VERSION)-release.url
> releases/$(VERSION)/mgmt-release.url \
&& cat releases/$(VERSION)/mgmt-release.url \
|| rm -f releases/$(VERSION)/mgmt-release.url
release/mkdirs:
mkdir -p releases/{deb,rpm,pacman}
releases/$(VERSION)/.mkdir:
mkdir -p releases/$(VERSION)/{deb,rpm,pacman}/ && touch releases/$(VERSION)/.mkdir
$(DEB_TAR): releases/deb/SHA256SUMS.asc
@echo -e "Archiving deb package..."
tar -zcf $(DEB_TAR) -C releases/deb .
releases/deb/SHA256SUMS.asc: releases/deb/SHA256SUMS
@echo "Signing sha256 sum..."
gpg2 --yes --clearsign releases/deb/SHA256SUMS
releases/deb/SHA256SUMS: releases/deb/mgmt_$(VERSION)_amd64.deb
@echo "Generating sha256 sum..."
sha256sum releases/deb/*.deb > releases/deb/SHA256SUMS
releases/deb/mgmt_$(VERSION)_amd64.deb: releases/deb/changelog
@echo "Building deb package..."
./misc/fpm-pack.sh deb libvirt-dev libaugeas-dev
releases/deb/changelog: $(PROGRAM) | release/mkdirs
@echo "Generating deb changelog..."
./misc/make-deb-changelog.sh
$(RPM_TAR): releases/rpm/SHA256SUMS.asc
@echo -e "Archiving rpm package..."
tar -zcf $(RPM_TAR) -C releases/rpm .
releases/rpm/SHA256SUMS.asc: releases/rpm/SHA256SUMS
@echo "Signing sha256 sum..."
gpg2 --yes --clearsign releases/rpm/SHA256SUMS
releases/rpm/SHA256SUMS: releases/rpm/mgmt-$(VERSION)-1.x86_64.rpm
@echo "Generating sha256 sum..."
sha256sum releases/rpm/*.rpm > releases/rpm/SHA256SUMS
releases/rpm/mgmt-$(VERSION)-1.x86_64.rpm: releases/rpm/changelog
@echo "Building rpm package..."
./misc/fpm-pack.sh rpm libvirt-devel augeas-devel
releases/rpm/changelog: $(PROGRAM) | release/mkdirs
releases/$(VERSION)/rpm/changelog: $(PROGRAM) releases/$(VERSION)/.mkdir
@echo "Generating rpm changelog..."
./misc/make-rpm-changelog.sh
./misc/make-rpm-changelog.sh $(VERSION)
$(PACMAN_TAR): releases/pacman/SHA256SUMS.asc
@echo -e "Archiving pacman package..."
tar -zcf $(PACMAN_TAR) -C releases/pacman .
$(RPM_PKG): releases/$(VERSION)/rpm/changelog
@echo "Building rpm package..."
./misc/fpm-pack.sh rpm $(VERSION) libvirt-devel augeas-devel
releases/pacman/SHA256SUMS.asc: releases/pacman/SHA256SUMS
@echo "Signing sha256 sum..."
gpg2 --yes --clearsign releases/pacman/SHA256SUMS
releases/$(VERSION)/deb/changelog: $(PROGRAM) releases/$(VERSION)/.mkdir
@echo "Generating deb changelog..."
./misc/make-deb-changelog.sh $(VERSION)
releases/pacman/SHA256SUMS: releases/pacman/mgmt-$(VERSION)-1-x86_64.pkg.tar.xz
@echo "Generating sha256 sum..."
sha256sum releases/pacman/*.pkg.tar.xz > releases/pacman/SHA256SUMS
$(DEB_PKG): releases/$(VERSION)/deb/changelog
@echo "Building deb package..."
./misc/fpm-pack.sh deb $(VERSION) libvirt-dev libaugeas-dev
releases/pacman/mgmt-$(VERSION)-1-x86_64.pkg.tar.xz: $(PROGRAM) | release/mkdirs
$(PACMAN_PKG): $(PROGRAM) releases/$(VERSION)/.mkdir
@echo "Building pacman package..."
./misc/fpm-pack.sh pacman libvirt augeas
./misc/fpm-pack.sh pacman $(VERSION) libvirt augeas
$(SHA256SUMS): $(RPM_PKG) $(DEB_PKG) $(PACMAN_PKG)
@# remove the directory separator in the SHA256SUMS file
@echo "Generating sha256 sum..."
sha256sum $(RPM_PKG) $(DEB_PKG) $(PACMAN_PKG) | awk -F '/| ' '{print $$1" "$$6}' > $(SHA256SUMS)
$(SHA256SUMS_ASC): $(SHA256SUMS)
@echo "Signing sha256 sum..."
gpg2 --yes --clearsign $(SHA256SUMS)
build_container: ## builds the container
docker build -t purpleidea/mgmt-build -f docker/Dockerfile.build .

View File

@@ -8,7 +8,7 @@ BINARY="mgmt"
# git tag pointing to the current commit
TAG=$(git tag -l --points-at HEAD)
# maintainer email
MAINTAINER="mgmt@noreply.github.com"
MAINTAINER="mgmtconfig@purpleidea.com"
# project url
URL="https://github.com/purpleidea/mgmt/"
# project description
@@ -31,6 +31,17 @@ if [ "$TAG" == "" ]; then
exit 1
fi
if [ "$2" == "" ]; then
echo "version was not specified"
exit 1
fi
VERSION="$2"
if [ "$VERSION" != "$TAG" ]; then
echo "you must checkout the correct version before building (${VERSION} != ${TAG})"
exit 1
fi
# make sure the package type is valid
if [ "$1" != "deb" ] && [ "$1" != "rpm" ] && [ "$1" != "pacman" ]; then
echo "invalid package type"
@@ -39,11 +50,11 @@ fi
# there are no changelogs for pacman packages
if [ "$1" != "pacman" ]; then
CHANGELOG="--${1}-changelog=${DIR}/${1}/changelog"
CHANGELOG="--${1}-changelog=${DIR}/${VERSION}/${1}/changelog"
fi
# arguments after the first one are deps
for i in "${@:2}"; do
# arguments after the first two are deps
for i in "${@:3}"; do
DEPS="$DEPS -d $i"
done
@@ -58,7 +69,7 @@ fpm \
--license "$LICENSE" \
--input-type dir \
--output-type "$1" \
--package "${DIR}/${1}/" \
--package "${DIR}/${VERSION}/${1}/" \
${CHANGELOG} \
${DEPS} \
--prefix "$PREFIX" \

View File

@@ -1,8 +1,10 @@
#!/bin/bash
# This script generates a deb changelog from the project's git history.
# version we're releasing
VERSION="$1"
# path to store the changelog
CHANGELOG="releases/deb/changelog"
CHANGELOG="releases/${VERSION}/deb/changelog"
# input to format flag for git tag
TAG_FORMAT="-- %(creator) %(creatordate:format:%a, %d %b %Y %H:%M:%S %z) %(refname:lstrip=2)"
# a list of tags to be parsed in the loop

View File

@@ -1,8 +1,10 @@
#!/bin/bash
# This script generates an rpm changelog from the project's git history.
# version we're releasing
VERSION="$1"
# path to store the changelog
CHANGELOG="releases/rpm/changelog"
CHANGELOG="releases/${VERSION}/rpm/changelog"
# input to format flag for git tag
TAG_FORMAT="* %(creatordate:format:%a %b %d %Y) %(creator) %(refname:lstrip=2)"
# a list of tags to be parsed in the loop

View File