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"