@@ -136,15 +136,28 @@ jobs:
136136 - name: Vendor Go dependencies
137137 run: go mod vendor
138138
139+ - name: Create GPG signing wrapper
140+ env:
141+ GPG_KEY_ID: ${{ secrets.GPG_KEY_ID }}
142+ run: |
143+ # dpkg-buildpackage/debsign -p takes a path to an executable,
144+ # not a command string with arguments. Create a wrapper script.
145+ echo '#!/bin/sh' > /tmp/gpg-sign.sh
146+ echo 'exec gpg --batch --pinentry-mode loopback --passphrase "" "$@"' >> /tmp/gpg-sign.sh
147+ chmod +x /tmp/gpg-sign.sh
148+ cat /tmp/gpg-sign.sh
149+ # Sanity check: can the wrapper sign?
150+ echo "test" | /tmp/gpg-sign.sh --clearsign -u "${GPG_KEY_ID}" > /dev/null 2>&1 \
151+ && echo "GPG signing wrapper: OK" \
152+ || { echo "ERROR: GPG signing wrapper failed"; exit 1; }
153+
139154 - name: Build signed source package
140155 env:
141156 GPG_KEY_ID: ${{ secrets.GPG_KEY_ID }}
142157 run: |
143- # Build source-only package, signed with our GPG key.
144- # --pinentry-mode loopback + --passphrase '' handles keys with no passphrase.
145158 dpkg-buildpackage -S -sa \
146159 -k"${GPG_KEY_ID}" \
147- -p" gpg --batch --pinentry-mode loopback --passphrase ''"
160+ -p/tmp/ gpg-sign.sh
148161
149162 mkdir -p dist
150163 cp ../*.dsc ../*.tar.* ../*_source.changes ../*_source.buildinfo dist/ 2>/dev/null || true
@@ -160,10 +173,8 @@ jobs:
160173
161174 CHANGES_FILE=$(ls dist/*_source.changes | head -1)
162175
163- # debsign the .changes file
164- debsign -k"${GPG_KEY_ID}" \
165- -p"gpg --batch --pinentry-mode loopback --passphrase ''" \
166- "$CHANGES_FILE"
176+ # debsign also takes -p as a path to a sign command
177+ debsign -k"${GPG_KEY_ID}" -p/tmp/gpg-sign.sh "$CHANGES_FILE"
167178
168179 echo "Uploading to PPA..."
169180 dput odooctl-ppa "$CHANGES_FILE"
0 commit comments