Skip to content

Commit cc16d21

Browse files
Build releases simultaneously in release-go-crosscompile-task
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 057d970 commit cc16d21

File tree

2 files changed

+23
-45
lines changed

2 files changed

+23
-45
lines changed

workflow-templates/assets/release-go-crosscompile-task/DistTasks.yml

-22
Original file line numberDiff line numberDiff line change
@@ -21,19 +21,6 @@ vars:
2121
CHECKSUM_FILE: "{{.VERSION}}-checksums.txt"
2222

2323
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-
3724
Windows_32bit:
3825
desc: Builds Windows 32 bit binaries
3926
env:
@@ -45,7 +32,6 @@ tasks:
4532
go build -o {{.DIST_DIR}}/{{.PLATFORM_DIR}}/{{.PROJECT_NAME}}.exe {{.LDFLAGS}}
4633
cd {{.DIST_DIR}}
4734
zip {{.PACKAGE_NAME}} {{.PLATFORM_DIR}}/{{.PROJECT_NAME}}.exe ../LICENSE.txt -j
48-
sha256sum {{.PACKAGE_NAME}} >> {{.CHECKSUM_FILE}}
4935
vars:
5036
PLATFORM_DIR: "{{.PROJECT_NAME}}_windows_386"
5137
PACKAGE_PLATFORM: "Windows_32bit"
@@ -61,7 +47,6 @@ tasks:
6147
go build -o {{.DIST_DIR}}/{{.PLATFORM_DIR}}/{{.PROJECT_NAME}}.exe {{.LDFLAGS}}
6248
cd {{.DIST_DIR}}
6349
zip {{.PACKAGE_NAME}} {{.PLATFORM_DIR}}/{{.PROJECT_NAME}}.exe ../LICENSE.txt -j
64-
sha256sum {{.PACKAGE_NAME}} >> {{.CHECKSUM_FILE}}
6550
vars:
6651
PLATFORM_DIR: "{{.PROJECT_NAME}}_windows_amd64"
6752
PACKAGE_PLATFORM: "Windows_64bit"
@@ -78,7 +63,6 @@ tasks:
7863
go build -o {{.DIST_DIR}}/{{.PLATFORM_DIR}}/{{.PROJECT_NAME}} {{.LDFLAGS}}
7964
cd {{.DIST_DIR}}
8065
tar cz -C {{.PLATFORM_DIR}} {{.PROJECT_NAME}} -C ../.. LICENSE.txt -f {{.PACKAGE_NAME}}
81-
sha256sum {{.PACKAGE_NAME}} >> {{.CHECKSUM_FILE}}
8266
vars:
8367
PLATFORM_DIR: "{{.PROJECT_NAME}}_linux_amd32"
8468
PACKAGE_PLATFORM: "Linux_32bit"
@@ -94,7 +78,6 @@ tasks:
9478
go build -o {{.DIST_DIR}}/{{.PLATFORM_DIR}}/{{.PROJECT_NAME}} {{.LDFLAGS}}
9579
cd {{.DIST_DIR}}
9680
tar cz -C {{.PLATFORM_DIR}} {{.PROJECT_NAME}} -C ../.. LICENSE.txt -f {{.PACKAGE_NAME}}
97-
sha256sum {{.PACKAGE_NAME}} >> {{.CHECKSUM_FILE}}
9881
vars:
9982
PLATFORM_DIR: "{{.PROJECT_NAME}}_linux_amd64"
10083
PACKAGE_PLATFORM: "Linux_64bit"
@@ -111,7 +94,6 @@ tasks:
11194
go build -o {{.DIST_DIR}}/{{.PLATFORM_DIR}}/{{.PROJECT_NAME}} {{.LDFLAGS}}
11295
cd {{.DIST_DIR}}
11396
tar cz -C {{.PLATFORM_DIR}} {{.PROJECT_NAME}} -C ../.. LICENSE.txt -f {{.PACKAGE_NAME}}
114-
sha256sum {{.PACKAGE_NAME}} >> {{.CHECKSUM_FILE}}
11597
vars:
11698
PLATFORM_DIR: "{{.PROJECT_NAME}}_linux_arm_7"
11799
PACKAGE_PLATFORM: "Linux_ARMv7"
@@ -128,7 +110,6 @@ tasks:
128110
go build -o {{.DIST_DIR}}/{{.PLATFORM_DIR}}/{{.PROJECT_NAME}} {{.LDFLAGS}}
129111
cd {{.DIST_DIR}}
130112
tar cz -C {{.PLATFORM_DIR}} {{.PROJECT_NAME}} -C ../.. LICENSE.txt -f {{.PACKAGE_NAME}}
131-
sha256sum {{.PACKAGE_NAME}} >> {{.CHECKSUM_FILE}}
132113
vars:
133114
PLATFORM_DIR: "{{.PROJECT_NAME}}_linux_arm_6"
134115
PACKAGE_PLATFORM: "Linux_ARMv6"
@@ -144,7 +125,6 @@ tasks:
144125
go build -o {{.DIST_DIR}}/{{.PLATFORM_DIR}}/{{.PROJECT_NAME}} {{.LDFLAGS}}
145126
cd {{.DIST_DIR}}
146127
tar cz -C {{.PLATFORM_DIR}} {{.PROJECT_NAME}} -C ../.. LICENSE.txt -f {{.PACKAGE_NAME}}
147-
sha256sum {{.PACKAGE_NAME}} >> {{.CHECKSUM_FILE}}
148128
vars:
149129
PLATFORM_DIR: "{{.PROJECT_NAME}}_linux_arm_64"
150130
PACKAGE_PLATFORM: "Linux_ARM64"
@@ -160,7 +140,6 @@ tasks:
160140
go build -o {{.DIST_DIR}}/{{.PLATFORM_DIR}}/{{.PROJECT_NAME}} {{.LDFLAGS}}
161141
cd {{.DIST_DIR}}
162142
tar cz -C {{.PLATFORM_DIR}} {{.PROJECT_NAME}} -C ../.. LICENSE.txt -f {{.PACKAGE_NAME}}
163-
sha256sum {{.PACKAGE_NAME}} >> {{.CHECKSUM_FILE}}
164143
vars:
165144
PLATFORM_DIR: "{{.PROJECT_NAME}}_osx_darwin_amd64"
166145
PACKAGE_PLATFORM: "macOS_64bit"
@@ -176,7 +155,6 @@ tasks:
176155
go build -o {{.DIST_DIR}}/{{.PLATFORM_DIR}}/{{.PROJECT_NAME}} {{.LDFLAGS}}
177156
cd {{.DIST_DIR}}
178157
tar cz -C {{.PLATFORM_DIR}} {{.PROJECT_NAME}} -C ../.. LICENSE.txt -f {{.PACKAGE_NAME}}
179-
sha256sum {{.PACKAGE_NAME}} >> {{.CHECKSUM_FILE}}
180158
vars:
181159
PLATFORM_DIR: "{{.PROJECT_NAME}}_osx_darwin_arm64"
182160
PACKAGE_PLATFORM: "macOS_ARM64"

