This process describes the pre-release steps:
Pre-release process
General Tasks
Agree on upcoming release (Community)
At some point in time, some member of the community thinks that it is time for a new release. If you think so, write an email to the dev@streampipes.apache.org list and ask if there is consensus on performing the next release.
Appoint release manager (Community)
Every release must have a release manager. Following up the agreement, some member of the Apache StreamPipes PPMC needs to volunteer as a release manager (RM). Usually, this is done by replying to the previous email on the upcoming release.
Agree on feature set for next release (Community)
Once a release manager has been found, the community discusses features that are not yet finished but should be part of the next release.
Prepare release testing
Create test checklist (Release Manager)
To track things that have been tested by community members, a checklist can be used to indicate things that work or do not work.
Create a new checklist by copying the template from Pre-Release Checklist to a new page that indicates the next release version.
Setup release branches (Release Manager)
First, update the RELEASE_NOTES in incubator-streampipes (dev) by adding significant new features from JIRA that correspond to the new release version.
incubator-streampipes
Update active UI modules.
Depending on the features that should be released, the UI config for active modules needs to be updated. If the feature set changes, open the ui/deployment/rel/config.yml file and edit the list of active modules:
login: backgroundImage: 'deployment/rel/img/background.png' logo: 'deployment/rel/img/logo.png' logo-right: 'deployment/rel/img/sp-logo-right-white.png' modules: - spEditor - spPipelines - spConnect - spDashboard - spAppOverview - spAdd - spMyElements - spDataExplorer - spConfiguration
Commit and push these changes to dev
If needed, change the current SNAPSHOT version to the version that is planned for the upcoming release:
# Make sure to only use a SNAPSHOT version here mvn versions:set -DnewVersion=0.66.0-SNAPSHOT # Check the output and briefly check if all changed version numbers in the POM files are ok mvn versions:commit # Manually change the project version in the package.json file in the ui/ folder. # Push the changes to dev
Afterwards, create a new branch for the upcoming release candidate:
# Create a release branch by replacing VERSION with the intended release version mvn release:branch -DbranchName=rel/VERSION -DautoVersionSubmodules=true
The maven-release-plugin will ask you to provide the version number of the next development version (use the new minor version, not the suggested patch version). Afterwards, a new branch will be created and the version number in dev is increased to the next development version. All changes will be automatically pushed by the plugin.
In the release branch (and afterwards also in the updated dev branch, update the sp.version property in the maven archetypes (in the archetypes folder, all pom.xml templates in src/main/resources/archetype-resources)
<properties> <sp.version>0.66.0-SNAPSHOT</sp.version> </properties>
incubator-streampipes-installer
Create a release branch from dev:
# Create a release branch from dev git branch rel/VERSION #e.g., git branch rel/0.66.0 # checkout and push the release branch # checkout dev and update version ./upgrade_versions.sh NEW_SNAPSHOT_VERSION git push origin
Checkout dev and change the aforementioned versions to the next release version (e.g., 0.67.0-SNAPSHOT)
Prepare test setup (Release Manager)
During the test phase, StreamPipes contributors should test the pre-release candidate (the branch we've just built) based on the provided docker-compose files for validation.
In case modules are changed, update the docker-compose files in incubator-streampipes and incubator-streampipes-extensions by adding/modifying/removing defined services.
Perform technical release readiness assessment
Requirements
The following build tools need to be installed to properly test a release candidate:
- JDK (starting from v0.70, JDK 11 is the new minimum java version)
- Maven (tested with 3.6)
- NodeJS + NPM (tested with v12+/ v6+)
- Docker + Docker-Compose
Checkout release branches (Community)
First, create a new folder and checkout the release branches of incubator-streampipes:
# Clone & checkout a clean copy from the release branch mkdir test-streampipes-rc && cd test-streampipes-rc git clone git@github.com:apache/incubator-streampipes.git # ALTERNATIVE: git clone https://github.com/apache/incubator-streampipes.git cd incubator-streampipes # Change VERSION to the current release branch git checkout rel/VERSION
Setup test environment (Community)
Now we'll build the system from source and run a test instance in Docker. Note that the docker-compose file used here should only be used for final release testing, as no volumes are defined for persistence.
incubator-streampipes
# Open incubator-streampipes folder cd incubator-streampipes # Run Maven Build, use install to make core artifacts available to the extensions build later mvn clean install
# Run NPM Build cd ui npm install npm run build-rc
# Go back to the main directory of incubator-streampipes docker-compose up # ALTERNATIVE: docker-compose up -d. # Start container in background. # This will build the Docker images for the streampipes-backend and the streampipes-connect-master modules. In addition, it will start several 3rd party Docker containers that are # mandatory for StreamPipes, e.g., CouchDB and Consul. Again, be aware that this docker-compose configuration does not include volume persistency and should therefore only be used for # short-term testing. # Force rebuild of images before starting (e.g. after bug fix): docker-compose build
incubator-streampipes-extensions
Now we'll build and start the extensions project:
# Open incubator-streampipes-extensions folder cd incubator-streampipes-extensions # Run Maven Build mvn clean package docker-compose up # ALTERNATIVE: docker-compose up -d. # Start container in background # Force rebuild of images before starting (e.g. after bug fix): docker-compose build
This will start all extensions (except Flink modules) and you're ready for testing!
Test system (Community)
Go to your browser and open the StreamPipes UI at localhost:80.
Perform the installation steps (all pipeline elements should be automatically installed) and test the system according to the Pre-Release Checklist. Mark everything you have checked in the pre-release checklist that has been created for the upcoming release.
Fix critical issue (Community)
If you find a release-blocking issue during testing, do the following steps:
- Create an issue in JIRA
- If you plan to fix the issue by yourself:
- Fix the issue in the release branch (e.g., rel/0.66.0)
Cherry-pick branches into dev (Community/Committer)
- All changes made to the release branch should be cherry-picked back into dev (git log / git cherry-pick COMMIT_HASH)