-
Notifications
You must be signed in to change notification settings - Fork 2
Creating a release
Wiki > Deployment > Creating a release
Make sure you understand how Java is licensed, so that we do not inadvertently make ISIS liable for licensing fees.
Text for release ticket:
As a developer I want an IBEX release so I can install it on the instrument machines for the start of machine physics on 26th.
Acceptance Criteria:
- [ ] [Pre Testing Steps](https://github.com/ISISComputingGroup/ibex_developers_manual/wiki/Creating-a-release#pre-testing)
- [ ] [Testing steps](https://github.com/ISISComputingGroup/ibex_developers_manual/wiki/Creating-a-release#testing)
- [ ] [Post Testing](https://github.com/ISISComputingGroup/ibex_developers_manual/wiki/Creating-a-release#post-testing)
- [ ] [Create a ticket to update dependencies to latest versions and test](https://github.com/ISISComputingGroup/ibex_developers_manual/wiki/Dependency-updates)
- [ ] [Create a ticket to give instrument demos](https://github.com/ISISComputingGroup/IBEX/wiki/Timetable-for-Instrument-Demos)
- [ ] Distribute release notes via email [Instrument scientist release email](https://github.com/ISISComputingGroup/ibex_developers_manual/wiki/Updating-Instrument-Machines#a-new-release)
Project is ready to be released not for a specific event, e.g. at the end of a sprint. Script Generator version number always differs to the client's.
-
Contact computing group to let us know of the upgrade. Find out anything that needs to be in the release that isn't and mark with
for release
label. (This does not prevent a release) -
Look at the released features in this branch Upcoming Changes and find the most significant level of change (i.e. is this cumulatively a major change, a minor change, or a patch?).
-
Update the upgrade script to include the latest version (this is done on master). Steps to do this are in Config Upgrader in section creating a production upgrade script
- After committing these changes to
master
on theEPICS-upgrade
submodule, don't forget to push the new submodule version tomaster
on the topEPICS
branch. This is needed to make sure you changes appear on the release branch created in the next step.
- After committing these changes to
-
Start a release branch so that the code is frozen (e.g.
Release_1.1.0
). You will need a branch for-
- Script generator release branch should start with
Release_Script_Gen_X.x.m
- Script generator release branch should start with
-
For EPICS submodules you should use:
-
git submodule update --init --recursive --remote
which sets all the repos to their latest version -
git status
and check if any submodules are listed asnew commits
. If this is so, it means a new submodule version has not been pushed (theEPICS repo checks
Jenkins build will likely be in error). Normally this module should be pushed and once therepo checks
build passes this step repeated. If you do not want the changes in this submodule, then you will likely need to checkout a desired commit on the top level and then do the above submodule update without--remote
. See advice if this doesn't make sense. -
git submodule foreach "(git checkout -b Release_X.x.x; git push -u origin Release_X.x.x)||true"
this creates a branch at the current checked out version for each repo and pushes it.
-
-
JSON_bourne. First check if changes have been made as JSON_bourne is rarely edited.
-
Update the version numbers:
-
GUI
- In
/uk.ac.stfc.isis.ibex.e4.client/plugin.xml
inOverview
tab setVersion:
to beX.x.m
- In
/uk.ac.stfc.isis.ibex.e4.client/pom.xml
add or edit a<version>
tag after the parent block (do not edit in parent, leave the version there as 1.0.0-SNAPSHOT) to have content to beX.x.m
(This tag may not be present and so will have to be added see as in this example) - Edit the
Bundle-Version
in/uk.ac.stfc.isis.ibex.e4.client/META-INF/MANIFEST.mf
to beX.x.m
- In
-
Script generator
- In
/uk.ac.stfc.isis.scriptgenerator.client/plugin.xml
inOverview
tab setVersion:
to beX.x.m
- In
/uk.ac.stfc.isis.scriptgenerator.client/pom.xml
create a new<version>
tag (not in parent, just after its closing tag) and give it content of beX.x.m
(e.g. see here)
- In
-
EPICS
- In
EPICS\ioc\master\INSTETC\INSTETC-IOC-01App\Db\svn-revision.db.tmpl
editfield(VAL, "0.0.0.$WCREV$")
to befield(VAL, "X.x.m.$WCREV$")
- NB this has to be committed on a branch in IOC and then this submodule commit has to be added to the EPICS release branch
- In
-
Genie Python
-
...\Python\Lib\site-packages\genie_python\version.py
editVERSION = "0.0.0.qualifier"
to VERSION = "X.x.m"
-
-
-
Commit your changes and push.
-
For the builds
ibex_gui_release
,genie_python_release
,scriptgenerator_release
andEPICS_release
, do the following:- Find the release build pipeline in Jenkins
- Click "Scan repository". It should find the new release branch and queue a build.
- The release build for script generator will be created in
P:\Kits$\CompGroup\ICP\Releases\script_generator_release\X.x.m
- The release builds for the rest will be created in
P:\Kits$\CompGroup\ICP\Releases\X.x.m
-
Check that all of the merged tickets have also had their release notes merged then move the changes which have been merged into the release from the upcoming page to a new release notes page for the version. Whilst doing this make sure that the release notes are as understandable as possible.
-
Create a released version in the releases table (including link to release notes)
-
Update the "latest stable release" link on the IBEX wiki homepage
-
Find dependencies which have been updated since last release and add them to the bottom of the release notes. Particularly make sure that you run a
pip freeze
on a cleanly releasedgenie_python
to give you the python dependencies list. -
Update the user manual with any relevant changes
One or more people should do manual system tests, using this page.
These steps should only be done once all changes to a release have been made and we are ready to deploy. Here we are creating a tag which will become inconsistent if further changes are made to the release branch. Hence it is important to delete the relevant release branch after it has been tagged.
-
Create a release tag in the EPICS, ibex_gui, genie_python and JSON_bourne repositories. For each repo
- Go to
[REPO_URL]/releases
, e.g.https://github.com/ISISComputingGroup/ibex_gui/releases
- Click
Draft a new release
- Enter the tag version in the format
vX.x.p
and target the release branch - Enter the title
Release version X.x.p
- Add a link to the release notes in the description
- Delete the release branch once the release and tag has been created.
- Go to
-
Create release tag from the release branch for each submodules in EPICS, then delete the release branch. To do this, run the following two git commands in top level EPICS (replace
X.x.x
with the release number):-
git submodule foreach --recursive "git fetch && git tag Release_ibex_X.x.x origin/Release_X.x.x || exit 0"
// Create tag -
git submodule foreach --recursive "git push --tags && git push -d origin Release_X.x.x || exit 0"
// Push tags and delete release branch
Note: you may need to run
git config fsck.badEmail ignore
for the above step -
-
Make sure any changes on the release branch are merged back onto master (except version numbering)
-
Consider which instruments need this release:
- Breaking release: upgrade everyone
- Big improvement: upgrade everyone if there is a big improvement that everyone will benefit from
- Standard release: upgrade instruments that need updates, i.e. they need a newly released feature, and all those that are in the current release group, see column in instruments table. Note on the release ticket which instruments need to be released to using checkboxes (one for start and one for finish).
-
Deploy a new JSON_bourne if required see here
For any release in which GUI version increments but server version does not, ensure the previous server version is added to the release folder via symbolic links or junctions, see this ticket.
The is a release when a change needs to be made between standard releases; i.e. a standard release is inappropriate because it includes lots of code which has not been through a code freeze and test.
- Follow all Pre Testing steps above except:
- For step 4 (creating the release branch) instead of creating from master create it from the latest release tag
- Update GUI Java JRE
- Finding the most significant change
- Updating the MySQL and Java being deployed
- Is the code for the bug/enhancement already written?
- No: Make the changes on the branch.
- Yes: Cherry pick commits needed from the branch with the written code
- Test
- Release as per a standard release but
- Use this branch instead of master
- Only include the change you have made in the release notes
- Copy the release notes issues into the development page
- Merge the new code back into master
- Test and merge the change into master
- Create a release branch in the submodule (if it doesn't exist)
- Navigate to EPICS in github
- navigate to the submodule
- Create new branch (this means it will be branched from the release point)
- Switch the branch of the submodule:
git checkout Release_X.x.m
- Pull the latest release branch:
git pull
- Merge in the ticket
git merge XXX
- push that branch
- cd to EPICS
- checkout release branch and pull
- update submodule reference, commit and push.