From 6629aac392e88776bd43396e527200c3e547f11c Mon Sep 17 00:00:00 2001 From: Arne Weber <72623832+Windows200000@users.noreply.github.com> Date: Fri, 17 May 2024 16:31:00 +0200 Subject: [PATCH] Create release.yml for releasing stable version. Mostly copied from ci.yaml (#17) --- .github/workflows/release.yml | 246 ++++++++++++++++++++++++++++++++++ 1 file changed, 246 insertions(+) create mode 100644 .github/workflows/release.yml diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 00000000..ecc54011 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,246 @@ +name: Build release + +on: + pull_request: + types: [closed] + branches: + - 'master' + 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: Read patch notes from file + id: read_patch_notes + run: | + PATCH_NOTES=$(cat patch_notes.txt) + echo "patch_notes=$PATCH_NOTES" >> $GITHUB_ENV + + - name: Upload builds to Releases + uses: ncipollo/release-action@v1 + with: + allowUpdates: true + artifactErrorsFailBuild: true + artifacts: artifacts/*/* + body: | + # ⚠️ Please help with translation as tracked in #2 ! + + *** + **This is an automatically generated updated version of the application, that includes the latest master branch changes.** + **This build should be stable, but if you encounter anything, please report any issues you find.** + + - Last build date: `${{ steps.vars.outputs.date_now }}` + - Reference commit: ${{ github.sha }} + + *** + ## Patch notes: + ${{ env.patch_notes }} + + name: Updated build + prerelease: false + removeArtifacts: true + tag: v15