summaryrefslogtreecommitdiff
path: root/make-archive
blob: d0352b70626d5ef183a02cd6deacdc99e33f3c0c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#!/bin/sh
set -eu
set -o pipefail
set -x

usage() {
	status="${1}"
	if [ "${status}" -eq 0 ] ; then
		out=/dev/stdout
	else
		out=/dev/stderr
	fi
	{
	echo "usage: make-archive [--origin ORIGIN] \\"
	echo "                    [--test VERSION [GNUEFI_GIT_TAG]"
	echo "                    |--release VERSION SHIM_GIT_TAG GNUEFI_GIT_TAG]"
	} >>"${out}"
	exit "${status}"
}

main() {
	VERSION=""
	SHIM_GIT_TAG=""
	GNUEFI_GIT_TAG=""
	ORIGIN="origin"
	while [ $# -ne 0 ] ; do
		case "$1" in
			--help|--usage|-h|"-?")
				usage 0
				;;
			--origin)
				if [ $# -lt 2 ] ; then
					echo "error: missing origin" >>/dev/stderr
					usage 1
				fi
				ORIGIN="${2}"
				shift
				;;
			--test)
				if [ $# -lt 2 ] ; then
					echo "error: missing version" >>/dev/stderr
					usage 1
				fi
				VERSION="${2}"
				if [ $# -gt 2 ] ; then
					GNUEFI_GIT_TAG="${3}"
					shift
				fi
				shift
				;;
			--release)
				if [ $# -lt 2 ] ; then
					echo "error: missing version" >>/dev/stderr
					usage 1
				fi
				if [ $# -lt 3 ] ; then
					echo "error: missing shim git tag" >>/dev/stderr
					usage 1
				fi
				if [ $# -lt 4 ] ; then
					echo "error: missing gnuefi git tag" >>/dev/stderr
					usage 1
				fi
				VERSION="${2}"
				SHIM_GIT_TAG="${3}"
				GNUEFI_GIT_TAG="${4}"
				shift
				shift
				shift
				;;
			*)
				echo unknown argument "\"$1\"" >>/dev/stderr
				usage 1
				;;
		esac
		shift
	done

	ARCHIVE_DIR="$(mktemp -d)"
	rm -rf "${ARCHIVE_DIR}/shim-${VERSION}" "${ARCHIVE_DIR}/shim-${VERSION}"
	mkdir -p "${ARCHIVE_DIR}/shim-${VERSION}/gnu-efi"
	cd gnu-efi || exit 1
	git fetch
	if [ "x" = "x${GNUEFI_GIT_TAG}" ] ; then
		git archive --format=tar "$(git log -1 --pretty=format:%h)" | ( cd "${ARCHIVE_DIR}/shim-${VERSION}/gnu-efi" ; tar x )
	else
		git archive --format=tar "${GNUEFI_GIT_TAG}" | ( cd "${ARCHIVE_DIR}/shim-${VERSION}/gnu-efi" ; tar x )
	fi
	cd ..
	if [ "x" = "x${SHIM_GIT_TAG}" ] ; then
		git archive --format=tar "$(git log -1 --pretty=format:%h)" | ( cd "${ARCHIVE_DIR}/shim-${VERSION}" ; tar x )
		TIMESTAMP=0
	else
		# ORIGIN doesn't yet have this tag
		git archive --format=tar "${SHIM_GIT_TAG}" | ( cd "${ARCHIVE_DIR}/shim-${VERSION}" ; tar x )
		TIMESTAMP=$(git log -1 --pretty=%ct "${SHIM_GIT_TAG}")
	fi
	git log -1 --pretty=format:%H > "${ARCHIVE_DIR}/shim-${VERSION}/commit"
	DIR="$PWD"
	cd "${ARCHIVE_DIR}"
	tar -c --sort=name --mtime="@${TIMESTAMP}" --owner=0 --group=0 --numeric-owner --pax-option=exthdr.name=%d/PaxHeaders/%f,delete=atime,delete=ctime --bzip2 -f "${DIR}/shim-${VERSION}.tar.bz2" "shim-${VERSION}"
	rm -rf "${ARCHIVE_DIR}"
	echo "The archive is in shim-${VERSION}.tar.bz2"
	exit 0
}

main "${@}"