CI: weekly Woodpecker check for a new iTunes build; test install.sh on it, open a PR #13
Labels
No labels
bug
Claude
deferred
enhancement
epic
implementation
priority/high
priority/low
priority/med
research
verification
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
iTunes/iTunes.Wine#13
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
iTunes doesn't update itself under this install. 12.13.11.1 bundles no Apple Software Update (KNOWLEDGE.md → Installers), and
install.shpins one installer by URL and sha1. A new Apple build should still not go unnoticed. Installing it over the operator's prefix automatically is ruled out, because iTunes upgrades the library file one way (operator, 2026-10-28).Detection works:
curl -sIL -o /dev/null -w '%{url_effective}' https://www.apple.com/itunes/download/win64resolves to the versioned CDN URL. On 2026-10-28 that was exactlyITUNES_URLininstall.sh(…/140-75773-20260908-…/iTunes64Setup.exe).To build: a Woodpecker cron pipeline on ci.lewd.wtf (the repo's webhook is already there), on the docker backend in
fedora:44with the rig's packages (wine/Dockerfile.fedora). It should:ITUNES_URL; when they match, stop with success;ProductVersionfrom the bundlediTunes64.msi, and bump URL, sha1 and version ininstall.sh;install.shheadless into a fresh prefix (wine/launch.sh --sh), then check thatiTunes.exeandMobileDevice.dllexist, that the AMDS service hasStart=4, and that iTunes is still running 90 s after start with nothing on 127.0.0.1:27015;itunes-update/<version>and open a PR; if they fail, open abugissue with the log tail. A rerun for the same version does neither twice.The phone checks (#9) can't run in CI; after a bump they stay a manual run.
Needs the operator, in Woodpecker: a cron entry, and a secret
forgejo_bot_token(Forgejo scopeswrite:repository+write:issue) allowed oncronandmanualevents.Done when the pipeline runs green on the cron with the current pin ("up to date"), and a forced run against an older pin (12.10.11.2's URL) opens a PR for 12.13.11.1.
Built in
5dd067c:.woodpecker/itunes-update.ymlandci/itunes-update.sh, plus theinstall.shchanges the job needs (ITUNES_VERSION;id -uninstead of$USER, which a container leaves unset).Tested on the desktop:
LATEST_URLthat isn't an Apple installer fails with exit 1.Start=4), and also right on aStart=2 copy. The first draft looked underCurrentControlSet, which Wine'ssystem.regdoesn't have (it usesControlSet001). It "passed" the negative control while failing the real prefix, and the positive control caught that.ProductVersionfrom the cached 12.13.11.1 installer reads12.13.11.1.Not run yet: the new-build path (download → bump → headless install → PR or issue). It needs the CI container.
Operator steps in Woodpecker (ci.lewd.wtf → iTunes/iTunes.Wine → Settings):
forgejo_bot_token, a Forgejo token withwrite:repository+write:issue, eventscronandmanual.@weekly), branchmaster.masterwith the variableLATEST_URL=https://secure-appldnld.apple.com/itunes12/001-80053-20210422-E8A3B28C-A3B2-11EB-BE07-CE1B67FC6302/iTunes64Setup.exe(12.10.11.2). That should open a PR "iTunes 12.10.11.2: install.sh", or a bug issue ifinstall.shfails on that build. It's a downgrade, so close the PR and delete its branch afterwards.Set up in Woodpecker (repo id 14):
forgejo_bot_token, a Forgejo token scoped to this repo only (repository + issue write; checked: reads this repo, 404 on another repo, 403 on/user, andgit push --dry-runsucceeds), events cron + manual.itunes-update@weeklyon master; first run 2026-11-01 01:00 CET.Test runs:
$in commands. Fixed ind1b4ec9: setup moved toci/setup-rig.sh.LATEST_URL= 12.10.11.2: detection, download, sha1 and version all correct. The headless checks failed and the job opened #14, which is the failure path, end to end. The cause is real for that build (see #14).Done-when, revised: the forced run opened an issue instead of the PR the done-when expected, because 12.10 genuinely fails. So the PR path is still unexercised, apart from the push credential (dry run). It will first run for real on Apple's next build, and the PR it opens is the check. The first cron run (2026-11-01) checks the up-to-date path in CI.
Closed by the operator (2026-10-28). The cron, the secret and the failure path are verified (pipeline 2 → #14). The PR path is accepted as-is, untested except for the push credential: it first runs on Apple's next build, and the PR it opens is the check. If that run breaks, it gets a new issue.