name: Build Executables on: workflow_dispatch: inputs: version: description: "Release version (e.g., v1.0.0)" required: true default: "v1.0.0" permissions: contents: write env: PYTHON_VERSION: "3.11" APP_NAME: "SoftwareManager" jobs: build: name: Build ${{ matrix.os }} strategy: matrix: include: - os: ubuntu-latest artifact_name: app-linux asset_name: app-linux - os: windows-latest artifact_name: app-windows.exe asset_name: app-windows.exe - os: macos-latest artifact_name: app-macos asset_name: app-macos runs-on: ${{ matrix.os }} steps: - name: Checkout code uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v4 with: python-version: ${{ env.PYTHON_VERSION }} - name: Install system dependencies (Linux) if: runner.os == 'Linux' run: | sudo apt-get update sudo apt-get install -y \ libxcb-xinerama0 \ libxkbcommon-x11-0 \ libxcb-cursor0 \ libxcb-keysyms1 \ libxcb-render-util0 \ libxcb-icccm4 \ libxcb-image0 \ libxcb-shape0 \ libxcb-util1 - name: Install Python dependencies run: | python -m pip install --upgrade pip pip install -r requirements.txt pip install pyinstaller - name: Build executable with PyInstaller run: pyinstaller --onefile --windowed --name ${{ env.APP_NAME }} main.py - name: Make executable (Unix) if: runner.os != 'Windows' run: chmod +x dist/${{ env.APP_NAME }} - name: Rename artifact shell: bash run: | cd dist mv ${{ env.APP_NAME }}${{ runner.os == 'Windows' && '.exe' || '' }} ${{ matrix.artifact_name }} ls -la - name: Upload build artifact uses: actions/upload-artifact@v4 with: name: ${{ matrix.os }}-build path: dist/${{ matrix.artifact_name }} retention-days: 1 release: name: Create Release needs: build runs-on: ubuntu-latest if: success() steps: - name: Checkout code uses: actions/checkout@v4 - name: Download all artifacts uses: actions/download-artifact@v4 with: path: artifacts - name: Display downloaded artifacts run: | echo "Downloaded artifacts:" find artifacts -type f ls -la artifacts/ - name: Prepare release files run: | mkdir -p release cp artifacts/ubuntu-latest-build/app-linux release/ cp artifacts/windows-latest-build/app-windows.exe release/ cp artifacts/macos-latest-build/app-macos release/ chmod +x release/app-linux release/app-macos ls -la release/ - name: Create Draft Release (Dev) uses: softprops/action-gh-release@v2 with: tag_name: ${{ github.event.inputs.version }} name: Dev Release ${{ github.event.inputs.version }} draft: true prerelease: true files: | release/app-linux release/app-windows.exe release/app-macos env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}