Update Website fails #360
Closed
opened 2026-06-03 11:38:20 +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#360
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.
Update website fails:
https://codeberg.org/guettli/sharedinbox/actions/runs/1394/jobs/0/attempt/1
Why, and how to fix?
I'll read the project conventions and CI configuration to understand the failing "Update Website" job.The main docs aren't local. Let me explore what's available locally and fetch the failing CI run.Let me look at the DAGGER.md and recent git commits for more context.I have enough context now. Let me synthesize the root cause.
The workflow file is clear. The Dockerfile installs
daggerandtask, but commit #354 ("migrate CI secrets from Forgejo to SOPS") addedscripts/setup_dagger_remote.shwhich callssopsto decryptsecrets.enc.yaml— andsopsis not in the runner image.Now I have a clear picture. Here's my implementation plan:Root Cause
Commit #354 ("migrate CI secrets from Forgejo to SOPS") introduced
scripts/setup_dagger_remote.sh, which calls:However,
sopswas never added to the act-runner Docker image. The.forgejo/Dockerfileonly installsdagger(v0.20.8) andtask(v3.48.0). When theSetup Dagger Remote Enginestep runs, the shell finds nosopsbinary and exits with an error, aborting all remaining steps (deploy and verify).secrets.enc.yamlwas created with sops v3.13.1 (visible in the file's metadata).Implementation Plan
Step 1 — Add
sopsto.forgejo/DockerfileAppend a
RUNlayer after the existing installs, pinned to match the version used to encrypt the file:Using the static binary avoids any package-manager friction on the Ubuntu base image.
Step 2 — Sync the Dockerfile to the runner host
The file comment says it is manually copied to the host:
Copy the updated file there and restart the service so
ExecStartPre=docker build …rebuilds the image before the next run.Step 3 — Verify
Re-trigger the "Update Website" workflow (via
workflow_dispatchor a push touchingwebsite/**). All five steps should now succeed:Check runner tools—command -v daggerandcommand -v taskpass (sops is not checked here, but would be worth adding)Setup Dagger Remote Engine—sops --decryptsucceeds, secrets exported, SSH tunnel establishedBuild & Update Website— Dagger pipeline runsVerify Website—https://sharedinbox.de/returns HTTP 200 with the expectedx-versiongit hashOptional follow-up
Add a
sopspresence check to the "Check runner tools" step so future omissions are caught early with a clear error message:Let me start by exploring the repository structure and understanding the failure.Now let me check the setup script and the CI Dagger module for the
publish-websitefunction.Now let me look at theGenerateBuildHistoryfunction and the script it calls.Let me check the website verify script and look at recent CI changes.Let me also read the deploy.yml and ci.yml workflows to compare.Let me look at the Hugo function in main.go and check if HUGO_PARAMS_GITVERSION is set.Let me check howx-versionandHUGO_PARAMS_GITVERSIONare used in the website templates.Now I understand the issue. TheBuildWebsiteDagger function doesn't setHUGO_PARAMS_GITVERSION, butwebsite-verify.shlooks for thex-versionmeta tag which is only rendered when that env var is passed to Hugo. The verify step will always fail because the deployed site never contains the version string.Let me look at the full
ci/main.goto understand the structure before making changes.Now I have a clear picture. The fix is:commitHashparameter toBuildWebsiteandPublishWebsiteinci/main.go, and use it to setHUGO_PARAMS_GITVERSIONin the Hugo build.task publish-websiteinTaskfile.ymlto pass--commit-hash "$(git rev-parse --short HEAD)".Now update the Taskfile to pass the commit hash:Now let me verify the changes look correct:The changes look correct. Now let me also check whether there's ago vetor compilation check I should run on the ci module:Thego veterror is a pre-existinggo.summismatch unrelated to my changes. Let me verify the Go syntax of my changes is correct by checking the localgotools on just the function signatures:gofmtparses cleanly. Let me also read back the modified section to double-check:The changes look correct. Now let me commit this on a new branch and open a PR.The PR is open at https://codeberg.org/guettli/sharedinbox/pulls/362.Root cause:
BuildWebsiteinci/main.goranhugo --minifywithout settingHUGO_PARAMS_GITVERSION. Hugo uses that env var to populatesite.Params.gitversion, which theextend_head.htmlpartial renders as<meta name="x-version" content="...">. Without that tag,website-verify.sh— which greps forx-version.*${VERSION}in the live HTML — always timed out and failed, even though the site itself was deployed correctly.Fix:
commitHashparameter toBuildWebsiteandPublishWebsiteinci/main.go; when set, it is passed to the Hugo container viaWithEnvVariable("HUGO_PARAMS_GITVERSION", commitHash).task publish-websiteinTaskfile.ymlto computeHASH=$(git rev-parse --short HEAD)and pass--commit-hash "$HASH"to the Dagger call — exactly astask deploy-linuxalready does.