Attempt Mac Build - Public release #26
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Build PyQt5 App | |
on: | |
push: | |
branches: [ main ] | |
env: | |
POETRY_VERSION: 1.4.1 | |
PACKAGE_NAME: metaanalyser | |
PACKAGE_VERSION: 0.1.0 | |
jobs: | |
build: | |
runs-on: ${{ matrix.os }} | |
strategy: | |
matrix: | |
os: [ubuntu-latest, windows-latest, macos-latest] | |
python-version: [3.11.1] | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
# Setup Python environment | |
- name: Setup Python | |
uses: actions/setup-python@v2 | |
with: | |
python-version: ${{ matrix.python-version }} | |
# Install system libraries for Linux | |
- name: Install Linux system libraries | |
if: runner.os == 'Linux' | |
run: sudo apt-get update && sudo apt-get install -y xvfb x11-utils libxkbcommon-x11-0 | |
# Install Poetry | |
- name: Install Poetry on Linux | |
if: runner.os == 'Linux' | |
run: | | |
curl -sSL https://install.python-poetry.org | python3 - --version ${{ env.POETRY_VERSION }} | |
echo "$HOME/.local/bin" >> $GITHUB_PATH | |
- name: Install Poetry on macOS | |
if: runner.os == 'macOS' | |
run: | | |
curl -sSL https://install.python-poetry.org | python3 - --version ${{ env.POETRY_VERSION }} | |
echo "$HOME/Library/Application Support/pypoetry/venv/bin" >> $GITHUB_PATH | |
- name: Install Poetry on Windows | |
if: runner.os == 'Windows' | |
run: | | |
(Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Content | python3 - --version ${{ env.POETRY_VERSION }} | |
echo "$env:APPDATA\Python\Scripts" | Out-File -FilePath $env:GITHUB_PATH -Append | |
# Install dependencies | |
- name: Install dependencies | |
run: | | |
poetry install | |
# Install Chrome for Playwright (Mac/Linux) | |
- name: Install Chrome for Playwright (Mac/Linux) | |
if: runner.os != 'Windows' | |
run: | | |
export PLAYWRIGHT_BROWSERS_PATH=0 | |
poetry run playwright install chromium | |
- name: Install Chrome for Playwright (Windows) | |
if: runner.os == 'Windows' | |
run: | | |
$env:PLAYWRIGHT_BROWSERS_PATH="0" | |
poetry run playwright install chromium | |
# Build PyQt5 app binary with PyInstaller | |
- name: Build with PyInstaller | |
run: | | |
poetry run pyinstaller --onefile --name ${{ env.PACKAGE_NAME }}_${{ env.PACKAGE_VERSION }} app/main.py | |
# Package the binary | |
- name: Package Binary on Mac/Linux | |
if: runner.os != 'Windows' | |
run: tar czvf ${{ env.PACKAGE_NAME }}_${{ env.PACKAGE_VERSION }}_${{ runner.os }}.tar.gz -C dist ${{ env.PACKAGE_NAME }}_${{ env.PACKAGE_VERSION }} | |
- name: Package Binary on Windows | |
if: runner.os == 'Windows' | |
run: Compress-Archive -Path .\dist\${{ env.PACKAGE_NAME }}_${{ env.PACKAGE_VERSION }}.exe -DestinationPath .\${{ env.PACKAGE_NAME }}_${{ env.PACKAGE_VERSION }}_windows.zip | |
# Upload the packaged binary as an artifact for Mac/Linux | |
- name: Upload Mac/Linux Binary as Artifact | |
if: runner.os != 'Windows' | |
uses: actions/upload-artifact@v2 | |
with: | |
name: ${{ runner.os }}-binary | |
path: '*.tar.gz' | |
# Upload the packaged binary as an artifact for Windows | |
- name: Upload Windows Binary as Artifact | |
if: runner.os == 'Windows' | |
uses: actions/upload-artifact@v2 | |
with: | |
name: windows-binary | |
path: '*.zip' | |
release: | |
needs: build | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
- name: Download all compiled artifacts | |
uses: actions/download-artifact@v2 | |
with: | |
path: ./artifacts | |
# Create release in public repo | |
- name: Create Public Release | |
run: | | |
RESPONSE=$(curl -s -X POST \ | |
-H "Authorization: token ${{ secrets.GH_TOKEN }}" \ | |
-d '{ | |
"tag_name": "v${{ env.PACKAGE_VERSION }}", | |
"target_commitish": "${{ github.sha }}", | |
"name": "Release ${{ github.ref }}", | |
"body": "First public release. Very basic!", | |
"draft": true, | |
"prerelease": true | |
}' \ | |
https://api.github.com/repos/jordantgh/meta-analyser-rc/releases) | |
echo "RESPONSE=$RESPONSE" >> $GITHUB_ENV | |
# Upload assets to the public repo | |
- name: Upload Public Release Asset for Linux | |
run: | | |
UPLOAD_URL=$(echo $RESPONSE | jq -r '.upload_url') | |
curl -s -X POST "$UPLOAD_URL?name=${{ env.PACKAGE_NAME }}_${{ env.PACKAGE_VERSION }}_Linux.tar.gz" \ | |
-H "Authorization: token ${{ secrets.GH_TOKEN }}" \ | |
-H "Content-Type: application/gzip" \ | |
--data-binary @./artifacts/Linux-binary/${{ env.PACKAGE_NAME }}_${{ env.PACKAGE_VERSION }}_Linux.tar.gz | |
- name: Upload Public Release Asset for Mac | |
run: | | |
UPLOAD_URL=$(echo $RESPONSE | jq -r '.upload_url') | |
curl -s -X POST "$UPLOAD_URL?name=${{ env.PACKAGE_NAME }}_${{ env.PACKAGE_VERSION }}_macOS.tar.gz" \ | |
-H "Authorization: token ${{ secrets.GH_TOKEN }}" \ | |
-H "Content-Type: application/gzip" \ | |
--data-binary @./artifacts/macOS-binary/${{ env.PACKAGE_NAME }}_${{ env.PACKAGE_VERSION }}_macOS.tar.gz | |
- name: Upload Public Release Asset for Windows | |
run: | | |
UPLOAD_URL=$(echo $RESPONSE | jq -r '.upload_url') | |
curl -s -X POST "$UPLOAD_URL?name=${{ env.PACKAGE_NAME }}_${{ env.PACKAGE_VERSION }}_windows.zip" \ | |
-H "Authorization: token ${{ secrets.GH_TOKEN }}" \ | |
-H "Content-Type: application/zip" \ | |
--data-binary @./artifacts/windows-binary/${{ env.PACKAGE_NAME }}_${{ env.PACKAGE_VERSION }}_windows.zip |