1
- # Source: https://github.com/arduino/tooling-project-assets/blob/main/workflow-templates/assets/release-go-task/DistTasks.yml
2
1
version : " 3"
3
2
4
3
# This taskfile is ideally meant to be project agnostic and could be dropped in
@@ -17,11 +16,6 @@ version: "3"
17
16
#
18
17
# The project MUST contain a LICENSE.txt file in the root folder or packaging will fail.
19
18
20
- vars :
21
- CONTAINER : " docker.elastic.co/beats-dev/golang-crossbuild"
22
- GO_VERSION : " 1.14.7"
23
- CHECKSUM_FILE : " {{.VERSION}}-checksums.txt"
24
-
25
19
tasks :
26
20
all :
27
21
desc : Build for distribution for all platforms
@@ -37,176 +31,222 @@ tasks:
37
31
38
32
Windows_32bit :
39
33
desc : Builds Windows 32 bit binaries
40
- dir : " {{.DIST_DIR}}"
34
+ dir : " {{ .DIST_DIR }}"
41
35
cmds :
42
36
- |
43
37
docker run -v `pwd`/..:/home/build -w /home/build \
44
38
-e CGO_ENABLED=1 \
45
- {{.CONTAINER}}:{{.CONTAINER_TAG}} \
46
- --build-cmd "{{.BUILD_COMMAND}}" \
47
- -p "{{.BUILD_PLATFORM}}"
39
+ {{ .CONTAINER }}:{{ .CONTAINER_TAG }} \
40
+ --build-cmd "{{ .BUILD_COMMAND }}" \
41
+ -p "{{ .BUILD_PLATFORM }}"
48
42
49
- zip {{.PACKAGE_NAME}} {{.PLATFORM_DIR}}/{{.PROJECT_NAME}}.exe ../LICENSE.txt -j
50
- sha256sum {{.PACKAGE_NAME}} >> {{.CHECKSUM_FILE}}
43
+ zip {{ .PACKAGE_NAME}} {{ .PLATFORM_DIR }}/{{ .PROJECT_NAME }}.exe ../LICENSE.txt -j
44
+ sha256sum {{ .PACKAGE_NAME }} >> {{ .CHECKSUM_FILE }}
51
45
52
46
vars :
53
- PLATFORM_DIR : " {{.PROJECT_NAME}}_windows_386"
54
- BUILD_COMMAND : " go build -o {{.DIST_DIR}}/{{.PLATFORM_DIR}}/{{.PROJECT_NAME}}.exe {{.LDFLAGS}}"
47
+ PLATFORM_DIR : " {{ .PROJECT_NAME }}_windows_386"
48
+ BUILD_COMMAND : " go build -o {{ .DIST_DIR }}/{{ .PLATFORM_DIR }}/{{ .PROJECT_NAME }}.exe {{ .LDFLAGS }}"
55
49
BUILD_PLATFORM : " windows/386"
56
- CONTAINER_TAG : " {{.GO_VERSION}}-main"
50
+ CONTAINER_TAG : " {{ .GO_VERSION }}-main"
57
51
PACKAGE_PLATFORM : " Windows_32bit"
58
- PACKAGE_NAME : " {{.PROJECT_NAME}}_{{.VERSION}}_{{.PACKAGE_PLATFORM}}.zip"
52
+ PACKAGE_NAME : " {{ .PROJECT_NAME }}_{{ .VERSION }}_{{ .PACKAGE_PLATFORM }}.zip"
59
53
60
54
Windows_64bit :
61
55
desc : Builds Windows 64 bit binaries
62
- dir : " {{.DIST_DIR}}"
56
+ dir : " {{ .DIST_DIR }}"
63
57
cmds :
64
58
- |
65
59
docker run -v `pwd`/..:/home/build -w /home/build \
66
60
-e CGO_ENABLED=1 \
67
- {{.CONTAINER}}:{{.CONTAINER_TAG}} \
68
- --build-cmd "{{.BUILD_COMMAND}}" \
69
- -p "{{.BUILD_PLATFORM}}"
61
+ {{ .CONTAINER }}:{{ .CONTAINER_TAG }} \
62
+ --build-cmd "{{ .BUILD_COMMAND }}" \
63
+ -p "{{ .BUILD_PLATFORM }}"
70
64
71
- zip {{.PACKAGE_NAME}} {{.PLATFORM_DIR}}/{{.PROJECT_NAME}}.exe ../LICENSE.txt -j
72
- sha256sum {{.PACKAGE_NAME}} >> {{.CHECKSUM_FILE}}
65
+ zip {{ .PACKAGE_NAME}} {{ .PLATFORM_DIR }}/{{ .PROJECT_NAME }}.exe ../LICENSE.txt -j
66
+ sha256sum {{ .PACKAGE_NAME }} >> {{ .CHECKSUM_FILE }}
73
67
74
68
vars :
75
- PLATFORM_DIR : " {{.PROJECT_NAME}}_windows_amd64"
76
- BUILD_COMMAND : " go build -o {{.DIST_DIR}}/{{.PLATFORM_DIR}}/{{.PROJECT_NAME}}.exe {{.LDFLAGS}}"
69
+ PLATFORM_DIR : " {{ .PROJECT_NAME }}_windows_amd64"
70
+ BUILD_COMMAND : " go build -o {{ .DIST_DIR }}/{{ .PLATFORM_DIR }}/{{ .PROJECT_NAME }}.exe {{ .LDFLAGS }}"
77
71
BUILD_PLATFORM : " windows/amd64"
78
- CONTAINER_TAG : " {{.GO_VERSION}}-main"
72
+ CONTAINER_TAG : " {{ .GO_VERSION }}-main"
79
73
PACKAGE_PLATFORM : " Windows_64bit"
80
- PACKAGE_NAME : " {{.PROJECT_NAME}}_{{.VERSION}}_{{.PACKAGE_PLATFORM}}.zip"
74
+ PACKAGE_NAME : " {{ .PROJECT_NAME }}_{{ .VERSION }}_{{ .PACKAGE_PLATFORM }}.zip"
81
75
82
76
Linux_32bit :
83
77
desc : Builds Linux 32 bit binaries
84
- dir : " {{.DIST_DIR}}"
78
+ dir : " {{ .DIST_DIR }}"
85
79
cmds :
86
80
- |
87
81
docker run -v `pwd`/..:/home/build -w /home/build \
88
82
-e CGO_ENABLED=1 \
89
- {{.CONTAINER}}:{{.CONTAINER_TAG}} \
90
- --build-cmd "{{.BUILD_COMMAND}}" \
91
- -p "{{.BUILD_PLATFORM}}"
83
+ {{ .CONTAINER }}:{{ .CONTAINER_TAG }} \
84
+ --build-cmd "{{ .BUILD_COMMAND }}" \
85
+ -p "{{ .BUILD_PLATFORM }}"
92
86
93
- tar cz -C {{.PLATFORM_DIR}} {{.PROJECT_NAME}} -C ../.. LICENSE.txt -f {{.PACKAGE_NAME}}
94
- sha256sum {{.PACKAGE_NAME}} >> {{.CHECKSUM_FILE}}
87
+ tar cz -C {{ .PLATFORM_DIR }} {{ .PROJECT_NAME }} -C ../.. LICENSE.txt -f {{ .PACKAGE_NAME }}
88
+ sha256sum {{ .PACKAGE_NAME }} >> {{ .CHECKSUM_FILE }}
95
89
96
90
vars :
97
- PLATFORM_DIR : " {{.PROJECT_NAME}}_linux_amd32"
98
- BUILD_COMMAND : " go build -o {{.DIST_DIR}}/{{.PLATFORM_DIR}}/{{.PROJECT_NAME}} {{.LDFLAGS}}"
91
+ PLATFORM_DIR : " {{ .PROJECT_NAME }}_linux_amd32"
92
+ BUILD_COMMAND : " go build -o {{ .DIST_DIR }}/{{ .PLATFORM_DIR }}/{{ .PROJECT_NAME }} {{ .LDFLAGS }}"
99
93
BUILD_PLATFORM : " linux/386"
100
- CONTAINER_TAG : " {{.GO_VERSION}}-main"
94
+ CONTAINER_TAG : " {{ .GO_VERSION }}-main"
101
95
PACKAGE_PLATFORM : " Linux_32bit"
102
- PACKAGE_NAME : " {{.PROJECT_NAME}}_{{.VERSION}}_{{.PACKAGE_PLATFORM}}.tar.gz"
96
+ PACKAGE_NAME : " {{ .PROJECT_NAME }}_{{ .VERSION }}_{{ .PACKAGE_PLATFORM }}.tar.gz"
103
97
104
98
Linux_64bit :
105
99
desc : Builds Linux 64 bit binaries
106
- dir : " {{.DIST_DIR}}"
100
+ dir : " {{ .DIST_DIR }}"
107
101
cmds :
108
102
- |
109
103
docker run -v `pwd`/..:/home/build -w /home/build \
110
104
-e CGO_ENABLED=1 \
111
- {{.CONTAINER}}:{{.CONTAINER_TAG}} \
112
- --build-cmd "{{.BUILD_COMMAND}}" \
113
- -p "{{.BUILD_PLATFORM}}"
105
+ {{ .CONTAINER }}:{{ .CONTAINER_TAG }} \
106
+ --build-cmd "{{ .BUILD_COMMAND }}" \
107
+ -p "{{ .BUILD_PLATFORM }}"
114
108
115
- tar cz -C {{.PLATFORM_DIR}} {{.PROJECT_NAME}} -C ../.. LICENSE.txt -f {{.PACKAGE_NAME}}
116
- sha256sum {{.PACKAGE_NAME}} >> {{.CHECKSUM_FILE}}
109
+ tar cz -C {{ .PLATFORM_DIR }} {{ .PROJECT_NAME }} -C ../.. LICENSE.txt -f {{ .PACKAGE_NAME }}
110
+ sha256sum {{ .PACKAGE_NAME }} >> {{ .CHECKSUM_FILE }}
117
111
118
112
vars :
119
- PLATFORM_DIR : " {{.PROJECT_NAME}}_linux_amd64"
120
- BUILD_COMMAND : " go build -o {{.DIST_DIR}}/{{.PLATFORM_DIR}}/{{.PROJECT_NAME}} {{.LDFLAGS}}"
113
+ PLATFORM_DIR : " {{ .PROJECT_NAME }}_linux_amd64"
114
+ BUILD_COMMAND : " go build -o {{ .DIST_DIR }}/{{ .PLATFORM_DIR }}/{{ .PROJECT_NAME }} {{ .LDFLAGS }}"
121
115
BUILD_PLATFORM : " linux/amd64"
122
- CONTAINER_TAG : " {{.GO_VERSION}}-main"
116
+ CONTAINER_TAG : " {{ .GO_VERSION }}-main"
123
117
PACKAGE_PLATFORM : " Linux_64bit"
124
- PACKAGE_NAME : " {{.PROJECT_NAME}}_{{.VERSION}}_{{.PACKAGE_PLATFORM}}.tar.gz"
118
+ PACKAGE_NAME : " {{ .PROJECT_NAME }}_{{ .VERSION }}_{{ .PACKAGE_PLATFORM }}.tar.gz"
125
119
126
120
Linux_ARMv7 :
127
121
desc : Builds Linux ARMv7 binaries
128
- dir : " {{.DIST_DIR}}"
122
+ dir : " {{ .DIST_DIR }}"
129
123
cmds :
130
124
- |
131
125
docker run -v `pwd`/..:/home/build -w /home/build \
132
126
-e CGO_ENABLED=1 \
133
- {{.CONTAINER}}:{{.CONTAINER_TAG}} \
134
- --build-cmd "{{.BUILD_COMMAND}}" \
135
- -p "{{.BUILD_PLATFORM}}"
127
+ {{ .CONTAINER }}:{{ .CONTAINER_TAG }} \
128
+ --build-cmd "{{ .BUILD_COMMAND }}" \
129
+ -p "{{ .BUILD_PLATFORM }}"
136
130
137
- tar cz -C {{.PLATFORM_DIR}} {{.PROJECT_NAME}} -C ../.. LICENSE.txt -f {{.PACKAGE_NAME}}
138
- sha256sum {{.PACKAGE_NAME}} >> {{.CHECKSUM_FILE}}
131
+ tar cz -C {{ .PLATFORM_DIR }} {{ .PROJECT_NAME }} -C ../.. LICENSE.txt -f {{ .PACKAGE_NAME }}
132
+ sha256sum {{ .PACKAGE_NAME }} >> {{ .CHECKSUM_FILE }}
139
133
140
134
vars :
141
- PLATFORM_DIR : " {{.PROJECT_NAME}}_linux_arm_7"
142
- BUILD_COMMAND : " go build -o {{.DIST_DIR}}/{{.PLATFORM_DIR}}/{{.PROJECT_NAME}} {{.LDFLAGS}}"
135
+ PLATFORM_DIR : " {{ .PROJECT_NAME }}_linux_arm_7"
136
+ BUILD_COMMAND : " go build -o {{ .DIST_DIR }}/{{ .PLATFORM_DIR }}/{{ .PROJECT_NAME }} {{ .LDFLAGS }}"
143
137
BUILD_PLATFORM : " linux/armv7"
144
- CONTAINER_TAG : " {{.GO_VERSION}}-arm "
138
+ CONTAINER_TAG : " {{ .GO_VERSION }}-armhf "
145
139
PACKAGE_PLATFORM : " Linux_ARMv7"
146
- PACKAGE_NAME : " {{.PROJECT_NAME}}_{{.VERSION}}_{{.PACKAGE_PLATFORM}}.tar.gz"
140
+ PACKAGE_NAME : " {{ .PROJECT_NAME }}_{{ .VERSION }}_{{ .PACKAGE_PLATFORM }}.tar.gz"
147
141
148
142
Linux_ARMv6 :
149
143
desc : Builds Linux ARMv6 binaries
150
- dir : " {{.DIST_DIR}}"
144
+ dir : " {{ .DIST_DIR }}"
151
145
cmds :
152
146
- |
153
147
docker run -v `pwd`/..:/home/build -w /home/build \
154
148
-e CGO_ENABLED=1 \
155
- {{.CONTAINER}}:{{.CONTAINER_TAG}} \
156
- --build-cmd "{{.BUILD_COMMAND}}" \
157
- -p "{{.BUILD_PLATFORM}}"
149
+ {{ .CONTAINER }}:{{ .CONTAINER_TAG }} \
150
+ --build-cmd "{{ .BUILD_COMMAND }}" \
151
+ -p "{{ .BUILD_PLATFORM }}"
158
152
159
- tar cz -C {{.PLATFORM_DIR}} {{.PROJECT_NAME}} -C ../.. LICENSE.txt -f {{.PACKAGE_NAME}}
160
- sha256sum {{.PACKAGE_NAME}} >> {{.CHECKSUM_FILE}}
153
+ tar cz -C {{ .PLATFORM_DIR }} {{ .PROJECT_NAME }} -C ../.. LICENSE.txt -f {{ .PACKAGE_NAME }}
154
+ sha256sum {{ .PACKAGE_NAME }} >> {{ .CHECKSUM_FILE }}
161
155
162
156
vars :
163
- PLATFORM_DIR : " {{.PROJECT_NAME}}_linux_arm_6"
164
- BUILD_COMMAND : " go build -o {{.DIST_DIR}}/{{.PLATFORM_DIR}}/{{.PROJECT_NAME}} {{.LDFLAGS}}"
157
+ PLATFORM_DIR : " {{ .PROJECT_NAME }}_linux_arm_6"
158
+ BUILD_COMMAND : " go build -o {{ .DIST_DIR }}/{{ .PLATFORM_DIR }}/{{ .PROJECT_NAME }} {{ .LDFLAGS }}"
165
159
BUILD_PLATFORM : " linux/armv6"
166
- CONTAINER_TAG : " {{.GO_VERSION}}-arm"
160
+ # We are experiencing the following error with ARMv6 build:
161
+ #
162
+ # # github.com/arduino/arduino-cli
163
+ # net(.text): unexpected relocation type 296 (R_ARM_V4BX)
164
+ # panic: runtime error: invalid memory address or nil pointer dereference
165
+ # [signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x51ae53]
166
+ #
167
+ # goroutine 1 [running]:
168
+ # cmd/link/internal/loader.(*Loader).SymName(0xc000095c00, 0x0, 0xc0000958d8, 0x5a0ac)
169
+ # /usr/local/go/src/cmd/link/internal/loader/loader.go:684 +0x53
170
+ # cmd/link/internal/ld.dynrelocsym2(0xc000095880, 0x5a0ac)
171
+ # /usr/local/go/src/cmd/link/internal/ld/data.go:777 +0x295
172
+ # cmd/link/internal/ld.(*dodataState).dynreloc2(0xc007df9800, 0xc000095880)
173
+ # /usr/local/go/src/cmd/link/internal/ld/data.go:794 +0x89
174
+ # cmd/link/internal/ld.(*Link).dodata2(0xc000095880, 0xc007d00000, 0x60518, 0x60518)
175
+ # /usr/local/go/src/cmd/link/internal/ld/data.go:1434 +0x4d4
176
+ # cmd/link/internal/ld.Main(0x8729a0, 0x4, 0x8, 0x1, 0xd, 0xe, 0x0, 0x0, 0x6d7737, 0x12, ...)
177
+ # /usr/local/go/src/cmd/link/internal/ld/main.go:302 +0x123a
178
+ # main.main()
179
+ # /usr/local/go/src/cmd/link/main.go:68 +0x1dc
180
+ # Error: failed building for linux/armv6: exit status 2
181
+ #
182
+ # This seems to be a problem in the go builder 1.16.x that removed support for the R_ARM_V4BX instruction:
183
+ # https://github.com/golang/go/pull/44998
184
+ # https://groups.google.com/g/golang-codereviews/c/yzN80xxwu2E
185
+ #
186
+ # Until there is a fix released we must use a recent gcc for Linux_ARMv6 build, so for this
187
+ # build we select the debian10 based container.
188
+ CONTAINER_TAG : " {{ .GO_VERSION }}-armel-debian10"
167
189
PACKAGE_PLATFORM : " Linux_ARMv6"
168
- PACKAGE_NAME : " {{.PROJECT_NAME}}_{{.VERSION}}_{{.PACKAGE_PLATFORM}}.tar.gz"
190
+ PACKAGE_NAME : " {{ .PROJECT_NAME }}_{{ .VERSION }}_{{ .PACKAGE_PLATFORM }}.tar.gz"
169
191
170
192
Linux_ARM64 :
171
193
desc : Builds Linux ARM64 binaries
172
- dir : " {{.DIST_DIR}}"
194
+ dir : " {{ .DIST_DIR }}"
173
195
cmds :
174
196
- |
175
197
docker run -v `pwd`/..:/home/build -w /home/build \
176
198
-e CGO_ENABLED=1 \
177
- {{.CONTAINER}}:{{.CONTAINER_TAG}} \
178
- --build-cmd "{{.BUILD_COMMAND}}" \
179
- -p "{{.BUILD_PLATFORM}}"
199
+ {{ .CONTAINER }}:{{ .CONTAINER_TAG }} \
200
+ --build-cmd "{{ .BUILD_COMMAND }}" \
201
+ -p "{{ .BUILD_PLATFORM }}"
180
202
181
- tar cz -C {{.PLATFORM_DIR}} {{.PROJECT_NAME}} -C ../.. LICENSE.txt -f {{.PACKAGE_NAME}}
182
- sha256sum {{.PACKAGE_NAME}} >> {{.CHECKSUM_FILE}}
203
+ tar cz -C {{ .PLATFORM_DIR }} {{ .PROJECT_NAME }} -C ../.. LICENSE.txt -f {{ .PACKAGE_NAME }}
204
+ sha256sum {{ .PACKAGE_NAME }} >> {{ .CHECKSUM_FILE }}
183
205
184
206
vars :
185
- PLATFORM_DIR : " {{.PROJECT_NAME}}_linux_arm_6"
186
- BUILD_COMMAND : " go build -o {{.DIST_DIR}}/{{.PLATFORM_DIR}}/{{.PROJECT_NAME}} {{.LDFLAGS}}"
207
+ PLATFORM_DIR : " {{ .PROJECT_NAME }}_linux_arm_6"
208
+ BUILD_COMMAND : " go build -o {{ .DIST_DIR }}/{{ .PLATFORM_DIR }}/{{ .PROJECT_NAME }} {{ .LDFLAGS }}"
187
209
BUILD_PLATFORM : " linux/arm64"
188
- CONTAINER_TAG : " {{.GO_VERSION}}-arm"
210
+ CONTAINER_TAG : " {{ .GO_VERSION }}-arm"
189
211
PACKAGE_PLATFORM : " Linux_ARM64"
190
- PACKAGE_NAME : " {{.PROJECT_NAME}}_{{.VERSION}}_{{.PACKAGE_PLATFORM}}.tar.gz"
212
+ PACKAGE_NAME : " {{ .PROJECT_NAME }}_{{ .VERSION }}_{{ .PACKAGE_PLATFORM }}.tar.gz"
191
213
192
214
macOS_64bit :
193
215
desc : Builds Mac OS X 64 bit binaries
194
- dir : " {{.DIST_DIR}}"
216
+ dir : " {{ .DIST_DIR }}"
195
217
cmds :
196
218
- |
197
219
docker run -v `pwd`/..:/home/build -w /home/build \
198
220
-e CGO_ENABLED=1 \
199
- {{.CONTAINER}}:{{.CONTAINER_TAG}} \
200
- --build-cmd "{{.BUILD_COMMAND}}" \
201
- -p "{{.BUILD_PLATFORM}}"
221
+ {{ .CONTAINER }}:{{ .CONTAINER_TAG }} \
222
+ --build-cmd "{{ .BUILD_COMMAND }}" \
223
+ -p "{{ .BUILD_PLATFORM }}"
202
224
203
- tar cz -C {{.PLATFORM_DIR}} {{.PROJECT_NAME}} -C ../.. LICENSE.txt -f {{.PACKAGE_NAME}}
204
- sha256sum {{.PACKAGE_NAME}} >> {{.CHECKSUM_FILE}}
225
+ tar cz -C {{ .PLATFORM_DIR }} {{ .PROJECT_NAME }} -C ../.. LICENSE.txt -f {{ .PACKAGE_NAME }}
226
+ sha256sum {{ .PACKAGE_NAME }} >> {{ .CHECKSUM_FILE }}
205
227
206
228
vars :
207
- PLATFORM_DIR : " {{.PROJECT_NAME}}_osx_darwin_amd64"
208
- BUILD_COMMAND : " go build -o {{.DIST_DIR}}/{{.PLATFORM_DIR}}/{{.PROJECT_NAME}} {{.LDFLAGS}}"
229
+ PLATFORM_DIR : " {{ .PROJECT_NAME }}_osx_darwin_amd64"
230
+ BUILD_COMMAND : " go build -o {{ .DIST_DIR }}/{{ .PLATFORM_DIR }}/{{ .PROJECT_NAME }} {{ .LDFLAGS }}"
209
231
BUILD_PLATFORM : " darwin/amd64"
210
- CONTAINER_TAG : " {{.GO_VERSION}}-darwin"
232
+ # We are experiencing the following error with macOS_64bit build:
233
+ #
234
+ # Undefined symbols for architecture x86_64:
235
+ # "_clock_gettime", referenced from:
236
+ # _runtime.walltime_trampoline in go.o
237
+ # ld: symbol(s) not found for architecture x86_64
238
+ # clang: error: linker command failed with exit code 1 (use -v to see invocation)
239
+ #
240
+ # The reason seems that go 1.16.x use a macos API which is available since 10.12
241
+ # https://github.com/techknowlogick/xgo/issues/100#issuecomment-780894190
242
+ #
243
+ # To compile it we need an SDK >=10.12 so we use the debian10 based container that
244
+ # has the SDK 10.14 installed.
245
+ CONTAINER_TAG : " {{ .GO_VERSION }}-darwin-debian10"
211
246
PACKAGE_PLATFORM : " macOS_64bit"
212
- PACKAGE_NAME : " {{.PROJECT_NAME}}_{{.VERSION}}_{{.PACKAGE_PLATFORM}}.tar.gz"
247
+ PACKAGE_NAME : " {{ .PROJECT_NAME }}_{{ .VERSION }}_{{ .PACKAGE_PLATFORM }}.tar.gz"
248
+
249
+ vars :
250
+ CONTAINER : " docker.elastic.co/beats-dev/golang-crossbuild"
251
+ GO_VERSION : " 1.16.4"
252
+ CHECKSUM_FILE : " {{ .VERSION }}-checksums.txt"
0 commit comments