-
Notifications
You must be signed in to change notification settings - Fork 103
165 lines (154 loc) Β· 6.73 KB
/
release.yml
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
157
158
159
160
161
162
163
164
165
name: "Build and Release"
on:
push:
branches:
- main
paths-ignore:
- "README.md"
- "LICENSE"
- "docs/**"
- "scripts/**"
- "**.sh"
- "**.md"
- ".github/workflows/dependabot_action.yml"
- ".github/workflows/pre-release.yml"
- ".github/workflows/test-build.yml"
- ".github/workflows/docker.yml"
- ".github/dependabot.yml"
- ".github/workflows/sync-wiki.yml"
concurrency:
group: ${{ github.ref }}-release
cancel-in-progress: true
permissions:
contents: write
jobs:
release:
runs-on: ubuntu-latest
steps:
- name: Checkout ποΈ
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup Go π¦
uses: actions/setup-go@v4
with:
go-version-file: "go.mod"
- name: Increment version π
id: gen_tag
run: |
# setup git
git config user.name "GitHub Action"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
# Get the latest tag that looks like a semver tag.
tag=$(git describe --tags --match "v[0-9]*.[0-9]*.[0-9]*" --abbrev=0)
echo "Latest tag: $tag"
if [[ $tag == "" ]]; then
echo "No semver tag found, use 0.0.0"
tag="v0.0.0"
fi
# Get the major, minor and patch parts from the tag.
major_minor_patch=$(echo $tag | grep -oE "[0-9]+\.[0-9]+\.[0-9]+")
echo "Major, minor and patch version: $major_minor_patch"
major=$(echo $major_minor_patch | grep -oE "^[0-9]+")
minor=$(echo $major_minor_patch | grep -oE "\.[0-9]+\." | grep -oE "[0-9]+")
patch=$(echo $major_minor_patch | grep -oE "[0-9]+$")
echo "Major version: $major"
echo "Minor version: $minor"
echo "Patch version: $patch"
commits=$(git rev-list $tag.. --count)
echo "Commits since last tag: $commits"
# If any of commit messages contains "BREAKING" string, increment major version.
breaking_changes=$(git log $tag.. --pretty=%B | grep -iE "BREAKING" | wc -l)
echo "Breaking changes: $breaking_changes"
if [[ $breaking_changes -gt 0 ]]; then
major=$((major + 1))
minor=0
patch=0
else
# Increment minor version.
features=$(git log $tag.. --pretty=%B | grep -iE "feat|compatibility|integration|upgrade" | wc -l)
echo "Features: $features"
if [[ $features -gt 0 ]]; then
minor=$((minor + 1))
patch=0
else
patch=$((patch + 1))
fi
fi
# Calculate the new version number.
new_version="v${major}.${minor}.${patch}"
echo "New version: $new_version"
sed -i "s/Version:[[:space:]]*\"[^\"]*\"/Version: \"$new_version\"/" main.go
git add main.go && git commit -m "Bump version to $new_version" && git push origin HEAD:main
# Mirrors tags
git tag -fa v$major -m "Mirror tag $new_version"
git tag -fa v$major.$minor -m "Mirror tag $new_version"
git push --tags --force
# Set the new tag.
echo "tag=$new_version" >> $GITHUB_OUTPUT
- name: Setup android NDK
run: |
wget -q --show-progress https://dl.google.com/android/repository/android-ndk-r26b-linux.zip
unzip -qq android-ndk-r26b-linux.zip
echo "$PWD/android-ndk-r26b/toolchains/llvm/prebuilt/linux-x86_64/bin" >> $GITHUB_PATH
- name: Build Executables ποΈ π
run: |
mkdir -p bin
allowed_archs="amd64 arm arm64 386"
for var in $(go tool dist list); do
# skip disallowed archs
if [[ ! $allowed_archs =~ "$(cut -d '/' -f 2 <<<$var)" ]]; then
echo "Skipping: $var"
continue
fi
# skip arm for windows
if [[ "$(cut -d '/' -f 1 <<<$var)" == "windows" && "$(cut -d '/' -f 2 <<<$var)" == "arm" ]]; then
echo "Skipping: $var (windows/arm)"
continue
fi
file_name="jiotv_go-$(cut -d '/' -f 1 <<< $var)-$(cut -d '/' -f 2 <<< $var)"
case "$(cut -d '/' -f 1 <<< $var)" in
"windows")
echo "Building $var"
CGO_ENABLED=0 GOOS="$(cut -d '/' -f 1 <<< $var)" GOARCH="$(cut -d '/' -f 2 <<< $var)" go build -o bin/"$file_name.exe" -trimpath -ldflags="-s -w" . &
;;
"linux" | "darwin")
echo "Building $var"
CGO_ENABLED=0 GOOS="$(cut -d '/' -f 1 <<< $var)" GOARCH="$(cut -d '/' -f 2 <<< $var)" go build -o bin/"$file_name" -trimpath -ldflags="-s -w" . &
;;
"android")
echo "Building $var"
case "$(cut -d '/' -f 2 <<<$var)" in
"arm")
CGO_ENABLED=1 GOOS="$(cut -d '/' -f 1 <<<$var)" GOARCH="$(cut -d '/' -f 2 <<<$var)" CC="armv7a-linux-androideabi28-clang" CXX="armv7a-linux-androideabi28-clang++" go build -o bin/"jiotv_go-$(cut -d '/' -f 1 <<<$var)-$(cut -d '/' -f 2 <<<$var)" -trimpath -ldflags="-s -w" .
;;
"arm64")
CGO_ENABLED=1 GOOS="$(cut -d '/' -f 1 <<<$var)" GOARCH="$(cut -d '/' -f 2 <<<$var)" CC="aarch64-linux-android32-clang" CXX="aarch64-linux-android32-clang++" go build -o bin/"jiotv_go-$(cut -d '/' -f 1 <<<$var)-$(cut -d '/' -f 2 <<<$var)" -trimpath -ldflags="-s -w" .
;;
"amd64")
CGO_ENABLED=1 GOOS="$(cut -d '/' -f 1 <<<$var)" GOARCH="$(cut -d '/' -f 2 <<<$var)" CC="x86_64-linux-android32-clang" CXX="x86_64-linux-android32-clang++" go build -o bin/"jiotv_go-$(cut -d '/' -f 1 <<<$var)-$(cut -d '/' -f 2 <<<$var)" -trimpath -ldflags="-s -w" .
;;
*)
echo "Skipping: $var"
;;
esac
;;
*)
echo "Skipping: $var"
;;
esac
done
# Wait for all background jobs to finish
wait
- name: Release π¦
uses: softprops/action-gh-release@v1
with:
draft: false
prerelease: false
tag_name: ${{ steps.gen_tag.outputs.tag }}
files: |
./bin/*
generate_release_notes: true
discussion_category_name: releases
env:
GITHUB_TOKEN: ${{ secrets.PAT }}