-
-
Notifications
You must be signed in to change notification settings - Fork 149
136 lines (117 loc) · 4.15 KB
/
publish-go-tester-task.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
# Source: https://github.com/arduino/tooling-project-assets/blob/main/workflow-templates/publish-go-tester-task.md
name: Publish Tester Build
# See: https://docs.github.com/en/free-pro-team@latest/actions/reference/events-that-trigger-workflows
on:
create:
push:
paths:
- ".github/workflows/publish-go-tester-task.ya?ml"
- "go.mod"
- "go.sum"
- "Taskfile.ya?ml"
- "DistTasks.ya?ml"
- "**.go"
- "icon/**"
- "config.ini"
- "manifest.xml"
pull_request:
paths:
- ".github/workflows/publish-go-tester-task.ya?ml"
- "go.mod"
- "go.sum"
- "Taskfile.ya?ml"
- "DistTasks.ya?ml"
- "**.go"
- "icon/**"
- "config.ini"
- "manifest.xml"
workflow_dispatch:
repository_dispatch:
env:
GO_VERSION: "1.21"
jobs:
run-determination:
runs-on: ubuntu-latest
outputs:
result: ${{ steps.determination.outputs.result }}
steps:
- name: Determine if the rest of the workflow should run
id: determination
run: |
RELEASE_BRANCH_REGEX="refs/heads/[0-9]+.[0-9]+.x"
# The `create` event trigger doesn't support `branches` filters, so it's necessary to use Bash instead.
if [[ \
"${{ github.event_name }}" != "create" || \
"${{ github.ref }}" =~ $RELEASE_BRANCH_REGEX \
]]; then
# Run the other jobs.
RESULT="true"
else
# There is no need to run the other jobs.
RESULT="false"
fi
echo "result=$RESULT" >> $GITHUB_OUTPUT
#this job is heavily customized because the build is quite a bit different from other tooling team projects
build:
needs: run-determination
if: needs.run-determination.outputs.result == 'true'
#use the strategy instead because we still use the native build
strategy:
matrix:
os: [ubuntu-20.04, windows-2019, macos-12]
arch: [-amd64]
include:
- os: windows-2019
arch: -386
defaults:
run:
shell: bash
runs-on: ${{ matrix.os }}
steps:
- name: Set env vars
run: |
echo $(go env GOPATH)/bin >> $GITHUB_PATH
- name: Disable EOL conversions
run: git config --global core.autocrlf false
- name: Checkout repository
uses: actions/checkout@v4
- name: Install Go
uses: actions/setup-go@v5
with:
go-version: ${{ env.GO_VERSION }}
- name: Install Task
uses: arduino/setup-task@v2
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
version: 3.x
- name: Build the Agent for linux
run: task go:build
if: runner.os == 'Linux'
# the manifest is required by windows GUI apps, otherwise the binary will crash with: "Unable to create main window: TTM_ADDTOOL failed" (for reference https://github.com/lxn/walk/issues/28)
# rsrc will produce a *.syso file that should get automatically recognized by go build command and linked into an executable.
- name: Download tool to embed manifest in win binary
run: go install github.com/akavel/rsrc@latest
if: runner.os == 'Windows'
# building the agent for win requires a different task because of an extra flag
- name: Build the Agent for win32
env:
GOARCH: 386 # 32bit architecture (for support)
run: task go:build-win
if: runner.os == 'Windows' && matrix.arch == '-386'
- name: Build the Agent for win64
run: task go:build-win # GOARCH=amd64 by default on the runners
if: runner.os == 'Windows' && matrix.arch == '-amd64'
- name: Build the Agent for macos
env:
MACOSX_DEPLOYMENT_TARGET: 10.15 # minimum supported version for mac
CGO_CFLAGS: -mmacosx-version-min=10.15
CGO_LDFLAGS: -mmacosx-version-min=10.15
run: task go:build
if: runner.os == 'macOS'
- name: Upload artifacts
uses: actions/upload-artifact@v3
with:
name: arduino-create-agent-${{ matrix.os }}${{ matrix.arch }}
path: |
arduino-create-agent*
if-no-files-found: error