otb issueshttps://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/-/issues2018-12-14T13:55:59Zhttps://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/-/issues/1716Pledge for OTB 7.02018-12-14T13:55:59ZJulien MichelPledge for OTB 7.0### Introduction
For a few weeks now we start seeing issues and merge requests with milestone 7.0. This issue is a story aiming at providing a single place discuss everything that we did / want to do in the scope of 7.0. I will start wi...### Introduction
For a few weeks now we start seeing issues and merge requests with milestone 7.0. This issue is a story aiming at providing a single place discuss everything that we did / want to do in the scope of 7.0. I will start with my own wishes and be a bit radical on purpose. Feel free to enhance or correct this proposal if needed.
### A note on the method
For numerous reasons, we are already out of our fixed release schedule (every months). Depending on how this issue will end, we will likely be months away from OTB 7.0, so what do we do in the mean time?
* Maintain a bugfix 6.6 branch and develop is preparing the 7.0
* Keep develop as the integration branch for 6.x and start a 7.0 branch that will be moved to develop when ready
Either way, we need to communicate with contributors and users about that.
Another important point is how much we allow ourselves to break things. According to our standard, any API changes needs to be warned in the current release before being applied in the next major release. I feel that this is too restricive for 7.0 (hence the importance of keeping 6.6 bugfix releases up).
### Scope of OTB 7.0
I think the main focus of OTB 7.0 should be to loose weight (less code, less build time, less testing time) while getting the important things up to a target standard (same amount of important features, more documentation, more coverage).
#### Remove OSSIM
This is the first item that comes to my mind, and it is already descrived there : #1506
Work already started, see !221 and !224
#### Remove deprecated code and applications
Even when we deprecate code, we seldom remove it, now is the time! Visit issue #1682 (maybe we should start a dedicated issue for that, and keep #1682 for listing changes that need to be documented).
#### Remove even more code (instead of deprecating it)
There are proposal to deprecate some code :
* #1692 (mapnick module)
* #1690 (online data)
I would suggest that we remove them directly instead of deprecating.
Additionnaly, I think we could remove:
* All the `*TileMap*` code. Gdal already handles this, so we support those online data without this code
* `OrthoRectificationImageFilter`. Not even used in `OrthoRectificationApplication`!
* `Core/CommandLineParser`. Really?
* `Core/SpatialObjects` We already have OGR for that
* `Filtering/Path` To be checked piece by piece to see if it is really useful (might be used by some deleted or moved out code)
And there are also thing that were not in ITK back when they were developed and that are now available (help needed to extend the list):
* Convolution in space and fourier domain (TBC)
#### Move some modules out of OTB
Some of the OTB modules are barely used, poorly validated, and/or really specific. Why not moving them out as remote modules ? Good candidates :
* `OBIA/RCC8` (cmon, this is my internship code back in 2006, I doubt anyone used it since then!)
* `Registration/DisplacementField` (more a proof of concept than anything else)
* `Feature/SeamCarving` (any practical application of this in remote sensing ?)
* `Detection/ObjectDetection` Code for an old object detection IGARSS publication. Not even deep.
* `Detection/UrbanArea` I think this is the code of another IGARSS pub. Not sure it even works.
* `Detection/RoadExtraction` Another IGARSS publication code. Not used I think.
* `Detection/CloudDetection` Any inputs on this one?
* `Learning/Markov` Could be useful, but poorly known or used as of today
* `Radiometry/Simulation` interesting but is it really useful to the main OTB audience?
After discussion we can switch some of them to the previous category (simply remove them).
#### Refactor base classes
* Rewrite all the otb*Functor*Filter to the least possible number of classes (we have 14 different). It is most certainly possible to offer the same feature with a smaller, better documented code (do not forget to have a look into modern ITK and C++)
* Rewrite the radiometric indices classes. Design is almost an anti-pattern.
* Rewrite all filters based on VectorData to remove VectorData classes completely
#### Stop supporting old stuff
* Drop support of python2 #1715
* Drop support of gdal <= 2.0
#### Refactor testing
Less data, less IO, more unit testing. To be developed.7.0.0https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/-/issues/1799Refactor regression applications2019-09-17T13:38:22ZJordi IngladaRefactor regression applicationsThe TrainRegression and PredicRegression applications do not follow the same rationale as their classification counterparts. Indeed, the new sampling framework in OTB allowed to refactor the classification applications in order to split ...The TrainRegression and PredicRegression applications do not follow the same rationale as their classification counterparts. Indeed, the new sampling framework in OTB allowed to refactor the classification applications in order to split the different steps of the machine learning pipeline: sampling, feature extraction, training and prediction. This also allowed to provide an API which separates raster and vector inputs in different applications (TrainVectorClassifier vs TrainImagesClassifier, for instance).
However, regression is still done in OTB with just an application for training (which also does the sample selection) and another one for the prediction which does not work with vector inputs. Furthermore, the training application only accepts raster data or point sets in a CSV file and can't use vector files produced by the sampling framework.
The goal of this FR is to propose the steps needed to provide an API for regression equivalent to the classification API. These would include:
1. Split the train application in 2, one for raster input and another one for vector input (including CSV for backwards compatibility)
2. Split the predict application in 2, one for raster input and another for vector input
3. Remove all sampling operations from the training applications and delegate them to the sampling framework.
**EDIT**
Work has been organized in:
* [x] Remove all sampling operations from the training applications and delegate them to the sampling framework (*5pts*)
* [x] Split the train application in 2, one for raster input and another one for vector input (including CSV for backwards compatibility) (*8pts*)
* [ ] Split the predict application in 2, one for raster input and another for vector input (*8pts*)
* [ ] A cookbook recipe for this new framework (*5pts*) 7.0.0Cédric TraizetCédric Traizethttps://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/-/issues/1895New CI2019-12-03T10:00:29ZGuillaume PaseroNew CIThis story presents the deployment of the new CI. The description may evolve in the future. Also, a more practical guide will be added soon.
* Test data
- [x] Move test data from otb-data into main repository using Git-LFS (`OTB/Data`...This story presents the deployment of the new CI. The description may evolve in the future. Also, a more practical guide will be added soon.
* Test data
- [x] Move test data from otb-data into main repository using Git-LFS (`OTB/Data`)
* Dashboard
- [x] Deploy CDash 2.6 to new [URL](https://cdash.orfeo-toolbox.org)
* Gitlab Runners
- [x] Use Docker Machine to run jobs on linuxes
- [x] Deploy gitlab-runner on a macOS server
- [x] Deploy gitlab-runner on Windows VMs
* CI steps:
- Structure: 4 pipeline profiles have been defined:
- `wip`: default pipeline for a push on any branch
- `mr`: merge request pipeline, when the branch is the source of a merge request
- `develop`: pipeline for pushes on develop branch
- `release`: pipeline for pushes on a `release-X.Y` branch
- These profiles are used to enable/disable some steps in the pipeline stages. The stages are:
- `precheck`: all profiles
- `prepare`: enabled for [`mr`, `develop`, `release`]
- `build`: enabled for [`mr`, `develop`, `release`]
- `deploy`: enabled for [`develop`, `release`]
- `external`: all profiles, corresponds to the CDash submissions made during previous steps
- precheck
- [x] fast compilation on a Ubuntu image with native dependencies
- prepare
- [x] Build OTB XDK with SuperBuild on Ubuntu
- [x] Build OTB XDK with SuperBuild on Centos 6
- [x] Build OTB XDK with SuperBuild on macOS
- [x] Build OTB XDK with SuperBuild on Windows 8.1
- [x] Build OTB XDK with SuperBuild on Windows 10
- build
- [x] Build OTB on Debian with native dependencies
- [x] Build OTB on Ubuntu with XDK
- [x] Build OTB on Centos 6 with XDKstatus
- [x] Build OTB on macOS with XDK
- [x] Enable LargeInput on macOS
- [x] Build OTB on Windows 8.1 with XDK
- [x] Build OTB on Windows 10 with XDK
- [x] Build Documentation on Ubuntu
- [x] Build standalone package on Ubuntu
- [x] Build standalone package on Centos 6
- [x] Build standalone package on macOS
- [x] Build standalone package on Windows 8.1
- [x] Build standalone package on Windows 10
- [x] Build Docker image with OTB
- Current status: the develop branch is compiled on a Ubuntu native image to get a warm ccache
- [x] Report link to CDash submission :warning: (see Caveats)
- quality
- [ ] Launch quality tests
- [ ] Check contributions
- [ ] Check licences
- [ ] Check Copyright
- deploy
- [x] Deploy documentation
- [x] Deploy packages from develop branch
- [x] Deploy packages from release branches
- [ ] Deploy a release to production
* Remote modules
- [ ] Setup for Travis integration
- [ ] Setup for AppVeyor integration
Caveats:
* Twin pipelines: Gitlab-CI spawns 2 pipelines when a push is made on a branch with a merge request (one for normal branches, one for merge requests). Since we don't enable the same steps for MR and non-MR push, we had to setup a custom script (`CI/check_twin_pipelines.py`) that will cancel the that we want to skip. This issue should be fixed in Gitlab CE in a future release.
* Builds from forked repositories:
- ~~At the moment they are not supported, due to the need of custom secret variables that are defined only in `orfeotoolbox/otb`. They will be reduced to a single variable for an API token. See next point.~~
- Builds from forks are supported, provided a CI admin has given you access to the project runners. Ask for it in your first MR.
* API tokens: some parts of the CI scripts need a token to access Gitlab API. For commit in `orfeotoolbox` group, these tokens are already supplied as secret variables, but not on user's forks. If you want CI to run from your fork, you need to create a [personal access token](https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html) (choose the scope `api`), and supply it as a secret variable: on the project page of your fork, go to **Settings -> CI/CD -> Variables**, add the variable `K8S_SECRET_API_TOKEN` and put the token in this variable. After !536, this token is actually optional, but 2 features are disabled if no token is given:
* the publication of external jobs with links to CDash, these links are output in the logs anyway.
* the handling of twin pipelines.
* ~~CDash links: the links to CDash submissions is posted in the `external` step. However, due to issues with the twin pipelines, they may not be posted in the right pipeline.~~ (Should be fixed)
* ~~CDash status: the `passed`/`failed` status of CDash jobs doesn't always match. The submissions to CDash are asynchronous, and we rely on CDash API to get the number of errors/warnings/tests failed. So it can happen that CDash has not finished processing a submission when the request is made. The status can show `passed` whereas the jobs actually failed. This behaviour will be changed in order to avoid using these calls to CDash API, we will only request the build ID.~~ (Fixed by !526 )https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/-/issues/1953Release 7 planning2020-02-07T16:36:52ZVictor PoughonRelease 7 planningWe are ready to release OTB version 7.0.0. The following steps need to be done:
* [x] Wait for all isues marked 7.0.0 and feature to be merged
## Release candidate
### 1. Branches
* [x] **(if major or minor release)** Feature freeze:...We are ready to release OTB version 7.0.0. The following steps need to be done:
* [x] Wait for all isues marked 7.0.0 and feature to be merged
## Release candidate
### 1. Branches
* [x] **(if major or minor release)** Feature freeze: [create the new release branch](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#create-release-branch)
* [x] Make sure the version number in `CMakeLists.txt` is MAJOR.MINOR.PATCH
### 2. Housekeeping
* [x] In this story, make a list of blocking issues for the release (if any)
* [x] #1969
* [x] #1930 (not blocking for the rc).
* [x] [Update the SuperBuild archive](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#superbuild-archive). Note: waiting for the actual release to move the 6.6.1 archive
* [x] Update release notes (walk the GitLab MR merged history and log all improvements)
* [x] Update the date in RELEASE_NOTES.txt
* [x] Run Debian [spelling](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#spelling-check) checker
* [x] Run shellcheck script from [OTB-Devutils/Scripts/](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb-devutils/blob/master/Scripts/run_shellcheck.sh)
* [x] [Update translation](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#translation-for-monteverdi-mapla) for Monteverdi and Mapla
* [x] [Sanity check the binary packages](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#standalone-packages-sanity-check)
* [x] Windows
* [x] Linux
* [x] Mac , ok but #1930 has been reproduced.
### 3. Actual release
Once all blocking issues are closed, and the previous steps are done:
* [x] [Tag the release or RC](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#release-tag) for the rc onldy otb tag has been create
* [x] Update GIT_TAG for all official remote modules (if needed)
### 4. Publish and plan next release
* [x] [Prepare and upload source packages](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#prepare-and-upload-source-packages)
* [x] [Promote staging packages](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#promote-staging-packages)
* [x] [Update documentation](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#update-documentation)
* [x] Cookbook
* [x] Doxygen
* [x] Release announcement on the forum
* ~~Announcement on social networks (twitter, google+)~~
## Release
### 1. Branches
* [x] **(if major or minor release)** Feature freeze: [create the new release branch](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#create-release-branch)
* [x] Make sure the version number in `CMakeLists.txt` is MAJOR.MINOR.PATCH
### 2. Housekeeping
* [x] In this story, make a list of blocking issues for the release (if any)
* [x] #1969
* [x] #1930 (not blocking for the rc).
* [x] [Update the SuperBuild archive](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#superbuild-archive). Note: waiting for the actual release to move the 6.6.1 archive
* [x] Update release notes (walk the GitLab MR merged history and log all improvements)
* [x] Update the date in RELEASE_NOTES.txt
* [x] Run Debian [spelling](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#spelling-check) checker
* [x] Run shellcheck script from [OTB-Devutils/Scripts/](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb-devutils/blob/master/Scripts/run_shellcheck.sh)
* [x] [Update translation](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#translation-for-monteverdi-mapla) for Monteverdi and Mapla
* [x] [Sanity check the binary packages](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#standalone-packages-sanity-check)
* [x] Windows
* [x] Linux
* [x] Mac
### 3. Actual release
Once all blocking issues are closed, and the previous steps are done:
* [x] [Tag the release or RC](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#release-tag) for the rc onldy otb tag has been create
* [x] Merge the release into develop
* [x] Merge the release into master
* [x] Update GIT_TAG for all official remote modules (if needed)
### 4. Publish and plan next release
* [x] [Prepare and upload source packages](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#prepare-and-upload-source-packages)
* [x] [Promote staging packages](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#promote-staging-packages)
* [x] [Update documentation](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#update-documentation)
* [x] Cookbook
* [x] Doxygen
* [x] WordPress page "Home" and "Download" pages
* [x] Upload OTB source archive to [Zenodo](https://zenodo.org/) to create a unique Digital Object Identifier (DOI)
* [x] Release announcement on the forum
* [x] Release announcement on the blog
* [x] Announcement on social networks (twitter, google+)
* [x] Forward announcement to news_item@osgeo.org ([OSGeo news](https://www.osgeo.org/foundation-news/))
* ~~Plan the next release (nominate new release manager, setup PSC meeting on IRC)~~
* [x] Remove public branches related to MR or bugfix merged before the release7.0.0https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/-/issues/1682Release 7.0.0 changelog2020-06-23T07:07:09ZYannick TANGUYRelease 7.0.0 changelogThis is the planning issue for release 7.0.0.
Feature freeze date: TBD
### Meta
* [x] #1603 Semantic Versioning
* [x] #1792 Remove `OTB_USE_DEPRECATED` mechanism
### Features
* [x] !587 New application: ImagesRegression (Regressi...This is the planning issue for release 7.0.0.
Feature freeze date: TBD
### Meta
* [x] #1603 Semantic Versioning
* [x] #1792 Remove `OTB_USE_DEPRECATED` mechanism
### Features
* [x] !587 New application: ImagesRegression (Regression framework refactoring)
* [x] !565 New application: VectorRegression (Regression framework refactoring)
* [x] !496 Renaming of `PredictRegression` in TrainImagesRegression (Regression framework refactoring)
* [x] !492 Display deprecation status of application
* [x] !488 New application: TrainVectorRegression (Regression framework refactoring)
* [x] !353 New application: Local RX detection
* [x] !299 New generic functor image filter
* [x] !224 New class `otb::SpatialReference`
* [x] !223 StreamingStatisticsMapFromLabelImageFilter no data support
* [x] !222 New application: Zonal statistics
* [x] !179 Display Pixel type of Image in ReadImageInfo application
* [x] !176 Output time of otbcli applications in minutes, seconds instead of scientific notation
* [x] !158 Add box kernel to morphological operations apps
* [x] !154 Allow to compute modulus and phase from 2 bands scalar image
* [x] !77 Nodata extended filename
* [x] !59 Add statistics to `otbStreamingStatisticsMapFromLabelImageFilter`
### Deprecated
* [x] !496 `TrainRegression` application
* [x] !233 `LSMSSmallRegionsMerging` application
### Breaking changes
This will be a significant release that will break backwards compatibility in several places (see #1716):
##### Applications
* [x] !324 Remove `Convert` app
* [x] !158 Rename parameters of morphological operations apps
* [x] !159 Change input interpretation of `DynamicConvert` mask parameter
* [x] !182 In `VectorDataProjection` application, remove "origin/spacing" from GenericRSTransform call : Vector Data shall not be expressed with origin & spacing from the reference image (see #1681)
* [x] Simplify `FineRegistration` application by removing warping option (see #1652, #1852) : this creates a 2nd pipeline and could be replaced by using GridBaseImageResampling (with some adaptation)
* [x] !471 Remove `ComputePolylineFeatureFromImage`, `DSFuzzyModelEstimation`, `VectorDataDSValidation`
##### C++ API
* [x] !216 Change API of 2 methods in SEMClassifier
* [x] !243 Removed `otbThreads.h` and `otb::Threads::Sleep`
* [x] !221 Removed unused OSSIM base classes : `DEMConvertAdapter`, `GeometricSarSensorModelAdapter`, `PlatformPositionAdapter`.
* [x] !224 Change map projection backend
* [x] #1770 Remove ParameterType_Empty
* [x] !244 Remove `TileMapImageIO`
* [x] !236 !320 Remove `VectorDataRendering`
* [x] #1697 SetFileName `const char*` overloads
* [x] !412 More strict type checking for Application Parameters
* [x] !442 Remove complex image parameters
* [x] !471 Remove `OrthoRectificationFilter`
* [x] !484 Remove `SetDocName` and `GetDocName`
##### Modules
* [x] !471 Remove modules: `DisplacementField`, `RCC8`, `UrbanArea`, `RoadExtraction`, `ObjectDetection`, `MorphologicalPyramid`, `SeamCarving`.
* [x] !471 Remove Dempster-Shafer based classification of vectors framework
##### Build system and dependencies
* [x] #1715 Drop special case for Python 2.x support
* [x] #1769 Drop support for GDAL 1.x
* [x] #1896 Add support for GDAL 3.x
* [x] !593 Add support for OpenCV 4.x
* [x] !320 Remove Mapnik dependency
* [x] Drop Java support
##### SuperBuild and packaging
* [x] #1853 Upgrade GDAL to 2.4.0
* [x] #1853 Upgrade OpenCV to 4.1.1
##### Documentation
* [x] !580 Refactoring of the BandMathX documentation
* [x] !425 New recipe for hyperspectral image processing
* [x] Official remote modules are documented in the CookBook7.0.0https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/-/issues/2135OTB 8.0.0 alpha-1 : Optical processing, OTB still depends on Ossim, but only ...2021-02-11T14:26:07ZJulien OsmanOTB 8.0.0 alpha-1 : Optical processing, OTB still depends on Ossim, but only use the library in SAR processingWe are ready to release OTB version 8.0.0-alpha1.
The main goal of release 8.0 is to remove OSSIM from OTB dependencies. This implies the refactoring of a lot of classes and functions, many of which are in the core modules of the libra...We are ready to release OTB version 8.0.0-alpha1.
The main goal of release 8.0 is to remove OSSIM from OTB dependencies. This implies the refactoring of a lot of classes and functions, many of which are in the core modules of the library. Before the actual release and release candidates, OTB 8.0.0 alpha-1 includes Optical processing, OTB still depends on Ossim, but only use the library in SAR processing. (See #2127)
The following steps need to be done:
## Release
### 1. Branches
* [x] [create the new release branch](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#create-release-branch)
* [x] Make sure the version number in `CMakeLists.txt` is 8.0.0-alpha1
### 2. Housekeeping
* [x] In this story, make a list of blocking issues for the release (if any)
* [x] Fix compilation warnings on CI
* [x] Update release notes (walk the GitLab MR merged history and log all improvements)
* [x] Update the date in RELEASE_NOTES.txt
* [x] Check [SonarQube](https://sonar.orfeo-toolbox.org/dashboard?id=orfeotoolbox-otb)
* [x] Run Debian [spelling](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#spelling-check) checker
* [x] Run shellcheck script from [OTB-Devutils/Scripts/](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb-devutils/blob/master/Scripts/run_shellcheck.sh)
* [x] [Update translation](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#translation-for-monteverdi-mapla) for Monteverdi and Mapla
* [x] [Sanity check the binary packages](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#standalone-packages-sanity-check)
* [x] Windows
* [x] Linux
* [x] Mac
* [x] Test QGIS on qgis docker image
### 3. Actual release
Once all blocking issues are closed, and the previous steps are done:
* [x] [Tag the release](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#release-tag)
### 4. Publish and plan next release
* [x] [Prepare and upload source packages](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#prepare-and-upload-source-packages)
* [x] [Promote staging packages](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#promote-staging-packages)
* [x] [Update documentation](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#update-documentation)
* [x] Cookbook
* [x] Doxygen
* [x] WordPress page "Home" and "Download" pages
* [x] [Update the SuperBuild archive](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#superbuild-archive)
* [x] Release announcement
* [x] On the [forum](https://forum.orfeo-toolbox.org/)
* [x] On the [blog](https://www.orfeo-toolbox.org/blog/)
* [x] On [Twitter](https://twitter.com/orfeotoolbox)
* [x] Forward announcement to news_item@osgeo.org ([OSGeo news](https://www.osgeo.org/foundation-news/))
* [x] Remove public branches related to MR or bugfix merged before the releasehttps://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/-/issues/2192Release 7.3.02021-07-06T13:49:22ZThibaut ROMAINRelease 7.3.0We are ready to release OTB version 7.3.0. The following steps need to be done:
## Release Candidate
### 1. Branches
* [x] **(if major or minor release)** Feature freeze: [create the new release branch](https://gitlab.orfeo-toolbox.or...We are ready to release OTB version 7.3.0. The following steps need to be done:
## Release Candidate
### 1. Branches
* [x] **(if major or minor release)** Feature freeze: [create the new release branch](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#create-release-branch)
* [x] Make sure the version number in `CMakeLists.txt` is 7.3.0
### 2. Housekeeping
* [x] In this story, make a list of blocking issues for the release (if any)
* [x] Update release notes (walk the GitLab MR merged history and log all improvements)
* [x] Update the date in RELEASE_NOTES.txt
* [x] Check [SonarQube](https://sonar.orfeo-toolbox.org/dashboard?id=orfeotoolbox-otb)
* [x] Run Debian [spelling](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#spelling-check) checker
* [x] Run shellcheck script from [OTB-Devutils/Scripts/](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb-devutils/blob/master/Scripts/run_shellcheck.sh)
* [x] [Update translation](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#translation-for-monteverdi-mapla) for Monteverdi and Mapla
* [x] [Sanity check the binary packages](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#standalone-packages-sanity-check)
* [x] Windows
* [x] Linux
* [x] Mac
* [x] Test QGIS on qgis docker image
### 3. Actual release
Once all blocking issues are closed, and the previous steps are done:
* [x] [Tag the release candidate](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#release-tag)
* [x] Update GIT_TAG for all official remote modules (if needed)
### 4. Publish and plan next release
* [x] [Prepare and upload source packages](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#prepare-and-upload-source-packages)
* [x] [Promote staging packages](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#promote-staging-packages)
* [x] [Update documentation](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#update-documentation)
* [x] Cookbook
* [x] Doxygen
* [x] [Update the SuperBuild archive](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#superbuild-archive)
* [x] Release Candidate announcement on the forum
## Release
### 1. Branches
* [x] Make sure the version number in `CMakeLists.txt` is 7.3.0
### 2. Housekeeping
* [x] In this story, make a list of blocking issues for the release (if any)
* [x] Fix compilation warnings on CI
* [x] Update release notes (walk the GitLab MR merged history and log all improvements)
* [x] Update the date in RELEASE_NOTES.txt
* [x] Check [SonarQube](https://sonar.orfeo-toolbox.org/dashboard?id=orfeotoolbox-otb)
* [x] Run Debian [spelling](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#spelling-check) checker
* [x] Run shellcheck script from [OTB-Devutils/Scripts/](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb-devutils/blob/master/Scripts/run_shellcheck.sh)
* [x] [Update translation](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#translation-for-monteverdi-mapla) for Monteverdi and Mapla
* [x] [Sanity check the binary packages](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#standalone-packages-sanity-check)
* [x] Windows
* [x] Linux
* [x] Mac
* [x] Test QGIS on qgis docker image
### 3. Actual release
Once all blocking issues are closed, and the previous steps are done:
* [x] [Tag the release](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#release-tag)
* [ ] **(if major or minor release)**: Merge the release into develop
* [ ] **(if it's the latest release)**: Merge the release into master
* [ ] **(if patch release)**: Backport fixes
* [x] Update GIT_TAG for all official remote modules (if needed)
### 4. Publish and plan next release
* [x] [Prepare and upload source packages](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#prepare-and-upload-source-packages)
* [x] [Promote staging packages](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#promote-staging-packages)
* [x] [Update documentation](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#update-documentation)
* [x] Cookbook
* [x] Doxygen
* [x] WordPress page "Home" and "Download" pages
* [x] Upload OTB source archive to [Zenodo](https://zenodo.org/) to create a unique Digital Object Identifier (DOI)
* [x] [Update the SuperBuild archive](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#superbuild-archive)
* [x] Release announcement
* [x] On the [forum](https://forum.orfeo-toolbox.org/)
* [x] On the [blog](https://www.orfeo-toolbox.org/blog/)
* [x] On [Twitter](https://twitter.com/orfeotoolbox)
* [x] Forward announcement to news_item@osgeo.org ([OSGeo news](https://www.osgeo.org/foundation-news/))
* [ ] Remove public branches related to MR or bugfix merged before the release7.3.0Thibaut ROMAINThibaut ROMAINhttps://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/-/issues/1506Remove OSSIM2021-11-05T10:49:25ZGuillaume PaseroRemove OSSIM### What changes will be made and why they would make a better Orfeo ToolBox?
The main idea is to remove OSSIM from OTB, in order to reduce the dependency risk, and also to refactor some parts of the library.
#### High level descriptio...### What changes will be made and why they would make a better Orfeo ToolBox?
The main idea is to remove OSSIM from OTB, in order to reduce the dependency risk, and also to refactor some parts of the library.
#### High level description
OSSIM is used for geometric sensor modelling and metadata parsing. It has been used for that since the beginning of the OTB. Then adapter classes have been added, to hide OSSIM headers from OTB public API. Now, it is time to plan the removal of this dependency, whose development cycle is difficult to follow. In the current state, only a small portion of OSSIM is used anyway.
This work can be performed in several steps:
1. [x] Remove unused classes (classes that are not really used, and that won't be ported) (!221)
1. [x] Implement a new metadata parsing framework (rely on GDAL)
1. [x] Move FilterFunctionValues and MetadataKey to OTBMetadata (!651)
1. [x] Refactor OTB metadata (check #2024)
1. [x] Implement geometric models
1. [x] Refactor GenericMapProjection to use GDAL (!224)
1. [x] Re-implement Utils::GetZoneFromGeoPoint() (!224)
1. [x] re-implement DEMHandler (#1762)
1. [x] RPC model (based on GDAL ?) #2040
1. [x] Generic SAR model #2040
1. [x] SensorModel factory for external models (#2039)
1. [x] Minor migrations
1. [x] Replace the Sleep() function from OTBOpenThreadsAdapters
1. [x] Remove classes or modules that are not necessary anymore (#2153)
#### Risks and benefits
Risks:
- Large refactoring, there is a substantial amount of work needed, mostly for the porting of geometric models.
- Impacts on the validation tests, and baselines.
- Several components are complex to migrate (DEMHandler, SarSensorModel,...)
Benefits:
- 4 mandatory dependencies will be removed from OTB: Ossim, OssimPlugins, GeoTiff, OpenThreads
- 2 modules will be removed: OTBOssimAdapters and OTBOpenThreadsAdapters
- Sanitize the code base
- Easier support of new sensors models
- Better metadata architecture (which allows better metadata processing in our pipelines)
- Separation between metadata parsing, and geometric modelling.
#### Alternatives for implementations
Here are some details and propositions regarding the implementation.
##### Unused classes #####
This is a list of classes that could be removed at the beginning of the refactoring without much trouble:
- Module OTBOssimAdapters
- otbDEMConvertAdapter
- otbGeometricSarSensorModelAdapter
- otbPlatformPositionAdapter
- Module OTBProjection
- old map projections: Eckert, Lambert3CartoSud, LambertConformalConic, Mollweid, SinusoidalMap, SVY21Map, TransMercator. We should rather have a set of WKT strings for the "common" map projections.
- Module OTBAppImageUtils
- Application DEMConvert
##### Metadata parsing #####
Currently, metadata is parsed from each child class of ossimSensorModel. This metadata
is then exported into an ImageKeywordlist. On the other hand, the otbXXXImageMetadataInterface
is designed to expose this metadata in a generic way. It would make sense to move the
metadata-parsing code from ossimSensorModels into otbXXXImageMetadataInterface ("IMI"), and have
a single class that represents a sensor metadata.
I have been thinking about a more generic way to parse metadata. In the end, there are
always corner cases where the metadata is read from some file and then transformed before
being recorded into the ImageKeywordlist. I propose the following workflow to replace the
current function ``ReadGeometryFromImage()``:
1. We use a classic IMIFactory to find if a given IMI (associated to a given sensor) can read
a product. For a given input image filename, each IMI can return the list of associated
metadata files and their type (DIMAP, SAFE, txt file, ... ). Note that the image itself can
also be part of the list if there are metadata embedded in the image.
2. Reading the metadata files. The purpose of this step is to parse each metadata file associated
with the image file and supply it as a (in-memory) XML tree. This tree is given to a IMI that
will look for needed information. The parsing can be done by different classes, so far we expect
a plain XMLReader, a TextMetadataReader and a GDALMetadataReader. They can all derive from a
base class. Depending on the format:
* XMLReader can be simply implemented using TinyXML
* TextMetadataReader will try to parse 'key=value' pairs and format it in a XML tree.
* GDALMetadataReader will use GDALDataset::GetMetadata() to extract 'key=value' pairs
and format them into a XML tree.
3. Parsing in IMI. This step consists in finding the relevant metadata in the different XML trees
and mapping them into a KeywordList (map<string,string>) with the usual metadata keys (used
in geom files). At this step, we keep the metadata as strings, but we may also do specific
conversions to check the numerical range. This parsing can be nicely written with generic
functions like ``add()`` used in ossimSentinel1Model.cpp. If the parsing returns successfully,
the generated ImageKeywordlist is given to the input image metadata dictionary.
4. Instanciation of a Transform. I propose to separate the classes used to store and access
the product metadata, and the classes used to represent a transform associated with a sensor
model. The truth is that among all the sensor models currently handled by Ossim, we mostly
use RPC based models. There are few physical sensor models, but we could implement them with
a generic "PushBroomSensorModel". Maybe complex physical models will actually deserve a separate
implementation. Regarding SAR sensors, we now tend to rely on SarSensorModel which is generic.
This separation would also be consistent if we want to handle both physical and RPC models associated
with a given sensor (no need to clone the metadata class). An other good point is that pipelines
that don't do any geometry or projection stuff will not have to instanciate and configure a sensor
transform that they won't use anyway. The SensorTransform will be initialized
from the ImageKeywordList obtained in step 3.
The following diagram sums up the different steps.
![workflow_metadata](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb-devutils/raw/master/Scripts/ossim/workflow_metadata.png)
In the case of a single image file with a geom, the steps 1, 2 and 3 are not needed, the geom is
directly injected into the ImageKeywordlist.
In a nutshell, the IMI classes will be in charge of identifying the correct sensor and parsing all the
relevant metadata. The SensorTransform classes will operate various geometric transforms, configured
from an ImageKeywordList.
The role of IMI classes can also be extended, for instance give the list of metadata keys that carry
per-band values. A concatenate file will then be able to gather these metadata together.
Note from RKH: use RapidXML instead of TinyXML.
##### Geometric Models #####
We move the code related to geometric transforms into several generic SensorTransforms. For now we can expect:
* a RPCSensorTransform (maybe based on ``GDALRPCTransform()``)
* a SarSensorTransform (a port of ossimSarSensorModel)
* (optional) a GeometricSarSensorTransform ? (for deprecated SAR models)
* (optional) a PushBroomSensorTransform ? (for Spot5)
* (optional) a MatrixSensorTransform ? (for airborne sensors)
For geometric transform, all the structures like ossimDpt, ossimGpt should be replaced with ITK classes.
Ideally, the new SensorTransform could derive from otb::SensorModelBase, but the current classes
SensorModelBase, ForwardSensorModel and InverseSensorModel are not really usefull. The difference between
forward and inverse transform could very well be implemented with a template specialization on
SensorModelBase. I propose to remove ForwardSensorModel and InverseSensorModel, refactor SensorModelBase,
and derive new SensorTransforms from SensorModelBase.
Like with ossimSensorModel, we can implement tuning parameters in otb::SensorModelBase to reproduce
the ossimAdjustableParameterInterface. The adjustment parameters are often used to configure a
residual affine transform that is composed with the geometric model.
##### DEMHandler #####
Role:
* Open a DEM directory (with SRTM tiles, single GeoTIFF file, ...)
* Open a geoid file (\*.egm)
* Handle a default elevation setting
* Provide the elevation at any coordinates (lon/lat)
Actions: there is nothing really equivalent in GDAL. If we go for a custom development, we could
also plan a different use of this DEM:
* Point-based: this is the current implementation. We query the DEMHandler for an elevation at each
position independently. This implementation requires some caching to be efficient (done by Ossim,
can also be done by GDAL).
* Grid-based: this is a new strategy that could be implemented. For instance, during an
orthorectification process, a deformation grid is computed, using calls to the DEMHandler
at each point. It would be more efficient to extract the elevation values block by block.
In this case, we can also foresee some relevant features for DEM processing (like no-data
filling, reprojection, smoothing,...).
With a grid-based approach, the DEMHandler would rather return an image pointer (probably the output
of a pipeline) than a single float. After a quick review of the calls to
``itk::Transform::TransformPoint()``, it seems difficult to avoid the point-based service in
the DEMHandler.
The best example is the computation of an ortho extent. This requires (at least) 4 forward
transforms for each image corner. Assuming a RPC model, this sensor-to-ground transform uses
an iterative approach, because the RPC gives the transform from ground to sensor. The DEMHandler
will have to supply several elevations for each image corner and the (x,y) coordinates of theses
elevations can't be easily predicted. Also, since the corners may represent a large extent on
the ground, it is risky to assume that the whole region can be buffered.
Then, there is also the question of the input to the DEMHandler. At the moment, we give a directory
and an (optional) path to a geoid file. Giving a path to a DEM file could be easier for the
users, but keeping the existing behaviour would ensure nothing is broken on user side.
Since a DEM is often composed of several tiles, the VRT solution seems the best to gather
the tiles in a single entry point. We can even create it in-memory to deal with backward
compatibility.
The solution proposed is to work with 3 classes:
* ``DEMHandler``: part of OTBTransform, singleton, holds the defaults settings, and an internal DEM reader
* ``DEMReaderInterface``: part of OTBTransform, defines the interface to request point-based and
grid-based elevation
* ``GDALDEMReader``: part of OTBImageIO, implements the DEMReaderInterface, with point-based and
grid-based services as a standard image reader.
This is the proposed skeleton for the future ``DEMHandler`` class:
```cpp
class DEMHandler : public itk::Object
{
public:
/** Retrieve the singleton instance */
static Pointer Instance();
/** Default DEM settings */
string GetDEMPath();
void SetDEMPath(string);
string GetGeoidPath();
void SetGeoidPath(string);
double GetDefaultHeight();
void SetDefaultHeight();
void SetReader(reader);
DEMReaderInterface* GetReader();
private:
static Pointer m_Singleton;
string m_Geoid;
string m_DEM;
double m_DefaultHeight;
/** internal DEMReaderInterface */
DEMReaderInterface::Pointer m_Reader;
};
```
The skeleton of ``DEMReaderInterface`` will look like:
```cpp
class DEMReaderInterface
{
public:
/** Point-based elevation */
virtual double GetHeight(double x, double y);
/** Grid-based elevation */
virtual otb::Image<double,2>* GetHeightGrid();
/** setup function */
void SetSource(dem, geoid, defaultHeight);
};
```
The ``GDALDEMReader`` class will be a composite filter, containing the following boxes:
* [optional] ``DirectoryToVRT``: small tool used if the DEM path is a directory. It will:
* find the first VRT file in that directory
* or create an in-memory VRT using image present in the directory
* ``ImageFileReader``: actually reads an input VRT (we may also use GDALImageIO directly)
* ``DEMResampler``: can be used to support interpolation, resampling the DEM to a different grid and
a different SRS.
* [optional] ``GeoidReader``: reads the input geoid file, this will likely be an ``ImageFileReader``,
it may use the full buffer if the size allows it.
* [optional] ``AddImageFilter``: combine DEM and geoid heights
This reader will be used during the point-based calls: a small patch of DEM will be extracted around
the requested location. During grid-based calls, it will return an ``otb::Image`` connected to a pipeline.
The ``DEMResampler`` can be really simple at the start. The only mandatory feature to be implemented
is the interpolation on a different grid (using the same SRS). Indeed, this is how the point-based
method ``GetHeight()`` will interpolate the correct elevation. Later on, we can improve it to support:
* transformation to a different SRS
* gap-filling
* smoothing
* ...
It could be a nice feature in the long term.
We will probably need to modify the GDAL_CACHE_SIZE variable for better performances. Also, this
cache size should be subtracted from our RAM parameter.
### Who will be developing the proposed changes?
TBD8.0.0https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/-/issues/1723Release 8.0.02021-11-05T10:49:25ZVictor PoughonRelease 8.0.0This is the planning issue for release 8.0.0
### Breaking changes
* [x] Remove application `LSMSSmallRegionsMerging` !233 (deprecated in 7.0.0)This is the planning issue for release 8.0.0
### Breaking changes
* [x] Remove application `LSMSSmallRegionsMerging` !233 (deprecated in 7.0.0)8.0.0https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/-/issues/2142Refactor SAR sensor models2021-11-08T09:56:32ZCédric TraizetRefactor SAR sensor modelsPart of the [sensor model refactoring](#2040).
The Sar functionalites should be refactored to become independent of Ossim.
### SAR model
##### Metadata parsing
SARImageMetadataInterface : use of `ossimSarSensorModel` to parse metadat...Part of the [sensor model refactoring](#2040).
The Sar functionalites should be refactored to become independent of Ossim.
### SAR model
##### Metadata parsing
SARImageMetadataInterface : use of `ossimSarSensorModel` to parse metadata, it has already been refactored to rely on GDAL instead of Ossim for metadata parsing, metadata parsing from geom file is still to be implemented.
While other sensors models are implemented in QGIS plugin, OTB currently uses 4 SAR sensor models:
* Sentinel 1
* RadarSat 2
* TerraSar-X
* CosmoSkyMed
The metadata parsing has been implemented in !761
Support for geom files should still be added. TODO: can this be done for all sensors at once ? Or do we need to implement geom sensor by sensor ? (this was required for Optical Sensor Models, because each sensor had specific keys and needed post-processing)
##### ossimSARSensorModel
SAR processing in OTB is based on Ossim. Most SAR classes are implemented in the OssimPlugins module. The `ossimSarSensorModel`, deriving from `ossimSensorModel` from Ossim is the main virtual class used for SAR functionalities and SAR metadata reading.
SARSensorModelAdapters : Adapter class for ossimSarSensorModel processing functions, it defines the following methods :
``` cpp
bool LoadState(const ImageKeywordlist& image_kwl);
bool SaveState(ImageKeywordlist& image_kwl);
bool IsValidSensorModel() const;
bool Deburst(std::vector<std::pair<unsigned long, unsigned long>>& lines, std::pair<unsigned long, unsigned long>& samples, bool onlyValidSample = false);
bool BurstExtraction(const unsigned int burst_index, std::pair<unsigned long, unsigned long>& lines, std::pair<unsigned long, unsigned long>& samples, bool allPixels = false);
bool DeburstAndConcatenate(std::vector<std::pair<unsigned long, unsigned long>>& linesBursts, std::vector<std::pair<unsigned long, unsigned long>>& samplesBursts, unsigned int& linesOffset, unsigned int first_burstInd, bool inputWithInvalidPixels = false);
bool Overlap(std::pair<unsigned long, unsigned long>& linesUp, std::pair<unsigned long, unsigned long>& linesLow,
std::pair<unsigned long, unsigned long>& samplesUp, std::pair<unsigned long, unsigned long>& samplesLow, unsigned int burstIndUp,bool inputWithInvalidPixels = false);
bool WorldToLineSampleYZ(const Point3DType& inGeoPoint, Point2DType& cr, Point2DType& yz) const;
bool WorldToLineSample(const Point3DType& inGEoPOint, Point2DType& cr) const;
bool WorldToSatPositionAndVelocity(const Point3DType& inGeoPoint, Point3DType& satellitePosition, Point3DType& satelliteVelocity) const;
bool LineToSatPositionAndVelocity(const double line, Point3DType& satellitePosition, Point3DType& satelliteVelocity) const;
static bool WorldToCartesian(const Point3DType& inGeoPoint, Point3DType& outCartesianPoint);
static bool ImageLineToDeburstLine(const std::vector<std::pair<unsigned long, unsigned long>>& lines, unsigned long imageLine, unsigned long& deburstLine);
static void DeburstLineToImageLine(const std::vector<std::pair<unsigned long, unsigned long>>& lines, unsigned long deburstLine, unsigned long& imageLine);
```
ossimSARSensorModel is implemented by 3 sensor:
* ossimSentinel1Model
* ossimCosmoSkyMedModel
* ossimTerraSarXModel
##### ossimGeometricSARSensorModel
ossimGeometricSARSensorModel is another implementation of SAR models in OssimPlugins, it is used by older sensors (?), including:
* ossimRadarSatModel
* ossimRadarSat2Model
* ossimAlosPalsarModel
* ossimErsSarModel
* ossimEnvisatASarModel
while ossimGeometricSARSensorModel is not used by SARSensorModelAdapters, it is available through the ossimPlugins projection factory, which means OTB is able to transform sensor points to/from geo points for these sensors. As metadata parsing is not implemented (it has been removed at some point ?) for these models (excepting RadarSat2), it is only possible to use these sensor by providing a geom file containing the required metadata to instantiate the ossimSensorModel. These sensor are not tested in OTB.
Questions:
* are AlosPalsar, ErsSar, Envisat Asar and RadarSat deprecated ? Should we support them in OTB 8.0 ?
* There is a RPC model defined in RadarSat 2 metadata, can we use it ? There is a ossimRadarSat2RPCModel, but it is not used by the ossimProjection factory.
### Refactoring plan
- [ ] #2158 >> Bug in TerraSar-X calibration
- [x] #2154 >> Implement SAR metadata parsing from geom files.
- [x] #2159 >> Use ImageMetadata in SarCalibration filters
- [x] #2150 >> Implement a factory for SensorTransformBase (only RPCForwardTransform and RPCInverseTransform are defined at this point), and use it in `GenericRSTransform`.
- [x] #2160 >> Implement `otb::SarSensorModel`, this class provides the same algorithms as `SARSensorModelAdapters`. This is the main issue of the refactoring, and it requires refinement.
- [x] #2151 >> Implement `otb::SarForwardTransform` and `otb::SarInverseTransform` deriving from `SensorTransformBase`, using `otb::SarSensorModel` to map points
- [x] #2152 >> Refactor SAR filter and application to use `otb::SarSensorModel`, `otb::SarForwardTransform` and `otb::SarInverseTransform`.
- [X] ~~Implement `otb::SarGeometricSensorModel` ?~~ (out of scope of version 8.0)
- [x] #2153 >> Remove Ossim based SAR classes (including OssimPlugins)
While most of the code is in QGISPlugins and can be reused easily (some Ossim data structure should be refactored, and ITK or the standard library should be used), some functionalities might require more work, in particular, SAR model uses a lot of point projections utilities from Ossim, maybe Proj can be used as a replacement for these functionalities.
The impact of the refactoring on DiapOTB should also be investigated.
### Tests
Test should be added for all methods implemented in `SarSensorModel` test should also be added for `otb::SarForwardTransform` and `otb::SarInverseTransform` with different sensors. The baseline for these tests will be generated with Ossim and OTB 7.2.0.
Some test have been deactivated while implementing the geom file reading (!759), because they rely heavily on the new SAR model. We need to reactivate them while implementing this model.
- saTvSarDeburstImageFilterTest
- saTvSarDeburstImageFilterTest2
- saTvSarDeburstImageFilterTest3
- saTvSarBurstExtractionImageFilterTest1
- saTvSarBurstExtractionImageFilterTest2
- prTvSensorModel_ers2-1
- prTvSensorModel_sentinel1-1
- prTvOrthoRectification_sentinel1_DEMGTIFF
- prTvOrthoRectification_sentinel1_DEMSRTM
- prTvOrthoRectification_sentinel1_noDEM
- otbSARAmplitudeEstimationImageFilterTest (DiapOTB)
- otbSARAmplitudeEstimationTest (DiapOTB)
- otbSARCartesianMeanEstimationTest (DiapOTB)8.0.0https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/-/issues/1677Monteverdi improvements2022-01-06T12:52:42ZYannick TANGUYMonteverdi improvementsThis story gathers improvements listed in the old wiki :
* Display radar images
* Clarify the numbering of bands. Zero or one based? Currently the band selector drop down menu shows entries like: "1: Band 0".
(note: I think it should be...This story gathers improvements listed in the old wiki :
* Display radar images
* Clarify the numbering of bands. Zero or one based? Currently the band selector drop down menu shows entries like: "1: Band 0".
(note: I think it should be all 1-based to follow QGIS and GDAL convention: http://gis.stackexchange.com/questions/219886/is-it-convention-to-index-a-raster-band-from-1?atw=1)
* Read Band names and band wavelength
* Allow to select the interpolation modes (nearest, bicubic, etc.). Most wanted from users is OpenGL bi-cubic texture filtering (currently, only bi-linear) when zooming more than 1:1
* Add a (rectangular) Region Of Interest selection tool
* Display preview of OTB-applications result(s)
* Add an angle/distance/surface measure tool
* Support Ice viewport rotation feature
* Full screen mode
* Layer stack right click menu:
* Add a button remove all layers but not the selected
* Support the aux.file of GDAL to store Histogram and Min/Max value to avoid recompute it each time or store GCP to allow open the data into QGIS correctly
* Support image with palette
* Add a widget with statistic of the image (Mean, Variance, Sum, Nb of ValidPixel, ...)
* Add a widget with general information about the selected image (size, nb bands, origin, proj...)
* Histogram enhancements:
* Add the capability to compute the histogram at full resolution
* Optionally display the computed RGB histogram
* Option to compute color dynamics based on current view, not entire image, and auto update on zoom and pan
* Ice should do the histogram computation instead of Monteverdi (GDAL can also do it)
* Export the exact histogram to a file
* Add warning message in Monteverdi when trying to open an image with a large number of images (> 50 bands for instance)https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/-/issues/2209Release 7.42022-01-07T10:02:14ZCédric TraizetRelease 7.4[[_TOC_]]
We are ready to release OTB version 7.4.0. The following steps need to be done:
## Scope of the release:
* [x] !828: New TerraSarX sensor model, based on the unfinished work of !553
* [x] !833: Add deprecate tags in preparat...[[_TOC_]]
We are ready to release OTB version 7.4.0. The following steps need to be done:
## Scope of the release:
* [x] !828: New TerraSarX sensor model, based on the unfinished work of !553
* [x] !833: Add deprecate tags in preparation for release 8.0.0
* [x] !838: ExtractROI: Test points inversion on index instead of coordinate
* [x] !840: Remove the "working around a kernel bug" warning during OTB binary package installation
* [x] !839: Rename the noise parameter in SARCalibration
* [x] !831: bug fixes in Sentinel 1 calibration
* [x] !836: Use Horner method for polynomial evaluation in SAR calibration
* [x] !835: Update geotiff in the Superbuild
* [x] !837: Fix Superbuild compilation with gcc-8
* [x] backport of !821: update expat
* [x] backport of !788: Fix build issue when libSVM is OFF or libsiftfast is OFF and Testing ON
* [x] backport of !822: Update openCV version to 4.5.1 for the SuperBuild
## Release Candidate
### 1. Branches
* [x] **(if major or minor release)** Feature freeze: [create the new release branch](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#create-release-branch)
* [x] **(if patch release)** Work on the already existing branch `release-7-4`
* [x] Make sure the version number in `CMakeLists.txt` is 7.4.0
### 2. Housekeeping
* [x] In this story, make a list of blocking issues for the release (if any)
* [x] Update release notes (walk the GitLab MR merged history and log all improvements)
* [x] Update the date in RELEASE_NOTES.txt
* [x] Check [SonarQube](https://sonar.orfeo-toolbox.org/dashboard?id=orfeotoolbox-otb)
* [x] Run Debian [spelling](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#spelling-check) checker
* [x] Run shellcheck script from [OTB-Devutils/Scripts/](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb-devutils/blob/master/Scripts/run_shellcheck.sh)
* [x] [Update translation](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#translation-for-monteverdi-mapla) for Monteverdi and Mapla
* [x] [Sanity check the binary packages](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#standalone-packages-sanity-check)
* [x] Windows
* [x] Linux
* [x] Mac
* [x] Test QGIS on qgis docker image
### 3. Actual release
Once all blocking issues are closed, and the previous steps are done:
* [x] [Tag the release candidate](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#release-tag)
* [x] Update GIT_TAG for all official remote modules (if needed)
### 4. Publish and plan next release
* [x] [Prepare and upload source packages](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#prepare-and-upload-source-packages)
* [x] [Promote staging packages](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#promote-staging-packages)
* [x] [Update documentation](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#update-documentation)
* [x] Cookbook
* [x] Doxygen
* [x] [Update the SuperBuild archive](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#superbuild-archive)
* [x] Release Candidate announcement on the forum
## Release
### 1. Branches
* [x] Make sure the version number in `CMakeLists.txt` is 7.4.0
### 2. Housekeeping
* [x] In this story, make a list of blocking issues for the release (if any)
* [x] Fix compilation warnings on CI
* [x] Update release notes (walk the GitLab MR merged history and log all improvements)
* [x] Update the date in RELEASE_NOTES.txt
* [x] Check [SonarQube](https://sonar.orfeo-toolbox.org/dashboard?id=orfeotoolbox-otb)
* [x] Run Debian [spelling](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#spelling-check) checker
* [x] Run shellcheck script from [OTB-Devutils/Scripts/](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb-devutils/blob/master/Scripts/run_shellcheck.sh)
* [x] [Update translation](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#translation-for-monteverdi-mapla) for Monteverdi and Mapla
* [x] [Sanity check the binary packages](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#standalone-packages-sanity-check)
* [x] Windows
* [x] Linux
* [x] Mac
* [x] Test QGIS on qgis docker image
### 3. Actual release
Once all blocking issues are closed, and the previous steps are done:
* [x] [Tag the release](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#release-tag)
* [x] **(if major or minor release)**: Merge the release into develop
* [x] **(if it's the latest release)**: Merge the release into master
* [x] **(if patch release)**: Backport fixes
* [x] Update GIT_TAG for all official remote modules (if needed)
### 4. Publish and plan next release
* [x] [Prepare and upload source packages](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#prepare-and-upload-source-packages)
* [x] [Promote staging packages](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#promote-staging-packages)
* [x] [Update documentation](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#update-documentation)
* [x] Cookbook
* [x] Doxygen
* [x] WordPress page "Home" and "Download" pages
* [x] Upload OTB source archive to [Zenodo](https://zenodo.org/) to create a unique Digital Object Identifier (DOI)
* [x] [Update the SuperBuild archive](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#superbuild-archive)
* [x] Release announcement
* [x] On the [forum](https://forum.orfeo-toolbox.org/)
* [x] On the [blog](https://www.orfeo-toolbox.org/blog/)
* [x] On [Twitter](https://twitter.com/orfeotoolbox)
* [x] Forward announcement to news_item@osgeo.org ([OSGeo news](https://www.osgeo.org/foundation-news/))
* [ ] Remove public branches related to MR or bugfix merged before the release7.4.0https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/-/issues/2235Release 8.0.02022-04-12T05:45:56ZJulien OsmanRelease 8.0.0[[_TOC_]]
We are ready to release OTB version 8.0.0. The following steps need to be done:
## Blocking issues/MR
* [x] !865: Update the version of several OTB dependencies in the Superbuild
* [x] !868: Use std::chrono and the date libr...[[_TOC_]]
We are ready to release OTB version 8.0.0. The following steps need to be done:
## Blocking issues/MR
* [x] !865: Update the version of several OTB dependencies in the Superbuild
* [x] !868: Use std::chrono and the date library instead of boost date time as internal types
* [x] !870: Provide access to the metadata from the python API
* [x] !874: Fix segfault in Monteverdi
* [ ] !876
* [ ] !883
## Release Candidate 1
### 1. Branches
* [X] Feature freeze: [create the new release branch](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#create-release-branch)
* [X] Make sure the version number in `CMakeLists.txt` is 8.0.0
### 2. Housekeeping
* [x] In this story, make a list of blocking issues for the release (if any)
* [x] Update release notes (walk the GitLab MR merged history and log all improvements)
* [x] Update the date in RELEASE_NOTES.txt
* [x] Check [SonarQube](https://sonar.orfeo-toolbox.org/dashboard?id=orfeotoolbox-otb)
* [x] Run Debian [spelling](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#spelling-check) checker
* [x] Run shellcheck script from [OTB-Devutils/Scripts/](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb-devutils/blob/master/Scripts/run_shellcheck.sh)
* [x] [Update translation](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#translation-for-monteverdi-mapla) for Monteverdi and Mapla
* [x] [Sanity check the binary packages](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#standalone-packages-sanity-check)
* [x] Windows
* [x] Linux
* [x] Mac
* [x] Test QGIS on qgis docker image
### 3. Actual release
Once all blocking issues are closed, and the previous steps are done:
* [x] [Tag the release candidate](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#release-tag)
* [x] Update GIT_TAG for all official remote modules (if needed)
### 4. Publish and plan next release
* [x] [Prepare and upload source packages](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#prepare-and-upload-source-packages)
* [x] [Promote staging packages](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#promote-staging-packages)
* [x] [Update documentation](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#update-documentation)
* [x] Cookbook
* [x] Doxygen
* [x] [Update the SuperBuild archive](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#superbuild-archive)
* [x] Release Candidate announcement on the forum
## Release Candidate 2
### 1. Branches
* [X] Feature freeze: [create the new release branch](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#create-release-branch)
* [X] Make sure the version number in `CMakeLists.txt` is 8.0.0
### 2. Housekeeping
* [x] In this story, make a list of blocking issues for the release (if any)
* [x] Update release notes (walk the GitLab MR merged history and log all improvements)
* [x] Update the date in RELEASE_NOTES.txt
* [ ] Check [SonarQube](https://sonar.orfeo-toolbox.org/dashboard?id=orfeotoolbox-otb)
* [x] Run Debian [spelling](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#spelling-check) checker
* [x] Run shellcheck script from [OTB-Devutils/Scripts/](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb-devutils/blob/master/Scripts/run_shellcheck.sh)
* [x] [Update translation](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#translation-for-monteverdi-mapla) for Monteverdi and Mapla
* [x] [Sanity check the binary packages](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#standalone-packages-sanity-check)
* [x] Windows
* [x] Linux
* [x] Mac
* [x] Test QGIS on qgis docker image
### 3. Actual release
Once all blocking issues are closed, and the previous steps are done:
* [x] [Tag the release candidate](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#release-tag)
* [x] Update GIT_TAG for all official remote modules (if needed)
### 4. Publish and plan next release
* [x] [Prepare and upload source packages](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#prepare-and-upload-source-packages)
* [x] [Promote staging packages](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#promote-staging-packages)
* [x] [Update documentation](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#update-documentation)
* [x] Cookbook
* [x] Doxygen
* [x] [Update the SuperBuild archive](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#superbuild-archive)
* [x] Release Candidate announcement on the forum
## Release Candidate 3
### 1. Branches
* [x] Feature freeze: [create the new release branch](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#create-release-branch)
* [x] Make sure the version number in `CMakeLists.txt` is 8.0.0
### 2. Housekeeping
* [x] In this story, make a list of blocking issues for the release (if any)
* [x] Update release notes (walk the GitLab MR merged history and log all improvements)
* [x] Update the date in RELEASE_NOTES.txt
* [ ] Check [SonarQube](https://sonar.orfeo-toolbox.org/dashboard?id=orfeotoolbox-otb)
* [ ] Run Debian [spelling](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#spelling-check) checker
* [ ] Run shellcheck script from [OTB-Devutils/Scripts/](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb-devutils/blob/master/Scripts/run_shellcheck.sh)
* [x] [Update translation](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#translation-for-monteverdi-mapla) for Monteverdi and Mapla
* [ ] [Sanity check the binary packages](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#standalone-packages-sanity-check)
* [x] Windows
* [x] Linux
* [x] Mac
* [x] Test QGIS on qgis docker image
### 3. Actual release
Once all blocking issues are closed, and the previous steps are done:
* [x] [Tag the release candidate](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#release-tag)
* [x] Update GIT_TAG for all official remote modules (if needed)
### 4. Publish and plan next release
* [x] [Prepare and upload source packages](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#prepare-and-upload-source-packages)
* [x] [Promote staging packages](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#promote-staging-packages)
* [x] [Update documentation](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#update-documentation)
* [x] Cookbook
* [x] Doxygen
* [x] [Update the SuperBuild archive](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#superbuild-archive)
* [x] Release Candidate announcement on the forum
## Release
### 1. Branches
* [x] Make sure the version number in `CMakeLists.txt` is 8.0.0
### 2. Housekeeping
* [x] In this story, make a list of blocking issues for the release (if any)
* [ ] Fix compilation warnings on CI
* [x] Update release notes (walk the GitLab MR merged history and log all improvements)
* [x] Update the date in RELEASE_NOTES.txt
* [ ] Check [SonarQube](https://sonar.orfeo-toolbox.org/dashboard?id=orfeotoolbox-otb)
* [x] Run Debian [spelling](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#spelling-check) checker
* [ ] Run shellcheck script from [OTB-Devutils/Scripts/](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb-devutils/blob/master/Scripts/run_shellcheck.sh)
* [x] [Update translation](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#translation-for-monteverdi-mapla) for Monteverdi and Mapla
* [ ] [Sanity check the binary packages](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#standalone-packages-sanity-check)
* [ ] Windows
* [x] Linux
* [ ] Mac
* [ ] Test QGIS on qgis docker image
### 3. Actual release
Once all blocking issues are closed, and the previous steps are done:
* [x] [Tag the release](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#release-tag)
* [x] Merge the release into develop
* [x] Merge the release into master
* [x] Update GIT_TAG for all official remote modules (if needed)
### 4. Publish and plan next release
* [x] [Prepare and upload source packages](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#prepare-and-upload-source-packages)
* [x] [Promote staging packages](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#promote-staging-packages)
* [x] [Update documentation](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#update-documentation)
* [x] Cookbook
* [x] Doxygen
* [x] WordPress page "Home" and "Download" pages
* [x] Upload OTB source archive to [Zenodo](https://zenodo.org/) to create a unique Digital Object Identifier (DOI)
* [ ] [Update the SuperBuild archive](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#superbuild-archive)
* [x] Release announcement
* [x] On the [forum](https://forum.orfeo-toolbox.org/)
* [x] On the [blog](https://www.orfeo-toolbox.org/blog/)
* [x] On [Twitter](https://twitter.com/orfeotoolbox)
* [x] Forward announcement to news_item@osgeo.org ([OSGeo news](https://www.osgeo.org/foundation-news/))
* [x] Remove public branches related to MR or bugfix merged before the release8.0.0https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/-/issues/2278release 8.0.12022-05-09T09:51:19ZJulien Osmanrelease 8.0.1We are ready to release OTB version 8.0.1. The following steps need to be done:
## Release
### 1. Branches
* [x] Work on the already existing branch `release-8-0`
* [x] Make sure the version number in `CMakeLists.txt` is 8.0.1
### 2....We are ready to release OTB version 8.0.1. The following steps need to be done:
## Release
### 1. Branches
* [x] Work on the already existing branch `release-8-0`
* [x] Make sure the version number in `CMakeLists.txt` is 8.0.1
### 2. Housekeeping
* [x] In this story, make a list of blocking issues for the release (if any)
* [ ] Fix compilation warnings on CI
* [x] Update release notes (walk the GitLab MR merged history and log all improvements)
* [ ] [Update translation](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#translation-for-monteverdi-mapla) for Monteverdi and Mapla
* [x] [Sanity check the binary packages](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#standalone-packages-sanity-check)
* [x] Windows
* [x] Linux
* [x] Mac
* [x] Test QGIS on qgis docker image
### 3. Actual release
Once all blocking issues are closed, and the previous steps are done:
* [x] [Tag the release](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#release-tag)
* [x] Backport fixes
* [x] Update GIT_TAG for all official remote modules (if needed)
### 4. Publish and plan next release
* [x] [Prepare and upload source packages](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#prepare-and-upload-source-packages)
* [x] [Promote staging packages](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#promote-staging-packages)
* [x] [Update documentation](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#update-documentation)
* [x] Cookbook
* [x] Doxygen
* [x] WordPress page "Home" and "Download" pages
* [x] Upload OTB source archive to [Zenodo](https://zenodo.org/) to create a unique Digital Object Identifier (DOI)
* [x] [Update the SuperBuild archive](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#superbuild-archive)
* [x] Release announcement
* [x] On the [forum](https://forum.orfeo-toolbox.org/)
* [x] On the [blog](https://www.orfeo-toolbox.org/blog/)
* [x] On [Twitter](https://twitter.com/orfeotoolbox)
* [ ] Forward announcement to news_item@osgeo.org ([OSGeo news](https://www.osgeo.org/foundation-news/))
* [x] Remove public branches related to MR or bugfix merged before the release8.0.1Julien OsmanJulien Osmanhttps://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/-/issues/2279release 7.4.12022-05-09T09:51:20ZJulien Osmanrelease 7.4.1We are ready to release OTB version 7.4.1. The following steps need to be done:
- [x] Update diapOTB to version 1.1.0
## Release
### 1. Branches
* [x] Work on the already existing branch `release-7-4`
* [x] Make sure the version numb...We are ready to release OTB version 7.4.1. The following steps need to be done:
- [x] Update diapOTB to version 1.1.0
## Release
### 1. Branches
* [x] Work on the already existing branch `release-7-4`
* [x] Make sure the version number in `CMakeLists.txt` is 7.4.1
### 2. Housekeeping
* [x] In this story, make a list of blocking issues for the release (if any)
* [ ] Fix compilation warnings on CI
* [x] Update release notes (walk the GitLab MR merged history and log all improvements)
* [ ] [Update translation](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#translation-for-monteverdi-mapla) for Monteverdi and Mapla
* [ ] [Sanity check the binary packages](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#standalone-packages-sanity-check)
* [ ] Windows
* [x] Linux
* [ ] Mac
* [ ] Test QGIS on qgis docker image
### 3. Actual release
Once all blocking issues are closed, and the previous steps are done:
* [x] [Tag the release](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#release-tag)
* [ ] Backport fixes
* [x] Update GIT_TAG for all official remote modules (if needed)
### 4. Publish and plan next release
* [x] [Prepare and upload source packages](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#prepare-and-upload-source-packages)
* [x] [Promote staging packages](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#promote-staging-packages)
* [x] [Update documentation](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#update-documentation)
* [x] Cookbook
* [x] Doxygen
* [ ] WordPress page "Home" and "Download" pages
* [x] Upload OTB source archive to [Zenodo](https://zenodo.org/) to create a unique Digital Object Identifier (DOI)
* [x] [Update the SuperBuild archive](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#superbuild-archive)
* [ ] Release announcement
* [x] On the [forum](https://forum.orfeo-toolbox.org/)
* [x] On the [blog](https://www.orfeo-toolbox.org/blog/)
* [ ] On [Twitter](https://twitter.com/orfeotoolbox)
* [ ] Forward announcement to news_item@osgeo.org ([OSGeo news](https://www.osgeo.org/foundation-news/))
* [ ] Remove public branches related to MR or bugfix merged before the releaseJulien OsmanJulien Osmanhttps://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/-/issues/2302Release 8.1.02022-09-28T08:08:54ZJulien OsmanRelease 8.1.0We are ready to release OTB version 8.1.0. The following steps need to be done:
## Release Candidate 1
### 1. Branches
* [x] Feature freeze: [create the new release branch](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-...We are ready to release OTB version 8.1.0. The following steps need to be done:
## Release Candidate 1
### 1. Branches
* [x] Feature freeze: [create the new release branch](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#create-release-branch)
* [x] Make sure the version number in `CMakeLists.txt` is 8.1.0
### 2. Housekeeping
* [x] In this story, make a list of blocking issues for the release (if any)
* [x] Update release notes (walk the GitLab MR merged history and log all improvements)
* [x] Update the date in RELEASE_NOTES.txt
* [ ] Check [SonarQube](https://sonar.orfeo-toolbox.org/dashboard?id=orfeotoolbox-otb)
* [ ] Run Debian [spelling](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#spelling-check) checker
* [ ] Run shellcheck script from [OTB-Devutils/Scripts/](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb-devutils/blob/master/Scripts/run_shellcheck.sh)
* [x] [Update translation](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#translation-for-monteverdi-mapla) for Monteverdi and Mapla
* [x] [Sanity check the binary packages](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#standalone-packages-sanity-check)
* [x] Windows
* [x] Linux
* [x] Mac
* [x] Test QGIS on qgis docker image
### 3. Actual release
Once all blocking issues are closed, and the previous steps are done:
* [x] [Tag the release candidate](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#release-tag)
* [x] Update GIT_TAG for all official remote modules (if needed)
### 4. Publish and plan next release
* [x] [Prepare and upload source packages](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#prepare-and-upload-source-packages)
* [x] [Promote staging packages](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#promote-staging-packages)
* [x] [Update documentation](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#update-documentation)
* [x] Cookbook
* [x] Doxygen
* [x] [Update the SuperBuild archive](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#superbuild-archive)
* [x] Release Candidate announcement on the forum
## Release Candidate 2
### 1. Branches
* [x] Make sure the version number in `CMakeLists.txt` is 8.1.0
### 2. Housekeeping
* [x] In this story, make a list of blocking issues for the release (if any)
* [x] Update release notes (walk the GitLab MR merged history and log all improvements)
* [x] Update the date in RELEASE_NOTES.txt
* [x] Check [SonarQube](https://sonar.orfeo-toolbox.org/dashboard?id=orfeotoolbox-otb)
* [ ] Run Debian [spelling](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#spelling-check) checker
* [ ] Run shellcheck script from [OTB-Devutils/Scripts/](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb-devutils/blob/master/Scripts/run_shellcheck.sh)
* [x] [Update translation](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#translation-for-monteverdi-mapla) for Monteverdi and Mapla
* [x] [Sanity check the binary packages](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#standalone-packages-sanity-check)
* [x] Windows
* [x] Linux
* [x] Mac
* [x] Test QGIS on qgis docker image
### 3. Actual release
Once all blocking issues are closed, and the previous steps are done:
* [x] [Tag the release candidate](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#release-tag)
* [x] Update GIT_TAG for all official remote modules (if needed)
### 4. Publish and plan next release
* [x] [Prepare and upload source packages](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#prepare-and-upload-source-packages)
* [x] [Promote staging packages](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#promote-staging-packages)
* [x] [Update documentation](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#update-documentation)
* [x] Cookbook
* [x] Doxygen
* [x] [Update the SuperBuild archive](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#superbuild-archive)
* [x] Release Candidate announcement on the forum
## Release
### 1. Branches
* [x] Make sure the version number in `CMakeLists.txt` is 8.1.0
### 2. Housekeeping
* [x] In this story, make a list of blocking issues for the release (if any)
* [x] Fix compilation warnings on CI
* [x] Update release notes (walk the GitLab MR merged history and log all improvements)
* [x] Update the date in RELEASE_NOTES.txt
* [x] Check [SonarQube](https://sonar.orfeo-toolbox.org/dashboard?id=orfeotoolbox-otb)
* [x] Run Debian [spelling](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#spelling-check) checker
* [x] Run shellcheck script from [OTB-Devutils/Scripts/](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb-devutils/blob/master/Scripts/run_shellcheck.sh)
* [x] [Update translation](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#translation-for-monteverdi-mapla) for Monteverdi and Mapla
* [x] [Sanity check the binary packages](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#standalone-packages-sanity-check)
* [x] Windows
* [x] Linux
* [x] Mac
* [x] Test QGIS on qgis docker image
### 3. Actual release
Once all blocking issues are closed, and the previous steps are done:
* [x] [Tag the release](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#release-tag)
* [x] **(if major or minor release)**: Merge the release into develop
* [x] **(if it's the latest release)**: Merge the release into master
* [x] **(if patch release)**: Backport fixes
* [x] Update GIT_TAG for all official remote modules (if needed)
### 4. Publish and plan next release
* [x] [Prepare and upload source packages](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#prepare-and-upload-source-packages)
* [x] [Promote staging packages](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#promote-staging-packages)
* [x] [Update documentation](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#update-documentation)
* [x] Cookbook
* [x] Doxygen
* [x] WordPress page "Home" and "Download" pages
* [x] Upload OTB source archive to [Zenodo](https://zenodo.org/) to create a unique Digital Object Identifier (DOI)
* [x] [Update the SuperBuild archive](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#superbuild-archive)
* [x] Release announcement
* [x] On the [forum](https://forum.orfeo-toolbox.org/)
* [x] On the [blog](https://www.orfeo-toolbox.org/blog/)
* [x] On [Twitter](https://twitter.com/orfeotoolbox)
* [x] Forward announcement to news_item@osgeo.org ([OSGeo news](https://www.osgeo.org/foundation-news/))
* [x] Remove public branches related to MR or bugfix merged before the release8.1.0Julien OsmanJulien Osmanhttps://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/-/issues/2324release 8.1.12023-01-18T09:46:35ZThibaut ROMAINrelease 8.1.1We are ready to release OTB version 8.1.1. The following steps need to be done:
## Release
### 1. Branches
* [x] Make sure the version number in `CMakeLists.txt` is 8.1.1
### 2. Housekeeping
* [x] In this story, make a list of blocki...We are ready to release OTB version 8.1.1. The following steps need to be done:
## Release
### 1. Branches
* [x] Make sure the version number in `CMakeLists.txt` is 8.1.1
### 2. Housekeeping
* [x] In this story, make a list of blocking issues for the release (if any)
* [x] Fix compilation warnings on CI
* [x] Update the date in RELEASE_NOTES.txt
* [x] Check [SonarQube](https://sonar.orfeo-toolbox.org/dashboard?id=orfeotoolbox-otb)
* [x] Run Debian [spelling](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#spelling-check) checker
* [x] Run shellcheck script from [OTB-Devutils/Scripts/](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb-devutils/blob/master/Scripts/run_shellcheck.sh)
* [x] [Update translation](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#translation-for-monteverdi-mapla) for Monteverdi and Mapla
* [x] [Sanity check the binary packages](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#standalone-packages-sanity-check)
* [x] Windows
* [x] Linux
* [x] Mac
* [x] Test QGIS on qgis docker image
### 3. Actual release
Once all blocking issues are closed, and the previous steps are done:
* [x] [Tag the release](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#release-tag)
* [x] **(if patch release)**: Backport fixes
* [x] Update GIT_TAG for all official remote modules (if needed)
### 4. Publish and plan next release
* [x] [Prepare and upload source packages](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#prepare-and-upload-source-packages)
* [x] [Promote staging packages](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#promote-staging-packages)
* [x] [Update documentation](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#update-documentation)
* [x] Cookbook
* [x] Doxygen
* [x] WordPress page "Home" and "Download" pages
* [x] Upload OTB source archive to [Zenodo](https://zenodo.org/) to create a unique Digital Object Identifier (DOI)
* [x] [Update the SuperBuild archive](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#superbuild-archive)
* [x] Release announcement
* [x] On the [forum](https://forum.orfeo-toolbox.org/)
* [x] On the [blog](https://www.orfeo-toolbox.org/blog/)
* [x] On [Twitter](https://twitter.com/orfeotoolbox)
* [x] Forward announcement to news_item@osgeo.org ([OSGeo news](https://www.osgeo.org/foundation-news/))
* [x] Remove public branches related to MR or bugfix merged before the release8.1.1Thibaut ROMAINThibaut ROMAINhttps://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/-/issues/2349release 8.1.22023-07-24T14:23:49ZThibaut ROMAINrelease 8.1.2We are ready to release OTB version 8.1.2. The following steps need to be done:
## Release Candidate
### 1. Branches
* [x] **(if major or minor release)** Feature freeze: [create the new release branch](https://gitlab.orfeo-toolbox.or...We are ready to release OTB version 8.1.2. The following steps need to be done:
## Release Candidate
### 1. Branches
* [x] **(if major or minor release)** Feature freeze: [create the new release branch](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#create-release-branch)
* [x] **(if patch release)** Work on the already existing branch `release-MAJOR-MINOR`
* [x] Make sure the version number in `CMakeLists.txt` is MAJOR.MINOR.PATCH
### 2. Housekeeping
* [x] In this story, make a list of blocking issues for the release (if any)
* [x] Update release notes (walk the GitLab MR merged history and log all improvements)
* [x] Update the date in RELEASE_NOTES.txt
* [x] Check [SonarQube](https://sonar.orfeo-toolbox.org/dashboard?id=orfeotoolbox-otb)
* [x] Run Debian [spelling](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#spelling-check) checker
* [x] Run shellcheck script from [OTB-Devutils/Scripts/](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb-devutils/blob/master/Scripts/run_shellcheck.sh)
* [x] [Update translation](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#translation-for-monteverdi-mapla) for Monteverdi and Mapla
* [x] [Sanity check the binary packages](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#standalone-packages-sanity-check)
* [x] Windows
* [x] Linux
* [x] Mac
* [x] Test QGIS on qgis docker image
### 3. Actual release
Once all blocking issues are closed, and the previous steps are done:
* [x] [Tag the release candidate](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#release-tag)
* [x] Update GIT_TAG for all official remote modules (if needed)
### 4. Publish and plan next release
* [x] [Prepare and upload source packages](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#prepare-and-upload-source-packages)
* [x] [Promote staging packages](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#promote-staging-packages)
* [x] [Update documentation](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#update-documentation)
* [x] Cookbook
* [x] Doxygen
* [x] [Update the SuperBuild archive](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#superbuild-archive)
* [x] Release Candidate announcement on the forum
## Release
### 1. Branches
* [x] Make sure the version number in `CMakeLists.txt` is MAJOR.MINOR.PATCH
### 2. Housekeeping
* [x] In this story, make a list of blocking issues for the release (if any)
* [x] Fix compilation warnings on CI
* [x] Update release notes (walk the GitLab MR merged history and log all improvements)
* [x] Update the date in RELEASE_NOTES.txt
* [x] Check [SonarQube](https://sonar.orfeo-toolbox.org/dashboard?id=orfeotoolbox-otb)
* [x] Run Debian [spelling](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#spelling-check) checker
* [x] Run shellcheck script from [OTB-Devutils/Scripts/](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb-devutils/blob/master/Scripts/run_shellcheck.sh)
* [x] [Update translation](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#translation-for-monteverdi-mapla) for Monteverdi and Mapla
* [x] [Sanity check the binary packages](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#standalone-packages-sanity-check)
* [x] Windows
* [x] Linux
* [x] Mac
* [x] Test QGIS on qgis docker image
### 3. Actual release
Once all blocking issues are closed, and the previous steps are done:
* [x] [Tag the release](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#release-tag)
* [x] **(if major or minor release)**: Merge the release into develop
* [x] **(if it's the latest release)**: Merge the release into master
* [x] **(if patch release)**: Backport fixes
* [x] Update GIT_TAG for all official remote modules (if needed)
### 4. Publish and plan next release
* [x] [Prepare and upload source packages](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#prepare-and-upload-source-packages)
* [x] [Promote staging packages](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#promote-staging-packages)
* [x] [Update documentation](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#update-documentation)
* [x] Cookbook
* [x] Doxygen
* [x] WordPress page "Home" and "Download" pages
* [x] Upload OTB source archive to [Zenodo](https://zenodo.org/) to create a unique Digital Object Identifier (DOI)
* [x] [Update the SuperBuild archive](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#superbuild-archive)
* [x] Release announcement
* [x] On the [forum](https://forum.orfeo-toolbox.org/)
* [x] On the [blog](https://www.orfeo-toolbox.org/blog/)
* [x] On [Twitter](https://twitter.com/orfeotoolbox)
* [x] Forward announcement to news_item@osgeo.org ([OSGeo news](https://www.osgeo.org/foundation-news/))
* [x] Remove public branches related to MR or bugfix merged before the release8.1.2Thibaut ROMAINThibaut ROMAINhttps://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/-/issues/1531Parameter Refactoring2024-02-19T16:12:25ZAntoine RegimbeauParameter RefactoringIn order to better organizing parameter and be able to write clean code in `Application` class we need to re-factor the parameter class and its derived class.
For this it would be wise to follow the dependency inversion principle, for be...In order to better organizing parameter and be able to write clean code in `Application` class we need to re-factor the parameter class and its derived class.
For this it would be wise to follow the dependency inversion principle, for better code improvement and re-use.
The interfaces will be develop in order to improve the efficiency of the application engine. This can be the first step for a more profound refactoring, with use of parameter traits, and even changes in the Application API.
![param_refc](/uploads/46eefcdac45a52be018905c0a92dcb8d/param_refc.png)
## Parameter base class architecture
The new parameter will have the following members:
```c++
public:
const string key // parameter key set during construction
string name // parameter name
string description // parameter description
bool enabled // flag telling if the parameter is enabled or not
bool mandatory // flag telling if the parameter is mandatory or not
bool userValue // flag telling if the parameter has a user value
enum userLevel // enum telling if the parameter is advanced or basic
enum role // enum telling if parameter is an output or an input
protected:
ParameterGroup * parent // pointer to be able to know from which parameter group the parameter is coming from
```
and the following methods :
```c++
bool GetActiveRecurse() const // return true if the parameter branch is active
virtual string ToString() const = 0 // return the parameter value as a string
virtual void FromString( string val ) = 0 // set the parameter value from a string
bool IsRoot() const // return true if the parameter has no parent
virtual void Reset() // set the parameter value to its default if it has one and to an empty value otherwise
virtual bool HasValue() const // return true if the parameter has a value
bool HasUserValue() const // return true if parameter value has been set by the user
```https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/-/issues/2371Release 9.0.02024-03-01T15:30:31ZThibaut ROMAINRelease 9.0.0We are ready to release OTB version 9.0.0. The following steps need to be done:
## Release Candidate
### 1. Branches
* [x] **(if major or minor release)** Feature freeze: [create the new release branch](https://gitlab.orfeo-toolbox.or...We are ready to release OTB version 9.0.0. The following steps need to be done:
## Release Candidate
### 1. Branches
* [x] **(if major or minor release)** Feature freeze: [create the new release branch](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#create-release-branch)
* [ ] **(if patch release)** Work on the already existing branch `release-MAJOR-MINOR`
* [x] Make sure the version number in `CMakeLists.txt` is MAJOR.MINOR.PATCH
### 2. Housekeeping
* [x] In this story, make a list of blocking issues for the release (if any)
* [x] Update release notes (walk the GitLab MR merged history and log all improvements)
* [x] Update the date in RELEASE_NOTES.txt
* [x] Check [SonarQube](https://sonar.orfeo-toolbox.org/dashboard?id=orfeotoolbox-otb)
* [x] Run Debian [spelling](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#spelling-check) checker
* [x] Run shellcheck script from [OTB-Devutils/Scripts/](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb-devutils/blob/master/Scripts/run_shellcheck.sh)
* [x] [Update translation](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#translation-for-monteverdi-mapla) for Monteverdi and Mapla
* [x] [Sanity check the binary packages](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#standalone-packages-sanity-check)
* [x] Windows
* [x] Linux
* [x] Docker image
### 3. Actual release
Once all blocking issues are closed, and the previous steps are done:
* [x] [Tag the release candidate](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#release-tag)
* [x] Update GIT_TAG for all official remote modules (if needed)
### 4. Publish and plan next release
* [x] [Prepare and upload source packages](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#prepare-and-upload-source-packages)
* [x] [Promote staging packages](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#promote-staging-packages)
* [x] [Update documentation](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#update-documentation)
* [x] Cookbook
* [x] Doxygen
* [x] [Update the SuperBuild archive](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#superbuild-archive)
* [x] Release Candidate announcement on the forum
## Release
### 1. Branches
* [x] Make sure the version number in `CMakeLists.txt` is MAJOR.MINOR.PATCH
### 2. Housekeeping
* [x] In this story, make a list of blocking issues for the release (if any)
* [x] Fix compilation warnings on CI
* [x] Update release notes (walk the GitLab MR merged history and log all improvements)
* [x] Update the date in RELEASE_NOTES.txt
* [x] Check [SonarQube](https://sonar.orfeo-toolbox.org/dashboard?id=orfeotoolbox-otb)
* [x] Run Debian [spelling](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#spelling-check) checker
* [x] Run shellcheck script from [OTB-Devutils/Scripts/](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb-devutils/blob/master/Scripts/run_shellcheck.sh)
* [x] [Update translation](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#translation-for-monteverdi-mapla) for Monteverdi and Mapla
* [x] [Sanity check the binary packages](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#standalone-packages-sanity-check)
* [x] Windows
* [x] Linux
* [x] Docker image
### 3. Actual release
Once all blocking issues are closed, and the previous steps are done:
* [x] [Tag the release](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#release-tag)
* [x] **(if major or minor release)**: Merge the release into develop
* [x] **(if it's the latest release)**: Merge the release into master
* [x] **(if patch release)**: Backport fixes
* [x] Update GIT_TAG for all official remote modules (if needed)
### 4. Publish and plan next release
* [x] [Prepare and upload source packages](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#prepare-and-upload-source-packages)
* [x] [Promote staging packages](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#promote-staging-packages)
* [x] [Update documentation](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#update-documentation)
* [x] Cookbook
* [x] Doxygen
* [x] WordPress page "Home" and "Download" pages
* [x] Upload OTB source archive to [Zenodo](https://zenodo.org/) to create a unique Digital Object Identifier (DOI)
* [x] [Update the SuperBuild archive](https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/wikis/Help-for-release-actions#superbuild-archive)
* [x] Release announcement
* [x] On the [forum](https://forum.orfeo-toolbox.org/)
* [x] On the [blog](https://www.orfeo-toolbox.org/blog/)
* [x] On [Twitter](https://twitter.com/orfeotoolbox)
* [x] Forward announcement to news_item@osgeo.org ([OSGeo news](https://www.osgeo.org/foundation-news/))
* [x] Remove public branches related to MR or bugfix merged before the release9.0.0Thibaut ROMAINThibaut ROMAIN