Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Multiple bugfixes and tweaks around Github actions. #147

Merged
merged 10 commits into from
May 14, 2024
191 changes: 111 additions & 80 deletions .github/workflows/actions.yml
Original file line number Diff line number Diff line change
@@ -1,99 +1,130 @@
name: 'Build NSO-RPC - x86_64'
---
name: Build NSO-RPC - x86_64
on:
release:
types: [published]

types:
- published
pull_request:
types:
- opened
- synchronize
jobs:
build-x86_64:
name: 'Build NSO-RPC - x86_64'
runs-on: ${{ matrix.os }}
build-windows:
name: Build NSO-RPC - Windows
runs-on: windows-2022
strategy:
fail-fast: false
matrix:
os: ['windows-latest', 'ubuntu-latest', 'macos-latest']
pyqt_version:
- pyqt6
- pyqt5
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v3
with:
python-version: 3.11.4

# Windows Build
- name: "Build"
if: matrix.os == 'windows-latest'
run: |
cd scripts &&
python -m pip install pyqt6 &&
./build.bat

- name: "Upload Build"
if: matrix.os == 'windows-latest'
uses: softprops/[email protected]
with:
files: client/dist/NSO-RPC.exe

# Linux Build
- name: "Upload script"
if: matrix.os == 'ubuntu-latest'
uses: softprops/[email protected]
with:
files: scripts/linux.sh

# MacOS Build
- name: "Build"
if: matrix.os == 'macos-latest'
run: |
cd scripts &&
python -m pip install pyqt6 &&
bash ./build.sh &&
cd ../client/dist &&
ln -s /Applications "Applications (admin)" &&
hdiutil create -fs HFS+ -srcfolder . -volname NSO-RPC mac-installer.dmg &&
zip -yr mac-portable.zip NSO-RPC.app/

- name: "Upload Build"
if: matrix.os == 'macos-latest'
uses: softprops/[email protected]
with:
files: |
client/dist/mac-installer.dmg
client/dist/mac-portable.zip
- uses: actions/checkout@v4

- uses: actions/setup-python@v5
with:
python-version: 3.11.4
- name: Build
run: |
python -m pip install ${{ matrix.pyqt_version }} &&
cd scripts &&
./build.bat
- name: Rename executable
if: matrix.pyqt_version == 'pyqt5'
run: mv client/dist/NSO-RPC.exe client/dist/NSO-RPC-qt5.exe
- name: Upload Build
if: github.event_name != 'pull_request'
uses: softprops/[email protected]
with:
files: |
client/dist/NSO-RPC*.exe
build-linux:
name: Build NSO-RPC - Linux
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: 3.11.4
- name: Upload script
run: |
cd scripts &&
chmod +x linux.sh
continue-on-error: false
- name: Upload Build
if: github.event_name != 'pull_request'
uses: softprops/[email protected]
with:
files: scripts/linux.sh
build-macos:
name: Build NSO-RPC - MacOS
runs-on: macos-12
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: 3.11.4
- name: Build
run: >
cd scripts &&
./build.sh &&
cd ../client/dist &&
bash ../../scripts/tests/macos_test.sh &&
rm output.log &&
ln -s /Applications "Applications (admin)" &&
hdiutil create -fs HFS+ -srcfolder . -volname NSO-RPC mac-installer.dmg &&
zip -yr mac-portable.zip NSO-RPC.app/
- name: Upload Build
if: github.event_name != 'pull_request'
uses: softprops/[email protected]
with:
files: |
client/dist/mac-installer.dmg
client/dist/mac-portable.zip
build-universal2:
name: 'Build NSO-RPC - Universal2'
runs-on: macos-latest
name: Build NSO-RPC - Universal2
runs-on: macos-12
steps:
- uses: actions/checkout@v3

