name: Github Deploy on: [push, pull_request] defaults: run: shell: bash jobs: build-distribution: name: Build distribution runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v4 with: python-version: "3.11" check-latest: true - name: Set up Python venv run: | python3 -m venv .venv source .venv/bin/activate python3 --version - name: Install libegl1 run: | sudo apt update && sudo apt install -y libegl1 - name: Install setuptools, wheel run: | python3 -m pip install setuptools wheel - name: Install requirements.txt run: | python3 -m pip install -r requirements.txt - name: Download latest asset files run: | python3 -m pip install requests python3 Deploy.py --download - name: Build a binary wheel and a source tarball run: python3 setup.py sdist bdist_wheel - name: Store the distribution packages uses: actions/upload-artifact@v3 with: name: python-package-distributions path: | dist/*.tar.gz dist/*.whl publish-to-pypi: name: >- Publish Python distribution to PyPI if: startsWith(github.ref, 'refs/tags/') # only publish to PyPI on tag pushes needs: - build-distribution - deploy-binaries runs-on: ubuntu-latest environment: name: deploy-pypi url: https://pypi.org/p/Furious-GUI permissions: id-token: write # IMPORTANT: mandatory for trusted publishing steps: - name: Download all the dists uses: actions/download-artifact@v3 with: name: python-package-distributions path: dist/ - name: Publish distribution to PyPI uses: pypa/gh-action-pypi-publish@release/v1 deploy-binaries: name: Deploy binaries on ${{ matrix.os }} runs-on: ${{ matrix.os }} strategy: matrix: os: [windows-2022, macos-13, macos-14] env: PYSIDE6_LEGACY_VERSION: "6.4.3" PYSIDE6_TARGET_VERSION: "6.5.3" steps: - uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v4 with: python-version: "3.11" check-latest: true - name: Set up Python venv run: | python3 -m venv .venv if [ "$RUNNER_OS" == "macOS" ]; then source .venv/bin/activate elif [ "$RUNNER_OS" == "Windows" ]; then .venv/Scripts/activate else echo "$RUNNER_OS not supported" exit 1 fi python3 --version - name: Install macOS dependencies run: | brew install create-dmg if: runner.os == 'macOS' # Remove problematic brew libs if Intel Mac - name: Remove problematic brew libs on Intel Mac run: | brew remove --force --ignore-dependencies openssl@3 brew cleanup openssl@3 if: runner.os == 'macOS' && runner.arch == 'X64' - name: Install setuptools, wheel run: | python3 -m pip install setuptools wheel - name: Install specific PySide6-Essentials on OS run: | if [ "$RUNNER_OS" == "macOS" ]; then python3 -m pip install PySide6-Essentials==$PYSIDE6_LEGACY_VERSION elif [ "$RUNNER_OS" == "Windows" ]; then python3 -m pip install PySide6-Essentials==$PYSIDE6_TARGET_VERSION else echo "$RUNNER_OS not supported" exit 1 fi - name: Install requirements.txt run: | python3 -m pip install -r requirements.txt - name: Install numpy<2 run: | python3 -m pip install "numpy<2" - name: Install nuitka, imageio run: | python3 -m pip install nuitka imageio - name: Set up go 1.20 uses: actions/setup-go@v4 with: go-version: "1.20" check-latest: true - name: Install go 1.20 dependencies run: | go version python3 -m pip install "hysteria > 1.3.5" - name: Set up go 1.23 uses: actions/setup-go@v4 with: go-version: "1.23" check-latest: true - name: Install go 1.23 dependencies run: | go version python3 -m pip install "Xray-core >= 1.8.8" "hysteria2 >= 2.0.4" "tun2socks > 2.5.2" - name: Download latest asset files run: | python3 -m pip install requests python3 Deploy.py --download - name: Run deploy script run: python3 Deploy.py - name: Upgrade PySide6-Essentials to target version if on macOS run: | python3 -m pip uninstall -y PySide6-Essentials shiboken6 python3 -m pip install PySide6-Essentials==$PYSIDE6_TARGET_VERSION if: runner.os == 'macOS' - name: Run deploy script again if on macOS run: | python3 Deploy.py if: runner.os == 'macOS' - name: Store the distribution packages uses: actions/upload-artifact@v3 with: name: binary-distributions path: | *.zip *.dmg github-release: name: >- Upload to GitHub Release needs: - deploy-binaries - publish-to-pypi runs-on: ubuntu-latest permissions: contents: write # IMPORTANT: mandatory for making GitHub Releases id-token: write # IMPORTANT: mandatory for sigstore steps: - name: Download all the dists uses: actions/download-artifact@v3 with: name: binary-distributions path: dist/ - name: Create GitHub Release env: GITHUB_TOKEN: ${{ github.token }} run: >- gh release create '${{ github.ref_name }}' --repo '${{ github.repository }}' --notes "" --prerelease --generate-notes --title 'Furious ${{ github.ref_name }}' - name: Upload artifact to GitHub Release env: GITHUB_TOKEN: ${{ github.token }} # Upload to GitHub Release using the `gh` CLI. run: >- gh release upload '${{ github.ref_name }}' dist/** --repo '${{ github.repository }}'