Release Automation
Automation is a great thing, it prevents mistakes and makes your life easier, which gives you more time to work on all those features you wanted to implement.
GitHub Actions
If your application’s repository lives on GitHub, GitHub Actions can build your app, sign it, attach the tarball to the GitHub release, and publish it to the Nextcloud App Store when you publish a release.
The app template ships a ready-to-use workflow at
.github/workflows/appstore-build-publish.yml. Apps created from that template (or the
App Store app generator) already include it.
For existing repositories, copy that file from the template into your repo.
The workflow builds frontend and PHP dependencies, packages with Krankerl when krankerl.toml is present
(otherwise make appstore), signs the archive, attaches it to the GitHub release, and uploads it to the
App Store. Pre-releases on GitHub are published as nightly versions on the App Store.
Setup
Ensure your app has an approved signing certificate. See Code signing. The workflow downloads the public certificate from nextcloud/app-certificate-requests for you. You only need to store the private key as a secret.
In
.github/workflows/appstore-build-publish.yml, setAPP_NAMEto your app id. It must match<id>inappinfo/info.xmland the certificate folder name inapp-certificate-requests- env:
APP_NAME: your_app_id
Create a GitHub Actions environment named
release(repository Settings → Environments). Enable Required reviewers and add only people you trust to approve releases. Add these environment secrets:APP_PRIVATE_KEY— your app’s private key (from the code signing setup)APPSTORE_TOKEN— from your App Store developer account at https://apps.nextcloud.com/account/token
The workflow job uses
environment: release, so every publish waits for an approval from a required reviewer before secrets are available.If your repository is outside the Nextcloud organization you may store the same secrets under repository Secrets instead. Anyone with write access can then trigger a release.
Keep packaging related files from the template in sync with your app:
krankerl.toml(build commands),.nextcloudignore(files excluded from the tarball), and ensure/build/is in.gitignore.
Do not commit the private key. The public certificate does not need to be a secret; the workflow fetches it
from app-certificate-requests.
The process
Bump
<version>inappinfo/info.xmland merge the change to the default branch.Create a GitHub release whose tag is
vplus that version (for example version1.0.0→ tagv1.0.0). The workflow fails if the tag andinfo.xmlversion do not match.Choose a normal release or a pre-release. Pre-releases are uploaded as nightly builds on the App Store.
Publish the release. Approve the pending
releaseenvironment deployment when prompted (Actions or notifications).When the workflow finishes, the signed
your_app_id-v1.0.0.tar.gzis attached to the GitHub release and the version appears on the App Store.