aboutsummaryrefslogtreecommitdiff
path: root/lib/actions/dist.bash
blob: 727cb531c24be721f8355a017cde71c05167c0c4 (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
#!/usr/bin/env bash

RSTAR_DEPS_BIN+=(
	git
	gpg
	md5sum
	sha1sum
	sha224sum
	sha256sum
	sha384sum
	sha512sum
	tar
)

action() {
	local version="${1:-$(date +%Y.%m)}"
	WORKDIR="$BASEDIR/tmp/rakudo-star-$version"

	info "Creating distribution contents at $WORKDIR"

	chgdir "$BASEDIR"

	# Include files from this project
	for file in $(git ls-files)
	do
		dist_include "/$file"
	done

	# Include the component sources
	dist_include "/src"

	# Add a MANIFEST.txt
	chgdir "$WORKDIR"
	find . > MANIFEST.txt

	# Tar it all up into a distribution tarball
	info "Creating tarball out of $WORKDIR"

	local tarball="$BASEDIR/dist/rakudo-star-$version.tar.gz"

	mkdir -p -- "$(dirname "$tarball")"
	chgdir "$BASEDIR/tmp"

	tar czf "$tarball" "rakudo-star-$version"

	chgdir "$(dirname "$tarball")"

	info "Generating checksums for $tarball"
	for sum in md5 sha{1,224,256,384,512}
	do
		dist_checksum "$sum" "$tarball" >> "$tarball.checksums.txt"
	done

	info "Generating a PGP signature for $tarball"
	gpg --armor --detach-sign --output "$tarball.asc" "$tarball"

	info "Distribution tarball available at $tarball"
}

dist_include() {
	mkdir -p -- "$(dirname "${WORKDIR}$1")"
	cp -r -- "${BASEDIR}$1" "${WORKDIR}$1"
}

dist_checksum() {
	printf "%-6s  %s\n" \
		"$1" \
		"$("dist_checksum_$1" "$2")"
}

dist_checksum_md5() {
	md5sum "$1" | awk '{print $1}'
}

dist_checksum_sha1() {
	sha1sum "$1" | awk '{print $1}'
}

dist_checksum_sha224() {
	sha224sum "$1" | awk '{print $1}'
}

dist_checksum_sha256() {
	sha256sum "$1" | awk '{print $1}'
}

dist_checksum_sha384() {
	sha384sum "$1" | awk '{print $1}'
}

dist_checksum_sha512() {
	sha512sum "$1" | awk '{print $1}'
}