-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrelease.sh
More file actions
executable file
·98 lines (75 loc) · 2.36 KB
/
Copy pathrelease.sh
File metadata and controls
executable file
·98 lines (75 loc) · 2.36 KB
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
#!/usr/bin/env bash
set -euo pipefail
IMAGE="luizfilipemoresco/mbsync"
DOCKERFILE="${DOCKERFILE:-Dockerfile}"
CONTEXT="${CONTEXT:-.}"
GIT_REMOTE="${GIT_REMOTE:-origin}"
CREATE_GITHUB_RELEASE="${CREATE_GITHUB_RELEASE:-true}"
REPO_OWNER="$(echo "$IMAGE" | cut -d/ -f1)"
REPO_NAME="$(echo "$IMAGE" | cut -d/ -f2)"
if [[ -n "$(git status --porcelain)" ]]; then
echo "Git working tree is not clean. Commit or stash your changes before releasing."
exit 1
fi
echo "Image: $IMAGE"
echo "Checking latest version on Docker Hub..."
TAGS_JSON="$(curl -sS "https://hub.docker.com/v2/repositories/${REPO_OWNER}/${REPO_NAME}/tags?page_size=100" || true)"
LATEST_VERSION="$(
echo "$TAGS_JSON" \
| grep -oE '"name":"v[0-9]+\.[0-9]+\.[0-9]+"' \
| sed -E 's/"name":"v([^"]+)"/\1/' \
| sort -V \
| tail -n 1 \
|| true
)"
if [[ -z "${LATEST_VERSION:-}" ]]; then
echo "No existing version tag found."
echo "Starting with first version."
NEXT_VERSION="0.1.0"
else
echo "Latest version found: v$LATEST_VERSION"
IFS='.' read -r MAJOR MINOR PATCH <<< "$LATEST_VERSION"
PATCH=$((PATCH + 1))
NEXT_VERSION="${MAJOR}.${MINOR}.${PATCH}"
fi
echo "Next version: v$NEXT_VERSION"
if git rev-parse "v$NEXT_VERSION" >/dev/null 2>&1; then
echo "Git tag v$NEXT_VERSION already exists."
exit 1
fi
echo "Building image..."
docker build \
-f "$DOCKERFILE" \
-t "$IMAGE:v$NEXT_VERSION" \
-t "$IMAGE:latest" \
"$CONTEXT"
echo "Pushing image tags..."
docker push "$IMAGE:v$NEXT_VERSION"
docker push "$IMAGE:latest"
echo "Creating git tag..."
git tag -a "v$NEXT_VERSION" -m "Release v$NEXT_VERSION"
if git remote get-url "$GIT_REMOTE" >/dev/null 2>&1; then
echo "Pushing git tag to $GIT_REMOTE..."
git push "$GIT_REMOTE" "v$NEXT_VERSION"
else
echo "Git remote '$GIT_REMOTE' not found. Tag created locally only."
fi
if [[ "$CREATE_GITHUB_RELEASE" == "true" ]]; then
if ! command -v gh >/dev/null 2>&1; then
echo "GitHub CLI not found. Install gh or set CREATE_GITHUB_RELEASE=false."
exit 1
fi
echo "Creating GitHub release..."
gh release create "v$NEXT_VERSION" \
--title "v$NEXT_VERSION" \
--notes "Docker image: $IMAGE:v$NEXT_VERSION"
fi
echo ""
echo "Done!"
echo "Published:"
echo " $IMAGE:v$NEXT_VERSION"
echo " $IMAGE:latest"
echo " git tag v$NEXT_VERSION"
if [[ "$CREATE_GITHUB_RELEASE" == "true" ]]; then
echo " GitHub release v$NEXT_VERSION"
fi