Sops in ci, CI redaction.... #434
Closed
opened 2026-06-05 04:45:23 +00:00 by guettli
·
2 comments
No Branch/Tag Specified
main
issue-563-agentloop-validation
dummy-pr-test
issue-560-fix-firebase-run-url
issue-539-stable-imap-uid
issue-533-shared-email-list
plan-issue-555
drop-nix
plan-issue-484
plan-issue-539
plan-issue-535
plan-issue-474
plan-issue-533
fix-dagger-engineless-precommit
issue-521-fix-deploy-yml-wait-time-api
issue-502-fix-email-id-collision-mailbox
issue-492-eliminate-duplicate-build-runner
issue-494-website-change-detection
issue-491-parallelize-check
issue-478-fix-stalwart-dual-stack-bind
issue-475-allowed-addresses-glob
issue-473-search-result-reorder
issue-453-update-agentloop-defaults
issue-466-structured-search
issue-505-exclude-chaos-monkey-from-regular-ci
issue-509-fix-search-result-sorting
fix-ink-sparkle-remaining-tests
issue-506-fix-search-emails-tests
issue-504-runner-wait-time
issue-488-search-notes
issue-472-changelog-issue-links
issue-501-folder-search-local-sqlite
issue-486-fix-stale-test-shader-mismatch
fix/prevent-settled-search-rerun-473
issue-467-fix-search-stale-results
issue-446-installed-versions-in-changelog
issue-462-fix-pr
issue-448-chaos-monkey-test
issue-436-notes-on-emails
issue-429-unify-mail-display
issue-422-move-to-folder-create-new
issue-414-ensure-not-run-as-root
issue-424-unify-email-list-views
issue-419-trusted-senders-page
issue-425-fix-prs
test-foo
issue-421-bug-report
issue-383-fix-ci
issue-394-fix-deploy-flutter-version
issue-391-fix-ci-double-trigger
issue-376-combined-inbox-v2
issue-376-combined-inbox
issue-384-fix-open-prs
sops-migrate
issue-339-safe-first-on-imap-fetch
issue-340-try-catch-measure-height
issue-342-pin-intl-version
issue-341-guard-threademails-last
issue-335-agentloop-code-test
issue-329-fix
issue-315-fix
issue-320-fix
issue-325-fix
issue-312-fix
issue-311-fix
issue-305-fix
issue-304-fix
issue-299-fix
issue-300-fix
issue-298-fix
issue-296-fix
issue-294-fix
issue-289-fix
issue-288-fix
issue-287-fix
issue-286-fix
issue-277-fix
issue-282-fix
issue-280-fix
issue-272-fix
issue-268-fix
issue-267-fix
issue-266-fix
issue-258-fix
issue-260-fix
issue-257-fix
issue-253-fix
issue-216-fix
issue-251-fix
issue-249-fix
issue-question-fixes
issue-235-fix
issue-236-fix-v2
issue-237-fix
issue-236-fix
issue-228-fix
issue-217-fix
issue-214-fix
issue-213-fix
issue-208-fix
issue-205-fix
issue-204-fix
issue-203-fix
issue-202-fix
issue-129-fix
issue-161-fix
issue-160-fix
issue-201-fix
issue-210-fix
issue-198-fix
issue-200-fix
issue-144-fix
issue-199-fix
fix/playstore-upload-use-requests
issue-193-fix
issue-186-fix
issue-185-fix
issue-192-fix
issue-183-fix
issue-175-fix
issue-172-fix
issue-171-fix
issue-167-fix
issue-136-fix
issue-162-fix
issue-179-fix
issue-155-fix
issue-154-fix
issue-152-fix
issue-151-fix
issue-141-fix
issue-150-fix
issue-164-fix
migrate-to-dagger
task/d1-ci-matrix
task/a4-typeconverter-json
task/u7-onboarding-walkthrough
task/d3-sync-doc
task/a5-layer-boundary-lint
task/t5-golden-tests
task/p5-date-cache
task/s4-link-handling
task/p3-html-parse-isolate
task/u8-mark-all-read
task/u3-recent-searches
task/a3-jmap-injectable-http-client
task/r5-tls-error-handling
fix/playstore-redirect-retry
task/t3-repository-contract-tests
task/p2-email-list-pagination
task/p1-fts5-search
fix/playstore-upload-timeout
task/a1-email-detail-notifier
fix/upgrade-workmanager-0.9
fix/android-core-library-desugaring
task/p4-db-indexes
task/r3-html-error-boundary
task/d2-check-coverage
task/a2-email-tile
task/t4-migration-tests
task/t2-widget-tests
task/t1-email-repo-coverage
task/u6-connection-status
task/u4-push-notifications
task/u2-draft-sync
task/u1-list-unsubscribe
task/s2-hostname-validation
task/r6-reliability-fuzz-tests
task/r4-sync-error-banner
task/r2-force-resync
task/r1-undo-history-persistence
No results found.
Labels
Clear labels
NeedSupervisor
State/InProgress
State/Later
State/Planned
automerge
ci-failure
do-not-merge
loop/code
loop/code-ci-pending
loop/code-done
loop/code-in-process
loop/merge
loop/merge-done
loop/merge-in-process
loop/plan
loop/plan-done
loop/plan-in-process
Issue escalated to a human supervisor; agentloop will skip it until cleared.
Eligible for automatic merge by CI
Issue opened by agentloop to track a failing CI workflow; used for deduplication.
Plan PR — review only, do not merge.
Add to run the built-in "code" prompt; override at prompts/code.md.
Prompt "code" finished; waiting for the PR's CI to pass before advancing.
Prompt "code" finished successfully.
Agent for the "code" prompt is currently running on this issue.
Managed by agentloop
Managed by agentloop
Managed by agentloop
Add to run the built-in "plan" prompt; override at prompts/plan.md.
Prompt "plan" finished successfully.
Agent for the "plan" prompt is currently running on this issue.
No labels
loop/code-done
Milestone
No items
No Milestone
Projects
Clear projects
No projects
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: guettli/sharedinbox#434
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
CI does not know that these strings are secrets. Redaction does not work.
I now have everything I need. Here is the implementation plan:
Implementation Plan: Fix CI secret redaction in
setup_dagger_remote.shProblem
scripts/setup_dagger_remote.shdecryptssecrets.enc.yamlvia SOPS and writes the resulting values into$GITHUB_ENVso subsequent workflow steps can use them. However, the Forgejo/GitHub Actions runner only redacts values it has been explicitly told to treat as secrets — either via${{ secrets.* }}substitutions, or via the::add-mask::workflow command. Because the script never issues::add-mask::commands, any step that echoes or logs one of the exported values (e.g., adagger callprogress line, a strayset -x, or a debug printout) will expose the secret in plain text in the CI log.Root cause
The
export_secret()function inscripts/setup_dagger_remote.shwrites values to$GITHUB_ENVbut never emits::add-mask::. The runner therefore has no record of which strings to redact.Fix — one file:
scripts/setup_dagger_remote.sh1. Add per-line masking inside
export_secret()Immediately after the
value=$(jq -r ...)line, emit one::add-mask::per non-empty line of the value. Multiline secrets such as SSH private keys must be masked line-by-line because the::add-mask::command only covers what is on that one output line.2. Mask the two inline variables
DAGGER_SSH_KEYandDAGGER_ENGINE_HOSTThese are extracted from the JSON but never passed through
export_secret(). Add masking directly after they are assigned:What does NOT change
pubspec.yaml.[secrets] exported NAME (N chars)log line is safe and stays.::add-mask::output is consumed by the runner and does not appear in the visible log.Testing guidance
After the change, a CI run that encounters any logged value (e.g., from
set -xin a sub-script, or a Dagger progress line that echoes an env-var) should show***instead of the raw secret. Verify by triggering thedeploy.ymlworkflow manually (workflow_dispatch) and checking that none of the exported secret values appear in plain text in the log output for the steps that follow "Setup Dagger Remote Engine".Summary
Fixed CI secret redaction in
scripts/setup_dagger_remote.shby adding::add-mask::workflow commands.Root cause: The Forgejo/GitHub Actions runner only redacts values it's been explicitly told about. Secrets decrypted from
secrets.enc.yamland written to$GITHUB_ENVwere never registered for masking, so they could appear in plain text in CI log output.Fix: Added
::add-mask::calls in two places:export_secret()— each non-empty line of every exported secret is registered before being written to$GITHUB_ENV. Multiline values (SSH keys, JSON service account files) are masked line-by-line since::add-mask::covers one line at a time.DAGGER_ENGINE_HOSTandDAGGER_SSH_KEY— these were extracted directly from the JSON and used without going throughexport_secret(), so they needed their own masking calls.Pull request: https://codeberg.org/guettli/sharedinbox/pulls/460