Release Procedure
0. Decide a release version
See Versioning for details about a versioning scheme.
1. Pre-announce on an omegat-dev mailing list
Especially if there is new translatable material, give the L10N team some lead time to update translations. It is better to announce the due date at the start of the release engineering, Step 3, instead of the planned release date.
email template:
Subject: release plan for OmegaT 6.x
Hi all.
The planed changes for releasing 6.x are now all merged,
and latest weekly release looks good for the general release.
We are now starting the release process.
Please check a latest release procedure at
https://omegat.readthedocs.io/en/latest/90.ReleaseProcedure/
Due dates will be as follows:
- Feature freeze: today
- Documentation updating phase
- Manual content freeze: 14, Dec.
- UI Localisation freeze: 20, Dec.
- Manual localisation freeze: 20, Dec.
- Update JRE versions to up-to-date: 20, Dec.
- Last weekly release for the candidate: 21, Dec.
- Check and confirmation
- Ask confirmation for the latest weekly as the genral release
- Release build and announce: 24, Dec.
- git tag the source
- trigger CI/CD for the release
- Update web site download links
- Send announce to users ML.
2. Choose the bundled JREs and update their major versions
See if an update is available for the bundled JREs,
and update ci/azure-pipelines/release_steps.yml
if necessary.
If you change a bundled JREs version, you must also change build.gradle
which contain the corresponding file names.
For example
// Definition of bundled JRE file names
def assetDir = findProperty('assetDir') ?: '../'
def macJRE = fileTree(dir: assetDir, include: 'OpenJDK17U-jre_x64_mac_*.tar.gz')
def armMacJRE = fileTree(dir: assetDir, include: 'OpenJDK17U-jre_aarch64_mac_*.tar.gz')
def linux64JRE = fileTree(dir: assetDir, include: 'OpenJDK17U-jre_x64_linux_*.tar.gz')
def linuxArm64JRE = fileTree(dir: assetDir, include: 'OpenJDK17U-jre_aarch64_linux_*.tar.gz')
def windowsJRE32 = fileTree(dir: assetDir, include: 'OpenJDK17U-jre_x86-32_windows_*.zip')
def windowsJRE = fileTree(dir: assetDir, include: 'OpenJDK17U-jre_x64_windows_*.zip')
If you want to bundle the Java 21 Long Term Support JRE, you need to change
OpenJDK11U
to OpenJDK21U
.
3. Check manual versions
There is a version definition in doc_src/(lang)/version_(lang).properties
files in each language folder.
Check whether it matches the vernb
variable in doc_src/(lang)/manualvariables.mod
.
Exercise caution, because it is currently not unified and its parity is not checked.
4. Test and integration test
Ensure that ./gradlew check
completes successfully.
Also ensure integration test completes successfully. See [34.IntegrationTest] for details.
docker-compose -f docker-compose.yml build
docker-compose -f docker-compose.yml up --abort-on-container-exit
docker-compose down
These tests are done in Weekly Release build CI/CD scripts. Please check the latest weekly build succeed.
5. Update files with the release version
/src/org/omegat/Version.properties
It should have already had a major and minor version numbers that we expect for.
The Development version may have "_Beta" and you may need to update (remove) it according to the step-0 decision of a version number.
/release/changes.txt
You should update two parts.
- Version header (including date!)
- "[current] vs [previous]" line
and then commit the change.
git add src/org/omegat/Version.properties
git add release/changes.txt
git commit -sm 'Release version x.x'
6. Tag release revision
7. push commits and tags
When you are working on a release process of version 6.0 and later versions, the release pipeline will be automatically run on Azure DevOps when you push tag on GitHub.
8. Add signature to Windows distribution files locally, and publish.
First, you should download published non-signed windows binaries from source forge.
Second, you should prepare your certification PEM file provided by CA company, such as Comodo, and Certum.
There are two ways to sign the executable depends on what OS you use. Please select A or B.
A. Signing code on linux
Insert your hardware security module (HSM) USB dongle into the PC. Prepare the shell script to sign executables that will be like as follows;
#!/bin/sh
infilie=$1
outfile=$2
toolexe=osslsigncode
engine=/usr/lib/x86_64-linux-gnu/engines-3/pkcs11.so
module=/opt/proCertumCardManager/sc30pkcs11-3.0.6.68-MS.so
# module=/usr/lib/x86_64-linux-gnu/engines-3/pkcs11.so
signer="Open Source Developer, Hiroshi Miura"
certs=cert/25044ce4fc92c7b98fcafdd60f46c724.pem
## execution
$toolexe sign -pkcs11engine $engine -pkcs11module $module -h sha256 -t http://time.certum.pl -certs $certs -askpass -n "${signer}" -in $infile -out $outfile
You will need to change the module
line to use the path of
the driver SO file you have downloaded from the CA provider.
Similarly, update the certs
line with the path to your PEM file.
After that, run the following command:
There are three files to sign, the _Without_JRE
, _Windows
and _Windows_64
variants.
B. Signing code on Windows
First, install Windows SDK from Windows Dev center. All operations performed with Code Signing require a connected reader together with a card that contains a Code Signing certificate.
To sign the file, use the following command on the command line (cmd.exe):
- [1] Name or part of the name of the certificate's owner, which can be checked in the system tool certmg.msc
- [2] Timestamp URL Address. When use Certum http://time.certum.pl For comodo http://timestamp.comodoca.com
- [3] The name of the signature algorithm. Available sha1 and sha256,
- [4] The path to the file to be signed.
A file is updated with signature. You should keep an original file for backup.
9. Build a notarized Mac distribution file locally, and publish
First, make sure the local JRE is up-to-date.
Sign and submit binary to Apple:
When the confirmation email arrives, do:
Publish to SourceForge Files.
10. Set default downloads
- Go to SourceForge Files
- Navigate to the directory for this release
- For each platform: click the ⓘ button on the representative download for the platform
- Select the radio button for the platform under the Default Download For label
- Click Save
11. Publish the manual and Javadoc
14. Publish to Maven Central
Then log onto Sonatype Nexus and publish the release.
12. Modify the website
Some releases will impact the website structure. Make sure the website is up to date.
13. Verify all the user facing links
- Official site: omegat.org
- Documentation site: omegat-standard
- JavaDoc site: OmegaT API
- Sourceforge site: files section
14. Announce to News, user group
15. Push a new version for version check
If no catastrophic problems are reported with the new version, once the website has been updated, bump the version check master file:
Consider opening a ticket on the website to coordinate timing.
16. Cleanup
- Bump version in
Version.properties
,changes.txt
- Set fixed bug tickets and implemented RFEs to
closed-fixed
- Update ticket milestones if necessary
Note: Don't "clean up" old releases by moving them out of the way. It is important that the distfile URLs remain stable.