linux/appimage: install meson and ninja from PyPI #247
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 | |
on: | |
push: | |
branches: | |
- 'master' | |
pull_request: | |
workflow_dispatch: | |
env: | |
PYTHON_VERSION: '3.10' | |
jobs: | |
windows: | |
name: Windows | |
runs-on: windows-latest | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Set up variables | |
id: vars | |
run: | | |
Add-Content $env:GITHUB_OUTPUT "sha_short=$(git rev-parse --short HEAD)" | |
- name: Append git revision to project version | |
run: | | |
(Get-Content version.py) ` | |
-Replace '^__version__\s*=\s*"[^"]+', "`$0.${{steps.vars.outputs.sha_short}}" |` | |
Out-File version.py | |
# Ensure Python version | |
- name: Set up Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{env.PYTHON_VERSION}} | |
- name: Install project dependencies | |
run: | | |
python3 -m pip install wheel | |
python3 -m pip install -r requirements.txt | |
- name: Install UPX | |
run: | | |
Invoke-WebRequest -Uri https://github.com/upx/upx/releases/download/v4.0.2/upx-4.0.2-win64.zip -OutFile (Join-Path $env:Temp upx.zip) | |
Expand-Archive -LiteralPath (Join-Path $env:Temp upx.zip) -DestinationPath $env:Temp | |
Move-Item -Path (Join-Path $env:Temp upx-*) -Destination (Join-Path $env:Temp upx) | |
Add-Content $env:GITHUB_PATH (Join-Path $env:Temp upx) | |
- name: Install PyInstaller | |
run: | | |
python3 -m pip install pyinstaller | |
- name: Create portable executable | |
run: | | |
pyinstaller build.spec | |
- name: Create release folder | |
run: | | |
$FolderName = 'Twitch Drops Miner' | |
New-Item $FolderName -ItemType Directory | |
Copy-Item dist\*.exe $FolderName | |
Copy-Item manual.txt $FolderName | |
Compress-Archive -Path $FolderName -DestinationPath Twitch.Drops.Miner.Windows.zip | |
- name: Upload build artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
if-no-files-found: error | |
name: Twitch.Drops.Miner.Windows | |
path: Twitch.Drops.Miner.Windows.zip | |
linux-pyinstaller: | |
name: Linux (PyInstaller) | |
runs-on: ubuntu-20.04 | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Set up variables | |
id: vars | |
run: | | |
echo "sha_short=$(git rev-parse --short HEAD)" >> "${GITHUB_OUTPUT}" | |
- name: Append git revision to project version | |
run: | | |
sed -ri "s/^__version__\s*=\s*\"[^\"]+/\0.${{ steps.vars.outputs.sha_short }}/" version.py | |
# NOTE: We're only use a custom version of Python here because truststore requires at least Python 3.10, but Ubuntu 20.04 has Python 3.8. | |
- name: Set up Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{env.PYTHON_VERSION}} | |
- name: Install system dependencies | |
run: | | |
sudo apt update | |
sudo apt install gir1.2-appindicator3-0.1 libgirepository1.0-dev python3-tk | |
- name: Install project dependencies | |
run: | | |
python3 -m pip install wheel | |
python3 -m pip install -r requirements.txt | |
- name: Install PyInstaller | |
run: | | |
python3 -m pip install pyinstaller | |
# NOTE: Remove this step if/once libxft gets updated to 2.3.5 or newer on Ubuntu 20.04, which currently has 2.3.3. | |
- name: Build a recent version of libXft | |
run: | | |
mkdir -p /tmp/libXft | |
cd /tmp/libXft | |
curl -L https://xorg.freedesktop.org/releases/individual/lib/libXft-2.3.8.tar.xz -o libXft.tar.xz | |
tar xvf libXft.tar.xz | |
cd libXft-* | |
./configure --prefix=/tmp/libXft --sysconfdir=/etc --disable-static | |
make | |
make install-strip | |
- name: Create portable executable | |
run: | | |
LD_LIBRARY_PATH=/tmp/libXft/lib xvfb-run --auto-servernum pyinstaller build.spec | |
- name: Show PyInstaller warnings | |
run: | | |
cat build/build/warn-build.txt || true | |
- name: Create release folder | |
run: | | |
folder='Twitch Drops Miner' | |
mkdir "${folder}" | |
cp manual.txt dist/* "${folder}" | |
7z a Twitch.Drops.Miner.Linux.PyInstaller.zip "${folder}" | |
- name: Upload build artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
if-no-files-found: error | |
name: Twitch.Drops.Miner.Linux.PyInstaller | |
path: Twitch.Drops.Miner.Linux.PyInstaller.zip | |
linux-appimage: | |
name: Linux (AppImage) | |
runs-on: ubuntu-22.04 | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Set up variables | |
id: vars | |
run: | | |
echo "app_version=$(python3 -c 'from version import __version__ as v; print(v)')" >> "${GITHUB_OUTPUT}" | |
echo "sha_short=$(git rev-parse --short HEAD)" >> "${GITHUB_OUTPUT}" | |
- name: Append git revision to project version | |
run: | | |
sed -ri "s/^__version__\s*=\s*\"[^\"]+/\0.${{steps.vars.outputs.sha_short}}/" version.py | |
- name: Install system dependencies | |
run: | | |
sudo apt update | |
sudo apt install libgirepository1.0-dev python3-testresources | |
- name: Download AppImage Builder | |
run: | | |
curl -L https://github.com/AppImageCrafters/appimage-builder/releases/download/v1.1.0/appimage-builder-1.1.0-x86_64.AppImage -o appimage-builder | |
chmod +x appimage-builder | |
- name: Create AppImage | |
env: | |
APPIMAGE_EXTRACT_AND_RUN: 1 | |
APP_VERSION: ${{steps.vars.outputs.app_version}}.${{steps.vars.outputs.sha_short}} | |
PYTHON_VERSION: ${{env.PYTHON_VERSION}} | |
run: | | |
./appimage-builder --recipe appimage/AppImageBuilder.yml | |
- name: Create release folder | |
run: | | |
folder='Twitch Drops Miner' | |
mkdir "${folder}" | |
cp *.AppImage manual.txt "${folder}" | |
7z a Twitch.Drops.Miner.Linux.AppImage.zip "${folder}" | |
- name: Upload build artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
if-no-files-found: error | |
name: Twitch.Drops.Miner.Linux.AppImage | |
path: Twitch.Drops.Miner.Linux.AppImage.zip | |
update_releases_page: | |
name: Upload builds to Releases | |
if: github.event_name != 'pull_request' | |
needs: | |
- windows | |
- linux-pyinstaller | |
- linux-appimage | |
runs-on: ubuntu-latest | |
permissions: | |
contents: write | |
steps: | |
- name: Set up variables | |
id: vars | |
run: | | |
echo "date_now=$(date --rfc-3339=seconds)" >> "${GITHUB_OUTPUT}" | |
- name: Download build artifacts from previous jobs | |
uses: actions/download-artifact@v4 | |
with: | |
path: artifacts | |
- name: Upload builds to Releases | |
uses: ncipollo/release-action@v1 | |
with: | |
allowUpdates: true | |
artifactErrorsFailBuild: true | |
artifacts: artifacts/*/* | |
body: | | |
**This is an automatically generated in-development pre-release version of the application, that includes the latest master branch changes.** | |
**⚠️ This build is not stable and may end up terminating with a fatal error. ⚠️** | |
**Use at your own risk.** | |
- Last build date: `${{steps.vars.outputs.date_now}}` | |
- Reference commit: ${{github.sha}} | |
name: Development build | |
prerelease: true | |
removeArtifacts: true | |
tag: dev-build |