Skip to content

Add app-store release automation (Makefile appstore target + publish workflow) #261

Description

@Martin-1997

Add app-store release automation (Makefile appstore target + publish workflow)

Problem

The App Store requires a release archive with a single top-level folder named exactly the app id (timetracker/, containing appinfo/info.xml). GitHub's auto-generated "Source code" tarball names the top folder timetracker-<version>/, which the store rejects. We should build a correctly-structured, signed tarball and publish it automatically on each GitHub release, so new versions no longer have to be packaged and uploaded by hand. More information is available here: https://nextcloudappstore.readthedocs.io/en/latest/developer.html

Tasks

  • Add a make appstore target that produces build/artifacts/timetracker.tar.gz:
    • run the JS build (cd js && npm ci && npm run build) so compiled assets are included;
    • rsync the runtime files into a timetracker/ folder, excluding dev cruft (.git, js/node_modules, js/src if only built output ships, tests, Makefile, *.md, build/CI configs, etc.);
    • tar -czf the timetracker/ folder so it is the single top-level directory.
  • Add a publish workflow .github/workflows/appstore-build-publish.yml, triggered on release: published, based on the official template in [nextcloud/.github](https://github.com/nextcloud/.github/blob/master/workflow-templates/appstore-build-publish.yml). It should: checkout the tag → make appstore → sign → attach the tarball to the GitHub release → push to the store via nextcloud-releases/nextcloud-appstore-push-action.
  • Configure the repository secrets the workflow expects (per the template's documentation).
  • Confirm pre-releases upload as nightly versions (the action/template handles this).

Definition of Done

  • Cutting a GitHub release automatically publishes the new version to apps.nextcloud.com within a few minutes.
  • The uploaded tarball has timetracker/ as its single top-level folder and passes the store's signature check.
  • The release/secret setup is documented in the repo README or CONTRIBUTING.

Test

  • Dry-run make appstore locally and verify tar tzf build/artifacts/timetracker.tar.gz | head shows everything under timetracker/.
  • Cut a test (pre-)release and confirm it appears as a nightly on the store.

Notes

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions