Skip to content

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

git tag vX.Y.Z

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.

git push origin vX.Y.Z

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:

sign.sh OmegaT_6.1.0_Beta_Windows_Without_JRE.exe OmegaT_6.1.0_Beta_Windows_Without_JRE_Signed.exe

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):

signtool sign /n "[1]" /t [2] /fd [3] /v [4]

  • [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:

./gradlew macNotarize

When the confirmation email arrives, do:

./gradlew macStapledNotarizedDistZip

Publish to SourceForge Files.

10. Set default downloads

  1. Go to SourceForge Files
  2. Navigate to the directory for this release
  3. For each platform: click the ⓘ button on the representative download for the platform
  4. Select the radio button for the platform under the Default Download For label
  5. Click Save

11. Publish the manual and Javadoc

./gradlew publishManual publishJavadoc

14. Publish to Maven Central

./gradlew publish

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.

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:

./gradlew publishVersion

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.