Skip to content

Commit 6b6a375

Browse files
committed
Added taskfile and cross-compiler script
1 parent 4457449 commit 6b6a375

File tree

2 files changed

+235
-0
lines changed

2 files changed

+235
-0
lines changed

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+
'

0 commit comments

Comments
 (0)