Developer Documentation

Build-time Dependencies

The following tools are required for app development:

Developer installation

To install the app manually:

  1. Install a development setup of nextcloud.
  2. Clone this into the apps folder of your Nextcloud
  3. Install build tools and dependencies by running make dev-setup
  4. Compile NodeJS assets by running make build
  5. Install the circles app in Nextcloud.

Afterwards, you can enable the app from the Nextcloud app management menu.

Running tests

With the app available in the Nextcloud app management you should be able to run the unit tests with

make test-php-unit

In order to run the integration tests you either need to configure your nextcloud to run with https and be availabe at https://nextcloud.local or you need to change the default config for behat in tests/Integration/features/config/behat.yml to use a different baseUrl.

Then you can run them with

make test-php-integration

The integration tests rely test data installed to the server. This is available on our docker image or in the nextcloud-docker-dev repo.

Development environment

Development environments often do not use proper hostnames and are not using ssl. In order to make the Circles API work in such environments, a few configuration settings need to be adjusted.

You can do so by running the following commands on the nextcloud server:

./occ config:system:set --type bool --value true -- allow_local_remote_servers
./occ config:app:set --value 1 -- circles self_signed_cert
./occ config:app:set --value 1 -- circles allow_non_ssl_links
./occ config:app:set --value 1 -- circles local_is_non_ssl

Development Background: Collective ownership

Usually, in Nextcloud every file/folder is owned by a user. Even when shared, the ultimate power over this object remains at the owner user. In collective workflows, this leads to several problems. Instead of individual users, we want the collective pages to be owned and maintained by the collective.

That’s why the Collectives app implements an own storage and uses mountpoints to mount the collective folders to members home directories.

Development Background: Circles integration

Every collective is bound to a circle. Currently, the app automatically creates a new secret circle with every new collective.

Prepare a release

Dependencies for building a new release:

Releasing a new version contains the following steps:

Backport changes to stable21 branch

App development happens in the main branch. Since the circles integration changed between Nextcloud 21 and 22, he currently maintain a stable21 branch for Nextcloud 20+21 and backport all changes to this branch before doing a new release.

The last backported commit is tagged as backported. In order to backport all subsequent commits and prepare the stable21 branch for a new release, do the following:

  1. Backport commits since backported:
    git checkout origin/main -b backport/stable21
    git rebase --onto stable21 backported -i
    git push origin backport/stable21
    git tag -d backported
    git push origin --delete backported
    git tag backported origin/main
    git push origin --tags
    
  2. Create a merge request from backport/stable21 to stable21. Merge after pipeline succeeds.
  3. Remove temporary branches:
    git branch -D backport/stable21
    git push origin --delete backport/stable21
    

Update javascript dependencies

Update all dependencies right after a release so they will be tested for a while before the next release.

After installing npm-check-updates with

npm install npm-check-updates --no-save

List all outdated packages with npm run npm-check-updates and then update all of them with the -u option.

Roll back updates that break the build with

npm install package@^1.2.3

Note in the commit message why packages rolled back to an earlier version. This information makes the next version update easier.