Skip to content

Commit 03e77c9

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 3056aa1 commit 03e77c9

File tree

2 files changed

+23
-51
lines changed

2 files changed

+23
-51
lines changed

workflow-templates/assets/release-go-crosscompile-task/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"

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

+23-26
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
@@ -60,9 +75,6 @@ jobs:
6075
name: Notarize ${{ matrix.artifact.name }}
6176
runs-on: macos-latest
6277
needs: create-release-artifacts
63-
outputs:
64-
checksum-darwin_amd64: ${{ steps.re-package.outputs.checksum-darwin_amd64 }}
65-
checksum-darwin_arm64: ${{ steps.re-package.outputs.checksum-darwin_arm64 }}
6678

6779
env:
6880
GON_CONFIG_PATH: gon.config.hcl
@@ -140,14 +152,10 @@ jobs:
140152
run: |
141153
gon "${{ env.GON_CONFIG_PATH }}"
142154
143-
- name: Re-package binary and output checksum
155+
- name: Re-package binary
144156
id: re-package
145157
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)
158+
# Repackage the signed binary replaced in place by Gon (ignoring the output zip file)
151159
run: |
152160
# GitHub's upload/download-artifact actions don't preserve file permissions,
153161
# so we need to add execution permission back until the action is made to do this.
@@ -157,11 +165,9 @@ jobs:
157165
tar -czvf "$PACKAGE_FILENAME" \
158166
-C "${{ env.PROJECT_NAME }}_osx_${{ matrix.artifact.name }}/" "${{ env.PROJECT_NAME }}" \
159167
-C ../../ LICENSE.txt
160-
CHECKSUM_LINE="$(shasum -a 256 $PACKAGE_FILENAME)"
161168
echo "PACKAGE_FILENAME=$PACKAGE_FILENAME" >> $GITHUB_ENV
162-
echo "checksum-${{ matrix.artifact.name }}=$CHECKSUM_LINE" >> $GITHUB_OUTPUT
163169
164-
- name: Upload artifacts
170+
- name: Upload artifact
165171
uses: actions/upload-artifact@v3
166172
with:
167173
if-no-files-found: error
@@ -179,20 +185,11 @@ jobs:
179185
name: ${{ env.ARTIFACT_NAME }}
180186
path: ${{ env.DIST_DIR }}
181187

182-
- name: Update checksum
188+
- name: Create checksum file
189+
working-directory: ${{ env.DIST_DIR}}
183190
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
191+
TAG="${GITHUB_REF/refs\/tags\//}"
192+
sha256sum ${{ env.PROJECT_NAME }}_${TAG}* > ${TAG}-checksums.txt
196193
197194
- name: Identify Prerelease
198195
# This is a workaround while waiting for create-release action

0 commit comments

Comments
 (0)