Build and Release Money4Band #5
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 and Release Money4Band | |
on: | |
push: | |
tags: | |
- "*.*.*" # Matches tags like 1.0.0, 2.1.1, etc. | |
workflow_dispatch: | |
jobs: | |
build: | |
runs-on: ${{ matrix.os }} | |
strategy: | |
matrix: | |
os: [ubuntu-latest, macos-latest, windows-latest] # Build for Linux, macOS, and Windows | |
architecture: [x64, arm64, armv7] # Target architectures | |
exclude: | |
- os: macos-latest | |
architecture: armv7 # macOS doesn't support ARMv7 | |
- os: windows-latest | |
architecture: armv7 # Windows doesn't support ARMv7 | |
steps: | |
- name: Checkout the code | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 # Fetch all history for generating changelogs | |
- name: Set up Python 3.12 | |
uses: actions/setup-python@v5 | |
with: | |
python-version: '3.12' | |
cache: 'pip' # Enables caching for pip dependencies | |
- name: Install dependencies | |
shell: bash # Use bash shell for consistency | |
run: | | |
python -m pip install --upgrade pip | |
pip install -r requirements.txt | |
pip install pyinstaller # Install PyInstaller | |
- name: Build with PyInstaller | |
shell: bash | |
run: | | |
pyinstaller --onedir \ | |
--name Money4Band \ | |
main.py \ | |
--hidden-import colorama \ | |
--hidden-import docker \ | |
--hidden-import requests \ | |
--hidden-import pyyaml \ | |
--hidden-import psutil \ | |
--hidden-import yaml \ | |
--hidden-import secrets \ | |
--add-data ".resources:.resources" \ | |
--add-data "config:config" \ | |
--add-data "utils:utils" \ | |
--add-data "legacy_money4bandv3x:legacy_money4bandv3x" \ | |
--add-data "template:template" \ | |
--add-data "LICENSE:LICENSE" \ | |
--add-data "README.md:README.md" \ | |
--contents-directory "." \ | |
-y | |
- name: Archive build artifacts for release (Windows) | |
if: runner.os == 'Windows' | |
shell: pwsh | |
run: | | |
Compress-Archive -Path "dist\Money4Band\*" -DestinationPath "Money4Band-${{ matrix.os }}-${{ matrix.architecture }}-${{ github.ref_name }}.zip" | |
- name: Archive build artifacts for release (Unix) | |
if: runner.os != 'Windows' | |
shell: bash | |
run: | | |
tar -czvf "Money4Band-${{ matrix.os }}-${{ matrix.architecture }}-${{ github.ref_name }}.tar.gz" dist/Money4Band | |
- name: Upload build artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: "Money4Band-${{ matrix.os }}-${{ matrix.architecture }}-${{ github.ref_name }}" | |
path: | | |
Money4Band-${{ matrix.os }}-${{ matrix.architecture }}-${{ github.ref_name }}.zip | |
Money4Band-${{ matrix.os }}-${{ matrix.architecture }}-${{ github.ref_name }}.tar.gz | |
if-no-files-found: error # Fail if no files are found | |
release: | |
runs-on: ubuntu-latest | |
needs: build | |
steps: | |
- name: Checkout the code | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 # Fetch all history for generating changelogs | |
- name: Download build artifacts | |
uses: actions/download-artifact@v4 | |
with: | |
path: ./artifacts | |
- name: Generate Changelog | |
shell: bash | |
run: | | |
git fetch --tags | |
git config --global --add safe.directory "$GITHUB_WORKSPACE" | |
previous_tag=$(git tag --sort=-creatordate | sed -n 2p) | |
current_tag=${GITHUB_REF#refs/tags/} | |
echo "Generating changelog from $previous_tag to $current_tag" | |
git log "$previous_tag..$current_tag" --pretty=format:"- %s (%h)" > CHANGELOG.md | |
- name: Create a GitHub release | |
uses: softprops/action-gh-release@v2 | |
if: startsWith(github.ref, 'refs/tags/') | |
with: | |
name: "Money4Band ${{ github.ref_name }}" | |
tag_name: "${{ github.ref_name }}" | |
body_path: "./CHANGELOG.md" | |
files: "./artifacts/**/*" | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |