Skip to content

Commit cdc0e1a

Browse files
Update release workflow using parallelization
Introducing the use of a matrix, greatly improves time performances during the build making process, since each build task is performed simultaneously. To support this, a check has been added to avoid creating the same changelog more than once. The calculation of the checksums has also been modified. Previously, it was done three (3) times at different stages of the workflow. This is pointless, since the only checksums that matter are the ones calculated when the files are in their final form. For this reason, it is now only done once during the release creation.
1 parent 4f369f9 commit cdc0e1a

File tree

2 files changed

+23
-43
lines changed

2 files changed

+23
-43
lines changed

.github/workflows/release-go-crosscompile-task.yml

+23-18
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,28 @@ jobs:
2121
create-release-artifacts:
2222
runs-on: ubuntu-latest
2323

24+
strategy:
25+
matrix:
26+
os:
27+
- Windows_32bit
28+
- Windows_64bit
29+
- Linux_32bit
30+
- Linux_64bit
31+
- Linux_ARMv6
32+
- Linux_ARMv7
33+
- Linux_ARM64
34+
- macOS_64bit
35+
- macOS_ARM64
36+
2437
steps:
2538
- name: Checkout repository
2639
uses: actions/checkout@v3
2740
with:
2841
fetch-depth: 0
2942

3043
- name: Create changelog
44+
# Avoid creating the same changelog for each os
45+
if: matrix.os == 'Windows_32bit'
3146
uses: arduino/create-changelog@v1
3247
with:
3348
tag-regex: '^[0-9]+\.[0-9]+\.[0-9]+.*$'
@@ -47,7 +62,7 @@ jobs:
4762
version: 3.x
4863

4964
- name: Build
50-
run: task dist:all
65+
run: task dist:${{ matrix.os }}
5166

5267
- name: Upload artifacts
5368
uses: actions/upload-artifact@v3
@@ -139,14 +154,10 @@ jobs:
139154
run: |
140155
gon "${{ env.GON_CONFIG_PATH }}"
141156
142-
- name: Re-package binary and output checksum
157+
- name: Re-package binary
143158
id: re-package
144159
working-directory: ${{ env.DIST_DIR }}
145-
# This step performs the following:
146-
# 1. Repackage the signed binary replaced in place by Gon (ignoring the output zip file)
147-
# 2. Recalculate package checksum
148-
# 3. Output the new checksum to include in the nnnnnn-checksums.txt file
149-
# (it cannot be done there because of workflow job parallelization)
160+
# Repackage the signed binary replaced in place by Gon (ignoring the output zip file)
150161
run: |
151162
# GitHub's upload/download-artifact actions don't preserve file permissions,
152163
# so we need to add execution permission back until the action is made to do this.
@@ -156,11 +167,9 @@ jobs:
156167
tar -czvf "$PACKAGE_FILENAME" \
157168
-C "${{ env.PROJECT_NAME }}_osx_${{ matrix.artifact.name }}/" "${{ env.PROJECT_NAME }}" \
158169
-C ../../ LICENSE.txt
159-
CHECKSUM_LINE="$(shasum -a 256 $PACKAGE_FILENAME)"
160170
echo "PACKAGE_FILENAME=$PACKAGE_FILENAME" >> $GITHUB_ENV
161-
echo "checksum-${{ matrix.artifact.name }}=$CHECKSUM_LINE" >> $GITHUB_OUTPUT
162171
163-
- name: Upload artifacts
172+
- name: Upload artifact
164173
uses: actions/upload-artifact@v3
165174
with:
166175
if-no-files-found: error
@@ -178,15 +187,11 @@ jobs:
178187
name: ${{ env.ARTIFACT_NAME }}
179188
path: ${{ env.DIST_DIR }}
180189

