How to build a release for LemonLDAP::NG
========================================

The version
-----------

- The release version should be updated in the following location:
* changelog: change version in scripts/generate-changelog.pl and run it
* Main modules (Common.pm/Handler.pm/Portal.pm/Manager.pm)
* Makefile.PL for cross-dependencies
* codemeta.json

- Then update packages information with:
$ make clean && make cpan

- Version must also be updated in RPM and Debian build files
  - rpm/lemonldap-ng.spec: update versions and add changelog entry
  - debian/changelog: add changelog entry

Before release
--------------

- Run unit tests
  $ make test
  $ make LLNGTESTLDAP=1 LLNGTESTLDAP_SLAPD_BIN=/usr/local/openldap/libexec/slapd LLNGTESTLDAP_SLAPADD_BIN=/usr/local/openldap/sbin/slapadd LLNGTESTLDAP_SCHEMA_DIR=/usr/local/openldap/etc/openldap/schema/ test

- Build confTree, JS & doc
  $ make json
  $ make minify
  $ make documentation

- Update OpenAPI spec
  $ make SWAGGER_CODEGEN=/opt/swagger-codegen-cli-3.0.51.jar api_doc

- Update languages (needs a Transifex token)
  $ ./scripts/download_translations

- Update documentation:
  $ ./scripts/parameters-for-doc.pl > doc/sources/admin/parameterlist.rst

- Close all issues of the milestone and restore visibility on issues which were hidden for security reasons

- Update changelog:
  $ ./scripts/generate-changelog.pl

  This update "changelog" file using GitLab issues (tags Bug, New feature,
  Improvement)

- Update debian/changelog
  launch just `dch -r` and force save (":w" and ot ":x")

- Check Debian packages quality
  $ cme check dpkg

- Update doc/sources/admin/documentation.rst to display vulnerable packaged versions

- Close the milestone on Gitlab and create a new one

For minor release
-----------------

- Go on gitlab and create a new tag: https://gitlab.ow2.org/lemonldap-ng/lemonldap-ng/tags/new

For major release
-----------------

- Go on gitlab and create a new branch: https://gitlab.ow2.org/lemonldap-ng/lemonldap-ng/branches/new

- Go on gitlab and create a new tag: https://gitlab.ow2.org/lemonldap-ng/lemonldap-ng/tags/new

Make the distribution
---------------------

- CPAN packages:
$ make clean && make cpan

- Tarball:
$ make clean && make dist

Create tarball signature:
$ gpg -b --default-key=security@lemonldap-ng.org lemonldap-ng-*.tar.gz

- RedHat packaging:

See rpm/README

- Debian packaging:

Create the debian specific tarball:
$ make clean && make debian-dist

Untar the debian archive and launch:
$ make debian-packages

Packages are in /tmp

Sign packages:
$ debsigs --sign=origin -k 'LemonLDAP::NG debian packages' /tmp/*.deb

Upload the distribution
---------------------

- CPAN:
Upload modules tarballs (generated by make cpan)

- OW2 Release:
Upload dist, GPG signature and bundles on sftp://release-up.ow2.org/projects/lemonldap

- RPM: see rpm/README

- DEB:
The DEB repository is hosted on https://lemonldap-ng.org/deb

Copy all generated files (*.deb):
$ scp *.deb lemonldap-ng@lemonldap-ng.org:incoming/

On the server, add packages is the appropriate repository, for example:
$ aptly repo add 2.0 incoming/*
$ aptly repo add stable incoming/*

Publish repositories:
$ aptly publish update -gpg-key="57144D2148DD706967DBFF7C548B17BF81F18E7A" 2.0
$ aptly publish update -gpg-key="57144D2148DD706967DBFF7C548B17BF81F18E7A" stable

Remove files from incoming directory:
$ rm incoming/*

- Docker:
Build a new image from https://github.com/LemonLDAPNG/lemonldap-ng-docker
Tag image to latest
Upload on Docker hub

Site
----

- Update version in the download page (see website-landing-page repository)
- Update "latest" version of the online documentation (admin guide and manager-api)

Spread the word
---------------

- News on OW2 projects page: https://projects.ow2.org/bin/view/lemonldap-ng/
- Mastodon / Twitter / Facebook
- IRC channel subject and OW2 Rocket.Chat channel
- Mailing lists: lemonldap-ng-users / lemonldap-ng-announces
- Optional: blogs and news sites (LinuxFR, etc.)

After release
-------------

- Update debian/changelog
$ dch -v <New number>-1 (and write "New release")
- Update $VERSION anywhere

