Skip to content

Commit ff95327

Browse files
authored
[skip changelog] Rework dist process and add minimal documentation (#137)
* [skip changelog] Rework a dist process and add minimal documentation * [skip changelog] Change how version string is calculated If a nightly is being built the version string will be "nightly-<timestamp>". Else if a tag is set in the currently checked out commit that is used. In all other cases the "snapshot" string is used, this last case handles a local build started manually by a developer.
1 parent 0de21f6 commit ff95327

File tree

4 files changed

+43
-32
lines changed

4 files changed

+43
-32
lines changed

.github/workflows/nightly.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ jobs:
2424

2525
- name: Build
2626
env:
27-
CUSTOM_VERSION: nightly
27+
NIGHTLY: true
2828
run: task dist:all
2929

3030
- name: Upload artifacts

DistTasks.yml

+32-28
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,21 @@
11
version: "3"
22

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+
319
tasks:
420
all:
521
desc: Build for distribution for all platforms
@@ -18,7 +34,7 @@ tasks:
1834
dir: "{{ .DIST_DIR }}"
1935
cmds:
2036
- |
21-
docker run -v `pwd`/..:/home/lint -w /home/lint \
37+
docker run -v `pwd`/..:/home/build -w /home/build \
2238
-e CGO_ENABLED=1 \
2339
{{ .CONTAINER }}:{{ .CONTAINER_TAG }} \
2440
--build-cmd "{{ .BUILD_COMMAND }}" \
@@ -29,7 +45,7 @@ tasks:
2945
3046
vars:
3147
PLATFORM_DIR: "{{ .PROJECT_NAME }}_windows_386"
32-
BUILD_COMMAND: "go build -o {{ .DIST_DIR }}/{{ .PLATFORM_DIR }}/{{ .PROJECT_NAME }}.exe {{ .DIST_LDFLAGS }}"
48+
BUILD_COMMAND: "go build -o {{ .DIST_DIR }}/{{ .PLATFORM_DIR }}/{{ .PROJECT_NAME }}.exe {{ .LDFLAGS }}"
3349
BUILD_PLATFORM: "windows/386"
3450
CONTAINER_TAG: "{{ .GO_VERSION }}-main"
3551
PACKAGE_PLATFORM: "Windows_32bit"
@@ -40,7 +56,7 @@ tasks:
4056
dir: "{{ .DIST_DIR }}"
4157
cmds:
4258
- |
43-
docker run -v `pwd`/..:/home/lint -w /home/lint \
59+
docker run -v `pwd`/..:/home/build -w /home/build \
4460
-e CGO_ENABLED=1 \
4561
{{ .CONTAINER }}:{{ .CONTAINER_TAG }} \
4662
--build-cmd "{{ .BUILD_COMMAND }}" \
@@ -51,7 +67,7 @@ tasks:
5167
5268
vars:
5369
PLATFORM_DIR: "{{ .PROJECT_NAME }}_windows_amd64"
54-
BUILD_COMMAND: "go build -o {{ .DIST_DIR }}/{{ .PLATFORM_DIR }}/{{ .PROJECT_NAME }}.exe {{ .DIST_LDFLAGS }}"
70+
BUILD_COMMAND: "go build -o {{ .DIST_DIR }}/{{ .PLATFORM_DIR }}/{{ .PROJECT_NAME }}.exe {{ .LDFLAGS }}"
5571
BUILD_PLATFORM: "windows/amd64"
5672
CONTAINER_TAG: "{{ .GO_VERSION }}-main"
5773
PACKAGE_PLATFORM: "Windows_64bit"
@@ -62,7 +78,7 @@ tasks:
6278
dir: "{{ .DIST_DIR }}"
6379
cmds:
6480
- |
65-
docker run -v `pwd`/..:/home/lint -w /home/lint \
81+
docker run -v `pwd`/..:/home/build -w /home/build \
6682
-e CGO_ENABLED=1 \
6783
{{ .CONTAINER }}:{{ .CONTAINER_TAG }} \
6884
--build-cmd "{{ .BUILD_COMMAND }}" \
@@ -73,7 +89,7 @@ tasks:
7389
7490
vars:
7591
PLATFORM_DIR: "{{ .PROJECT_NAME }}_linux_amd32"
76-
BUILD_COMMAND: "go build -o {{ .DIST_DIR }}/{{ .PLATFORM_DIR }}/{{ .PROJECT_NAME }} {{ .DIST_LDFLAGS }}"
92+
BUILD_COMMAND: "go build -o {{ .DIST_DIR }}/{{ .PLATFORM_DIR }}/{{ .PROJECT_NAME }} {{ .LDFLAGS }}"
7793
BUILD_PLATFORM: "linux/386"
7894
CONTAINER_TAG: "{{ .GO_VERSION }}-main"
7995
PACKAGE_PLATFORM: "Linux_32bit"
@@ -84,7 +100,7 @@ tasks:
84100
dir: "{{ .DIST_DIR }}"
85101
cmds:
86102
- |
87-
docker run -v `pwd`/..:/home/lint -w /home/lint \
103+
docker run -v `pwd`/..:/home/build -w /home/build \
88104
-e CGO_ENABLED=1 \
89105
{{ .CONTAINER }}:{{ .CONTAINER_TAG }} \
90106
--build-cmd "{{ .BUILD_COMMAND }}" \
@@ -95,7 +111,7 @@ tasks:
95111
96112
vars:
97113
PLATFORM_DIR: "{{ .PROJECT_NAME }}_linux_amd64"
98-
BUILD_COMMAND: "go build -o {{ .DIST_DIR }}/{{ .PLATFORM_DIR }}/{{ .PROJECT_NAME }} {{ .DIST_LDFLAGS }}"
114+
BUILD_COMMAND: "go build -o {{ .DIST_DIR }}/{{ .PLATFORM_DIR }}/{{ .PROJECT_NAME }} {{ .LDFLAGS }}"
99115
BUILD_PLATFORM: "linux/amd64"
100116
CONTAINER_TAG: "{{ .GO_VERSION }}-main"
101117
PACKAGE_PLATFORM: "Linux_64bit"
@@ -106,7 +122,7 @@ tasks:
106122
dir: "{{ .DIST_DIR }}"
107123
cmds:
108124
- |
109-
docker run -v `pwd`/..:/home/lint -w /home/lint \
125+
docker run -v `pwd`/..:/home/build -w /home/build \
110126
-e CGO_ENABLED=1 \
111127
{{ .CONTAINER }}:{{ .CONTAINER_TAG }} \
112128
--build-cmd "{{ .BUILD_COMMAND }}" \
@@ -117,7 +133,7 @@ tasks:
117133
118134
vars:
119135
PLATFORM_DIR: "{{ .PROJECT_NAME }}_linux_arm_7"
120-
BUILD_COMMAND: "go build -o {{ .DIST_DIR }}/{{ .PLATFORM_DIR }}/{{ .PROJECT_NAME }} {{ .DIST_LDFLAGS }}"
136+
BUILD_COMMAND: "go build -o {{ .DIST_DIR }}/{{ .PLATFORM_DIR }}/{{ .PROJECT_NAME }} {{ .LDFLAGS }}"
121137
BUILD_PLATFORM: "linux/armv7"
122138
CONTAINER_TAG: "{{ .GO_VERSION }}-arm"
123139
PACKAGE_PLATFORM: "Linux_ARMv7"
@@ -128,7 +144,7 @@ tasks:
128144
dir: "{{ .DIST_DIR }}"
129145
cmds:
130146
- |
131-
docker run -v `pwd`/..:/home/lint -w /home/lint \
147+
docker run -v `pwd`/..:/home/build -w /home/build \
132148
-e CGO_ENABLED=1 \
133149
{{ .CONTAINER }}:{{ .CONTAINER_TAG }} \
134150
--build-cmd "{{ .BUILD_COMMAND }}" \
@@ -139,7 +155,7 @@ tasks:
139155
140156
vars:
141157
PLATFORM_DIR: "{{ .PROJECT_NAME }}_linux_arm_6"
142-
BUILD_COMMAND: "go build -o {{ .DIST_DIR }}/{{ .PLATFORM_DIR }}/{{ .PROJECT_NAME }} {{ .DIST_LDFLAGS }}"
158+
BUILD_COMMAND: "go build -o {{ .DIST_DIR }}/{{ .PLATFORM_DIR }}/{{ .PROJECT_NAME }} {{ .LDFLAGS }}"
143159
BUILD_PLATFORM: "linux/armv6"
144160
CONTAINER_TAG: "{{ .GO_VERSION }}-arm"
145161
PACKAGE_PLATFORM: "Linux_ARMv6"
@@ -150,7 +166,7 @@ tasks:
150166
dir: "{{ .DIST_DIR }}"
151167
cmds:
152168
- |
153-
docker run -v `pwd`/..:/home/lint -w /home/lint \
169+
docker run -v `pwd`/..:/home/build -w /home/build \
154170
-e CGO_ENABLED=1 \
155171
{{ .CONTAINER }}:{{ .CONTAINER_TAG }} \
156172
--build-cmd "{{ .BUILD_COMMAND }}" \
@@ -161,7 +177,7 @@ tasks:
161177
162178
vars:
163179
PLATFORM_DIR: "{{ .PROJECT_NAME }}_linux_arm_6"
164-
BUILD_COMMAND: "go build -o {{ .DIST_DIR }}/{{ .PLATFORM_DIR }}/{{ .PROJECT_NAME }} {{ .DIST_LDFLAGS }}"
180+
BUILD_COMMAND: "go build -o {{ .DIST_DIR }}/{{ .PLATFORM_DIR }}/{{ .PROJECT_NAME }} {{ .LDFLAGS }}"
165181
BUILD_PLATFORM: "linux/arm64"
166182
CONTAINER_TAG: "{{ .GO_VERSION }}-arm"
167183
PACKAGE_PLATFORM: "Linux_ARM64"
@@ -172,7 +188,7 @@ tasks:
172188
dir: "{{ .DIST_DIR }}"
173189
cmds:
174190
- |
175-
docker run -v `pwd`/..:/home/lint -w /home/lint \
191+
docker run -v `pwd`/..:/home/build -w /home/build \
176192
-e CGO_ENABLED=1 \
177193
{{ .CONTAINER }}:{{ .CONTAINER_TAG }} \
178194
--build-cmd "{{ .BUILD_COMMAND }}" \
@@ -183,25 +199,13 @@ tasks:
183199
184200
vars:
185201
PLATFORM_DIR: "{{ .PROJECT_NAME }}_osx_darwin_amd64"
186-
BUILD_COMMAND: "go build -o {{ .DIST_DIR }}/{{ .PLATFORM_DIR }}/{{ .PROJECT_NAME }} {{ .DIST_LDFLAGS }}"
202+
BUILD_COMMAND: "go build -o {{ .DIST_DIR }}/{{ .PLATFORM_DIR }}/{{ .PROJECT_NAME }} {{ .LDFLAGS }}"
187203
BUILD_PLATFORM: "darwin/amd64"
188204
CONTAINER_TAG: "{{ .GO_VERSION }}-darwin"
189205
PACKAGE_PLATFORM: "macOS_64bit"
190206
PACKAGE_NAME: "{{ .PROJECT_NAME }}_{{ .VERSION }}_{{ .PACKAGE_PLATFORM }}.tar.gz"
191207

192208
vars:
193-
TAG:
194-
sh: echo "`git describe --tags --abbrev=0 2> /dev/null`"
195-
TIMESTAMP_SHORT:
196-
sh: echo "{{now | date "20060102"}}"
197-
VERSION: "{{if .CUSTOM_VERSION}}{{.CUSTOM_VERSION}}-{{.TIMESTAMP_SHORT}}{{else}}{{.TAG}}{{end}}"
198-
DIST_LDFLAGS: >-
199-
-ldflags
200-
'
201-
-X {{ .CONFIGURATION_PACKAGE }}.version={{.TAG}}
202-
-X {{ .CONFIGURATION_PACKAGE }}.commit={{.COMMIT}}
203-
-X {{ .CONFIGURATION_PACKAGE }}.buildTimestamp={{.TIMESTAMP}}
204-
'
205209
CONTAINER: "docker.elastic.co/beats-dev/golang-crossbuild"
206210
GO_VERSION: "1.14.7"
207211
CHECKSUM_FILE: "{{ .VERSION }}-checksums.txt"

Taskfile.yml

+6-1
Original file line numberDiff line numberDiff line change
@@ -278,15 +278,20 @@ vars:
278278
sh: echo "$(git log -n 1 --format=%h)"
279279
TIMESTAMP:
280280
sh: echo "$(date -u +"%Y-%m-%dT%H:%M:%SZ")"
281+
TIMESTAMP_SHORT:
282+
sh: echo "{{now | date "20060102"}}"
283+
TAG:
284+
sh: echo "`git tag --points-at=HEAD 2> /dev/null`"
285+
VERSION: "{{ if .NIGHTLY }}nightly-{{ .TIMESTAMP_SHORT }}{{ else if .TAG }}{{ .TAG }}{{ else }}snapshot{{ end }}"
281286
CONFIGURATION_PACKAGE: "github.com/arduino/{{ .PROJECT_NAME }}/internal/configuration"
282287
LDFLAGS: >-
283288
-ldflags
284289
'
290+
-X {{ .CONFIGURATION_PACKAGE }}.version={{.VERSION}}
285291
-X {{ .CONFIGURATION_PACKAGE }}.commit={{.COMMIT}}
286292
-X {{ .CONFIGURATION_PACKAGE }}.buildTimestamp={{.TIMESTAMP}}
287293
'
288294
GOFLAGS: "-timeout 10m -v -coverpkg=./... -covermode=atomic"
289-
290295
GOLINTFLAGS: "-min_confidence 0.8 -set_exit_status"
291296

292297
DOCS_VERSION: dev

test/test_all.py

+4-2
Original file line numberDiff line numberDiff line change
@@ -190,14 +190,16 @@ def test_version(run_command):
190190
result = run_command(cmd=["--version"])
191191
assert result.ok
192192
output_list = result.stdout.strip().split(sep=" ")
193-
assert semver.VersionInfo.isvalid(version=output_list[0])
193+
version = output_list[0]
194+
assert semver.VersionInfo.isvalid(version=version) or version == "snapshot" or "nightly" in version
194195
dateutil.parser.isoparse(output_list[1])
195196

196197
result = run_command(cmd=["--version", "--format", "json"])
197198
assert result.ok
198199
version_output = json.loads(result.stdout)
199200
if version_output["version"] != "":
200-
assert semver.VersionInfo.isvalid(version=version_output["version"])
201+
version = version_output["version"]
202+
assert semver.VersionInfo.isvalid(version=version) or version == "snapshot" or "nightly" in version
201203
assert version_output["commit"] != ""
202204
dateutil.parser.isoparse(version_output["buildTimestamp"])
203205

0 commit comments

Comments
 (0)