181-
- name: Update checksum
190+
- name: Create checksum file
191+
working-directory: ${{ env.DIST_DIR}}
182192
run: |
183-
declare -a checksum_lines=("${{ needs.notarize-macos.outputs.checksum-darwin_amd64 }}" "${{ needs.notarize-macos.outputs.checksum-darwin_arm64 }}")
184-
for checksum_line in "${checksum_lines[@]}"
185-
do
186-
CHECKSUM=$(echo ${checksum_line} | cut -d " " -f 1)
187-
PACKAGE_FILENAME=$(echo ${checksum_line} | cut -d " " -f 2)
188-
perl -pi -w -e "s/.*${PACKAGE_FILENAME}/${CHECKSUM} ${PACKAGE_FILENAME}/g;" ${{ env.DIST_DIR }}/*-checksums.txt
189-
done
193+
TAG="${GITHUB_REF/refs\/tags\//}"
194+
sha256sum ${{ env.PROJECT_NAME }}_${TAG}* > ${TAG}-checksums.txt
190195
191196
- name: Identify Prerelease
192197
# This is a workaround while waiting for create-release action

DistTasks.yml

-25
Original file line numberDiff line numberDiff line change
@@ -17,23 +17,7 @@ version: "3"
1717
#
1818
# The project MUST contain a LICENSE.txt file in the root folder or packaging will fail.
1919

20-
vars:
21-
CHECKSUM_FILE: "{{.VERSION}}-checksums.txt"
22-
2320
tasks:
24-
all:
25-
desc: Build for distribution for all platforms
26-
cmds:
27-
- task: Windows_32bit
28-
- task: Windows_64bit
29-
- task: Linux_32bit
30-
- task: Linux_64bit
31-
- task: Linux_ARMv6
32-
- task: Linux_ARMv7
33-
- task: Linux_ARM64
34-
- task: macOS_64bit
35-
- task: macOS_ARM64
36-
3721
Windows_32bit:
3822
desc: Builds Windows 32 bit binaries
3923
env:
@@ -45,7 +29,6 @@ tasks:
4529
go build -o {{.DIST_DIR}}/{{.PLATFORM_DIR}}/{{.PROJECT_NAME}}.exe {{.LDFLAGS}}
4630
cd {{.DIST_DIR}}
4731
zip {{.PACKAGE_NAME}} {{.PLATFORM_DIR}}/{{.PROJECT_NAME}}.exe ../LICENSE.txt -j
48-
sha256sum {{.PACKAGE_NAME}} >> {{.CHECKSUM_FILE}}
4932
vars:
5033
PLATFORM_DIR: "{{.PROJECT_NAME}}_windows_386"
5134
PACKAGE_PLATFORM: "Windows_32bit"
@@ -61,7 +44,6 @@ tasks:
6144
go build -o {{.DIST_DIR}}/{{.PLATFORM_DIR}}/{{.PROJECT_NAME}}.exe {{.LDFLAGS}}
6245
cd {{.DIST_DIR}}
6346
zip {{.PACKAGE_NAME}} {{.PLATFORM_DIR}}/{{.PROJECT_NAME}}.exe ../LICENSE.txt -j
64-
sha256sum {{.PACKAGE_NAME}} >> {{.CHECKSUM_FILE}}
6547
vars:
6648
PLATFORM_DIR: "{{.PROJECT_NAME}}_windows_amd64"
6749
PACKAGE_PLATFORM: "Windows_64bit"
@@ -78,7 +60,6 @@ tasks:
7860
go build -o {{.DIST_DIR}}/{{.PLATFORM_DIR}}/{{.PROJECT_NAME}} {{.LDFLAGS}}
7961
cd {{.DIST_DIR}}
8062
tar cz -C {{.PLATFORM_DIR}} {{.PROJECT_NAME}} -C ../.. LICENSE.txt -f {{.PACKAGE_NAME}}
81-
sha256sum {{.PACKAGE_NAME}} >> {{.CHECKSUM_FILE}}
8263
vars:
8364
PLATFORM_DIR: "{{.PROJECT_NAME}}_linux_amd32"
8465
PACKAGE_PLATFORM: "Linux_32bit"
@@ -94,7 +75,6 @@ tasks:
9475
go build -o {{.DIST_DIR}}/{{.PLATFORM_DIR}}/{{.PROJECT_NAME}} {{.LDFLAGS}}
9576
cd {{.DIST_DIR}}
9677
tar cz -C {{.PLATFORM_DIR}} {{.PROJECT_NAME}} -C ../.. LICENSE.txt -f {{.PACKAGE_NAME}}
97-
sha256sum {{.PACKAGE_NAME}} >> {{.CHECKSUM_FILE}}
9878
vars:
9979
PLATFORM_DIR: "{{.PROJECT_NAME}}_linux_amd64"
10080
PACKAGE_PLATFORM: "Linux_64bit"
@@ -111,7 +91,6 @@ tasks:
11191
go build -o {{.DIST_DIR}}/{{.PLATFORM_DIR}}/{{.PROJECT_NAME}} {{.LDFLAGS}}
11292
cd {{.DIST_DIR}}
11393
tar cz -C {{.PLATFORM_DIR}} {{.PROJECT_NAME}} -C ../.. LICENSE.txt -f {{.PACKAGE_NAME}}
114-
sha256sum {{.PACKAGE_NAME}} >> {{.CHECKSUM_FILE}}
11594
vars:
11695
PLATFORM_DIR: "{{.PROJECT_NAME}}_linux_arm_7"
11796
PACKAGE_PLATFORM: "Linux_ARMv7"
@@ -128,7 +107,6 @@ tasks:
128107
go build -o {{.DIST_DIR}}/{{.PLATFORM_DIR}}/{{.PROJECT_NAME}} {{.LDFLAGS}}
129108
cd {{.DIST_DIR}}
130109
tar cz -C {{.PLATFORM_DIR}} {{.PROJECT_NAME}} -C ../.. LICENSE.txt -f {{.PACKAGE_NAME}}
131-
sha256sum {{.PACKAGE_NAME}} >> {{.CHECKSUM_FILE}}
132110
vars:
133111
PLATFORM_DIR: "{{.PROJECT_NAME}}_linux_arm_6"
134112
PACKAGE_PLATFORM: "Linux_ARMv6"
@@ -144,7 +122,6 @@ tasks:
144122
go build -o {{.DIST_DIR}}/{{.PLATFORM_DIR}}/{{.PROJECT_NAME}} {{.LDFLAGS}}
145123
cd {{.DIST_DIR}}
146124
tar cz -C {{.PLATFORM_DIR}} {{.PROJECT_NAME}} -C ../.. LICENSE.txt -f {{.PACKAGE_NAME}}
147-
sha256sum {{.PACKAGE_NAME}} >> {{.CHECKSUM_FILE}}
148125
vars:
149126
PLATFORM_DIR: "{{.PROJECT_NAME}}_linux_arm_64"
150127
PACKAGE_PLATFORM: "Linux_ARM64"
@@ -160,7 +137,6 @@ tasks:
160137
go build -o {{.DIST_DIR}}/{{.PLATFORM_DIR}}/{{.PROJECT_NAME}} {{.LDFLAGS}}
161138
cd {{.DIST_DIR}}
162139
tar cz -C {{.PLATFORM_DIR}} {{.PROJECT_NAME}} -C ../.. LICENSE.txt -f {{.PACKAGE_NAME}}
163-
sha256sum {{.PACKAGE_NAME}} >> {{.CHECKSUM_FILE}}
164140
vars:
165141
PLATFORM_DIR: "{{.PROJECT_NAME}}_osx_darwin_amd64"
166142
PACKAGE_PLATFORM: "macOS_64bit"
@@ -176,7 +152,6 @@ tasks:
176152
go build -o {{.DIST_DIR}}/{{.PLATFORM_DIR}}/{{.PROJECT_NAME}} {{.LDFLAGS}}
177153
cd {{.DIST_DIR}}
178154
tar cz -C {{.PLATFORM_DIR}} {{.PROJECT_NAME}} -C ../.. LICENSE.txt -f {{.PACKAGE_NAME}}
179-
sha256sum {{.PACKAGE_NAME}} >> {{.CHECKSUM_FILE}}
180155
vars:
181156
PLATFORM_DIR: "{{.PROJECT_NAME}}_osx_darwin_arm64"
182157
PACKAGE_PLATFORM: "macOS_ARM64"

0 commit comments

Comments
 (0)