-
Notifications
You must be signed in to change notification settings - Fork 3
132 lines (110 loc) · 4.21 KB
/
go.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
# This workflow will build a golang project
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-go
name: Go build
env:
ProductName: blockchain_box
on:
push:
tags:
- 'v*'
jobs:
release:
runs-on: ubuntu-latest
outputs:
UPLOAD_URL: ${{ steps.stepCreateRelease.outputs.upload_url }}
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Get latest tag
run: |
echo "LATEST_TAG=$(git tag | grep -v '^latest$' | sort -V | tail -n1)" >> $GITHUB_ENV
- name: Bump version and push tag
id: tag-version
uses: mathieudutour/[email protected]
with:
tag_prefix: ""
custom_tag: ${{ env.LATEST_TAG }}
github_token: ${{ secrets.GITHUB_TOKEN }}
- name: Step GitHub release
id: stepCreateRelease
uses: ncipollo/release-action@v1
with:
skipIfReleaseExists: 'true'
tag: ${{ env.LATEST_TAG }}
name: ${{ env.LATEST_TAG }}
Build:
runs-on: ubuntu-latest
needs: release
strategy:
matrix:
goos: [linux, windows, darwin]
goarch: [amd64, arm64]
steps:
- name: CheckOut
uses: actions/checkout@v4
- name: Set APP_VERSION env
run: echo APP_VERSION=$(echo ${GITHUB_REF} | rev | cut -d'/' -f 1 | rev ) >> ${GITHUB_ENV}
- name: Set BUILD_TIME env
run: echo BUILD_TIME=$(date) >> ${GITHUB_ENV}
- name: Environment Printer
uses: managedkaos/[email protected]
- name: GO Release
uses: wangyoucao577/go-release-action@master
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
goos: ${{ matrix.goos }}
goarch: ${{ matrix.goarch }}
build_flags: -v
overwrite: true
ldflags: -X "${{ env.ProductName }}.appVersion=${{ env.APP_VERSION }}" -X "${{ env.ProductName }}.buildTime=${{ env.BUILD_TIME }}" -X ${{ env.ProductName }}.gitCommit=${{ github.sha }} -X ${{ env.ProductName }}.gitRef=${{ github.ref }}
RemoveOldRelease:
runs-on: ubuntu-latest
needs: Build
steps:
- name: install github-cli
run: |
type -p curl >/dev/null || sudo apt install curl -y
curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg \
&& sudo chmod go+r /usr/share/keyrings/githubcli-archive-keyring.gpg \
&& echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null \
&& sudo apt update \
&& sudo apt install gh -y
- name: CheckOut
uses: actions/checkout@v4
- name: Set APP_VERSION env
run: |
APP_VERSION=$(echo ${GITHUB_REF} | rev | cut -d'/' -f 1 | rev ) \
function get_pre_del_tag {
local v_str=$1
baseStr=$(echo $v_str | cut -d'.' -f1)
base=${baseStr//v/}
major=$(echo $v_str | cut -d'.' -f2)
minor=$(echo $v_str | cut -d'.' -f3)
if ((minor>0)); then
minor=$((minor-1))
else
minor=999
if ((major>0)); then
major=$((major-1))
else
major=999
if ((base>0)); then
base=$((base-1))
else
echo "Error: Version cannot be decremented."
exit 1
fi
fi
fi
pre_v_no="v${base}.${major}.${minor}"
echo $pre_v_no
}
APP_OLD_VERSION=$(get_pre_del_tag $(get_pre_del_tag $APP_VERSION))
echo "Old version to remove: ${APP_OLD_VERSION}"
echo APP_OLD_VERSION=${APP_OLD_VERSION} >> ${GITHUB_ENV}
- name: Remove Old Release
run: |
gh release delete ${{ env.APP_OLD_VERSION }} -y
git push origin --delete ${{ env.APP_OLD_VERSION }}
env:
GH_TOKEN: ${{ github.token }}