# MacOS Universal Build
- name: "Install Python 3.11.4 and build NSO-RPC"
run: |
curl https://www.python.org/ftp/python/3.11.4/python-3.11.4-macos11.pkg -o python-3.11.4-macos11.pkg
sudo installer -verbose -pkg python-3.11.4-macos11.pkg -target / &&
alias python3=python3.11
cd scripts/macos-universal2 &&
bash ./build.sh &&
cd ../../client/dist &&
ln -s /Applications "Applications (admin)" &&
hdiutil create -fs HFS+ -srcfolder . -volname NSO-RPC mac-universal2-installer.dmg &&
zip -yr mac-universal2-portable.zip NSO-RPC.app/

- name: "Upload NSO-RPC Universal2 Build"
uses: softprops/[email protected]
with:
files: |
client/dist/mac-universal2-installer.dmg
client/dist/mac-universal2-portable.zip

- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: 3.11.4
- name: Install Python 3.11.4 and build NSO-RPC
run: >
curl https://www.python.org/ftp/python/3.11.4/python-3.11.4-macos11.pkg -o python-3.11.4-macos11.pkg &&
sudo installer -verbose -pkg python-3.11.4-macos11.pkg -target / &&
alias python3=python3.11 &&
cd scripts/macos-universal2 &&
bash ./build.sh &&
cd ../../client/dist &&
bash ../../scripts/tests/macos_test.sh &&
rm output.log &&
ln -s /Applications "Applications (admin)" &&
hdiutil create -fs HFS+ -srcfolder . -volname NSO-RPC mac-universal2-installer.dmg &&
zip -yr mac-universal2-portable.zip NSO-RPC.app/
- name: Upload NSO-RPC Universal2 Build
if: github.event_name != 'pull_request'
uses: softprops/[email protected]
with:
files: |
client/dist/mac-universal2-installer.dmg
client/dist/mac-universal2-portable.zip
get-hashes:
runs-on: "ubuntu-latest"
needs: ["build-x86_64", "build-universal2"]
name: Generate Checksums
runs-on: ubuntu-22.04
needs:
- build-windows
- build-linux
- build-macos
- build-universal2
if: github.event_name != 'pull_request'
steps:
- name: "Generate checksums.txt"
- name: Generate checksums.txt
uses: MCJack123/ghaction-generate-release-hashes@v4
with:
hash-type: sha256
file-name: checksums.txt
get-assets: true
- uses: softprops/action-gh-release@v0.1.15
- uses: softprops/action-gh-release@v2.0.4
with:
files: checksums.txt
22 changes: 16 additions & 6 deletions client/_version.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,25 @@
import os
import git


def get_version_info():
r = git.repo.Repo(search_parent_directories=True)
try:
# Get all tags sorted by commit date
tags = sorted(r.tags, key=lambda t: t.commit.committed_datetime, reverse=True)
version_info = tags[0].name
except IndexError:
try:
version_info = r.active_branch.name
except TypeError:
version_info = r.head.object.hexsha[:7]
return version_info


if __name__ == '__main__':
# Deletes current version.txt file
if os.path.exists('version.txt'):
os.remove('version.txt')

# Writes latest git version info to 'version.txt'
r = git.repo.Repo(search_parent_directories=True)
version_info = r.git.describe('--tags')
version_info = get_version_info()
with open('version.txt', 'w') as f:
f.write(version_info)
f.write('\n')
f.close()
56 changes: 47 additions & 9 deletions client/api/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,33 @@
import pickle


def getVersionRegex(html: str):
try:
# Attempt to determine the appropriate regex pattern with prefix
version_with_prefix = re.compile(r'Version\s*\s*(\d+\.\d+\.\d+)').search(html)
if version_with_prefix:
return version_with_prefix
except Exception as e:
print(f"Failed to determine regex pattern with prefix: {e}")

try:
# Attempt to determine an alternative regex pattern with prefix
version_without_space = re.compile(r'Version\s*(\d+\.\d+\.\d+)').search(html)
if version_without_space:
return version_without_space
except Exception as e:
print(f"Failed to determine alternative regex pattern with prefix: {e}")

