-
Notifications
You must be signed in to change notification settings - Fork 25
235 lines (229 loc) · 8.46 KB
/
build.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
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
name: Cross Platform build
on: [push, pull_request]
jobs:
build_linux:
runs-on: ubuntu-20.04
strategy:
matrix:
version: ['linux-armhf', 'linux-arm64', 'linux-i386', 'linux-amd64']
include:
# add the GO naming convention for OS ($GOOS) and architecture ($GOARCH)
# instead of using Linux' naming convention (version items).
- version: linux-armhf
OS: linux
ARCH: arm
- version: linux-arm64
OS: linux
ARCH: arm64
- version: linux-i386
OS: linux
ARCH: '386'
- version: linux-amd64
OS: linux
ARCH: amd64
steps:
- uses: actions/checkout@v1
with:
submodules: true
- name: Build binary for ${{ matrix.version }}
run: |
docker run --rm -v "$PWD":/usr/src/myapp -w /usr/src/myapp dh1tw/remoteaudio-xcompile:${{ matrix.version }} /bin/sh -c 'make dist'
- name: Prepare build artifact for stashing
run: |
mkdir release
mv ./remoteAudio ./release
# The build artifact can be identified by the trailing sha of the git commit
- name: Stash the build artifact
uses: actions/upload-artifact@v1
with:
name: remoteAudio-${{ matrix.OS }}-${{ matrix.ARCH }}-${{ github.sha }}
path: ./release
build_macos:
runs-on: macos-latest
strategy:
matrix:
version: ['darwin-amd64', 'darwin-arm64']
include:
- version: darwin-amd64
OS: darwin
ARCH: amd64
- version: darwin-arm64
OS: darwin
ARCH: arm64
steps:
- name: Set up Go 1.18
uses: actions/setup-go@v1
id: go
with:
go-version: 1.18
- uses: actions/checkout@v1
with:
submodules: true
- name: Install dependencies
run: |
brew install pkg-config
brew install opus
brew install opusfile
brew install portaudio
brew install protobuf
brew install libsamplerate
brew install upx
- name: Install code generators
run: make install-deps
- name: Build binary for macOS
run: |
export PATH=/System/Volumes/Data/Users/runner/go/bin:$PATH
make dist
- name: Prepare build artifact for stashing
run: |
mkdir release
mv ./remoteAudio ./release
# The build artifact can be identified by the trailing sha of the git commit
- name: Stash the build artifact
uses: actions/upload-artifact@v1
with:
name: remoteAudio-${{ matrix.OS }}-${{ matrix.ARCH }}-${{ github.sha }}
path: ./release
build_windows:
runs-on: ubuntu-20.04
strategy:
matrix:
version: ['windows-amd64', 'windows-i386']
include:
# add the GO naming convention for OS ($GOOS) and architecture ($GOARCH)
# instead of using Linux' naming convention (version items).
- version: windows-amd64
OS: windows
ARCH: amd64
- version: windows-i386
OS: windows
ARCH: '386'
steps:
- uses: actions/checkout@v1
with:
submodules: true
- name: Build binary for ${{ matrix.version }}
run: |
docker run --rm -v "$PWD":/usr/src/myapp -w /usr/src/myapp dh1tw/remoteaudio-xcompile:${{ matrix.version }} /bin/sh -c 'make dist && /scripts/getlibs.sh .'
- name: Prepare build artifacts for stashing
run: |
mkdir release
mv ./remoteAudio.exe ./release
mv ./*.dll ./release
# The build artifact can be identified by the trailing sha of the git commit
- name: Stash the build artifact
uses: actions/upload-artifact@v1
with:
name: remoteAudio-${{ matrix.OS }}-${{ matrix.ARCH }}-${{ github.sha }}
path: ./release
# A Github release is created whenever the git reference contains a tag, starting with 'v*' (e.g. v0.4.2)
# And the previous build jobs have been successful
create_release:
runs-on: ubuntu-20.04
needs: [build_linux, build_macos, build_windows]
if: startsWith(github.ref, 'refs/tags/v')
steps:
- name: Create Release
id: create_release
uses: actions/[email protected]
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ github.ref }}
release_name: Release ${{ github.ref }}
draft: true
prerelease: false
# since jobs can not share any variables we have to copy the URL of the created Github release
# into a file and stash it as an artifact
- name: Copy release URL into file
run: |
mkdir release
printf "%s" "${{ steps.create_release.outputs.upload_url }}" > release/url.txt
- name: Stash file containing the release URL as an artifact
uses: actions/upload-artifact@v1
with:
name: release-url
path: ./release
# In this job we upload the release artifacts to the corresponding release
upload:
runs-on: ubuntu-20.04
needs: create_release # release must be created before this job can start
strategy:
matrix:
version: ['linux-armhf', 'linux-arm64', 'linux-i386', 'linux-amd64', 'darwin-amd64', 'darwin-arm64', 'windows-amd64', 'windows-i386']
# add the GO naming convention for OS ($GOOS) and architecture ($GOARCH)
# instead of using Linux' naming convention (version items).
include:
- version: linux-armhf
OS: linux
ARCH: arm
- version: linux-arm64
OS: linux
ARCH: arm64
- version: linux-i386
OS: linux
ARCH: '386'
- version: linux-amd64
OS: linux
ARCH: amd64
- version: darwin-amd64
OS: darwin
ARCH: amd64
- version: darwin-arm64
OS: darwin
ARCH: arm64
- version: windows-amd64
OS: windows
ARCH: amd64
- version: windows-i386
OS: windows
ARCH: '386'
steps:
# Since Github actions (currently) doesn't provide a slugged version of the git tag we have to
# create it by ourselves. It is then made available to other steps in this job as a step.outputs
# variable
- name: Get the version (git tag)
id: get_version
run: |
echo ${GITHUB_REF/refs\/tags\//}
echo ::set-output name=VERSION::${GITHUB_REF/refs\/tags\//}
- name: Retrieve stashed intermediary build artifact
uses: actions/download-artifact@v1
with:
name: remoteAudio-${{ matrix.OS }}-${{ matrix.ARCH }}-${{ github.sha }}
# rename the retrieved intermediary artifact and prepare zip file
- name: Prepare release artifact
env:
VERSION: ${{ steps.get_version.outputs.VERSION }}
run: |
mv ./remoteAudio-${{ matrix.OS }}-${{ matrix.ARCH }}-${{ github.sha }}/* .
test -f ./remoteAudio && chmod +x ./remoteAudio #only on linux & darwin needed
zip -j remoteAudio-$VERSION-${{ matrix.OS }}-${{ matrix.ARCH }}.zip ./*
# Download the previously uploaded artifact which contains the release URL
- name: Retrieve stashed release URL
uses: actions/download-artifact@v1
with:
name: release-url
# Write content of downloaded file (a string which contains the release URL) into a step.outputs variable
- name: Read release URL
id: get_release_url
run: echo ::set-output name=URL::$(cat release-url/url.txt)
# This step is only needed because the upload-release-asset currently doesn't support
# environment variables. Therefore they must be written and referenced through step.outputs
- name: Prepare artifact metadata
id: prepare_artifact_metadata
env:
VERSION: ${{ steps.get_version.outputs.VERSION }}
run: |
echo ::set-output name=ARTIFACT_PATH::./remoteAudio-$VERSION-${{ matrix.OS }}-${{ matrix.ARCH }}.zip
echo ::set-output name=ARTIFACT_NAME::remoteAudio-$VERSION-${{ matrix.OS }}-${{ matrix.ARCH }}.zip
# Finally upload the artifact to the corresponding release
- name: Upload Release Artifact ${{ matrix.version }}
uses: actions/[email protected]
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.get_release_url.outputs.URL }}
asset_path: ${{ steps.prepare_artifact_metadata.outputs.ARTIFACT_PATH }}
asset_name: ${{ steps.prepare_artifact_metadata.outputs.ARTIFACT_NAME }}
asset_content_type: application/gzip