Skip to content

Commit 64c80ea

Browse files
committed
Add macOS packaging and maccan support
1 parent 4c0a11c commit 64c80ea

3 files changed

Lines changed: 37 additions & 8 deletions

File tree

.github/workflows/kvaser-bridge-build.yml

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,10 @@ jobs:
2323
include:
2424
- os: windows-latest
2525
artifact_name: kvaser-bridge-windows
26-
binary_name: kvaser-bridge.exe
26+
release_asset: kvaser-bridge-windows.exe
2727
- os: macos-latest
2828
artifact_name: kvaser-bridge-macos
29-
binary_name: kvaser-bridge
29+
release_asset: kvaser-bridge-macos.app.zip
3030

3131
steps:
3232
- name: Checkout code
@@ -49,11 +49,25 @@ jobs:
4949
[[ -f build.spec ]] || { echo 'Missing kvaser-bridge/build.spec in repository checkout.'; exit 1; }
5050
pyinstaller --clean --noconfirm build.spec
5151
52+
- name: Prepare Windows release asset
53+
if: runner.os == 'Windows'
54+
shell: pwsh
55+
run: |
56+
Copy-Item -Path "kvaser-bridge/dist/kvaser-bridge.exe" -Destination "kvaser-bridge/dist/kvaser-bridge-windows.exe" -Force
57+
58+
- name: Package macOS app bundle
59+
if: runner.os == 'macOS'
60+
shell: bash
61+
run: |
62+
cd kvaser-bridge/dist
63+
[[ -d kvaser-bridge.app ]] || { echo 'Expected macOS app bundle not found.'; exit 1; }
64+
ditto -c -k --sequesterRsrc --keepParent kvaser-bridge.app kvaser-bridge-macos.app.zip
65+
5266
- name: Upload binary artifact
5367
uses: actions/upload-artifact@v4
5468
with:
5569
name: ${{ matrix.artifact_name }}
56-
path: kvaser-bridge/dist/${{ matrix.binary_name }}
70+
path: kvaser-bridge/dist/${{ matrix.release_asset }}
5771
if-no-files-found: error
5872
retention-days: 30
5973

@@ -128,8 +142,8 @@ jobs:
128142
shell: bash
129143
run: |
130144
gh release upload "${{ steps.meta.outputs.tag }}" \
131-
release-assets/kvaser-bridge-macos/kvaser-bridge \
132-
release-assets/kvaser-bridge-windows/kvaser-bridge.exe \
145+
release-assets/kvaser-bridge-macos/kvaser-bridge-macos.app.zip \
146+
release-assets/kvaser-bridge-windows/kvaser-bridge-windows.exe \
133147
--clobber
134148
135149
attach-release-assets:
@@ -150,5 +164,5 @@ jobs:
150164
with:
151165
tag_name: ${{ github.event_name == 'release' && github.event.release.tag_name || inputs.release_tag }}
152166
files: |
153-
release-assets/kvaser-bridge-macos/kvaser-bridge
154-
release-assets/kvaser-bridge-windows/kvaser-bridge.exe
167+
release-assets/kvaser-bridge-macos/kvaser-bridge-macos.app.zip
168+
release-assets/kvaser-bridge-windows/kvaser-bridge-windows.exe

kvaser-bridge/build.spec

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import platform
1212

1313
is_windows = platform.system() == 'Windows'
14+
is_macos = platform.system() == 'Darwin'
1415

1516
a = Analysis(
1617
['src/main.py'],
@@ -21,6 +22,7 @@ a = Analysis(
2122
],
2223
hiddenimports=[
2324
'can.interfaces.kvaser',
25+
'can.interfaces.maccan',
2426
],
2527
hookspath=[],
2628
runtime_hooks=[],
@@ -39,6 +41,14 @@ exe = EXE(
3941
debug=False,
4042
strip=False,
4143
upx=True,
42-
console=not is_windows,
44+
console=not (is_windows or is_macos),
4345
onefile=True,
4446
)
47+
48+
if is_macos:
49+
app = BUNDLE(
50+
exe,
51+
name='kvaser-bridge.app',
52+
icon=None,
53+
bundle_identifier='org.westernformularacing.kvaserbridge',
54+
)

kvaser-bridge/src/bridge.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,11 @@
2424
import websockets
2525
from websockets.server import serve
2626

27+
28+
def open_maccan_bus(channel, bitrate: int) -> can.BusABC:
29+
"""Open a CAN bus via the maccan interface (macOS, Peak USB adapter)."""
30+
return can.interface.Bus(interface='maccan', channel=channel, bitrate=bitrate)
31+
2732
import config
2833

2934
# TLS cert/key: bundled with PyInstaller (sys._MEIPASS) or alongside this file

0 commit comments

Comments
 (0)