11name : Build
22
33on :
4- push :
5- branches : [main]
6- pull_request :
4+ push :
5+ branches : [main]
6+ tags :
7+ - ' v*'
8+ pull_request :
79
810jobs :
9- build :
10- name : Build (${{ matrix.goos }}/${{ matrix.goarch }})
11-
12- strategy :
13- fail-fast : false
14- matrix :
15- include :
16- - goos : linux
17- goarch : amd64
18- runner : ubuntu-latest
19-
20- - goos : linux
21- goarch : arm64
22- runner : ubuntu-24.04-arm
23-
24- - goos : windows
25- goarch : amd64
26- runner : ubuntu-latest
27-
28- - goos : windows
29- goarch : arm64
30- runner : ubuntu-latest
31-
32- - goos : darwin
33- goarch : amd64
34- runner : ubuntu-latest
35-
36- - goos : darwin
37- goarch : arm64
38- runner : ubuntu-latest
39-
40- runs-on : ${{ matrix.runner }}
41-
42- steps :
43- - name : Checkout code
44- uses : actions/checkout@v4
45-
46- - name : Set up Go
47- uses : actions/setup-go@v5
48- with :
49- go-version : " 1.25"
50- cache : true
51- cache-dependency-path : go.sum
52-
53- - name : Install CGO deps (Linux only)
54- if : matrix.goos == 'linux'
55- run : |
56- sudo apt-get update
57- sudo apt-get install -y build-essential libasound2-dev
58-
59- - name : Set binary extension
60- id : bin
61- run : |
62- if [ "${{ matrix.goos }}" = "windows" ]; then
63- echo "ext=.exe" >> $GITHUB_OUTPUT
64- else
65- echo "ext=" >> $GITHUB_OUTPUT
66- fi
67-
68- - name : Set CGO flag
69- id : cgo
70- run : |
71- if [ "${{ matrix.goos }}" = "linux" ]; then
72- echo "enabled=1" >> $GITHUB_OUTPUT
73- else
74- echo "enabled=0" >> $GITHUB_OUTPUT
75- fi
76-
77- - name : Build Discord bot
78- env :
79- GOOS : ${{ matrix.goos }}
80- GOARCH : ${{ matrix.goarch }}
81- CGO_ENABLED : ${{ steps.cgo.outputs.enabled }}
82- run : |
83- set -e
84-
85- BUILD_DATE=$(date -u +"%Y-%m-%dT%H-%M-%SZ")
86- GIT_COMMIT=$(git rev-parse --short HEAD 2>/dev/null || echo "none")
87-
88- mkdir -p dist
89-
90- go build -trimpath \
91- -ldflags="-s -w \
92- -X github.com/keshon/buildinfo.Version=dev \
93- -X github.com/keshon/buildinfo.Commit=${GIT_COMMIT} \
94- -X github.com/keshon/buildinfo.BuildTime=${BUILD_DATE} \
95- -X github.com/keshon/buildinfo.Project=Melodix \
96- -X 'github.com/keshon/buildinfo.Description=Discord music bot that allows you to play music from YouTube, SoundCloud and internet radio streams.'" \
97- -o dist/melodix-discord${{ steps.bin.outputs.ext }} \
98- ./cmd/discord/
99-
100- - name : Build CLI player
101- env :
102- GOOS : ${{ matrix.goos }}
103- GOARCH : ${{ matrix.goarch }}
104- CGO_ENABLED : ${{ steps.cgo.outputs.enabled }}
105- run : |
106- set -e
107-
108- BUILD_DATE=$(date -u +"%Y-%m-%dT%H-%M-%SZ")
109- GIT_COMMIT=$(git rev-parse --short HEAD 2>/dev/null || echo "none")
110-
111- go build -trimpath \
112- -ldflags="-s -w \
113- -X github.com/keshon/buildinfo.Version=dev \
114- -X github.com/keshon/buildinfo.Commit=${GIT_COMMIT} \
115- -X github.com/keshon/buildinfo.BuildTime=${BUILD_DATE} \
116- -X github.com/keshon/buildinfo.Project=Melodix \
117- -X 'github.com/keshon/buildinfo.Description=CLI music player - same playback engine as the Discord bot.'" \
118- -o dist/melodix-cli${{ steps.bin.outputs.ext }} \
119- ./cmd/cli/
120-
121- - name : Prepare build bundle
122- run : |
123- PKG_ROOT="melodix-${{ matrix.goos }}-${{ matrix.goarch }}"
124- mkdir -p "${PKG_ROOT}"
125-
126- cp "dist/melodix-discord${{ steps.bin.outputs.ext }}" "${PKG_ROOT}/"
127- cp "dist/melodix-cli${{ steps.bin.outputs.ext }}" "${PKG_ROOT}/"
128-
129- cp README.md LICENSE "${PKG_ROOT}/"
130-
131- if [ -f .env.example ]; then
132- cp .env.example "${PKG_ROOT}/.env"
133- fi
134-
135- mkdir -p "${PKG_ROOT}/data"
136-
137- if [ -d assets ]; then
138- cp -R assets "${PKG_ROOT}/"
139- fi
140-
141- zip -r "dist/${PKG_ROOT}.zip" "${PKG_ROOT}"
142-
143- - name : Upload artifact
144- uses : actions/upload-artifact@v4
145- with :
146- name : melodix-${{ matrix.goos }}-${{ matrix.goarch }}
147- path : dist/melodix-${{ matrix.goos }}-${{ matrix.goarch }}.zip
148- retention-days : 14
11+ build :
12+ name : Build (${{ matrix.goos }}/${{ matrix.goarch }})
13+
14+ strategy :
15+ fail-fast : false
16+ matrix :
17+ include :
18+ - goos : linux
19+ goarch : amd64
20+ runner : ubuntu-latest
21+
22+ - goos : linux
23+ goarch : arm64
24+ runner : ubuntu-24.04-arm
25+
26+ - goos : windows
27+ goarch : amd64
28+ runner : ubuntu-latest
29+
30+ - goos : windows
31+ goarch : arm64
32+ runner : ubuntu-latest
33+
34+ - goos : darwin
35+ goarch : amd64
36+ runner : ubuntu-latest
37+
38+ - goos : darwin
39+ goarch : arm64
40+ runner : ubuntu-latest
41+
42+ runs-on : ${{ matrix.runner }}
43+
44+ steps :
45+ - name : Checkout code
46+ uses : actions/checkout@v4
47+
48+ - name : Set up Go
49+ uses : actions/setup-go@v5
50+ with :
51+ go-version : ' 1.25'
52+ cache : true
53+ cache-dependency-path : go.sum
54+
55+ - name : Install CGO deps (Linux only)
56+ if : matrix.goos == 'linux'
57+ run : |
58+ sudo apt-get update
59+ sudo apt-get install -y build-essential libasound2-dev
60+
61+ - name : Set binary extension
62+ id : bin
63+ run : |
64+ if [ "${{ matrix.goos }}" = "windows" ]; then
65+ echo "ext=.exe" >> $GITHUB_OUTPUT
66+ else
67+ echo "ext=" >> $GITHUB_OUTPUT
68+ fi
69+
70+ - name : Set CGO flag
71+ id : cgo
72+ run : |
73+ if [ "${{ matrix.goos }}" = "linux" ]; then
74+ echo "enabled=1" >> $GITHUB_OUTPUT
75+ else
76+ echo "enabled=0" >> $GITHUB_OUTPUT
77+ fi
78+
79+ - name : Build Discord bot
80+ env :
81+ GOOS : ${{ matrix.goos }}
82+ GOARCH : ${{ matrix.goarch }}
83+ CGO_ENABLED : ${{ steps.cgo.outputs.enabled }}
84+ run : |
85+ set -e
86+
87+ BUILD_DATE=$(date -u +"%Y-%m-%dT%H-%M-%SZ")
88+ GIT_COMMIT=$(git rev-parse --short HEAD 2>/dev/null || echo "none")
89+
90+ mkdir -p dist
91+
92+ go build -trimpath \
93+ -ldflags="-s -w \
94+ -X github.com/keshon/buildinfo.Version=dev \
95+ -X github.com/keshon/buildinfo.Commit=${GIT_COMMIT} \
96+ -X github.com/keshon/buildinfo.BuildTime=${BUILD_DATE} \
97+ -X github.com/keshon/buildinfo.Project=Melodix \
98+ -X 'github.com/keshon/buildinfo.Description=Discord music bot that allows you to play music from YouTube, SoundCloud and internet radio streams.'" \
99+ -o dist/melodix-discord${{ steps.bin.outputs.ext }} \
100+ ./cmd/discord/
101+
102+ - name : Build CLI player
103+ env :
104+ GOOS : ${{ matrix.goos }}
105+ GOARCH : ${{ matrix.goarch }}
106+ CGO_ENABLED : ${{ steps.cgo.outputs.enabled }}
107+ run : |
108+ set -e
109+
110+ BUILD_DATE=$(date -u +"%Y-%m-%dT%H-%M-%SZ")
111+ GIT_COMMIT=$(git rev-parse --short HEAD 2>/dev/null || echo "none")
112+
113+ go build -trimpath \
114+ -ldflags="-s -w \
115+ -X github.com/keshon/buildinfo.Version=dev \
116+ -X github.com/keshon/buildinfo.Commit=${GIT_COMMIT} \
117+ -X github.com/keshon/buildinfo.BuildTime=${BUILD_DATE} \
118+ -X github.com/keshon/buildinfo.Project=Melodix \
119+ -X 'github.com/keshon/buildinfo.Description=CLI music player - same playback engine as the Discord bot.'" \
120+ -o dist/melodix-cli${{ steps.bin.outputs.ext }} \
121+ ./cmd/cli/
122+
123+ - name : Prepare build bundle
124+ run : |
125+ PKG_ROOT="melodix-${{ matrix.goos }}-${{ matrix.goarch }}"
126+ mkdir -p "${PKG_ROOT}"
127+
128+ cp "dist/melodix-discord${{ steps.bin.outputs.ext }}" "${PKG_ROOT}/"
129+ cp "dist/melodix-cli${{ steps.bin.outputs.ext }}" "${PKG_ROOT}/"
130+
131+ cp README.md LICENSE "${PKG_ROOT}/"
132+
133+ if [ -f .env.example ]; then
134+ cp .env.example "${PKG_ROOT}/.env"
135+ fi
136+
137+ mkdir -p "${PKG_ROOT}/data"
138+
139+ if [ -d assets ]; then
140+ cp -R assets "${PKG_ROOT}/"
141+ fi
142+
143+ zip -r "dist/${PKG_ROOT}.zip" "${PKG_ROOT}"
144+
145+ - name : Upload artifact
146+ uses : actions/upload-artifact@v4
147+ with :
148+ name : melodix-${{ matrix.goos }}-${{ matrix.goarch }}
149+ path : dist/melodix-${{ matrix.goos }}-${{ matrix.goarch }}.zip
150+ retention-days : 14
0 commit comments