aboutsummarylogtreecommitdiffstats
path: root/release
blob: 45ea1cb6377e2905550e7bafba15e75895044d7f (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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#!/bin/bash
# release — bump version, tag, update checksums, and push to GitHub and AUR
# Usage: ./release [--patch | --minor | --major | --version X.Y.Z]

set -euo pipefail

REPO_DIR="$(cd "$(dirname "$0")" && pwd)"
PKGBUILD="$REPO_DIR/PKGBUILD"
SRCINFO="$REPO_DIR/.SRCINFO"
SCRIPT="$REPO_DIR/pacfzf"
GH_REMOTE="origin"
AUR_REMOTE="aur"

_usage() {
	cat <<EOF
Usage: ./release [options]

Options:
  --patch            Bump patch version (x.y.Z)  [default]
  --minor            Bump minor version (x.Y.0)
  --major            Bump major version (X.0.0)
  --version X.Y.Z    Set an explicit version
  -h, --help         Show this help message
EOF
}

_current_version() {
	grep -oP '(?<=pkgver=)\S+' "$PKGBUILD"
}

_bump_version() {
	local ver="$1" part="$2"
	IFS='.' read -r major minor patch <<< "$ver"
	case "$part" in
		major) echo "$((major + 1)).0.0" ;;
		minor) echo "$major.$((minor + 1)).0" ;;
		patch) echo "$major.$minor.$((patch + 1))" ;;
	esac
}

_confirm() {
	read -rp "$1 [y/N] " answer
	[[ "${answer,,}" == "y" ]]
}

# ── parse args ─────────────────────────────────────────────────────────────────

BUMP="patch"
NEW_VER=""

while [[ $# -gt 0 ]]; do
	case "$1" in
		--patch)   BUMP="patch" ;;
		--minor)   BUMP="minor" ;;
		--major)   BUMP="major" ;;
		--version) NEW_VER="$2"; shift ;;
		-h|--help) _usage; exit 0 ;;
		*) echo "release: unknown option '$1'. See './release --help'" >&2; exit 1 ;;
	esac
	shift
done

# ── determine new version ──────────────────────────────────────────────────────

CURRENT_VER="$(_current_version)"

if [[ -z "$NEW_VER" ]]; then
	NEW_VER="$(_bump_version "$CURRENT_VER" "$BUMP")"
fi

echo "Current version : $CURRENT_VER"
echo "New version     : $NEW_VER"
echo ""

_confirm "Proceed with release v$NEW_VER?" || { echo "Aborted."; exit 0; }

# ── update version in files ────────────────────────────────────────────────────

sed -i "s/VERSION=\"$CURRENT_VER\"/VERSION=\"$NEW_VER\"/" "$SCRIPT"
sed -i "s/pkgver=$CURRENT_VER/pkgver=$NEW_VER/" "$PKGBUILD"
sed -i "s/pkgver = $CURRENT_VER/pkgver = $NEW_VER/" "$SRCINFO"
sed -i "s/v$CURRENT_VER/v$NEW_VER/g" "$PKGBUILD"
sed -i "s/pacfzf-$CURRENT_VER/pacfzf-$NEW_VER/g" "$SRCINFO"
sed -i "s/v$CURRENT_VER/v$NEW_VER/g" "$SRCINFO"

echo "✓ Version bumped to $NEW_VER"

# ── commit, tag, and push to GitHub ───────────────────────────────────────────

cd "$REPO_DIR"
git add pacfzf PKGBUILD .SRCINFO
git commit -m "chore: bump version to $NEW_VER"
git tag "v$NEW_VER"
git push "$GH_REMOTE" main
git push "$GH_REMOTE" "v$NEW_VER"

echo "✓ Pushed tag v$NEW_VER to GitHub — waiting for tarball to be available..."
sleep 5

# ── fetch tarball and update checksum ─────────────────────────────────────────

TARBALL_URL="https://github.com/mossbraxtin/pacfzf/archive/v$NEW_VER.tar.gz"
TARBALL_TMP=$(mktemp /tmp/pacfzf-release.XXXXXX.tar.gz)
trap "rm -f $TARBALL_TMP" EXIT

echo "Downloading $TARBALL_URL..."
curl -sL "$TARBALL_URL" -o "$TARBALL_TMP"

NEW_SUM=$(b2sum "$TARBALL_TMP" | awk '{print $1}')
echo "✓ b2sum: $NEW_SUM"

OLD_SUM=$(grep -oP "(?<=b2sums=\(')[^']+" "$PKGBUILD")
sed -i "s/$OLD_SUM/$NEW_SUM/" "$PKGBUILD"
sed -i "s/$OLD_SUM/$NEW_SUM/" "$SRCINFO"

echo "✓ Checksums updated"

# ── final commit and push to GitHub + AUR ─────────────────────────────────────

git add PKGBUILD .SRCINFO
git commit -m "chore: update checksums for v$NEW_VER"
git push "$GH_REMOTE" main
git push "$AUR_REMOTE" main:master

echo ""
echo "✓ Release v$NEW_VER complete — pushed to GitHub and AUR"