Files
TwitchDropsMiner/.github/workflows/ci.yml
guihkx 3897a8bccf ci/linux: build AppImage on Ubuntu 22.04 (Python 3.10)
Ubuntu 20.04 only has Python 3.8, and because the 'truststore'
dependency requires at least Python 3.10, the AppImage package would
need to bundle CA certificates from 'certifi' to make HTTPS requests
work at all, which is quite an ugly workaround.

Unfortunately, as a side effect, building on Ubuntu 22.04 increases the
minimum required version of glibc from 2.31 to 2.35.
2024-01-22 23:29:38 +01:00

234 lines
7.4 KiB
YAML

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@v3
- 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@v4
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@v3
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@v3
- 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@v4
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@v3
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@v3
- 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@v3
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@v3
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