Link Search Menu Expand Document

Deploy Process

Overview

A release in the Nextcloud App store consists of a URL where an archive lives (zip, tar, gz, etc.) and a SSL digest (or “signature”) with which the integrity of the archive can be validated.

To create a release, both the signature and the URL where the archive can be downloaded need to be posted to the App Store. The archive is created from the source-code in this repository.

It is a common practice to create a tag, to clearly mark the point in code-base’s history where the release has been created. But the source-code from which the archive is created is not enough by itself.

The code also relies on other packages (some of which are created by PDS Interop) in order to function properly. Because of this, an extra build step is required between tagging the code and creating the archive.

Thus, to publish a release of this project to the Nextcloud app store, the following steps need to be taken:

  • Release a version of the code-base
    • Open a release MR
    • Tag a release
  • Build a package from the tagged release
    • Install dependencies
    • Create a tarball
  • Deploy the built package
    • Upload the tarball to the GitHub Release page
    • Create a release in the Nextcloud App store

These steps are described in more detail below.

Releasing a version

A release consists of two things:

  • A tag in git, annotated and signed
  • A release page on GitHub

The tag is needed so a release page can be created. The release page is needed so there is a place where the tarball can live. Any changes that need to be made to the code-base for a release should live in a separate branch. These changes can be merged to the main branch by opening a merge-request (MR). Once the merge request has been merged, a tag can be created, as well as a release.

Opening an MR

  • Create a release/v0.X.X branch
  • Change anything that needs to be updated for a new release (at the least the version in solid/appinfo/info.xml)
  • Open an MR When the MR is merged a release version can be tagged by creating a GitHub Release

Tagging a release

It is possible to create a tag locally, using the git tag command. However, this is not needed. When a release is created using the GitHub UI, a tag will be created automatically. Once that has been done, a package can be built from the release.

Building a package

The “package” consists of an archived version of the solid/ directory.

Before a tarball can be created to use as package, various dependencies need to be installed.

Installing dependencies

Currently, the dependencies this project has are satisfied by composer.

They can be installed using:

# This command should be run in the `solid/` directory
composer install --no-dev --no-interaction --no-plugins --no-scripts --prefer-dist

to make sure the provided dependencies are usable in the supported PHP versions, a docker image can be used.

Creating a tarball

Once the dependencies are installed, an archive can be created using TAR:

# This command should be run from the project root
tar --directory="${PWD}" --create --file 'solid.tar.gz' --gzip solid

Deploying the package

After the solid.tar.gz tarball has been created, it needs to be uploaded to the GitHub release page.

Uploading the tarball

The tarball can be uploaded by editing the Release created on GitHub

The tarball URL will be similar to https://github.com/pdsinterop/solid-nextcloud/releases/download/v0.X.X/solid.tar.gz

Creating a release in the Nextcloud App store

Creating a signature

Now that the tarball is available at a public URL, the “Upload app release” feature in the Nextcloud App Store can be used to create a release. In order to do so, a “Signature” needs to be created.

⚠ Make sure transfer/solid.key and transfer/solid.crt exist, as these are both needed to create a signature.

The command to create the signature is:

openssl dgst -sha512 -sign ./transfer/solid.key ./solid.tar.gz | openssl base64

The signature and URL should be added using the form at https://apps.nextcloud.com/developer/apps/releases/new

Fill in the URL for the tarball from the GitHub release and the base64 signature from the openssl command.

After clicking “upload” a new release should have been created.

This can be verified by visiting the app page in the store: https://apps.nextcloud.com/apps/solid


Copyright © 2020-2021 PDS Interop. Distributed under a MIT license.