Skip to content

Cross platform packaging#587

Open
JoeZiminski wants to merge 48 commits into
mainfrom
cross-platform-packaging
Open

Cross platform packaging#587
JoeZiminski wants to merge 48 commits into
mainfrom
cross-platform-packaging

Conversation

@JoeZiminski
Copy link
Copy Markdown
Member

@JoeZiminski JoeZiminski commented Sep 2, 2025

This PR introduces cross-platform packaging of datashuttle. This requires both packaging datashuttle itself as well as vendoring a terminal emulator to deal with some rendering issues.

The packaging process is threefold:

  1. package datashuttle
  2. package a lightweight script that launches the vendored terminal emulated and runs the packaged datashutlte within it.
  3. wrap in an installer (inno setup on Windows, bundle on macOS, unsure on Linux, we might not wrap in an installer there).

Currently, this PR:

  1. Works on Windows
  2. Packaging works on macOS intel and silicon. However, the silicon version does not work on intel, and vice versa. A little more work should be done to investigate why this is (a single distribution is possible in some cases). If it's not possible, we will have two separate distributions. Still need to wrap in a installer bundle.
  3. Packaging is working on ubuntu, need to look into packaging on manylinux and whether to wrap in an installer.

Currently the architecture is:

  1. datashuttle.spec is shared between operating systems, and is the pyinstaller config file to control packaging of datashuttle itself. It will package datashuttle itself, by packaging the datashuttle_launcher.py script. This will then create a executable to be called in the vendored terminal emulator.
  2. There are three top-level packaging scripts, one for each OS (package_windows.py, package_macos.py, package_linux.py). These coordinate the download of the terminal emulator to vendor, packaging of datashuttle, then triggers the running of terminal_launcher_xxx.spec (one for macos, 'windows' is currently used by Windows and Linux) which in turn packages terminal_launcher.py. This handles how the vendored terminal should call the datashuttle executable.

So essentially, the idea is to package datashuttle, and then package a script that opens the vendored terminal and runs the datashuttle executable within it.

One the packaging is complete, we will need to extend the CI to run these installers, generate the artifact to distribute, and add it to the website.

Note that this PR is still in the prototype phase and requires some refactoring and tidying up.

TODO:
windows, check all raw "rclone" calls and make sure they use the new "get_command". Need to add this new convention to dev docs
It might be possible to use the cmd key on Wezterm!
config.send_composed_key_when_left_alt_is_pressed = true
config.macos_forward_to_ime_modifier_mask = "SHIFT|CTRL"

@JoeZiminski JoeZiminski force-pushed the cross-platform-packaging branch 5 times, most recently from 00cf5ae to acdaada Compare September 2, 2025 20:52
Comment thread .github/workflows/package_windows.yml Fixed
@JoeZiminski JoeZiminski force-pushed the cross-platform-packaging branch from 554cd8a to 5f06120 Compare February 24, 2026 00:34
Comment thread .github/workflows/package_windows.yml Fixed
Comment thread .github/workflows/package_windows.yml Fixed
Comment thread .github/workflows/package_macos.yml Fixed
Comment thread .github/workflows/package_windows.yml Fixed
@JoeZiminski JoeZiminski force-pushed the cross-platform-packaging branch from 077a919 to f079b5d Compare May 25, 2026 11:43
@JoeZiminski JoeZiminski force-pushed the cross-platform-packaging branch from ea4063d to 77b26d9 Compare May 25, 2026 11:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants