mirror of
https://github.com/rangermix/TwitchDropsMiner.git
synced 2026-06-07 12:54:35 +00:00
appimage-builder is a tool that is not officially part of the AppImage ecosystem, and lately its maintainer hasn't been able to keep up with the latest AppImage ideas, most notably: - The move to a new statically-linked runtime: Before this, all AppImages using the old runtime, would depend on libfuse2 to be installed on the host system just to be able to run out of the box. This wasn't much of a problem back then, because libfuse2 was ubiquitous. However, nowadays, some have distros don't even have it in their official repositories. - The removal of the xz compression algorithm (used by default), and the addition of Zstd. Luckily, the problems above have been fixed in the git version of appimage-builder, but a stable release is yet to be made, so we'll have to use the git version, because other AppImage-making tools are not as nice and convenient as appimage-builder.
273 lines
8.4 KiB
YAML
273 lines
8.4 KiB
YAML
name: Build
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- 'master'
|
|
pull_request:
|
|
workflow_dispatch:
|
|
|
|
env:
|
|
PYTHON_VERSION: '3.10'
|
|
|
|
jobs:
|
|
validate:
|
|
name: Validate
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Set up Python
|
|
uses: actions/setup-python@v5
|
|
with:
|
|
python-version: ${{env.PYTHON_VERSION}}
|
|
|
|
- name: Validate language files
|
|
run: |
|
|
failed=()
|
|
for file in "lang/"*.json; do
|
|
if err="$(python -m json.tool "${file}" 2>&1 >/dev/null)"; then
|
|
echo "[OK] ${file}"
|
|
else
|
|
echo "[ERROR] ${file} ${err}"
|
|
failed+=("${file}")
|
|
fi
|
|
done
|
|
if [ "${#failed[@]}" -gt 0 ]; then
|
|
echo -e "\nFailed to validate the following language file(s): ${failed[@]}"
|
|
exit 1
|
|
fi
|
|
|
|
windows:
|
|
name: Windows
|
|
runs-on: windows-latest
|
|
needs:
|
|
- validate
|
|
|
|
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-22.04
|
|
needs:
|
|
- validate
|
|
|
|
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
|
|
|
|
# Ensure Python version
|
|
- 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 libgirepository1.0-dev gir1.2-ayatanaappindicator3-0.1 libayatana-appindicator3-1 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 22.04, which currently has 2.3.4.
|
|
- 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
|
|
needs:
|
|
- validate
|
|
|
|
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 gir1.2-ayatanaappindicator3-0.1 libayatana-appindicator3-1 python3-testresources
|
|
|
|
- name: Install appimage-builder
|
|
run: |
|
|
# TODO: Switch to a stable release if/when a version newer than 1.1.0 is released.
|
|
python3 -m pip install git+https://github.com/AppImageCrafters/appimage-builder.git@e995e8edcc227d14524cf39f9824c238f9435a22
|
|
|
|
- name: Create AppImage
|
|
env:
|
|
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: Delete the existing pre-release
|
|
run: gh release delete dev-build --cleanup-tag --yes --repo $GITHUB_REPOSITORY
|
|
env:
|
|
GITHUB_TOKEN: ${{github.token}}
|
|
|
|
- name: Create a new dev build release
|
|
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
|