Skip to content

Publish multi-platform images built on native runners - #25

Merged
tescalada merged 1 commit into
mainfrom
ci/native-multi-arch
Jul 31, 2026
Merged

Publish multi-platform images built on native runners#25
tescalada merged 1 commit into
mainfrom
ci/native-multi-arch

Conversation

@tescalada

Copy link
Copy Markdown
Contributor

The image was built only for the runner's architecture, so every published tag was linux/amd64 and an arm64 host had no manifest to pull — a deploy fails with no matching manifest for linux/arm64/v8.

Each platform now builds on a runner of its own architecture: ubuntu-latest for amd64, ubuntu-24.04-arm for arm64. Same-repo builds push untagged, addressed by digest, and a merge job joins the digests into one manifest list carrying the tags.

Fork PRs cannot push, and the digest merge needs both images in the registry, so they upload one archive per platform instead. publish-pr.yml joins those into a single multi-platform image and pushes it — still without checking out or executing fork code, and still deriving every tag from the API rather than from anything the fork controls.

Nothing is emulated on either path.

The image was built only for the runner's architecture, so every
published tag was linux/amd64 and an arm64 host had no manifest to pull.

Build each platform on a runner of its own architecture. Same-repo
builds push untagged, addressed by digest, and a merge job joins the
digests into one manifest list carrying the tags.

Fork PRs cannot push, so they upload one archive per platform;
publish-pr.yml joins those into a single multi-platform image and pushes
it. Nothing is emulated on either path.
@github-actions

Copy link
Copy Markdown

Coverage

Coverage report
FileStmtsMissCoverMissing
sparkmeter
   __version__.py16288%32, 38
   _wsgi_mount_smoketest.py97970%19–152
   app.py3151197%19–20, 111, 368–375, 552–554, 675, 682–683
   asgi.py74740%19–166
   cli.py42686%59–70
   cli_app.py880%4–20
   cli_prompts.py151220%8–12, 17–21, 26–28
   conftest.py181995%51–52, 85–86, 108–120, 209
   controller.py2444283%183, 207–208, 531, 585–642
   debug_memory.py32320%6–63
   periodic.py563145%60–66, 71–75, 80–84, 93–98, 103–111, 124–128
   sentry_proxy.py342235%38, 44–47, 56–65, 73–82
   servercommand.py1127236%47, 56–60, 64–69, 73–78, 82–85, 89–90, 101–103, 112–181
sparkmeter/alembic/versions
   0.32_merge_sms_tables.py46393%61–67
   0.77_snapshot_support.py128298%340, 401
sparkmeter/api
   customerviews0.py283199%301
   historyviews0.py1149219%49–55, 69–72, 81–131, 144–175, 185–216, 230–257
sparkmeter/config
   configparameter.py57296%80, 111
sparkmeter/database
   alchemy.py54493%61–63, 74
   database.py232399%497, 579–580
   ormobject.py55198%65
   session.py21210%12–62
   types.py54394%91–92, 125
sparkmeter/ground
   groundcommand.py201050%20–35
sparkmeter/history
   historyview.py351654%30–31, 41–54, 65–72
sparkmeter/meter
   meterdomain.py7722797%892, 1805–1806, 1817–1868, 1911
sparkmeter/metering
   api.py27967%66–76
   cli.py2275874%158, 174–175, 184, 193, 198–201, 203, 234, 238–244, 281–297, 301–335, 456–458
   dispatch.py741678%78–80, 85–97, 185
   events.py1053468%56, 75–77, 109–112, 118–193, 240
   lifespan.py695225%37–98, 109–125
   reconcile.py1134362%84–107, 119–120, 129, 135–138, 140–143, 169, 259–262, 266–269, 273–276, 287
sparkmeter/metering/tools
   cli_client.py825829%46–52, 56–61, 65–70, 83–107, 115–148, 153–166
sparkmeter/misc
   datetimeutils.py65395%115–117
sparkmeter/system
   systemcommand.py67593%35, 130–132, 134–135
sparkmeter/tariff
   tariffcommand.py821582%27–44
sparkmeter/transaction
   transactionview.py167199%71
sparkmeter/user
   userdomain.py1871294%416–434
sparkmeter/web
   unittestutils.py1941194%73–81, 323, 332, 398, 400
   views.py72199%71
TOTAL1266792193% 

Tests Skipped Failures Errors Time
1277 0 💤 0 ❌ 0 🔥 2m 13s ⏱️

@github-actions

Copy link
Copy Markdown

Diff Coverage

Diff: origin/main...HEAD, staged and unstaged changes

No lines with coverage information in this diff.

@tescalada
tescalada merged commit 47932de into main Jul 31, 2026
12 checks passed
@tescalada
tescalada deleted the ci/native-multi-arch branch July 31, 2026 18:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant