• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

Tatsh / sbclaude / 31996004249
100%

Build:
DEFAULT BRANCH: master
Ran 17 Aug 2026 04:54AM UTC
Jobs 5
Files 5
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

16 Aug 2026 09:37PM UTC coverage: 100.0%. Remained the same
31996004249

push

github

Tatsh
container: bridge the gpg-agent socket where gpg will look

--gpg stopped being able to sign, with "Inappropriate ioctl for device"
from a pinentry that has no TTY to prompt on. Nothing in GnuPG changed;
the premise the bridging relied on did.

_gpg_args overlays the host agent socket at <GNUPGHOME>/S.gpg-agent, and
its comment says why: "the container's gpg, lacking a usable
/run/user/<uid>, looks for it at <GNUPGHOME>/S.gpg-agent". That word
"usable" is the whole thing. The directory has existed for a while --
--ssh forwards SSH_AUTH_SOCK, which on a systemd host lives right there
-- but Docker creates it root:root 0755, and gpg rejects a runtime
directory it does not own, so it fell back to the home and the overlay
was found.

Then --wayland taught the entrypoint to chown it to the user and chmod it
0700, because a compositor client refuses an XDG_RUNTIME_DIR that is not.
That made it usable, so gpg started resolving its socket directory to
/run/user/<uid>/gnupg, where nothing was mounted. gpg does not report a
missing agent: it starts one of its own inside the box, and that agent
can only reach pinentry-curses.

Overlay the socket at both paths rather than work out which one applies.
Which it is depends on flags parsed elsewhere and on a chown that happens
later in the entrypoint, so the condition is not reliably knowable at the
point the arguments are built; the unused mount costs nothing, and
guessing wrong costs signing entirely. Chown the gnupg directory in the
entrypoint too, for the same reason its parent is chowned: Docker creates
it root-owned and GnuPG requires the socket directory to belong to the
user.

Verified on a running box by symlinking /run/user/<uid>/gnupg/S.gpg-agent
to the bridged socket, which made "gpg --clearsign" succeed immediately
and let three signed commits through. The argument construction is unit
tested at both paths; the end-to-end path wants a fresh box to confirm.

Signed-off-by: Andrew Udvare <audvare@gmail.com>

91 of 91 branches covered (100.0%)

Branch coverage included in aggregate %.

7 of 7 new or added lines in 1 file covered. (100.0%)

668 of 668 relevant lines covered (100.0%)

5.0 hits per line

Jobs
ID Job ID Ran Files Coverage
1 31996004249.1 17 Aug 2026 04:54AM UTC 5
100.0
GitHub Action Run
2 31996004249.2 17 Aug 2026 04:54AM UTC 5
100.0
GitHub Action Run
3 31996004249.3 17 Aug 2026 04:54AM UTC 5
100.0
GitHub Action Run
4 31996004249.4 17 Aug 2026 04:54AM UTC 5
100.0
GitHub Action Run
5 31996004249.5 17 Aug 2026 04:54AM UTC 5
100.0
GitHub Action Run
Source Files on build 31996004249
  • Tree
  • List 5
  • Changed 1
  • Source Changed 1
  • Coverage Changed 1
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • Github Actions Build #31996004249
  • 09a6991f on github
  • Prev Build on master (#31931854819)
  • Next Build on master (#32093141648)
  • Delete
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc