Skip to content

CI: tag-triggered Play publish (signed AAB to a test track)#21

Merged
xroche merged 2 commits into
masterfrom
ci/play-publish
Jul 20, 2026
Merged

CI: tag-triggered Play publish (signed AAB to a test track)#21
xroche merged 2 commits into
masterfrom
ci/play-publish

Conversation

@xroche

@xroche xroche commented Jul 19, 2026

Copy link
Copy Markdown
Owner

Wires the Play upload so a version tag produces a signed AAB on a test track. This is the automation half of the closed-beta path; #20 was the code half.

On a v* tag (or a manual run), it builds bundleRelease in the SDK container, reusing the release signingConfig from #20 by writing keystore.properties from repository secrets, then uploads the AAB with r0adkll/upload-google-play. The upload is a Docker action, which cannot run inside a container: job, so it lives in a separate runner-native job that consumes the AAB as an artifact. It asserts 16 KB .so alignment in the AAB before uploading, so a misaligned bundle fails here rather than at the Console.

Safe by default and inert until you act:

  • It does nothing until the five secrets exist and a v* tag is pushed. Merging it changes no existing job.
  • No key material is committed; keystore.properties is written on the runner (gitignored, umask 077) and GitHub masks the secret values in logs.
  • Track defaults to internal and status to draft, so a run uploads the bundle but does not release it to testers until you promote it in the Console. Override both via the manual-dispatch inputs.
  • permissions: contents: read only.

Required repository secrets (Settings → Secrets and variables → Actions), also listed at the top of the workflow:

  • UPLOAD_KEYSTORE_BASE64base64 -w0 httrack-upload.jks
  • UPLOAD_KEYSTORE_PASSWORD, UPLOAD_KEY_ALIAS, UPLOAD_KEY_PASSWORD
  • PLAY_SERVICE_ACCOUNT_JSON — a Play Console service account with publishing rights, scoped to com.httrack.android

Before the first tag: bump versionCode above whatever is live on the listing, confirm the upload-key cert is registered, and grant the service account release permissions in the Console.

xroche and others added 2 commits July 19, 2026 08:18
Builds a signed AAB on a version tag (or manual run) and uploads it to a Play
test track. Signing reuses the release signingConfig from #20: the workflow
writes keystore.properties from repository secrets, so no key material is
committed. The build runs in the SDK container; the upload is a Docker action,
so it runs in a separate runner-native job (Docker actions cannot run inside a
container job). It asserts 16 KB .so alignment in the AAB before uploading.

Inert until the five secrets are set and a v* tag is pushed. Defaults are the
internal track and draft status, so nothing reaches testers without a Console
release. Required secrets are documented at the top of the workflow.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Xavier Roche <roche@httrack.com>
Security-review follow-up. r0adkll/upload-google-play runs in the job that
holds the Play service-account credential, so it is the one action worth
pinning to a commit: a retagged v1 could otherwise exfiltrate the credential.
Pinned to v1.1.5's SHA. The remaining actions are GitHub-owned and left on
major tags.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Xavier Roche <roche@httrack.com>
@xroche
xroche merged commit b5c3271 into master Jul 20, 2026
5 checks passed
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