...
The Policy Framework release process is complex, time-consuming, and tedious. In the release process, the maven repositories and docker images must be released in the order shown in the diagram above: Blue-->Green-->Pink-->Yellow→Purple. In addition, the references for the repository layering and the parent Docker image file references must be set to release references before staging and back to snapshot references after staging.
Release Scripts
A set of scripts have been developed to make the release process somewhat less tedious. The scripts are located in the policy/parent repo here.
The scripts guide one through the release process. The scripts:
- Run each step in the release process as a sequence of release phases
- Act on pom.xml, Docker, version.properties, and pf_release_data.csv files, changing the references in those files as is required for each phase in a release
- Generate the commits in Gerrit for each phase of the release
- Work on all branches from Honolulu on
- Execute a normal release, where there are no special cases like repositories or docker images being added or removed
The scripts do not:
- Provide a fully automatic release, manual checking and submitting of commits is still required
- Deal with all possible permutations and combinations of releases
- Guarantee that there are not bugs in the scripts, manual oversight is required
The scripts make the following assumptions:
- All references between Policy Framework Maven modules are in the root POM in each repository
- All references between Policy Framework Maven modules are controlled by the following properties in root pom.xml files
policy.common.version or version.policy.common: policy/common
policy.models.version or version.policy.models: policy/models
policy-drools-pdp.version or version.policy.drools-pdp: policy/drools-pdp
- policy-apex-pdp.version or version.policy.apex-pdp: policy/apex-pdp
- All files that match the regular expression '*Docker*' and have their base image matching the regular expression 'FROM onap\/policy-j[d|r][k|e]-alpine:)[0-9]*.[0-9]*.[0-9].*$' will have their base image changed to the appropriate policy-jre-alpine or policy-jdk-apline version for the phase in question
Performing an Interim Release
An Interim Release is where the all the Maven artifacts and Docker images are released on the current branch and and the snapshot version of the repositories is stepped.
Branching a Release
An Interim Release is where the all the Maven artifacts and Docker images are released on the current branch and and the snapshot version of the repositories is stepped.
Appendix I: Release Script Usage
Script | Description |
---|
bumpSnapshots.sh | bumpSnapshots.sh - generate commits to bump the snapshot version and update references to snapshot references on any repos that need to be bumped or updated
usage: bumpSnapshots.sh [-options]
options -h - this help message -d data_file - the policy release data file to use, defaults to './pf_release_data.csv' -l location - the location of the policy framework repos on the file system, defaults to './' -i issue-id - issue ID in the format POLICY-nnnn
examples: bumpSnapshots.sh -l /home/user/onap -d /home/user/data/pf_release_data.csv -i POLICY-1234 bump snapshots on the repos at location '/home/user/onap' using the release data in the file '/home/user/data/pf_release_data.csv' |
generateCommit.sh | generateCommit.sh - generates a new commit or a patch on an existing commit for PF releases
usage: generateCommit.sh [-options]
options -h - this help message -l location - the location of the policy framework repos on the file system, defaults to './' -r repo - the policy repo to which to commit -i issue-id - issue ID in the format POLICY-nnnn -e commit-header - the header for the commit -m commit-message - the message body for the commit
example: generateCommit.sh -l /home/git/onap -r policy/pap -i POLICY-1234 -e commit-header -m commit-message create a new commit or update an existing commit on policy/pap with the given details |
getReleaseData.sh | getReleaseData.sh - gets information from the checked out Policy Framework repos for the release process
usage: getReleaseData.sh [-options]
options -h - this help message -b branch - the branch to release on, defaults to 'master' -d data_file - the policy release data file to create, defaults to './pf_release_data.csv' -l location - the location of the policy framework repos on the file system, defaults to './' |
mkart.sh | mkart.sh - create the release yaml file to release the current snapshot on the current repo
usage: mkart.sh [-options]
options -d - create a release yaml foie for a repo that has Docker images |
mkdock.sh | mkdock.sh - create the release container yaml file to release the docker images on the current repo
usage: mkdock.sh docker-container-name1 docker-container-name2 ... |
releasePhase.sh | releasePhase.sh - execute a certain policy framework release phase
usage: releasePhase.sh [-options]
options -h - this help message -d data_file - the policy release data file to use, defaults to './pf_release_data.csv' -l location - the location of the policy framework repos on the file system, defaults to './' -i issue-id - issue ID in the format POLICY-nnnn -p phase - the release phase, a positive integer
examples: releasePhase.sh -l /home/user/onap -d /home/user/data/pf_release_data.csv -i POLICY-1234 -p 3 perform release phase 3 on the repos at location '/home/user/onap' using the release data in the file '/home/user/data/pf_release_data.csv' |
releaseRepo.sh | releaseRepo.sh - release the specified repository by generating the release yaml file and the release commit
usage: releaseRepo.sh [-options]
options -h - this help message -d data_file - the policy release data file to use, defaults to './pf_release_data.csv' -l location - the location of the policy framework repos on the file system, defaults to './' -r repo - the policy repo to release -i issue-id - issue ID in the format POLICY-nnnn
examples: releaseRepo.sh -l /home/user/onap -d /home/user/data/pf_release_data.csv -r policy/common -i POLICY-1234 release the 'policy/common' repo at location '/home/user/onap' using the release data in the file '/home/user/data/pf_release_data.csv' |
releaseRepoImages.sh | releaseRepoImages.sh - release the docker images for the specified repository by generating the release yaml file and the release commit usage: releaseRepoImages.sh [-options]
options -h - this help message -d data_file - the policy release data file to use, defaults to './pf_release_data.csv' -l location - the location of the policy framework repos on the file system, defaults to './' -r repo - the policy repo to release -i issue-id - issue ID in the format POLICY-nnnn
examples: releaseRepoImages.sh -l /home/user/onap -d /home/user/data/pf_release_data.csv -r policy/common -i POLICY-1234 release the 'policy/common' repo at location '/home/user/onap' using the release data in the file '/home/user/data/pf_release_data.csv' |
updateOomImages.sh | updateOomImages.sh - generate an OOM commit to update the versions of Policy Framework images in values.yaml files
usage: updateOomImages.sh [-options]
options -h - this help message -d data_file - the policy release data file to use, defaults to './pf_release_data.csv' -l location - the location of the OOM repo on the file system, defaults to './' -i issue-id - issue ID in the format POLICY-nnnn
examples: updateOomImages.sh -l /home/user/onap -d /home/user/data/pf_release_data.csv -i POLICY-1234 update the version of policy framework images at location '/home/user/onap/oom' using the release data in the file '/home/user/data/pf_release_data.csv' |
updateParentRef.sh | updateParentRef.sh - update the parent reference in a POM file usage: updateParentRef.sh [-options] options -h - this help message -f pom_file - the POM file to update -g group_id - the parent group ID -a artifact_id - the parent artifact ID -v version - the parent version |
updateRefs.sh | updateRefs.sh - updates the inter-repo references in Policy Framework POM files
usage: updateRefs.sh [-options]
options -h - this help message -d data_file - the policy release data file to use, generated by the 'getReleaseData.sh' script, defaults to './pf_release_data.csv' -l location - the location of the policy framework repos on the file system, defaults to './' -r repo - the policy repo to update -p - update policy/parent references -c - update policy/common references -m - update policy/model references -o - update policy/drools-pdp references -x - update policy/apex-pdp references -k - update docker base images in Dockerfiles -f - update release data in policy parent -s - update release references to snapshot references, if omitted, snapshot references are updated to release references
examples: updateRefs.sh -pcm -r policy/pap update the parent, common, and models references of policy/pap to the current released version
updateRefs.sh -c -m -s -r policy/api update the common and models references of policy/api to the current snapshot version |
...