Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
92 changes: 92 additions & 0 deletions .github/workflows/test.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
name: test

on:
push:
pull_request:

jobs:
create-test-artifacts:
runs-on: ubuntu-20.04

steps:
- name: checkout
uses: actions/checkout@v1
with:
fetch-depth: 0

- name: Install Taskfile
uses: arduino/actions/setup-taskfile@master
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
version: 3.x

- name: Build
run: |
PACKAGE_NAME_PREFIX="${{ github.workflow }}"
if [ "${{ github.event_name }}" = "pull_request" ]; then
PACKAGE_NAME_PREFIX="$PACKAGE_NAME_PREFIX-${{ github.event.number }}"
fi
PACKAGE_NAME_PREFIX="$PACKAGE_NAME_PREFIX-${{ github.sha }}-"
export PACKAGE_NAME_PREFIX
task dist:all

# Uploads all architectures as separate artifacts
- name: Upload Linux 32 bit artifact
uses: actions/upload-artifact@v2
with:
name: Linux_32bit
path: dist/*Linux_32bit.tar.gz

- name: Upload Linux 64 bit artifact
uses: actions/upload-artifact@v2
with:
name: Linux_64bit
path: dist/*Linux_64bit.tar.gz

- name: Upload Windows 32 bit artifact
uses: actions/upload-artifact@v2
with:
name: Windows_32bit
path: dist/*Windows_32bit.zip

- name: Upload Windows 64 bit artifact
uses: actions/upload-artifact@v2
with:
name: Windows_64bit
path: dist/*Windows_64bit.zip

- name: Upload Linux ARMv6 artifact
uses: actions/upload-artifact@v2
with:
name: Linux_ARMv6
path: dist/*Linux_ARMv6.tar.gz

- name: Upload Linux ARMv7 artifact
uses: actions/upload-artifact@v2
with:
name: Linux_ARMv7
path: dist/*Linux_ARMv7.tar.gz

- name: Upload Linux ARM64 artifact
uses: actions/upload-artifact@v2
with:
name: Linux_ARM64
path: dist/*Linux_ARM64.tar.gz

- name: Upload Linux ARM64 bit artifact
uses: actions/upload-artifact@v2
with:
name: Linux_ARM64
path: dist/*Linux_ARM64.tar.gz

- name: Upload MacOS 64 bit artifact
uses: actions/upload-artifact@v2
with:
name: macOS_64bit
path: dist/*macOS_64bit.tar.gz

- name: Upload checksums
uses: actions/upload-artifact@v2
with:
name: checksums
path: dist/*checksums.txt
211 changes: 211 additions & 0 deletions DistTasks.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,211 @@
version: "3"

# This taskfile is ideally meant to be project agnostic and could be dropped in
# on other Go projects with minimal or no changes.
#
# To use it simply add the following lines to your main taskfile:
# includes:
# dist: ./DistTasks.yml
#
# The following variables must be declared in the including taskfile for the
# build process to work correctly:
# * DIST_DIR: the folder that will contain the final binaries and packages
# * PROJECT_NAME: the name of the project, used in package name
# * VERSION: the version of the project, used in package name and checksum file
# * LD_FLAGS: flags used at build time
#
# The project MUST contain a LICENSE.txt file in the root folder or packaging will fail.

tasks:
all:
desc: Build for distribution for all platforms
cmds:
- task: Windows_32bit
- task: Windows_64bit
- task: Linux_32bit
- task: Linux_64bit
- task: Linux_ARMv6
- task: Linux_ARMv7
- task: Linux_ARM64
- task: macOS_64bit

Windows_32bit:
desc: Builds Windows 32 bit binaries
dir: "{{ .DIST_DIR }}"
cmds:
- |
docker run -v `pwd`/..:/home/build -w /home/build \
-e CGO_ENABLED=1 \
{{ .CONTAINER }}:{{ .CONTAINER_TAG }} \
--build-cmd "{{ .BUILD_COMMAND }}" \
-p "{{ .BUILD_PLATFORM }}"

zip {{ .PACKAGE_NAME}} {{ .PLATFORM_DIR }}/{{ .PROJECT_NAME }}.exe ../LICENSE.txt -j
sha256sum {{ .PACKAGE_NAME }} >> {{ .CHECKSUM_FILE }}

vars:
PLATFORM_DIR: "{{ .PROJECT_NAME }}_windows_386"
BUILD_COMMAND: "go build -o {{ .DIST_DIR }}/{{ .PLATFORM_DIR }}/{{ .PROJECT_NAME }}.exe {{ .LDFLAGS }}"
BUILD_PLATFORM: "windows/386"
CONTAINER_TAG: "{{ .GO_VERSION }}-main"
PACKAGE_PLATFORM: "Windows_32bit"
PACKAGE_NAME: "{{ .PROJECT_NAME }}_{{ .VERSION }}_{{ .PACKAGE_PLATFORM }}.zip"

Windows_64bit:
desc: Builds Windows 64 bit binaries
dir: "{{ .DIST_DIR }}"
cmds:
- |
docker run -v `pwd`/..:/home/build -w /home/build \
-e CGO_ENABLED=1 \
{{ .CONTAINER }}:{{ .CONTAINER_TAG }} \
--build-cmd "{{ .BUILD_COMMAND }}" \
-p "{{ .BUILD_PLATFORM }}"

zip {{ .PACKAGE_NAME}} {{ .PLATFORM_DIR }}/{{ .PROJECT_NAME }}.exe ../LICENSE.txt -j
sha256sum {{ .PACKAGE_NAME }} >> {{ .CHECKSUM_FILE }}

vars:
PLATFORM_DIR: "{{ .PROJECT_NAME }}_windows_amd64"
BUILD_COMMAND: "go build -o {{ .DIST_DIR }}/{{ .PLATFORM_DIR }}/{{ .PROJECT_NAME }}.exe {{ .LDFLAGS }}"
BUILD_PLATFORM: "windows/amd64"
CONTAINER_TAG: "{{ .GO_VERSION }}-main"
PACKAGE_PLATFORM: "Windows_64bit"
PACKAGE_NAME: "{{ .PROJECT_NAME }}_{{ .VERSION }}_{{ .PACKAGE_PLATFORM }}.zip"

Linux_32bit:
desc: Builds Linux 32 bit binaries
dir: "{{ .DIST_DIR }}"
cmds:
- |
docker run -v `pwd`/..:/home/build -w /home/build \
-e CGO_ENABLED=1 \
{{ .CONTAINER }}:{{ .CONTAINER_TAG }} \
--build-cmd "{{ .BUILD_COMMAND }}" \
-p "{{ .BUILD_PLATFORM }}"

tar cz -C {{ .PLATFORM_DIR }} {{ .PROJECT_NAME }} -C ../.. LICENSE.txt -f {{ .PACKAGE_NAME }}
sha256sum {{ .PACKAGE_NAME }} >> {{ .CHECKSUM_FILE }}

vars:
PLATFORM_DIR: "{{ .PROJECT_NAME }}_linux_386"
BUILD_COMMAND: "go build -o {{ .DIST_DIR }}/{{ .PLATFORM_DIR }}/{{ .PROJECT_NAME }} {{ .LDFLAGS }}"
BUILD_PLATFORM: "linux/386"
CONTAINER_TAG: "{{ .GO_VERSION }}-main"
PACKAGE_PLATFORM: "Linux_32bit"
PACKAGE_NAME: "{{ .PROJECT_NAME }}_{{ .VERSION }}_{{ .PACKAGE_PLATFORM }}.tar.gz"

Linux_64bit:
desc: Builds Linux 64 bit binaries
dir: "{{ .DIST_DIR }}"
cmds:
- |
docker run -v `pwd`/..:/home/build -w /home/build \
-e CGO_ENABLED=1 \
{{ .CONTAINER }}:{{ .CONTAINER_TAG }} \
--build-cmd "{{ .BUILD_COMMAND }}" \
-p "{{ .BUILD_PLATFORM }}"

tar cz -C {{ .PLATFORM_DIR }} {{ .PROJECT_NAME }} -C ../.. LICENSE.txt -f {{ .PACKAGE_NAME }}
sha256sum {{ .PACKAGE_NAME }} >> {{ .CHECKSUM_FILE }}

vars:
PLATFORM_DIR: "{{ .PROJECT_NAME }}_linux_amd64"
BUILD_COMMAND: "go build -o {{ .DIST_DIR }}/{{ .PLATFORM_DIR }}/{{ .PROJECT_NAME }} {{ .LDFLAGS }}"
BUILD_PLATFORM: "linux/amd64"
CONTAINER_TAG: "{{ .GO_VERSION }}-main"
PACKAGE_PLATFORM: "Linux_64bit"
PACKAGE_NAME: "{{ .PROJECT_NAME }}_{{ .VERSION }}_{{ .PACKAGE_PLATFORM }}.tar.gz"

Linux_ARMv7:
desc: Builds Linux ARMv7 binaries
dir: "{{ .DIST_DIR }}"
cmds:
- |
docker run -v `pwd`/..:/home/build -w /home/build \
-e CGO_ENABLED=1 \
{{ .CONTAINER }}:{{ .CONTAINER_TAG }} \
--build-cmd "{{ .BUILD_COMMAND }}" \
-p "{{ .BUILD_PLATFORM }}"

tar cz -C {{ .PLATFORM_DIR }} {{ .PROJECT_NAME }} -C ../.. LICENSE.txt -f {{ .PACKAGE_NAME }}
sha256sum {{ .PACKAGE_NAME }} >> {{ .CHECKSUM_FILE }}

vars:
PLATFORM_DIR: "{{ .PROJECT_NAME }}_linux_arm_7"
BUILD_COMMAND: "go build -o {{ .DIST_DIR }}/{{ .PLATFORM_DIR }}/{{ .PROJECT_NAME }} {{ .LDFLAGS }}"
BUILD_PLATFORM: "linux/armv7"
CONTAINER_TAG: "{{ .GO_VERSION }}-arm"
PACKAGE_PLATFORM: "Linux_ARMv7"
PACKAGE_NAME: "{{ .PROJECT_NAME }}_{{ .VERSION }}_{{ .PACKAGE_PLATFORM }}.tar.gz"

Linux_ARMv6:
desc: Builds Linux ARMv6 binaries
dir: "{{ .DIST_DIR }}"
cmds:
- |
docker run -v `pwd`/..:/home/build -w /home/build \
-e CGO_ENABLED=1 \
{{ .CONTAINER }}:{{ .CONTAINER_TAG }} \
--build-cmd "{{ .BUILD_COMMAND }}" \
-p "{{ .BUILD_PLATFORM }}"

tar cz -C {{ .PLATFORM_DIR }} {{ .PROJECT_NAME }} -C ../.. LICENSE.txt -f {{ .PACKAGE_NAME }}
sha256sum {{ .PACKAGE_NAME }} >> {{ .CHECKSUM_FILE }}

vars:
PLATFORM_DIR: "{{ .PROJECT_NAME }}_linux_arm_6"
BUILD_COMMAND: "go build -o {{ .DIST_DIR }}/{{ .PLATFORM_DIR }}/{{ .PROJECT_NAME }} {{ .LDFLAGS }}"
BUILD_PLATFORM: "linux/armv6"
CONTAINER_TAG: "{{ .GO_VERSION }}-arm"
PACKAGE_PLATFORM: "Linux_ARMv6"
PACKAGE_NAME: "{{ .PROJECT_NAME }}_{{ .VERSION }}_{{ .PACKAGE_PLATFORM }}.tar.gz"

Linux_ARM64:
desc: Builds Linux ARM64 binaries
dir: "{{ .DIST_DIR }}"
cmds:
- |
docker run -v `pwd`/..:/home/build -w /home/build \
-e CGO_ENABLED=1 \
{{ .CONTAINER }}:{{ .CONTAINER_TAG }} \
--build-cmd "{{ .BUILD_COMMAND }}" \
-p "{{ .BUILD_PLATFORM }}"

tar cz -C {{ .PLATFORM_DIR }} {{ .PROJECT_NAME }} -C ../.. LICENSE.txt -f {{ .PACKAGE_NAME }}
sha256sum {{ .PACKAGE_NAME }} >> {{ .CHECKSUM_FILE }}

vars:
PLATFORM_DIR: "{{ .PROJECT_NAME }}_linux_arm_6"
BUILD_COMMAND: "go build -o {{ .DIST_DIR }}/{{ .PLATFORM_DIR }}/{{ .PROJECT_NAME }} {{ .LDFLAGS }}"
BUILD_PLATFORM: "linux/arm64"
CONTAINER_TAG: "{{ .GO_VERSION }}-arm"
PACKAGE_PLATFORM: "Linux_ARM64"
PACKAGE_NAME: "{{ .PROJECT_NAME }}_{{ .VERSION }}_{{ .PACKAGE_PLATFORM }}.tar.gz"

macOS_64bit:
desc: Builds Mac OS X 64 bit binaries
dir: "{{ .DIST_DIR }}"
cmds:
- |
docker run -v `pwd`/..:/home/build -w /home/build \
-e CGO_ENABLED=1 \
{{ .CONTAINER }}:{{ .CONTAINER_TAG }} \
--build-cmd "{{ .BUILD_COMMAND }}" \
-p "{{ .BUILD_PLATFORM }}"

tar cz -C {{ .PLATFORM_DIR }} {{ .PROJECT_NAME }} -C ../.. LICENSE.txt -f {{ .PACKAGE_NAME }}
sha256sum {{ .PACKAGE_NAME }} >> {{ .CHECKSUM_FILE }}

vars:
PLATFORM_DIR: "{{ .PROJECT_NAME }}_osx_darwin_amd64"
BUILD_COMMAND: "go build -o {{ .DIST_DIR }}/{{ .PLATFORM_DIR }}/{{ .PROJECT_NAME }} {{ .LDFLAGS }}"
BUILD_PLATFORM: "darwin/amd64"
CONTAINER_TAG: "{{ .GO_VERSION }}-darwin"
PACKAGE_PLATFORM: "macOS_64bit"
PACKAGE_NAME: "{{ .PROJECT_NAME }}_{{ .VERSION }}_{{ .PACKAGE_PLATFORM }}.tar.gz"

vars:
CONTAINER: "docker.elastic.co/beats-dev/golang-crossbuild"
GO_VERSION: "1.15.8"
CHECKSUM_FILE: "{{ .VERSION }}-checksums.txt"
24 changes: 24 additions & 0 deletions Taskfile.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
version: "3"

includes:
dist: ./DistTasks.yml

tasks:
build:
desc: Build the project
cmds:
- go build -v {{.LDFLAGS}}

vars:
PROJECT_NAME: "serial-discovery"
DIST_DIR: "dist"
VERSION:
sh: echo "$(git describe --tags --dirty --broken)"
TIMESTAMP:
sh: echo "$(date -u +"%Y-%m-%dT%H:%M:%SZ")"
LDFLAGS: >
-ldflags
'
-X github.com/arduino/serial-discovery/version.Tag={{.VERSION}}
-X github.com/arduino/serial-discovery/version.Timestamp={{.TIMESTAMP}}
'
41 changes: 41 additions & 0 deletions args.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
//
// This file is part of serial-discovery.
//
// Copyright 2021 ARDUINO SA (http://www.arduino.cc/)
//
// This software is released under the GNU General Public License version 3,
// which covers the main part of arduino-cli.
// The terms of this license can be found at:
// https://www.gnu.org/licenses/gpl-3.0.en.html
//
// You can be released from the requirements of the above licenses by purchasing
// a commercial license. Buying such a license is mandatory if you want to modify or
// otherwise use the software for commercial activities involving the Arduino
// software without disclosing the source code of your own applications. To purchase
// a commercial license, send an email to license@arduino.cc.
//

package main

import (
"fmt"
"os"
)

var args struct {
showVersion bool
}

func parseArgs() {
for _, arg := range os.Args[1:] {
if arg == "" {
continue
}
if arg == "-v" || arg == "--version" {
args.showVersion = true
continue
}
fmt.Fprintf(os.Stderr, "invalid argument: %s\n", arg)
os.Exit(1)
}
}
9 changes: 8 additions & 1 deletion main.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
//
// This file is part of serial-discovery.
//
// Copyright 2018 ARDUINO SA (http://www.arduino.cc/)
// Copyright 2021 ARDUINO SA (http://www.arduino.cc/)
//
// This software is released under the GNU General Public License version 3,
// which covers the main part of arduino-cli.
Expand All @@ -26,10 +26,17 @@ import (
"sync"

"github.com/arduino/go-properties-orderedmap"
"github.com/arduino/serial-discovery/version"
"go.bug.st/serial/enumerator"
)

func main() {
parseArgs()
if args.showVersion {
fmt.Printf("serial-discovery %s (build timestamp: %s)\n", version.Tag, version.Timestamp)
return
}

syncStarted := false
var syncCloseChan chan<- bool

Expand Down
Loading