name: Deploy Binaries on: [push, pull_request] defaults: run: shell: bash jobs: deploy: name: Deploy ${{ matrix.os }} runs-on: ${{ matrix.os }} strategy: matrix: os: [windows-2022, macos-12, macos-14] steps: - uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v4 with: python-version: "3.11" - 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 system dependencies run: | if [ "$RUNNER_OS" == "macOS" ]; then brew install create-dmg fi - name: Install setuptools, wheel run: >- python3 -m pip install setuptools wheel - name: Install PySide6 6.4.3 if on macOS run: | if [ "$RUNNER_OS" == "macOS" ]; then python3 -m pip install PySide6==6.4.3 fi - name: Install requirements-nocore.txt run: >- python3 -m pip install -r requirements-nocore.txt - name: Install nuitka, imageio run: >- python3 -m pip install "nuitka==1.8.6" imageio - name: Set up go 1.20 uses: actions/setup-go@v4 with: go-version: "1.20" - name: Install go 1.20 dependencies run: | go version python3 -m pip install "hysteria > 1.3.5" - name: Set up go 1.21 uses: actions/setup-go@v4 with: go-version: "1.21" - name: Install go 1.21 dependencies run: | go version python3 -m pip install "tun2socks > 2.5.1" - name: Set up go 1.22 uses: actions/setup-go@v4 with: go-version: "1.22" - name: Install go 1.22 dependencies run: | go version python3 -m pip install "Xray-core >= 1.8.8" "hysteria2 >= 2.0.4" - name: Run deploy script run: python3 Deploy.py - name: Upgrade PySide6 to latest if on macOS run: | if [ "$RUNNER_OS" == "macOS" ]; then python3 -m pip install --upgrade PySide6 fi - name: Run deploy script again if on macOS run: | if [ "$RUNNER_OS" == "macOS" ]; then python3 Deploy.py fi - name: Store the distribution packages uses: actions/upload-artifact@v3 with: name: binary-distributions path: | *.zip *.dmg github-release: name: >- Upload to GitHub Release if: startsWith(github.ref, 'refs/tags/') # only upload on tag pushes needs: - deploy 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: Sign the dists with Sigstore uses: sigstore/gh-action-sigstore-python@v1.2.3 with: inputs: >- ./dist/*.zip ./dist/*.dmg - name: Create GitHub Release env: GITHUB_TOKEN: ${{ github.token }} run: >- gh release create '${{ github.ref_name }}' --repo '${{ github.repository }}' --notes "" - name: Upload artifact signatures to GitHub Release env: GITHUB_TOKEN: ${{ github.token }} # Upload to GitHub Release using the `gh` CLI. # `dist/` contains the built packages, and the # sigstore-produced signatures and certificates. run: >- gh release upload '${{ github.ref_name }}' dist/** --repo '${{ github.repository }}'