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:
112
Makefile
112
Makefile
@@ -16,7 +16,7 @@
|
|||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
SHELL = /usr/bin/env bash
|
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
|
.SILENT: clean bindata
|
||||||
|
|
||||||
# a large amount of output from this `find`, can cause `make` to be much slower!
|
# 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)
|
GOHOSTOS = $(shell go env GOHOSTOS)
|
||||||
GOHOSTARCH = $(shell go env GOHOSTARCH)
|
GOHOSTARCH = $(shell go env GOHOSTARCH)
|
||||||
|
|
||||||
DEB_TAR = releases/mgmt_$(VERSION)_deb_amd64.tar.gz
|
RPM_PKG = releases/$(VERSION)/rpm/mgmt-$(VERSION)-1.x86_64.rpm
|
||||||
RPM_TAR = releases/mgmt_$(VERSION)_rpm_x86_64.tar.gz
|
DEB_PKG = releases/$(VERSION)/deb/mgmt_$(VERSION)_amd64.deb
|
||||||
PACMAN_TAR = releases/mgmt_$(VERSION)_pacman_x86_64.tar.gz
|
PACMAN_PKG = releases/$(VERSION)/pacman/mgmt-$(VERSION)-1-x86_64.pkg.tar.xz
|
||||||
|
|
||||||
|
SHA256SUMS = releases/$(VERSION)/SHA256SUMS
|
||||||
|
SHA256SUMS_ASC = $(SHA256SUMS).asc
|
||||||
|
|
||||||
default: build
|
default: build
|
||||||
|
|
||||||
@@ -327,82 +330,61 @@ upload-rpms: rpmbuild/RPMS/ rpmbuild/RPMS/SHA256SUMS rpmbuild/RPMS/SHA256SUMS.as
|
|||||||
copr: upload-srpms ## build in copr
|
copr: upload-srpms ## build in copr
|
||||||
./misc/copr-build.py https://$(SERVER)/$(REMOTE_PATH)/SRPMS/$(SRPM_BASE)
|
./misc/copr-build.py https://$(SERVER)/$(REMOTE_PATH)/SRPMS/$(SRPM_BASE)
|
||||||
|
|
||||||
|
#
|
||||||
|
# tag
|
||||||
|
#
|
||||||
|
tag: ## tags a new release
|
||||||
|
./misc/tag.sh
|
||||||
|
|
||||||
#
|
#
|
||||||
# release
|
# release
|
||||||
#
|
#
|
||||||
|
release: releases/$(VERSION)/mgmt-release.url ## generates and uploads a release
|
||||||
|
|
||||||
release: releases/mgmt-$(VERSION)-release.url
|
releases/$(VERSION)/mgmt-release.url: $(RPM_PKG) $(DEB_PKG) $(PACMAN_PKG) $(SHA256SUMS_ASC)
|
||||||
|
|
||||||
releases/mgmt-$(VERSION)-release.url: $(DEB_TAR) $(RPM_TAR) $(PACMAN_TAR)
|
|
||||||
@echo "Creating github release..."
|
@echo "Creating github release..."
|
||||||
hub release create \
|
hub release create \
|
||||||
-F <( echo -e "$(VERSION)\n";echo "License: GPLv3" ) \
|
-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 $(DEB_TAR) \
|
-a $(RPM_PKG) \
|
||||||
-a $(RPM_TAR) \
|
-a $(DEB_PKG) \
|
||||||
-a $(PACMAN_TAR) \
|
-a $(PACMAN_PKG) \
|
||||||
|
-a $(SHA256SUMS_ASC) \
|
||||||
$(VERSION) \
|
$(VERSION) \
|
||||||
> releases/mgmt-$(VERSION)-release.url \
|
> releases/$(VERSION)/mgmt-release.url \
|
||||||
&& cat releases/mgmt-$(VERSION)-release.url \
|
&& cat releases/$(VERSION)/mgmt-release.url \
|
||||||
|| rm -f releases/mgmt-$(VERSION)-release.url
|
|| rm -f releases/$(VERSION)/mgmt-release.url
|
||||||
|
|
||||||
release/mkdirs:
|
releases/$(VERSION)/.mkdir:
|
||||||
mkdir -p releases/{deb,rpm,pacman}
|
mkdir -p releases/$(VERSION)/{deb,rpm,pacman}/ && touch releases/$(VERSION)/.mkdir
|
||||||
|
|
||||||
$(DEB_TAR): releases/deb/SHA256SUMS.asc
|
releases/$(VERSION)/rpm/changelog: $(PROGRAM) releases/$(VERSION)/.mkdir
|
||||||
@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
|
|
||||||
@echo "Generating rpm changelog..."
|
@echo "Generating rpm changelog..."
|
||||||
./misc/make-rpm-changelog.sh
|
./misc/make-rpm-changelog.sh $(VERSION)
|
||||||
|
|
||||||
$(PACMAN_TAR): releases/pacman/SHA256SUMS.asc
|
$(RPM_PKG): releases/$(VERSION)/rpm/changelog
|
||||||
@echo -e "Archiving pacman package..."
|
@echo "Building rpm package..."
|
||||||
tar -zcf $(PACMAN_TAR) -C releases/pacman .
|
./misc/fpm-pack.sh rpm $(VERSION) libvirt-devel augeas-devel
|
||||||
|
|
||||||
releases/pacman/SHA256SUMS.asc: releases/pacman/SHA256SUMS
|
releases/$(VERSION)/deb/changelog: $(PROGRAM) releases/$(VERSION)/.mkdir
|
||||||
@echo "Signing sha256 sum..."
|
@echo "Generating deb changelog..."
|
||||||
gpg2 --yes --clearsign releases/pacman/SHA256SUMS
|
./misc/make-deb-changelog.sh $(VERSION)
|
||||||
|
|
||||||
releases/pacman/SHA256SUMS: releases/pacman/mgmt-$(VERSION)-1-x86_64.pkg.tar.xz
|
$(DEB_PKG): releases/$(VERSION)/deb/changelog
|
||||||
@echo "Generating sha256 sum..."
|
@echo "Building deb package..."
|
||||||
sha256sum releases/pacman/*.pkg.tar.xz > releases/pacman/SHA256SUMS
|
./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..."
|
@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
|
build_container: ## builds the container
|
||||||
docker build -t purpleidea/mgmt-build -f docker/Dockerfile.build .
|
docker build -t purpleidea/mgmt-build -f docker/Dockerfile.build .
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ BINARY="mgmt"
|
|||||||
# git tag pointing to the current commit
|
# git tag pointing to the current commit
|
||||||
TAG=$(git tag -l --points-at HEAD)
|
TAG=$(git tag -l --points-at HEAD)
|
||||||
# maintainer email
|
# maintainer email
|
||||||
MAINTAINER="mgmt@noreply.github.com"
|
MAINTAINER="mgmtconfig@purpleidea.com"
|
||||||
# project url
|
# project url
|
||||||
URL="https://github.com/purpleidea/mgmt/"
|
URL="https://github.com/purpleidea/mgmt/"
|
||||||
# project description
|
# project description
|
||||||
@@ -31,6 +31,17 @@ if [ "$TAG" == "" ]; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
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
|
# make sure the package type is valid
|
||||||
if [ "$1" != "deb" ] && [ "$1" != "rpm" ] && [ "$1" != "pacman" ]; then
|
if [ "$1" != "deb" ] && [ "$1" != "rpm" ] && [ "$1" != "pacman" ]; then
|
||||||
echo "invalid package type"
|
echo "invalid package type"
|
||||||
@@ -39,11 +50,11 @@ fi
|
|||||||
|
|
||||||
# there are no changelogs for pacman packages
|
# there are no changelogs for pacman packages
|
||||||
if [ "$1" != "pacman" ]; then
|
if [ "$1" != "pacman" ]; then
|
||||||
CHANGELOG="--${1}-changelog=${DIR}/${1}/changelog"
|
CHANGELOG="--${1}-changelog=${DIR}/${VERSION}/${1}/changelog"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# arguments after the first one are deps
|
# arguments after the first two are deps
|
||||||
for i in "${@:2}"; do
|
for i in "${@:3}"; do
|
||||||
DEPS="$DEPS -d $i"
|
DEPS="$DEPS -d $i"
|
||||||
done
|
done
|
||||||
|
|
||||||
@@ -58,7 +69,7 @@ fpm \
|
|||||||
--license "$LICENSE" \
|
--license "$LICENSE" \
|
||||||
--input-type dir \
|
--input-type dir \
|
||||||
--output-type "$1" \
|
--output-type "$1" \
|
||||||
--package "${DIR}/${1}/" \
|
--package "${DIR}/${VERSION}/${1}/" \
|
||||||
${CHANGELOG} \
|
${CHANGELOG} \
|
||||||
${DEPS} \
|
${DEPS} \
|
||||||
--prefix "$PREFIX" \
|
--prefix "$PREFIX" \
|
||||||
|
|||||||
@@ -1,8 +1,10 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# This script generates a deb changelog from the project's git history.
|
# This script generates a deb changelog from the project's git history.
|
||||||
|
|
||||||
|
# version we're releasing
|
||||||
|
VERSION="$1"
|
||||||
# path to store the changelog
|
# path to store the changelog
|
||||||
CHANGELOG="releases/deb/changelog"
|
CHANGELOG="releases/${VERSION}/deb/changelog"
|
||||||
# input to format flag for git tag
|
# input to format flag for git tag
|
||||||
TAG_FORMAT="-- %(creator) %(creatordate:format:%a, %d %b %Y %H:%M:%S %z) %(refname:lstrip=2)"
|
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
|
# a list of tags to be parsed in the loop
|
||||||
|
|||||||
@@ -1,8 +1,10 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# This script generates an rpm changelog from the project's git history.
|
# This script generates an rpm changelog from the project's git history.
|
||||||
|
|
||||||
|
# version we're releasing
|
||||||
|
VERSION="$1"
|
||||||
# path to store the changelog
|
# path to store the changelog
|
||||||
CHANGELOG="releases/rpm/changelog"
|
CHANGELOG="releases/${VERSION}/rpm/changelog"
|
||||||
# input to format flag for git tag
|
# input to format flag for git tag
|
||||||
TAG_FORMAT="* %(creatordate:format:%a %b %d %Y) %(creator) %(refname:lstrip=2)"
|
TAG_FORMAT="* %(creatordate:format:%a %b %d %Y) %(creator) %(refname:lstrip=2)"
|
||||||
# a list of tags to be parsed in the loop
|
# a list of tags to be parsed in the loop
|
||||||
|
|||||||
Reference in New Issue
Block a user