workflow-templates/release-go-crosscompile-task.yml

+23-23
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
@@ -140,14 +155,10 @@ jobs:
140155
run: |
141156
gon "${{ env.GON_CONFIG_PATH }}"
142157
143-
- name: Re-package binary and output checksum
158+
- name: Re-package binary
144159
id: re-package
145160
working-directory: ${{ env.DIST_DIR }}
146-
# This step performs the following:
147-
# 1. Repackage the signed binary replaced in place by Gon (ignoring the output zip file)
148-
# 2. Recalculate package checksum
149-
# 3. Output the new checksum to include in the nnnnnn-checksums.txt file
150-
# (it cannot be done there because of workflow job parallelization)
161+
# Repackage the signed binary replaced in place by Gon (ignoring the output zip file)
151162
run: |
152163
# GitHub's upload/download-artifact actions don't preserve file permissions,
153164
# so we need to add execution permission back until the action is made to do this.
@@ -157,11 +168,9 @@ jobs:
157168
tar -czvf "$PACKAGE_FILENAME" \
158169
-C "${{ env.PROJECT_NAME }}_osx_${{ matrix.artifact.name }}/" "${{ env.PROJECT_NAME }}" \
159170
-C ../../ LICENSE.txt
160-
CHECKSUM_LINE="$(shasum -a 256 $PACKAGE_FILENAME)"
161171
echo "PACKAGE_FILENAME=$PACKAGE_FILENAME" >> $GITHUB_ENV
162-
echo "checksum-${{ matrix.artifact.name }}=$CHECKSUM_LINE" >> $GITHUB_OUTPUT
163172
164-
- name: Upload artifacts
173+
- name: Upload artifact
165174
uses: actions/upload-artifact@v3
166175
with:
167176
if-no-files-found: error
@@ -179,20 +188,11 @@ jobs:
179188
name: ${{ env.ARTIFACT_NAME }}
180189
path: ${{ env.DIST_DIR }}
181190

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

0 commit comments

Comments
 (0)