How to create a new release for the GT Vm from a new release of the Pharo Vm

The instructions below are for creating a new release of the GT VM, after a new Pharo VM is released.

Relevant repositories:

Clone the GT and Pharo VMs

First we clone the GT VM and update the Pharo VM submodule.

        
git clone git@github.com:feenkcom/gtoolkit-vm.git
cd gtoolkit-vm
git submodule update --init --recursive
        
      

Fetch branches

Next we get all the branches and tags from the Pharo VM into the fork.

        
cd pharo-vm
git remote add pharo git@github.com:pharo-project/pharo-vm.git
git fetch pharo
        
      

Create branch

We select here the tag that we want in the Pharo VM and create a new branch based on it

        
git checkout v10.0.9 
git switch -c ph10009.00
        
      

Merge changes

In the new branch we need to merge our custom changes from the previous stable branch (initially origin/ph10004, in this example origin/ph10008.00)

        
git merge origin/ph10008.00
        
      

Push changes in the Pharo VM fork

We first push our changes in the fork of the Pharo VVMm, including tags. This should be done in the pharo-vm directory.

        
git push --set-upstream origin ph10009.00
git push --tags
        
      

Commit&push gtoolkit-vm

This will update the pharo-vm submodule to the new branch. Should be done in the gtoolkit-vm directory

        
cd ..
git add pharo-vm
git commit -m "update Pharo VM module to xyz"
git push
        
      

Other scripts

Building a GT vm using gtoolkit-vm-builder

gtoolkit-vm-builder should be downloaded from gtoolkit-vm-builder

Without the --release option a debug vm is created.

        
./gtoolkit-vm-builder \
--release \
    --app-name 'GlamorousToolkit' \
    --identifier 'com.gtoolkit' \
    --author "feenk gmbh <contact@feenk.com>" \
    --libraries-versions libraries.version \
    --libraries boxer clipboard filewatcher gleam glutin pixels process skia winit test-library cairo crypto freetype git sdl2 ssl
        
      

Building a new image locally

Using all the default settings, we can do a local build:

        
./gt-installer --verbose local-build
        
      

This uses the installer to create a new image by using a local vm and a specific image

        
./gt-installer --verbose --app-cli-binary /Users/Documents/GlamorousToolkit.app/Contents/MacOS/GlamorousToolkit-cli local-build --image-url https://files.pharo.org/image/110/Pharo11-SNAPSHOT.build.713.sha.05938f2.arch.64bit.zip --loader cloner
        
      

This creates a release build using a custom vm and image, without opening the world

        
./gt-installer --verbose --app-cli-binary /Users/Documents/GlamorousToolkit.app/Contents/MacOS/GlamorousToolkit-cli release-build --image-url https://files.pharo.org/image/110/Pharo11-SNAPSHOT.build.713.sha.05938f2.arch.64bit.zip --no-gt-world
        
      

Running all examples as on the CI:

        
./gt-installer --verbose --workspace glamoroustoolkit test --disable-deprecation-rewrites --skip-packages Sparta-Cairo Sparta-Skia GToolkit-RemoteExamples-GemStone
        
      

Signing the VM locally on MacOS for development

When building VMs locally they need to be signed to work correctly. For development we can sign them locally using the ‘-’ signing identity. This is an ad-hoc identity that does not have to be checked with Apple.

        
codesign --force --deep --sign - pharo-vm/Pharo.app