diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 2806a6d..1436700 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -4,81 +4,123 @@ on: workflow_dispatch: inputs: version: - description: "1.0" + description: "Release version (e.g., v1.0.0)" required: true + default: "v1.0.0" + +env: + PYTHON_VERSION: "3.11" + APP_NAME: "app" jobs: build: + name: Build ${{ matrix.os }} strategy: matrix: - os: [ubuntu-latest, windows-latest, macos-latest] + 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 repository + - name: Checkout code uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v4 with: - python-version: "3.x" + python-version: ${{ env.PYTHON_VERSION }} - - name: Install dependencies + - name: Install system dependencies (Linux) + if: runner.os == 'Linux' run: | - pip install -r requirements.txt + 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 + libxcb-xinerama0 \ + libxkbcommon-x11-0 \ + libxcb-cursor0 \ + libxcb-keysyms1 \ + libxcb-render-util0 \ + libxcb-icccm4 \ + libxcb-image0 \ + libxcb-shape0 \ + libxcb-util1 - - name: Build executable - run: pyinstaller --onefile main.py - - - name: Rename executable + - name: Install Python dependencies run: | - if [[ "$RUNNER_OS" == "Windows" ]]; then - mv dist/app.exe dist/app-windows.exe - elif [[ "$RUNNER_OS" == "Linux" ]]; then - mv dist/app dist/app-linux - elif [[ "$RUNNER_OS" == "macOS" ]]; then - mv dist/app dist/app-macos - fi - shell: bash + python -m pip install --upgrade pip + pip install -r requirements.txt + pip install pyinstaller - - name: Upload artifact + - name: Build executable with PyInstaller + run: pyinstaller --onefile --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: app-${{ matrix.os }} - path: dist/* + 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 repository + - name: Checkout code uses: actions/checkout@v4 - - name: Download all build artifacts + - name: Download all artifacts uses: actions/download-artifact@v4 with: - merge-multiple: true + path: artifacts - - name: List downloaded files (Debugging) - run: ls -R + - name: Display downloaded artifacts + run: | + echo "Downloaded artifacts:" + find artifacts -type f + ls -la artifacts/ - - name: Make files executable (Linux/Mac) - run: chmod +x app-* || true + - 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 GitHub Release - # uses: softprops/action-gh-release@v2 - # with: - # tag_name: ${{ github.event.inputs.version }} - # name: Release ${{ github.event.inputs.version }} - # draft: false - # prerelease: false - # files: | - # app-linux - # app-windows.exe - # app-macos + - name: Create GitHub Release + uses: softprops/action-gh-release@v2 + with: + tag_name: ${{ github.event.inputs.version }} + name: Release ${{ github.event.inputs.version }} + draft: false + prerelease: false + files: | + release/app-linux + release/app-windows.exe + release/app-macos + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file