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