-
-
Notifications
You must be signed in to change notification settings - Fork 386
173 lines (157 loc) · 5.12 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
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
# 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"
pull_request:
paths:
- ".github/workflows/publish-go-tester-task.ya?ml"
- "go.mod"
- "go.sum"
- "Taskfile.ya?ml"
- "DistTasks.ya?ml"
- "**.go"
workflow_dispatch:
repository_dispatch:
env:
# As defined by the Taskfile's PROJECT_NAME variable
PROJECT_NAME: arduino-cli
# As defined by the Taskfile's DIST_DIR variable
DIST_DIR: dist
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"
TAG_REGEX="refs/tags/.*"
# 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) && \
! "${{ github.ref }}" =~ $TAG_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
package-name-prefix:
needs: run-determination
if: needs.run-determination.outputs.result == 'true'
runs-on: ubuntu-latest
outputs:
prefix: ${{ steps.calculation.outputs.prefix }}
steps:
- name: package name prefix calculation
id: calculation
run: |
PACKAGE_NAME_PREFIX="test"
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 }}-"
echo "prefix=$PACKAGE_NAME_PREFIX" >> $GITHUB_OUTPUT
create-artifacts:
needs: package-name-prefix
name: Create artifact ${{ matrix.artifact.name }}
runs-on: ubuntu-latest
strategy:
matrix:
artifact:
- task: dist:Windows_32bit
path: "*Windows_32bit.zip"
name: Windows_X86-32
- task: dist:Windows_64bit
path: "*Windows_64bit.zip"
name: Windows_X86-64
- task: dist:Linux_32bit
path: "*Linux_32bit.tar.gz"
name: Linux_X86-32
- task: dist:Linux_64bit
path: "*Linux_64bit.tar.gz"
name: Linux_X86-64
- task: dist:Linux_ARMv6
path: "*Linux_ARMv6.tar.gz"
name: Linux_ARMv6
- task: dist:Linux_ARMv7
path: "*Linux_ARMv7.tar.gz"
name: Linux_ARMv7
- task: dist:Linux_ARM64
path: "*Linux_ARM64.tar.gz"
name: Linux_ARM64
- task: dist:macOS_64bit
path: "*macOS_64bit.tar.gz"
name: macOS_64
- task: dist:macOS_ARM64
path: "*macOS_ARM64.tar.gz"
name: macOS_ARM64
- task: protoc:collect
path: "*_proto.zip"
name: rpc-protocol-files
- task: dist:jsonschema
path: "*configuration.schema.json"
name: configuration-schema
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Install Task
uses: arduino/setup-task@v2
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
version: 3.x
- name: Install buf
uses: bufbuild/buf-action@v1
with:
setup_only: true
- name: Build
run: |
PACKAGE_NAME_PREFIX=${{ needs.package-name-prefix.outputs.prefix }}
export PACKAGE_NAME_PREFIX
task ${{ matrix.artifact.task }}
# Transfer builds to artifacts job
- name: Upload build artifact
uses: actions/upload-artifact@v4
with:
path: ${{ env.DIST_DIR }}/${{ matrix.artifact.path }}
name: ${{ matrix.artifact.name }}
checksums:
needs:
- create-artifacts
- package-name-prefix
runs-on: ubuntu-latest
steps:
- name: Download build artifacts
uses: actions/download-artifact@v4
- name: Output checksum
run: |
TAG="${{ needs.package-name-prefix.outputs.prefix }}git-snapshot"
declare -a artifacts=($(ls -d */))
for artifact in ${artifacts[@]}
do
cd $artifact
checksum=$(sha256sum ${{ env.PROJECT_NAME }}_${TAG}*)
cd ..
echo $checksum >> ${TAG}-checksums.txt
done
- name: Upload checksum artifact
uses: actions/upload-artifact@v4
with:
path: ./*checksums.txt
name: checksums