name: Build on: push: branches: - 'master' pull_request: workflow_dispatch: jobs: windows: name: Windows runs-on: windows-2022 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 - name: Set up Python virtual environment run: | python3 -m venv env - name: Install project dependencies run: | .\env\Scripts\activate python3 -m pip install wheel -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: | .\env\Scripts\activate python3 -m pip install pyinstaller - name: Create portable executable run: | .\env\Scripts\activate 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: name: Linux 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: '3.10' - name: Install system dependencies run: | sudo apt update sudo apt install gir1.2-appindicator3-0.1 libgirepository1.0-dev python3-tk - name: Set up Python virtual environment run: | python3 -m venv env - name: Install project dependencies run: | source ./env/bin/activate python3 -m pip install wheel -r requirements.txt - name: Install PyInstaller run: | source ./env/bin/activate 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: | source ./env/bin/activate 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.zip "${folder}" - name: Upload build artifact uses: actions/upload-artifact@v3 with: if-no-files-found: error name: Twitch.Drops.Miner.Linux path: Twitch.Drops.Miner.Linux.zip update_releases_page: name: Upload builds to Releases if: github.event_name != 'pull_request' needs: - windows - linux runs-on: ubuntu-22.04 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