@@ -113,6 +113,71 @@ jobs:
113113 echo "PRERELEASE=false" >> "$GITHUB_ENV"
114114 fi
115115
116+ - name : Install signing tools
117+ run : |
118+ sudo apt-get update
119+ sudo apt-get install -y minisign gnupg
120+
121+ - name : Generate SHA256SUMS and signatures
122+ env :
123+ MINISIGN_KEY : ${{ secrets.MINISIGN_KEY }}
124+ MINISIGN_PUB : ${{ secrets.MINISIGN_PUB }}
125+ GPG_PRIVATE_KEY : ${{ secrets.GPG_PRIVATE_KEY }}
126+ GPG_PASSPHRASE : ${{ secrets.GPG_PASSPHRASE }}
127+ run : |
128+ set -euo pipefail
129+
130+ if [ -z "${MINISIGN_KEY:-}" ] || [ -z "${MINISIGN_PUB:-}" ]; then
131+ echo "Missing minisign secrets (MINISIGN_KEY / MINISIGN_PUB)." >&2
132+ exit 1
133+ fi
134+ if [ -z "${GPG_PRIVATE_KEY:-}" ]; then
135+ echo "Missing GPG_PRIVATE_KEY secret." >&2
136+ exit 1
137+ fi
138+
139+ mkdir -p out dist
140+ printf '%s' "$MINISIGN_KEY" | base64 -d > out/minisign.key
141+ printf '%s' "$MINISIGN_PUB" | base64 -d > out/minisign.pub
142+ chmod 600 out/minisign.key
143+ cp out/minisign.pub dist/minisign.pub
144+
145+ export GNUPGHOME
146+ GNUPGHOME="$(mktemp -d)"
147+ trap 'rm -rf "$GNUPGHOME"' EXIT
148+ printf '%s' "$GPG_PRIVATE_KEY" | gpg --batch --import
149+ key_id="$(gpg --list-secret-keys --with-colons | awk -F: '$1=="sec" {print $5; exit}')"
150+ if [ -z "$key_id" ]; then
151+ echo "No GPG secret key imported." >&2
152+ exit 1
153+ fi
154+
155+ mapfile -d '' files < <(find dist -name 'bugleos-toolchain-*.tar.gz' -print0 | sort -z)
156+ if [ "${#files[@]}" -eq 0 ]; then
157+ echo "No toolchain tarballs found under dist/." >&2
158+ exit 1
159+ fi
160+
161+ sha256sum "${files[@]}" > dist/SHA256SUMS
162+
163+ minisign -S -s out/minisign.key -p out/minisign.pub -m dist/SHA256SUMS
164+ if [ -n "${GPG_PASSPHRASE:-}" ]; then
165+ gpg --batch --yes --pinentry-mode loopback --passphrase "$GPG_PASSPHRASE" \
166+ --local-user "$key_id" --armor --detach-sign -o dist/SHA256SUMS.asc dist/SHA256SUMS
167+ else
168+ gpg --batch --yes --local-user "$key_id" --armor --detach-sign -o dist/SHA256SUMS.asc dist/SHA256SUMS
169+ fi
170+
171+ for f in "${files[@]}"; do
172+ minisign -S -s out/minisign.key -p out/minisign.pub -m "$f"
173+ if [ -n "${GPG_PASSPHRASE:-}" ]; then
174+ gpg --batch --yes --pinentry-mode loopback --passphrase "$GPG_PASSPHRASE" \
175+ --local-user "$key_id" --armor --detach-sign -o "$f.asc" "$f"
176+ else
177+ gpg --batch --yes --local-user "$key_id" --armor --detach-sign -o "$f.asc" "$f"
178+ fi
179+ done
180+
116181 - name : Publish GitHub Release
117182 uses : softprops/action-gh-release@v2
118183 with :
@@ -129,3 +194,11 @@ jobs:
129194 files : |
130195 dist/**/bugleos-toolchain-${{ env.VERSION }}-x86_64.tar.gz
131196 dist/**/bugleos-toolchain-${{ env.VERSION }}-aarch64.tar.gz
197+ dist/**/bugleos-toolchain-${{ env.VERSION }}-x86_64.tar.gz.minisig
198+ dist/**/bugleos-toolchain-${{ env.VERSION }}-aarch64.tar.gz.minisig
199+ dist/**/bugleos-toolchain-${{ env.VERSION }}-x86_64.tar.gz.asc
200+ dist/**/bugleos-toolchain-${{ env.VERSION }}-aarch64.tar.gz.asc
201+ dist/SHA256SUMS
202+ dist/SHA256SUMS.minisig
203+ dist/SHA256SUMS.asc
204+ dist/minisign.pub
0 commit comments