Skip to content

Commit 6386b61

Browse files
authored
Merge pull request #1 from arduino/actions
Added github actions workflows
2 parents e2459cb + 9562467 commit 6386b61

File tree

8 files changed

+436
-60
lines changed

8 files changed

+436
-60
lines changed

.github/workflows/test.yaml

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
name: test
2+
3+
on:
4+
push:
5+
pull_request:
6+
7+
jobs:
8+
create-test-artifacts:
9+
runs-on: ubuntu-20.04
10+
11+
steps:
12+
- name: checkout
13+
uses: actions/checkout@v1
14+
with:
15+
fetch-depth: 0
16+
17+
- name: Install Taskfile
18+
uses: arduino/actions/setup-taskfile@master
19+
with:
20+
repo-token: ${{ secrets.GITHUB_TOKEN }}
21+
version: 3.x
22+
23+
- name: Build
24+
run: |
25+
PACKAGE_NAME_PREFIX="${{ github.workflow }}"
26+
if [ "${{ github.event_name }}" = "pull_request" ]; then
27+
PACKAGE_NAME_PREFIX="$PACKAGE_NAME_PREFIX-${{ github.event.number }}"
28+
fi
29+
PACKAGE_NAME_PREFIX="$PACKAGE_NAME_PREFIX-${{ github.sha }}-"
30+
export PACKAGE_NAME_PREFIX
31+
task dist:all
32+
33+
# Uploads all architectures as separate artifacts
34+
- name: Upload Linux 32 bit artifact
35+
uses: actions/upload-artifact@v2
36+
with:
37+
name: Linux_32bit
38+
path: dist/*Linux_32bit.tar.gz
39+
40+
- name: Upload Linux 64 bit artifact
41+
uses: actions/upload-artifact@v2
42+
with:
43+
name: Linux_64bit
44+
path: dist/*Linux_64bit.tar.gz
45+
46+
- name: Upload Windows 32 bit artifact
47+
uses: actions/upload-artifact@v2
48+
with:
49+
name: Windows_32bit
50+
path: dist/*Windows_32bit.zip
51+
52+
- name: Upload Windows 64 bit artifact
53+
uses: actions/upload-artifact@v2
54+
with:
55+
name: Windows_64bit
56+
path: dist/*Windows_64bit.zip
57+
58+
- name: Upload Linux ARMv6 artifact
59+
uses: actions/upload-artifact@v2
60+
with:
61+
name: Linux_ARMv6
62+
path: dist/*Linux_ARMv6.tar.gz
63+
64+
- name: Upload Linux ARMv7 artifact
65+
uses: actions/upload-artifact@v2
66+
with:
67+
name: Linux_ARMv7
68+
path: dist/*Linux_ARMv7.tar.gz
69+
70+
- name: Upload Linux ARM64 artifact
71+
uses: actions/upload-artifact@v2
72+
with:
73+
name: Linux_ARM64
74+
path: dist/*Linux_ARM64.tar.gz
75+
76+
- name: Upload Linux ARM64 bit artifact
77+
uses: actions/upload-artifact@v2
78+
with:
79+
name: Linux_ARM64
80+
path: dist/*Linux_ARM64.tar.gz
81+
82+
- name: Upload MacOS 64 bit artifact
83+
uses: actions/upload-artifact@v2
84+
with:
85+
name: macOS_64bit
86+
path: dist/*macOS_64bit.tar.gz
87+
88+
- name: Upload checksums
89+
uses: actions/upload-artifact@v2
90+
with:
91+
name: checksums
92+
path: dist/*checksums.txt

DistTasks.yml

Lines changed: 211 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,211 @@
1+
version: "3"
2+
3+
# This taskfile is ideally meant to be project agnostic and could be dropped in
4+
# on other Go projects with minimal or no changes.
5+
#
6+
# To use it simply add the following lines to your main taskfile:
7+
# includes:
8+
# dist: ./DistTasks.yml
9+
#
10+
# The following variables must be declared in the including taskfile for the
11+
# build process to work correctly:
12+
# * DIST_DIR: the folder that will contain the final binaries and packages
13+
# * PROJECT_NAME: the name of the project, used in package name
14+
# * VERSION: the version of the project, used in package name and checksum file
15+
# * LD_FLAGS: flags used at build time
16+
#
17+
# The project MUST contain a LICENSE.txt file in the root folder or packaging will fail.
18+
19+
tasks:
20+
all:
21+
desc: Build for distribution for all platforms
22+
cmds:
23+
- task: Windows_32bit
24+
- task: Windows_64bit
25+
- task: Linux_32bit
26+
- task: Linux_64bit
27+
- task: Linux_ARMv6
28+
- task: Linux_ARMv7
29+
- task: Linux_ARM64
30+
- task: macOS_64bit
31+
32+
Windows_32bit:
33+
desc: Builds Windows 32 bit binaries
34+
dir: "{{ .DIST_DIR }}"
35+
cmds:
36+
- |
37+
docker run -v `pwd`/..:/home/build -w /home/build \
38+
-e CGO_ENABLED=1 \
39+
{{ .CONTAINER }}:{{ .CONTAINER_TAG }} \
40+
--build-cmd "{{ .BUILD_COMMAND }}" \
41+
-p "{{ .BUILD_PLATFORM }}"
42+
43+
zip {{ .PACKAGE_NAME}} {{ .PLATFORM_DIR }}/{{ .PROJECT_NAME }}.exe ../LICENSE.txt -j
44+
sha256sum {{ .PACKAGE_NAME }} >> {{ .CHECKSUM_FILE }}
45+
46+
vars:
47+
PLATFORM_DIR: "{{ .PROJECT_NAME }}_windows_386"
48+
BUILD_COMMAND: "go build -o {{ .DIST_DIR }}/{{ .PLATFORM_DIR }}/{{ .PROJECT_NAME }}.exe {{ .LDFLAGS }}"
49+
BUILD_PLATFORM: "windows/386"
50+
CONTAINER_TAG: "{{ .GO_VERSION }}-main"
51+
PACKAGE_PLATFORM: "Windows_32bit"
52+
PACKAGE_NAME: "{{ .PROJECT_NAME }}_{{ .VERSION }}_{{ .PACKAGE_PLATFORM }}.zip"
53+
54+
Windows_64bit:
55+
desc: Builds Windows 64 bit binaries
56+
dir: "{{ .DIST_DIR }}"
57+
cmds:
58+
- |
59+
docker run -v `pwd`/..:/home/build -w /home/build \
60+
-e CGO_ENABLED=1 \
61+
{{ .CONTAINER }}:{{ .CONTAINER_TAG }} \
62+
--build-cmd "{{ .BUILD_COMMAND }}" \
63+
-p "{{ .BUILD_PLATFORM }}"
64+
65+
zip {{ .PACKAGE_NAME}} {{ .PLATFORM_DIR }}/{{ .PROJECT_NAME }}.exe ../LICENSE.txt -j
66+
sha256sum {{ .PACKAGE_NAME }} >> {{ .CHECKSUM_FILE }}
67+
68+
vars:
69+
PLATFORM_DIR: "{{ .PROJECT_NAME }}_windows_amd64"
70+
BUILD_COMMAND: "go build -o {{ .DIST_DIR }}/{{ .PLATFORM_DIR }}/{{ .PROJECT_NAME }}.exe {{ .LDFLAGS }}"
71+
BUILD_PLATFORM: "windows/amd64"
72+
CONTAINER_TAG: "{{ .GO_VERSION }}-main"
73+
PACKAGE_PLATFORM: "Windows_64bit"
74+
PACKAGE_NAME: "{{ .PROJECT_NAME }}_{{ .VERSION }}_{{ .PACKAGE_PLATFORM }}.zip"
75+
76+
Linux_32bit:
77+
desc: Builds Linux 32 bit binaries
78+
dir: "{{ .DIST_DIR }}"
79+
cmds:
80+
- |
81+
docker run -v `pwd`/..:/home/build -w /home/build \
82+
-e CGO_ENABLED=1 \
83+
{{ .CONTAINER }}:{{ .CONTAINER_TAG }} \
84+
--build-cmd "{{ .BUILD_COMMAND }}" \
85+
-p "{{ .BUILD_PLATFORM }}"
86+
87+
tar cz -C {{ .PLATFORM_DIR }} {{ .PROJECT_NAME }} -C ../.. LICENSE.txt -f {{ .PACKAGE_NAME }}
88+
sha256sum {{ .PACKAGE_NAME }} >> {{ .CHECKSUM_FILE }}
89+
90+
vars:
91+
PLATFORM_DIR: "{{ .PROJECT_NAME }}_linux_386"
92+
BUILD_COMMAND: "go build -o {{ .DIST_DIR }}/{{ .PLATFORM_DIR }}/{{ .PROJECT_NAME }} {{ .LDFLAGS }}"
93+
BUILD_PLATFORM: "linux/386"
94+
CONTAINER_TAG: "{{ .GO_VERSION }}-main"
95+
PACKAGE_PLATFORM: "Linux_32bit"
96+
PACKAGE_NAME: "{{ .PROJECT_NAME }}_{{ .VERSION }}_{{ .PACKAGE_PLATFORM }}.tar.gz"
97+
98+
Linux_64bit:
99+
desc: Builds Linux 64 bit binaries
100+
dir: "{{ .DIST_DIR }}"
101+
cmds:
102+
- |
103+
docker run -v `pwd`/..:/home/build -w /home/build \
104+
-e CGO_ENABLED=1 \
105+
{{ .CONTAINER }}:{{ .CONTAINER_TAG }} \
106+
--build-cmd "{{ .BUILD_COMMAND }}" \
107+
-p "{{ .BUILD_PLATFORM }}"
108+
109+
tar cz -C {{ .PLATFORM_DIR }} {{ .PROJECT_NAME }} -C ../.. LICENSE.txt -f {{ .PACKAGE_NAME }}
110+
sha256sum {{ .PACKAGE_NAME }} >> {{ .CHECKSUM_FILE }}
111+
112+
vars:
113+
PLATFORM_DIR: "{{ .PROJECT_NAME }}_linux_amd64"
114+
BUILD_COMMAND: "go build -o {{ .DIST_DIR }}/{{ .PLATFORM_DIR }}/{{ .PROJECT_NAME }} {{ .LDFLAGS }}"
115+
BUILD_PLATFORM: "linux/amd64"
116+
CONTAINER_TAG: "{{ .GO_VERSION }}-main"
117+
PACKAGE_PLATFORM: "Linux_64bit"
118+
PACKAGE_NAME: "{{ .PROJECT_NAME }}_{{ .VERSION }}_{{ .PACKAGE_PLATFORM }}.tar.gz"
119+
120+
Linux_ARMv7:
121+
desc: Builds Linux ARMv7 binaries
122+
dir: "{{ .DIST_DIR }}"
123+
cmds:
124+
- |
125+
docker run -v `pwd`/..:/home/build -w /home/build \
126+
-e CGO_ENABLED=1 \
127+
{{ .CONTAINER }}:{{ .CONTAINER_TAG }} \
128+
--build-cmd "{{ .BUILD_COMMAND }}" \
129+
-p "{{ .BUILD_PLATFORM }}"
130+
131+
tar cz -C {{ .PLATFORM_DIR }} {{ .PROJECT_NAME }} -C ../.. LICENSE.txt -f {{ .PACKAGE_NAME }}
132+
sha256sum {{ .PACKAGE_NAME }} >> {{ .CHECKSUM_FILE }}
133+
134+
vars:
135+
PLATFORM_DIR: "{{ .PROJECT_NAME }}_linux_arm_7"
136+
BUILD_COMMAND: "go build -o {{ .DIST_DIR }}/{{ .PLATFORM_DIR }}/{{ .PROJECT_NAME }} {{ .LDFLAGS }}"
137+
BUILD_PLATFORM: "linux/armv7"
138+
CONTAINER_TAG: "{{ .GO_VERSION }}-arm"
139+
PACKAGE_PLATFORM: "Linux_ARMv7"
140+
PACKAGE_NAME: "{{ .PROJECT_NAME }}_{{ .VERSION }}_{{ .PACKAGE_PLATFORM }}.tar.gz"
141+
142+
Linux_ARMv6:
143+
desc: Builds Linux ARMv6 binaries
144+
dir: "{{ .DIST_DIR }}"
145+
cmds:
146+
- |
147+
docker run -v `pwd`/..:/home/build -w /home/build \
148+
-e CGO_ENABLED=1 \
149+
{{ .CONTAINER }}:{{ .CONTAINER_TAG }} \
150+
--build-cmd "{{ .BUILD_COMMAND }}" \
151+
-p "{{ .BUILD_PLATFORM }}"
152+
153+
tar cz -C {{ .PLATFORM_DIR }} {{ .PROJECT_NAME }} -C ../.. LICENSE.txt -f {{ .PACKAGE_NAME }}
154+
sha256sum {{ .PACKAGE_NAME }} >> {{ .CHECKSUM_FILE }}
155+
156+
vars:
157+
PLATFORM_DIR: "{{ .PROJECT_NAME }}_linux_arm_6"
158+
BUILD_COMMAND: "go build -o {{ .DIST_DIR }}/{{ .PLATFORM_DIR }}/{{ .PROJECT_NAME }} {{ .LDFLAGS }}"
159+
BUILD_PLATFORM: "linux/armv6"
160+
CONTAINER_TAG: "{{ .GO_VERSION }}-arm"
161+
PACKAGE_PLATFORM: "Linux_ARMv6"
162+
PACKAGE_NAME: "{{ .PROJECT_NAME }}_{{ .VERSION }}_{{ .PACKAGE_PLATFORM }}.tar.gz"
163+
164+
Linux_ARM64:
165+
desc: Builds Linux ARM64 binaries
166+
dir: "{{ .DIST_DIR }}"
167+
cmds:
168+
- |
169+
docker run -v `pwd`/..:/home/build -w /home/build \
170+
-e CGO_ENABLED=1 \
171+
{{ .CONTAINER }}:{{ .CONTAINER_TAG }} \
172+
--build-cmd "{{ .BUILD_COMMAND }}" \
173+
-p "{{ .BUILD_PLATFORM }}"
174+
175+
tar cz -C {{ .PLATFORM_DIR }} {{ .PROJECT_NAME }} -C ../.. LICENSE.txt -f {{ .PACKAGE_NAME }}
176+
sha256sum {{ .PACKAGE_NAME }} >> {{ .CHECKSUM_FILE }}
177+
178+
vars:
179+
PLATFORM_DIR: "{{ .PROJECT_NAME }}_linux_arm_6"
180+
BUILD_COMMAND: "go build -o {{ .DIST_DIR }}/{{ .PLATFORM_DIR }}/{{ .PROJECT_NAME }} {{ .LDFLAGS }}"
181+
BUILD_PLATFORM: "linux/arm64"
182+
CONTAINER_TAG: "{{ .GO_VERSION }}-arm"
183+
PACKAGE_PLATFORM: "Linux_ARM64"
184+
PACKAGE_NAME: "{{ .PROJECT_NAME }}_{{ .VERSION }}_{{ .PACKAGE_PLATFORM }}.tar.gz"
185+
186+
macOS_64bit:
187+
desc: Builds Mac OS X 64 bit binaries
188+
dir: "{{ .DIST_DIR }}"
189+
cmds:
190+
- |
191+
docker run -v `pwd`/..:/home/build -w /home/build \
192+
-e CGO_ENABLED=1 \
193+
{{ .CONTAINER }}:{{ .CONTAINER_TAG }} \
194+
--build-cmd "{{ .BUILD_COMMAND }}" \
195+
-p "{{ .BUILD_PLATFORM }}"
196+
197+
tar cz -C {{ .PLATFORM_DIR }} {{ .PROJECT_NAME }} -C ../.. LICENSE.txt -f {{ .PACKAGE_NAME }}
198+
sha256sum {{ .PACKAGE_NAME }} >> {{ .CHECKSUM_FILE }}
199+
200+
vars:
201+
PLATFORM_DIR: "{{ .PROJECT_NAME }}_osx_darwin_amd64"
202+
BUILD_COMMAND: "go build -o {{ .DIST_DIR }}/{{ .PLATFORM_DIR }}/{{ .PROJECT_NAME }} {{ .LDFLAGS }}"
203+
BUILD_PLATFORM: "darwin/amd64"
204+
CONTAINER_TAG: "{{ .GO_VERSION }}-darwin"
205+
PACKAGE_PLATFORM: "macOS_64bit"
206+
PACKAGE_NAME: "{{ .PROJECT_NAME }}_{{ .VERSION }}_{{ .PACKAGE_PLATFORM }}.tar.gz"
207+
208+
vars:
209+
CONTAINER: "docker.elastic.co/beats-dev/golang-crossbuild"
210+
GO_VERSION: "1.15.8"
211+
CHECKSUM_FILE: "{{ .VERSION }}-checksums.txt"

Taskfile.yml

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
version: "3"
2+
3+
includes:
4+
dist: ./DistTasks.yml
5+
6+
tasks:
7+
build:
8+
desc: Build the project
9+
cmds:
10+
- go build -v {{.LDFLAGS}}
11+
12+
vars:
13+
PROJECT_NAME: "serial-discovery"
14+
DIST_DIR: "dist"
15+
VERSION:
16+
sh: echo "$(git describe --tags --dirty --broken)"
17+
TIMESTAMP:
18+
sh: echo "$(date -u +"%Y-%m-%dT%H:%M:%SZ")"
19+
LDFLAGS: >
20+
-ldflags
21+
'
22+
-X github.com/arduino/serial-discovery/version.Tag={{.VERSION}}
23+
-X github.com/arduino/serial-discovery/version.Timestamp={{.TIMESTAMP}}
24+
'

args.go

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
//
2+
// This file is part of serial-discovery.
3+
//
4+
// Copyright 2021 ARDUINO SA (http://www.arduino.cc/)
5+
//
6+
// This software is released under the GNU General Public License version 3,
7+
// which covers the main part of arduino-cli.
8+
// The terms of this license can be found at:
9+
// https://www.gnu.org/licenses/gpl-3.0.en.html
10+
//
11+
// You can be released from the requirements of the above licenses by purchasing
12+
// a commercial license. Buying such a license is mandatory if you want to modify or
13+
// otherwise use the software for commercial activities involving the Arduino
14+
// software without disclosing the source code of your own applications. To purchase
15+
// a commercial license, send an email to [email protected].
16+
//
17+
18+
package main
19+
20+
import (
21+
"fmt"
22+
"os"
23+
)
24+
25+
var args struct {
26+
showVersion bool
27+
}
28+
29+
func parseArgs() {
30+
for _, arg := range os.Args[1:] {
31+
if arg == "" {
32+
continue
33+
}
34+
if arg == "-v" || arg == "--version" {
35+
args.showVersion = true
36+
continue
37+
}
38+
fmt.Fprintf(os.Stderr, "invalid argument: %s\n", arg)
39+
os.Exit(1)
40+
}
41+
}

main.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
//
22
// This file is part of serial-discovery.
33
//
4-
// Copyright 2018 ARDUINO SA (http://www.arduino.cc/)
4+
// Copyright 2021 ARDUINO SA (http://www.arduino.cc/)
55
//
66
// This software is released under the GNU General Public License version 3,
77
// which covers the main part of arduino-cli.
@@ -26,10 +26,17 @@ import (
2626
"sync"
2727

2828
"github.com/arduino/go-properties-orderedmap"
29+
"github.com/arduino/serial-discovery/version"
2930
"go.bug.st/serial/enumerator"
3031
)
3132

3233
func main() {
34+
parseArgs()
35+
if args.showVersion {
36+
fmt.Printf("serial-discovery %s (build timestamp: %s)\n", version.Tag, version.Timestamp)
37+
return
38+
}
39+
3340
syncStarted := false
3441
var syncCloseChan chan<- bool
3542

0 commit comments

Comments
 (0)