Skip to content

reparent the library to use new_job_dev #353

reparent the library to use new_job_dev

reparent the library to use new_job_dev #353

Workflow file for this run

name: Build Installer
on: [push, pull_request]
jobs:
build-installer:
timeout-minutes: 60
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-22.04, ubuntu-24.04, windows-2022, macos-13, macos-14] # [ubuntu-22.04, ubuntu-24.04, windows-2022, macos-13, macos-14]
steps:
- name: Check-out repository
uses: actions/checkout@v4
- name: Set up Python environment
uses: actions/setup-python@v5
with:
python-version: 3.11
- name: Upgrade package installer for Python
run: python -m pip install --upgrade pip
- name: Install Python dependences
run: |
python -m pip install flit
flit install --only-deps # Install the dependencies, but not the EasyDiffractionApp package itself
- name: Add extra info to pyproject.toml
run: python utils.py --update
- name: Declare env variables on push only
if: github.event_name == 'push'
shell: bash
run: echo "BRANCH_NAME=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
- name: Declare env variables on pull_request only
if: github.event_name == 'pull_request'
shell: bash
run: echo "BRANCH_NAME=$GITHUB_HEAD_REF" >> $GITHUB_ENV
- name: Declare env variables on push and pull_request
shell: bash
run: |
echo "APP_NAME=$(python utils.py --get release.app_name)" >> $GITHUB_ENV
echo "PACKAGE_NAME=$(python utils.py --get project.name)" >> $GITHUB_ENV
echo "RELEASE_TAG=$(python utils.py --get ci.app.info.release_tag)" >> $GITHUB_ENV
echo "RELEASE_TITLE=$(python utils.py --get ci.app.info.release_title)" >> $GITHUB_ENV
echo "SCRIPTS_PATH=$(python utils.py --get ci.project.subdirs.scripts)" >> $GITHUB_ENV
echo "DISTRIBUTION_PATH=$(python utils.py --get ci.project.subdirs.distribution)" >> $GITHUB_ENV
echo "DOWNLOAD_PATH=$(python utils.py --get ci.project.subdirs.download)" >> $GITHUB_ENV
echo "QTIFW_PATH=$(python utils.py --get ci.qtifw.setup.installation_path.${{ runner.os }})" >> $GITHUB_ENV
echo "PYTHON_PACKAGES_PATH=$(python utils.py --get ci.cache.python_packages_path)" >> $GITHUB_ENV
echo "GIT_INSTALL_URL=git+$GITHUB_SERVER_URL/$GITHUB_REPOSITORY@${{ env.BRANCH_NAME }}" >> $GITHUB_ENV
- name: Install Python dependences
run: |
python -m pip install numpy lmfit numdifftools
python -m pip install lmfit numdifftools
python -m pip install orjson jsbeautifier
python -m pip install pyinstaller requests dephell_licenses
python -m pip install git+https://github.com/ikibalin/cryspy.git@beta
python -m pip install git+https://github.com/easyscience/EasyApp.git@new-easy-app2
python -m pip install git+https://github.com/easyscience/easyDiffractionLib.git@beta
#- name: Create python resources file
# run: pyside6-rcc $GITHUB_REPOSITORY/resources.qrc -o $GITHUB_REPOSITORY/resources.py
#- name: Run pytest (compare app images after previous step)
# run: pytest
- name: Set up screen (Linux)
if: runner.os == 'Linux'
run: |
sudo apt-get update
sudo apt-get install libxcb-xinerama0 libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-randr0 libxcb-render-util0 libxcb-xfixes0 libxcb-shape0 libxcb-cursor0
sudo apt-get install libpulse-mainloop-glib0
sudo apt-get install libxkbcommon-x11-0
sudo apt-get install libegl1-mesa-dev
Xvfb :0 -screen 0 1920x1080x24 -ac &
echo "DISPLAY=:0" >> $GITHUB_ENV
# - name: Set up screen (macOS)
# if: runner.os == 'macOS'
# run: |
# "/Library/Application Support/VMware Tools/vmware-resolutionSet" 1920 1080
# system_profiler SPDisplaysDataType | grep Resolution
- name: Set up screen (Windows)
if: runner.os == 'Windows'
run: |
Set-DisplayResolution -Width 1920 -Height 1080 -Force
Get-DisplayResolution
# - name: Run QML GUI tests
# run: |
# cd ${{ env.PACKAGE_NAME }}
# python main.py --testmode
# cd ..
- name: Create freezed python app bundle
run: python ${{ env.SCRIPTS_PATH }}/FreezeApp.py
- name: Create both online and offline app installer from freezed app bundle
run: >
python ${{ env.SCRIPTS_PATH }}/MakeInstaller.py
${{ env.BRANCH_NAME }} ${{ matrix.os }}
- name: Sign offline app installer
if: github.event_name == 'push' && env.BRANCH_NAME == 'master'
run: >
python ${{ env.SCRIPTS_PATH }}/SignAppInstaller.py
${{ env.BRANCH_NAME }} ${{ matrix.os }}
${{ secrets.MACOS_CERTIFICATE_ENCODED }} ${{ secrets.MACOS_CERTIFICATE_PASSWORD }}
${{ secrets.APPSTORE_NOTARIZATION_USERNAME }} ${{ secrets.APPSTORE_NOTARIZATION_PASSWORD }}
- name: Create zip archive of offline app installer for distribution
run: >
python ${{ env.SCRIPTS_PATH }}/ZipAppInstaller.py
${{ env.BRANCH_NAME }} ${{ matrix.os }}
- name: Upload double-zipped offline app installer for the next job step
uses: actions/upload-artifact@v4
with:
name: zipped-app-installer_${{ matrix.os }}-${{ runner.arch }} # zip of another zip
path: ${{ env.DISTRIBUTION_PATH }}/*.zip
compression-level: 0 # no compression
if-no-files-found: error
retention-days: 10
- name: Upload zipped offline app installer to GitHub releases (non-master branch)
if: github.event_name == 'push' && env.BRANCH_NAME != 'master'
uses: ncipollo/release-action@v1
with:
draft: true
prerelease: true
allowUpdates: true
replacesArtifacts: true
token: ${{ secrets.GITHUB_TOKEN }}
artifacts: "${{ env.DISTRIBUTION_PATH }}/*.zip"
tag: ${{ env.BRANCH_NAME }}
name: ${{ env.BRANCH_NAME }}
bodyFile: "RELEASE.md"
- name: Upload zipped offline app installer to GitHub releases (master branch)
if: github.event_name == 'push' && env.BRANCH_NAME == 'master'
uses: ncipollo/release-action@v1
with:
draft: true
prerelease: true
allowUpdates: true
replacesArtifacts: true
token: ${{ secrets.GITHUB_TOKEN }}
artifacts: "${{ env.DISTRIBUTION_PATH }}/*.zip"
tag: ${{ env.RELEASE_TAG }}
name: ${{ env.RELEASE_TITLE }}
bodyFile: "RELEASE.md"
#- name: Upload online app installer to repository via FTP (master branch)
# if: github.event_name == 'push' && env.BRANCH_NAME == 'master'
# run: >
# python ${{ env.SCRIPTS_PATH }}/UploadToFtp.py
# ${{ env.BRANCH_NAME }} ${{ matrix.os }}
# ${{ secrets.APP_REPO_FTP_PASSWORD }}
test-installer:
needs: build-installer
timeout-minutes: 15
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-22.04, ubuntu-24.04, windows-2022, macos-13, macos-14] # [ubuntu-22.04, ubuntu-24.04, windows-2022, macos-13, macos-14]
steps:
- name: Check-out repository
uses: actions/checkout@v4
- name: Set up Python environment
uses: actions/setup-python@v5
with:
python-version: 3.11
- name: Upgrade package installer for Python
run: python -m pip install --upgrade pip
- name: Install Python dependences
run: |
python -m pip install flit
flit install --only-deps # Install the dependencies, but not the EasyDiffractionApp package itself
- name: Declare env variables on push only
if: github.event_name == 'push'
shell: bash
run: echo "BRANCH_NAME=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
- name: Declare env variables on pull_request only
if: github.event_name == 'pull_request'
shell: bash
run: echo "BRANCH_NAME=$GITHUB_HEAD_REF" >> $GITHUB_ENV
- name: Add extra info to pyproject.toml
run: python utils.py --update
- name: Declare env variables on push and pull_request
shell: bash
run: |
echo "SCRIPTS_PATH=$(python utils.py --get ci.project.subdirs.scripts)" >> $GITHUB_ENV
- name: Set up screen (Linux)
if: runner.os == 'Linux'
run: |
sudo apt-get update
sudo apt-get install libxcb-xinerama0 libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-randr0 libxcb-render-util0 libxcb-xfixes0 libxcb-shape0 libxcb-cursor0
sudo apt-get install libpulse-mainloop-glib0
sudo apt-get install libxkbcommon-x11-0
sudo apt-get install libegl1-mesa-dev
Xvfb :0 -screen 0 1920x1080x24 -ac &
echo "DISPLAY=:0" >> $GITHUB_ENV
# - name: Set up screen (macOS)
# if: runner.os == 'macOS'
# run: |
# "/Library/Application Support/VMware Tools/vmware-resolutionSet" 1920 1080
# system_profiler SPDisplaysDataType | grep Resolution
- name: Set up screen (Windows)
if: runner.os == 'Windows'
run: |
Set-DisplayResolution -Width 1920 -Height 1080 -Force
Get-DisplayResolution
- name: Download zipped offline app installer from from the previous job step
uses: actions/download-artifact@v4
with:
name: zipped-app-installer_${{ matrix.os }}-${{ runner.arch }} # zip of another zip
- name: Unzip archive with offline app installer for distribution
run: >
python ${{ env.SCRIPTS_PATH }}/UnzipAppInstaller.py
${{ env.BRANCH_NAME }} ${{ matrix.os }}
- name: Make dir for .desktop file (Linux)
if: runner.os == 'Linux'
run: mkdir -p ~/.local/share/applications/
- name: Install app
run: >
python ${{ env.SCRIPTS_PATH }}/InstallApp.py
${{ env.BRANCH_NAME }} ${{ matrix.os }}
- name: Check app istallation is done
run: python ${{ env.SCRIPTS_PATH }}/CheckAppExists.py
# Windows 2022 - Have to disable because can't see what is going on there...
# macOS 12 - OK
# Ubuntu 20.04 - OK?
# Ubuntu 22.04 - FAILS - ImportError: libpyside6qml.abi3.so.6.5: cannot open shared object file: No such file or directory - https://github.com/pyinstaller/pyinstaller/issues/7197
- name: Run app in testmode and quit (macOS & Linux)
if: runner.os != 'Windows'
run: python ${{ env.SCRIPTS_PATH }}/RunApp.py --testmode