Skip to content

Repository files navigation

ncmake

REUSE status

The Swiss Army knife for Nextcloud app development: one generic Makefile for building, packaging, deploying, versioning and App Store management of a Nextcloud app.

Everything is derived from the app itself, so a standard app needs no build config at all β€” drop it in, run make, done. Composer and npm run in throwaway containers, so the host needs neither PHP nor Node.

Tip

πŸ“– The full documentation lives in the ncmake wiki. This page is just the quick start β€” every guide, reference and background piece is a wiki page, kept current there.

Quick start

Commit the bootstrap stub as your app's Makefile, once:

curl -fLO https://raw.githubusercontent.com/ernolf/ncmake/main/bootstrap/Makefile
git add Makefile

That single dozen-line file is all your repository carries: it fetches the real Makefile into a per-machine cache and includes it from there, so every clone of your app runs the current ncmake from one shared cache β€” nothing else lands in your checkout. Then:

make            # colorized, annotated help with your app id, version and cert status
make build      # composer + npm, each in a throwaway container
make dist       # stage the runtime file set and pack the release tarball

New here? Start with Getting started and the step-by-step walkthrough.

What ncmake does

  • No host toolchain β€” composer and npm run in throwaway containers on the PHP and Node versions the app declares; you need only podman or docker.
  • Nothing to configure β€” app id, version, build steps and the shipped file set are read from info.xml, composer.json, package.json and .gitignore.
  • Keep-model packaging β€” a release ships an allowlist of runtime paths, so a stray dev file can never leak in, and the same staged set feeds dist, rsync and cp.
  • One shared, self-updating Makefile β€” a dozen-line stub per app; update ncmake once and every app on the machine follows.
  • The full release lifecycle β€” a validated version bump, a changelog from your conventional commits, a signed tag, and App Store signing and publishing.
  • Managed CI workflows β€” installed from upstream templates, tracked against local edits, and kept current by an auto-updater that opens pull requests.

Wondering how it compares to krankerl, or why it is built this way? β†’ Why ncmake

Documentation

Everything is in the wiki; its sidebar has the full set. Good entry points:

Requirements

GNU make, git, curl, openssl, rsync, python3; optionally xmllint (ncmake falls back to grep without it). For containerized builds: podman or docker β€” otherwise RUNTIME=bare with composer and npm on the PATH.

Show that your app uses ncmake

If ncmake is useful to you, add the badge to your app's README (see Getting started):

built with ncmake

[![built with ncmake](https://cdn.jsdelivr.net/gh/ernolf/ncmake@main/img/ncmake-badge.svg)](https://github.com/ernolf/ncmake)

License

MIT

About

The Swiss Army knife for Nextcloud app development

Resources

Contributing

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages