archive-97f2350/archive.sh
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
#!/usr/bin/env bash
#
# Usage:
# ./archive.sh # archive HEAD, version from `git describe`
# ./archive.sh v1.2.0 # archive a specific tag/branch/commit
#
# Output: dist/archive-<version>.tar.gz, .zip, and a SHA256SUMS file.
set -euo pipefail
cd "$(dirname "$0")"
# Change to project name:
NAME="archive"
REF="${1:-HEAD}"
OUT_DIR="dist"
# Version label: the given ref if it's a tag/branch, else `git describe`
# default to the short commit hash when there are no tags
if [ "$REF" != "HEAD" ]; then
VERSION="$REF"
else
VERSION="$(git describe --tags --always --dirty 2>/dev/null || git rev-parse --short HEAD)"
fi
PREFIX="${NAME}-${VERSION}"
TARBALL="${OUT_DIR}/${PREFIX}.tar.gz"
ZIPFILE="${OUT_DIR}/${PREFIX}.zip"
if ! git diff-index --quiet HEAD -- 2>/dev/null; then
echo "Warning: found uncommitted changes, will NOT be in the archive." >&2
fi
mkdir -p "$OUT_DIR"
git archive --format=tar.gz --prefix="${PREFIX}/" -o "$TARBALL" "$REF"
git archive --format=zip --prefix="${PREFIX}/" -o "$ZIPFILE" "$REF"
# Checksums for integrity (Linux and MacOS should work).
if command -v sha256sum >/dev/null 2>&1; then
SHA="sha256sum"
else
SHA="shasum -a 256"
fi
( cd "$OUT_DIR" && $SHA "${PREFIX}.tar.gz" "${PREFIX}.zip" > "${PREFIX}.SHA256SUMS" )
echo "Ouput dir: ${OUT_DIR}/:"
ls -lh "$TARBALL" "$ZIPFILE" "${OUT_DIR}/${PREFIX}.SHA256SUMS" | awk '{printf " %-40s %s\n", $9, $5}'