try:
# Attempt to determine an alternative regex pattern without prefix
version_no_prefix = re.compile(r'(\d+\.\d+\.\d+)').search(html)
if version_no_prefix:
return version_no_prefix
except Exception as e:
print(f"Failed to determine regex pattern without prefix: {e}")
return None


def getAppPath():
# Check for macOS platform and NSO-RPC freeze status
if sys.platform.startswith('darwin') and hasattr(sys, 'frozen') and sys.frozen == 'macosx_app':
Expand Down Expand Up @@ -70,10 +97,10 @@ def getVersion():
else:
log('Failed to get Apple\'s store page after multiple retries.')
if r:
searchPattern = re.compile(r'Version\s*(\d\.\d\.\d)+')
version = searchPattern.search(r.text)
version = getVersionRegex(r.text)
if version:
return version.group(1)
app_version = version.group(1)
return app_version
return ''


Expand All @@ -97,11 +124,11 @@ def getVersion():

class API():
def __init__(self, session_token, user_lang, targetID, version):
pattern = re.compile(r'(\d.\d.\d)')
if not version or not re.search(pattern, version):
version_match = getVersionRegex(version)
if not version_match:
raise Exception('missing app version')
global nsoAppVersion
nsoAppVersion = version
nsoAppVersion = version_match.group(1)
self.headers = {
'X-ProductVersion': nsoAppVersion,
'X-Platform': 'iOS',
Expand Down Expand Up @@ -283,10 +310,21 @@ def __init__(self, userInfo, userLang, accessToken, guid):
self.na_id = userInfo['id']

self.imink = imink(self.na_id, self.accessToken, self.timestamp, self.guid, 1).get()
self.timestamp = int(self.imink['timestamp'])
self.guid = self.imink['request_id']

self.account = None
if 'error' in self.imink or self.imink.get('error') is not None:
iminkApiError = (
'Unable to authenticate with imink. \n\n'
'The F Calculation API may be experiencing issues or this build of NSO-RPC is outdated \n'
'Please try the most upto date build of NSO-RPC before submitting an issue. \n'
'Please check the website for more details: \n'
'https://status.imink.app/ \n'
)
raise RuntimeError(iminkApiError) from None
else:
self.timestamp = int(self.imink['timestamp'])
self.guid = self.imink['request_id']

self.account = None

def loginToAccount(self):
route = '/v3/Account/Login'
Expand Down
5 changes: 4 additions & 1 deletion scripts/build.sh
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
#!/bin/bash
python3 -m venv --upgrade-deps venv
source venv/bin/activate
cd ../client
python3 -m pip install -r requirements.txt py2app GitPython
python3 -m pip install -r requirements.txt pyqt6 py2app GitPython
python3 _version.py
rm setup.py
py2applet --make-setup app.py icon.icns "icon.png" "taskbarDark.png" "taskbarLight.png" "version.txt"
Expand Down
2 changes: 2 additions & 0 deletions scripts/macos-universal2/build.sh
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
#!/bin/bash
python3 -m venv --upgrade-deps venv
source venv/bin/activate
python3 -m pip install wheel PyQt6
bash prep-PyQt.sh
cd ../../client
Expand Down
25 changes: 25 additions & 0 deletions scripts/tests/macos_test.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
#!/bin/bash
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
NC='\033[0m'

# Start the application in the background
./NSO-RPC.app/Contents/MacOS/NSO-RPC > output.log 2>&1 &
APP_PID=$!

sleep 10
kill $APP_PID

output=$(<output.log)

if echo "$output" | grep -q "Launch error"; then
echo -e "${RED}Test Failed!${NC}"
echo -e "${RED}Launch error was triggered${NC}"
echo -e "${YELLOW}Application output:"
echo -e "${YELLOW}$(cat output.log)${NC}"
exit 1
else
echo -e "${GREEN}Test Passed!${NC}"
exit 0
fi