-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathincrement_patch.sh
More file actions
156 lines (132 loc) · 4.27 KB
/
increment_patch.sh
File metadata and controls
156 lines (132 loc) · 4.27 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
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
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
#!/bin/bash
DEFAULT_NEW_PATCH_VERSION='0.0.1'
DEFAULT_GITHUB_API_BASE_URL='https://api.github.com/repos/'
DEFAULT_TAG_PREFIX='v'
function deriveApiUrl {
echo "Deriving API url from DRONE_REPO: ${1}"
if [ -z "$GITHUB_API_BASE_URL" ]
then
echo "You did not supply a GITHUB_API_BASE_URL. Defaulting to ${DEFAULT_GITHUB_API_BASE_URL}"
GITHUB_API_BASE_URL=${DEFAULT_GITHUB_API_BASE_URL}
fi
GITHUB_API_REPO_URL=${GITHUB_API_BASE_URL}${1}
echo "Derived GITHUB_API_REPO_URL is: ${GITHUB_API_REPO_URL}"
}
if [ \( -z "$GITHUB_TOKEN" \) -a \( -z "$GITHUB_USERNAME" -o -z "$GITHUB_PASSWORD" \) ]
then
echo "Error! GITHUB_TOKEN OR (GITHUB_USERNAME And GITHUB_PASSWORD) is required for this script"
exit 1
fi
if [ -z "$DRONE_REPO" -a -z "$GITHUB_API_REPO_URL" ]
then
echo "Error! GITHUB_API_REPO_URL is required for this script"
exit 1
fi
if [ -z "$GITHUB_TOKEN" ]
then
echo "GITHUB_TOKEN (OAuth Token) is not Supplied(Preferred Auth).
So, fallback to BasicAuth with GITHUB_USERNAME and GITHUB_PASSWORD"
AUTH=('--user' "${GITHUB_USERNAME}:${GITHUB_PASSWORD}")
else
AUTH=('--header' "Authorization: token ${GITHUB_TOKEN}")
fi
if [ -z "$GITHUB_API_REPO_URL" ]
then
deriveApiUrl ${DRONE_REPO}
fi
if [ -z "$DRONE_COMMIT_SHA" ]
then
LAST_COMMIT=$(curl -sS \
"${AUTH[@]}" \
${GITHUB_API_REPO_URL}/commits/master | jq -r '.sha')
echo "Last Commit: ${LAST_COMMIT}"
if [ -z "$LAST_COMMIT" ]
then
echo "Error! Could not get Last Commit SHA"
exit 1
fi
else
LAST_COMMIT=${DRONE_COMMIT_SHA}
fi
if [ -z "$TAG_PREFIX" ]
then
echo "You did not supply a custom tag prefix. Defaulting to ${DEFAULT_TAG_PREFIX}"
TAG_PREFIX=${DEFAULT_TAG_PREFIX}
fi
if [ -f '.tags' ]
then
NEW_TAG=$(cat ./.tags)
echo ".tags file exist, Reads from the File: ${NEW_TAG}"
if [ "${NEW_TAG#$TAG_PREFIX}" == "${NEW_TAG}" ]
then
echo "Tag read from the .tags file doesnt have prefix. Prepending Prefix"
NEW_TAG="${TAG_PREFIX}${NEW_TAG}"
fi
else
LAST_TAG=$(curl -sS \
"${AUTH[@]}" \
${GITHUB_API_REPO_URL}/tags | jq -r '.[].name' | grep -m 1 ${TAG_PREFIX})
echo "Last Tag: ${LAST_TAG}"
if [ -z "$LAST_TAG" ]
then
echo "No previous tags found with prefix: ${TAG_PREFIX}... Defaulting to ${DEFAULT_NEW_PATCH_VERSION}"
NEW_PATCH_VERSION=${DEFAULT_NEW_PATCH_VERSION}
NEW_TAG=${TAG_PREFIX}${NEW_PATCH_VERSION}
else
echo "Bumping the version"
let NEW_PATCH_VERSION=${LAST_TAG##*.}+1
NEW_TAG=${LAST_TAG%.*}.${NEW_PATCH_VERSION}
if [ -z "$NEW_TAG" ]
then
echo "Error! Non parse-able Previous Tag ${LAST_TAG}"
exit 1
fi
fi
fi
if [ -z "$NEW_TAG" ]
then
echo "Error! Derived new-tag is empty. Exiting."
exit 1
fi
echo "New Tag in Draft: ${NEW_TAG}"
if [ "$STRIP_PREFIX" == 'true' ]
then
echo "Removing prefix from the tag"
NEW_TAG=${NEW_TAG#$TAG_PREFIX}
fi
if [ "$MODE" == 'READONLY' ]
then
echo "Read only Mode. So, Exiting!"
elif [ "$MODE" == 'WRITE_TO_FILE' ]
then
echo "Writing to .tags file"
echo "${NEW_TAG}">./.tags
else
echo "Tagging the remote repo"
response=$(curl -sS -X POST \
"${AUTH[@]}" \
--header "Content-Type:application/json" \
--data '{"tag": "'${NEW_TAG}'","message":"Some message","type":"commit","object":"'${LAST_COMMIT}'"}' \
${GITHUB_API_REPO_URL}/git/tags)
NEW_TAG_SHA=$(echo "$response" | jq -r '.sha')
echo "New Tag Sha: ${NEW_TAG_SHA}"
if [ \( -z "$NEW_TAG_SHA" \) -o \( "$NEW_TAG_SHA" == 'null' \) ]
then
echo "Error! Something went wrong. Exiting."
echo "Last API call response: ${response}"
exit 1
fi
response=$(curl -sS -X POST \
"${AUTH[@]}" \
--header "Content-Type:application/json" \
--data '{"ref": "refs/tags/'${NEW_TAG}'","sha":"'${NEW_TAG_SHA}'"}' \
${GITHUB_API_REPO_URL}/git/refs)
NEW_TAG_CREATED=$(echo "$response" | jq -r '.ref')
echo "New Tag Created: ${NEW_TAG_CREATED}"
if [ \( -z "$NEW_TAG_CREATED" \) -o \( "$NEW_TAG_CREATED" == 'null' \) ]
then
echo "Error! Something went wrong. Exiting."
echo "Last API call response: ${response}"
exit 1
fi
fi