-
Notifications
You must be signed in to change notification settings - Fork 104
133 lines (123 loc) Β· 4.65 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
name: "Build and Release"
on:
push:
branches:
- main
paths-ignore:
- "README.md"
- "LICENSE"
- "docs/**"
- "**.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"
# 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: Build Executables ποΈ π
run: |
mkdir -p bin
allowed_archs="amd64 arm arm64 386"
for var in $(go tool dist list); do
if [[ ! $allowed_archs =~ "$(cut -d '/' -f 2 <<< $var)" ]]; then
echo "Skipping: $var"
continue
fi
file_name="jiotv_go-${{ steps.gen_tag.outputs.tag }}-$(cut -d '/' -f 1 <<< $var)-$(cut -d '/' -f 2 <<< $var)"
case "$(cut -d '/' -f 1 <<< $var)" in
"windows")
echo "Building $var"
GOOS="$(cut -d '/' -f 1 <<< $var)" GOARCH="$(cut -d '/' -f 2 <<< $var)" go build -o bin/"$file_name.exe" -trimpath -ldflags="-s -w" ./cmd/jiotv_go &
;;
"linux" | "darwin")
echo "Building $var"
GOOS="$(cut -d '/' -f 1 <<< $var)" GOARCH="$(cut -d '/' -f 2 <<< $var)" go build -o bin/"$file_name" -trimpath -ldflags="-s -w" ./cmd/jiotv_go &
;;
*)
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 }}