1- # Source: https://github.com/arduino/tooling-project-assets/blob/main/workflow-templates/assets/release-go-task/DistTasks.yml
21version : " 3"
32
43# This taskfile is ideally meant to be project agnostic and could be dropped in
@@ -17,11 +16,6 @@ version: "3"
1716#
1817# The project MUST contain a LICENSE.txt file in the root folder or packaging will fail.
1918
20- vars :
21- CONTAINER : " docker.elastic.co/beats-dev/golang-crossbuild"
22- GO_VERSION : " 1.14.7"
23- CHECKSUM_FILE : " {{.VERSION}}-checksums.txt"
24-
2519tasks :
2620 all :
2721 desc : Build for distribution for all platforms
@@ -37,176 +31,222 @@ tasks:
3731
3832 Windows_32bit :
3933 desc : Builds Windows 32 bit binaries
40- dir : " {{.DIST_DIR}}"
34+ dir : " {{ .DIST_DIR }}"
4135 cmds :
4236 - |
4337 docker run -v `pwd`/..:/home/build -w /home/build \
4438 -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 }}"
4842
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 }}
5145
5246 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 }}"
5549 BUILD_PLATFORM : " windows/386"
56- CONTAINER_TAG : " {{.GO_VERSION}}-main"
50+ CONTAINER_TAG : " {{ .GO_VERSION }}-main"
5751 PACKAGE_PLATFORM : " Windows_32bit"
58- PACKAGE_NAME : " {{.PROJECT_NAME}}_{{.VERSION}}_{{.PACKAGE_PLATFORM}}.zip"
52+ PACKAGE_NAME : " {{ .PROJECT_NAME }}_{{ .VERSION }}_{{ .PACKAGE_PLATFORM }}.zip"
5953
6054 Windows_64bit :
6155 desc : Builds Windows 64 bit binaries
62- dir : " {{.DIST_DIR}}"
56+ dir : " {{ .DIST_DIR }}"
6357 cmds :
6458 - |
6559 docker run -v `pwd`/..:/home/build -w /home/build \
6660 -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 }}"
7064
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 }}
7367
7468 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 }}"
7771 BUILD_PLATFORM : " windows/amd64"
78- CONTAINER_TAG : " {{.GO_VERSION}}-main"
72+ CONTAINER_TAG : " {{ .GO_VERSION }}-main"
7973 PACKAGE_PLATFORM : " Windows_64bit"
80- PACKAGE_NAME : " {{.PROJECT_NAME}}_{{.VERSION}}_{{.PACKAGE_PLATFORM}}.zip"
74+ PACKAGE_NAME : " {{ .PROJECT_NAME }}_{{ .VERSION }}_{{ .PACKAGE_PLATFORM }}.zip"
8175
8276 Linux_32bit :
8377 desc : Builds Linux 32 bit binaries
84- dir : " {{.DIST_DIR}}"
78+ dir : " {{ .DIST_DIR }}"
8579 cmds :
8680 - |
8781 docker run -v `pwd`/..:/home/build -w /home/build \
8882 -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 }}"
9286
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 }}
9589
9690 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 }}"
9993 BUILD_PLATFORM : " linux/386"
100- CONTAINER_TAG : " {{.GO_VERSION}}-main"
94+ CONTAINER_TAG : " {{ .GO_VERSION }}-main"
10195 PACKAGE_PLATFORM : " Linux_32bit"
102- PACKAGE_NAME : " {{.PROJECT_NAME}}_{{.VERSION}}_{{.PACKAGE_PLATFORM}}.tar.gz"
96+ PACKAGE_NAME : " {{ .PROJECT_NAME }}_{{ .VERSION }}_{{ .PACKAGE_PLATFORM }}.tar.gz"
10397
10498 Linux_64bit :
10599 desc : Builds Linux 64 bit binaries
106- dir : " {{.DIST_DIR}}"
100+ dir : " {{ .DIST_DIR }}"
107101 cmds :
108102 - |
109103 docker run -v `pwd`/..:/home/build -w /home/build \
110104 -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 }}"
114108
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 }}
117111
118112 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 }}"
121115 BUILD_PLATFORM : " linux/amd64"
122- CONTAINER_TAG : " {{.GO_VERSION}}-main"
116+ CONTAINER_TAG : " {{ .GO_VERSION }}-main"
123117 PACKAGE_PLATFORM : " Linux_64bit"
124- PACKAGE_NAME : " {{.PROJECT_NAME}}_{{.VERSION}}_{{.PACKAGE_PLATFORM}}.tar.gz"
118+ PACKAGE_NAME : " {{ .PROJECT_NAME }}_{{ .VERSION }}_{{ .PACKAGE_PLATFORM }}.tar.gz"
125119
126120 Linux_ARMv7 :
127121 desc : Builds Linux ARMv7 binaries
128- dir : " {{.DIST_DIR}}"
122+ dir : " {{ .DIST_DIR }}"
129123 cmds :
130124 - |
131125 docker run -v `pwd`/..:/home/build -w /home/build \
132126 -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 }}"
136130
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 }}
139133
140134 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 }}"
143137 BUILD_PLATFORM : " linux/armv7"
144- CONTAINER_TAG : " {{.GO_VERSION}}-arm "
138+ CONTAINER_TAG : " {{ .GO_VERSION }}-armhf "
145139 PACKAGE_PLATFORM : " Linux_ARMv7"
146- PACKAGE_NAME : " {{.PROJECT_NAME}}_{{.VERSION}}_{{.PACKAGE_PLATFORM}}.tar.gz"
140+ PACKAGE_NAME : " {{ .PROJECT_NAME }}_{{ .VERSION }}_{{ .PACKAGE_PLATFORM }}.tar.gz"
147141
148142 Linux_ARMv6 :
149143 desc : Builds Linux ARMv6 binaries
150- dir : " {{.DIST_DIR}}"
144+ dir : " {{ .DIST_DIR }}"
151145 cmds :
152146 - |
153147 docker run -v `pwd`/..:/home/build -w /home/build \
154148 -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 }}"
158152
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 }}
161155
162156 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 }}"
165159 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"
167189 PACKAGE_PLATFORM : " Linux_ARMv6"
168- PACKAGE_NAME : " {{.PROJECT_NAME}}_{{.VERSION}}_{{.PACKAGE_PLATFORM}}.tar.gz"
190+ PACKAGE_NAME : " {{ .PROJECT_NAME }}_{{ .VERSION }}_{{ .PACKAGE_PLATFORM }}.tar.gz"
169191
170192 Linux_ARM64 :
171193 desc : Builds Linux ARM64 binaries
172- dir : " {{.DIST_DIR}}"
194+ dir : " {{ .DIST_DIR }}"
173195 cmds :
174196 - |
175197 docker run -v `pwd`/..:/home/build -w /home/build \
176198 -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 }}"
180202
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 }}
183205
184206 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 }}"
187209 BUILD_PLATFORM : " linux/arm64"
188- CONTAINER_TAG : " {{.GO_VERSION}}-arm"
210+ CONTAINER_TAG : " {{ .GO_VERSION }}-arm"
189211 PACKAGE_PLATFORM : " Linux_ARM64"
190- PACKAGE_NAME : " {{.PROJECT_NAME}}_{{.VERSION}}_{{.PACKAGE_PLATFORM}}.tar.gz"
212+ PACKAGE_NAME : " {{ .PROJECT_NAME }}_{{ .VERSION }}_{{ .PACKAGE_PLATFORM }}.tar.gz"
191213
192214 macOS_64bit :
193215 desc : Builds Mac OS X 64 bit binaries
194- dir : " {{.DIST_DIR}}"
216+ dir : " {{ .DIST_DIR }}"
195217 cmds :
196218 - |
197219 docker run -v `pwd`/..:/home/build -w /home/build \
198220 -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 }}"
202224
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 }}
205227
206228 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 }}"
209231 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"
211246 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