From aab2a15f69fd2b7bc3d5f2663a18f5878af8cb2e Mon Sep 17 00:00:00 2001 From: Crispin Tschirky Date: Fri, 5 May 2023 10:40:54 +0200 Subject: [PATCH] Build of MacOS app bundle NanoVNASaver.app (#634) * add icon for MacOS based on icon_48x48.png * add macos build script to build NanoVNASaver.app for current architecture * add releas app action to build: NanoVNASaver.app-x86_64.tar.gz action --- .github/workflows/release_macos_app.yml | 43 ++++++++++++++++++++++++ build-macos-app.sh | 21 ++++++++++++ icon_48x48.icns | Bin 0 -> 6955 bytes 3 files changed, 64 insertions(+) create mode 100644 .github/workflows/release_macos_app.yml create mode 100755 build-macos-app.sh create mode 100644 icon_48x48.icns diff --git a/.github/workflows/release_macos_app.yml b/.github/workflows/release_macos_app.yml new file mode 100644 index 0000000..ceb6d64 --- /dev/null +++ b/.github/workflows/release_macos_app.yml @@ -0,0 +1,43 @@ +name: Mac Release App + +on: + push: + tags: + - v* + workflow_dispatch: + +jobs: + release: + runs-on: macos-latest + + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: 3.11 + - name: Get Target Environment + id: targetenv + run: | + echo "arch=`uname -m`" >> "$GITHUB_ENV" + + - name: Install dependencies and pyinstall + run: | + python -m pip install pip==23.0.1 setuptools==67.6.0 + pip install -r requirements.txt + pip install PyInstaller==5.9.0 + + - name: Build binary + run: | + python setup.py -V + pyinstaller --onedir -p src -n NanoVNASaver nanovna-saver.py --window --clean -y -i icon_48x48.icns + tar -C dist -zcf ./dist/NanoVNASaver.app-${{ env.arch }}.tar.gz NanoVNASaver.app + echo "Created: NanoVNASaver.app-${{ env.arch }}.tar.gz" + + - name: Archive production artifacts + uses: actions/upload-artifact@v1 + with: + name: NanoVNASaver.app-${{ env.arch }}.tar.gz + path: dist/NanoVNASaver.app-${{ env.arch }}.tar.gz diff --git a/build-macos-app.sh b/build-macos-app.sh new file mode 100755 index 0000000..d0397b6 --- /dev/null +++ b/build-macos-app.sh @@ -0,0 +1,21 @@ +# Builds a NanoVNASaver.app on MacOS +# ensure you have pyqt >=6.4 installed (brew install pyqt) +# +export VENV_DIR=macbuildenv + +# setup build venv +python3 -m venv ${VENV_DIR} +. ./${VENV_DIR}/bin/activate + +# install required dependencies (pyqt libs must be installed on the system) +python3 -m pip install pip==23.0.1 setuptools==67.6.0 +pip install -r requirements.txt +pip install PyInstaller==5.9.0 + +python3 setup.py -V + +pyinstaller --onedir -p src -n NanoVNASaver nanovna-saver.py --window --clean -y -i icon_48x48.icns +tar -C dist -zcf ./dist/NanoVNASaver.app-`uname -m`.tar.gz NanoVNASaver.app + +deactivate +rm -rf ${VENV_DIR} \ No newline at end of file diff --git a/icon_48x48.icns b/icon_48x48.icns new file mode 100644 index 0000000000000000000000000000000000000000..f43f7926d0b865c6add3eade922a8d3f08ccfa07 GIT binary patch literal 6955 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 KO$GkXD)3)%=F<}Z literal 0 HcmV?d00001