coreboot-kgpe-d16/util/release/build-release
Alexander Couzens 871da8e580 util/release: make release archives reproducible
tar doesn't sort by default and takes the order of the OS which is in
most cases the order of creation. Sort by name and set influencing
environment TZ and language to be reproducible.

Change-Id: I3d043952417000d12e81353677f1ea4aa2da4fc1
Signed-off-by: Alexander Couzens <lynxis@fe80.eu>
Reviewed-on: https://review.coreboot.org/16556
Tested-by: build bot (Jenkins)
Reviewed-by: Philipp Deppenwiese <zaolin.daisuki@googlemail.com>
2016-09-15 20:01:51 +02:00

47 lines
1.9 KiB
Bash
Executable file

#!/bin/bash
# ${VERSION_NAME}: new version name
# ${GPG_KEY_ID}: gpg key id (if not don't sign)
# ${USERNAME}: username (if not default to https)
# ${COMMIT_ID}: commit id (if not master)
VERSION_NAME=${1}
COMMIT_ID=${2}
USERNAME=${3}
GPG_KEY_ID=${4}
set -e
# set local + tz to be reproducible
LC_ALL=C
LANG=C
TZ=UTC
export LC_ALL LANG TZ
if [ -z "${VERSION_NAME}" ] || [ "${VERSION_NAME}" = "--help" ]; then
echo "usage: $0 <version> [commit id] [gpg key id] [username]"
echo "tags a new coreboot version and creates a tar archive"
exit 1
fi
if [ -n "${USERNAME}" ]; then
git clone --recurse-submodules ssh://${USERNAME}@review.coreboot.org:29418/coreboot.git coreboot-${VERSION_NAME}
else
git clone --recurse-submodules https://review.coreboot.org/coreboot.git coreboot-${VERSION_NAME}
fi
cd coreboot-${VERSION_NAME}
if [ -n "${COMMIT_ID}" ]; then
git reset --hard ${COMMIT_ID}
fi
git submodule update --init --checkout
if [ -n "${GPG_KEY_ID}" ]; then
git tag -a -s -u ${GPG_KEY_ID} --force ${VERSION_NAME} -m "coreboot version ${VERSION_NAME}"
else
git tag -a --force ${VERSION_NAME} -m "coreboot version ${VERSION_NAME}"
fi
printf "${VERSION_NAME}-$(git log --pretty=%H|head -1)\n" > .coreboot-version
tstamp=$(git log --pretty=format:%ci -1)
cd ..
tar --sort=name --mtime="$tstamp" --owner=coreboot:1000 --group=coreboot:1000 --exclude-vcs --exclude=coreboot-${VERSION_NAME}/3rdparty/blobs -cvf - coreboot-${VERSION_NAME} |xz -9 > coreboot-${VERSION_NAME}.tar.xz
tar --sort=name --mtime="$tstamp" --owner=coreboot:1000 --group=coreboot:1000 --exclude-vcs -cvf - coreboot-${VERSION_NAME}/3rdparty/blobs |xz -9 > coreboot-blobs-${VERSION_NAME}.tar.xz
if [ -n "${GPG_KEY_ID}" ]; then
gpg2 --armor --local-user ${GPG_KEY_ID} --output coreboot-${VERSION_NAME}.tar.xz.sig --detach-sig coreboot-${VERSION_NAME}.tar.xz
gpg2 --armor --local-user ${GPG_KEY_ID} --output coreboot-blobs-${VERSION_NAME}.tar.xz.sig --detach-sig coreboot-blobs-${VERSION_NAME}.tar.xz
fi