diff options
| author | AAGaming <aagaming@riseup.net> | 2026-10-17 20:04:39 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-10-17 20:04:39 -0400 |
| commit | 636b86cf3291e3934a1dc0dd57afb5eb7056a431 (patch) | |
| tree | 854301c45c6ea1fbee28dd0a1399ed55fdb113f2 /.github | |
| parent | 410a141cf3c5d0192e4a1a07d7d10be298ab02f4 (diff) | |
| download | decky-loader-636b86cf3291e3934a1dc0dd57afb5eb7056a431.tar.gz decky-loader-636b86cf3291e3934a1dc0dd57afb5eb7056a431.zip | |
feat(loader): support ARM Linux, experimental builds for every platform that exists (#990)
Co-authored-by: Gianni Spadoni <me@gio.blue>
Co-authored-by: virtudude <virtudude@protonmail.com>
Signed-off-by: Gianni Spadoni <me@gio.blue>
Diffstat (limited to '.github')
| -rw-r--r-- | .github/workflows/build-linux-arm64.yml | 14 | ||||
| -rw-r--r-- | .github/workflows/build-linux-x86_64.yml | 14 | ||||
| -rw-r--r-- | .github/workflows/build-mac.yml | 14 | ||||
| -rw-r--r-- | .github/workflows/build-win-arm64.yml | 19 | ||||
| -rw-r--r-- | .github/workflows/build-win-x86_64.yml | 19 | ||||
| -rw-r--r-- | .github/workflows/build-win.yml | 67 | ||||
| -rw-r--r-- | .github/workflows/build.yml | 67 | ||||
| -rw-r--r-- | .github/workflows/edit-check.yml | 4 | ||||
| -rw-r--r-- | .github/workflows/lint.yml | 7 | ||||
| -rw-r--r-- | .github/workflows/release.yml | 83 | ||||
| -rw-r--r-- | .github/workflows/typecheck.yml | 16 |
11 files changed, 209 insertions, 115 deletions
diff --git a/.github/workflows/build-linux-arm64.yml b/.github/workflows/build-linux-arm64.yml new file mode 100644 index 00000000..fdf84c7e --- /dev/null +++ b/.github/workflows/build-linux-arm64.yml @@ -0,0 +1,14 @@ +name: Builder (Linux, arm64) + +on: + push: + pull_request: + workflow_call: + +jobs: + build: + uses: ./.github/workflows/build.yml + with: + arch: arm64 + os: Linux + artifact_name: PluginLoader-arm64
\ No newline at end of file diff --git a/.github/workflows/build-linux-x86_64.yml b/.github/workflows/build-linux-x86_64.yml new file mode 100644 index 00000000..9aa05b52 --- /dev/null +++ b/.github/workflows/build-linux-x86_64.yml @@ -0,0 +1,14 @@ +name: Builder (Linux, x86_64) + +on: + push: + pull_request: + workflow_call: + +jobs: + build: + uses: ./.github/workflows/build.yml + with: + arch: x86_64 + os: Linux + artifact_name: PluginLoader
\ No newline at end of file diff --git a/.github/workflows/build-mac.yml b/.github/workflows/build-mac.yml new file mode 100644 index 00000000..3daf1132 --- /dev/null +++ b/.github/workflows/build-mac.yml @@ -0,0 +1,14 @@ +name: Builder (macOS) + +on: + push: + pull_request: + workflow_call: + +jobs: + build: + uses: ./.github/workflows/build.yml + with: + arch: arm64 + os: macOS + artifact_name: PluginLoader-mac
\ No newline at end of file diff --git a/.github/workflows/build-win-arm64.yml b/.github/workflows/build-win-arm64.yml new file mode 100644 index 00000000..7274f235 --- /dev/null +++ b/.github/workflows/build-win-arm64.yml @@ -0,0 +1,19 @@ +name: Builder (Windows, arm64) + +on: + push: + pull_request: + workflow_call: + +jobs: + build: + uses: ./.github/workflows/build.yml + strategy: + matrix: + noconsole: [false, true] + with: + os: Windows + arch: arm64 + artifact_name: PluginLoader-win-arm64${{ matrix.noconsole == true && '-noconsole' || '' }} + binary_name: PluginLoader.exe + noconsole: ${{ matrix.noconsole }}
\ No newline at end of file diff --git a/.github/workflows/build-win-x86_64.yml b/.github/workflows/build-win-x86_64.yml new file mode 100644 index 00000000..fa0afb14 --- /dev/null +++ b/.github/workflows/build-win-x86_64.yml @@ -0,0 +1,19 @@ +name: Builder (Windows, x86_64) + +on: + push: + pull_request: + workflow_call: + +jobs: + build: + uses: ./.github/workflows/build.yml + strategy: + matrix: + noconsole: [false, true] + with: + os: Windows + arch: x86_64 + artifact_name: PluginLoader-win${{ matrix.noconsole == true && '-noconsole' || '' }} + binary_name: PluginLoader.exe + noconsole: ${{ matrix.noconsole }}
\ No newline at end of file diff --git a/.github/workflows/build-win.yml b/.github/workflows/build-win.yml deleted file mode 100644 index 6cf504c4..00000000 --- a/.github/workflows/build-win.yml +++ /dev/null @@ -1,67 +0,0 @@ -name: Builder Win - -on: - push: - pull_request: - -permissions: - contents: write - -jobs: - build-win: - name: Build PluginLoader for Win - runs-on: windows-2022 - - steps: - - name: Checkout 🧰 - uses: actions/checkout@v4 - - - name: Set up NodeJS 20 💎 - uses: actions/setup-node@v4 - with: - node-version: 20 - - - name: Set up Python 3.11.7 🐍 - uses: actions/setup-python@v5 - with: - python-version: "3.11.7" - - - name: Install Poetry - uses: snok/install-poetry@v1 - with: - virtualenvs-create: false - - - name: Install Python dependencies ⬇️ - working-directory: ./backend - run: | - C:\Users\runneradmin\.local\bin\poetry self add "poetry-dynamic-versioning[plugin]" - C:\Users\runneradmin\.local\bin\poetry install --no-interaction - - - name: Install JS dependencies ⬇️ - working-directory: ./frontend - run: | - npm i -g pnpm - pnpm i --frozen-lockfile - - - name: Build JS Frontend 🛠️ - working-directory: ./frontend - run: pnpm run build - - - name: Build Python Backend 🛠️ - working-directory: ./backend - run: | - C:\Users\runneradmin\.local\bin\poetry dynamic-versioning - C:\Users\runneradmin\.local\bin\poetry run pyinstaller pyinstaller.spec - - - name: Build Python Backend (noconsole) 🛠️ - working-directory: ./backend - run: $env:DECKY_NOCONSOLE = 1; C:\Users\runneradmin\.local\bin\poetry run pyinstaller pyinstaller.spec - - - name: Upload package artifact ⬆️ - uses: actions/upload-artifact@v4 - with: - name: PluginLoader Win - path: | - ./backend/dist/PluginLoader.exe - ./backend/dist/PluginLoader_noconsole.exe - diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 46a106a1..a6a56f39 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,32 +1,59 @@ name: Builder on: - push: - pull_request: workflow_call: - # schedule: - # - cron: '0 13 * * *' # run at 1 PM UTC + inputs: + arch: + description: Architecture to build for (x86_64, arm64) + type: string + default: x86_64 + os: + description: OS to build for (Linux, macOS, Windows) + type: string + default: Linux + artifact_name: + description: Name of the uploaded artifact + type: string + default: PluginLoader + binary_name: + description: Name of the PluginLoader binary + type: string + default: PluginLoader + noconsole: + description: If the windows build is no-console + type: boolean + default: false jobs: build: - name: Build PluginLoader - runs-on: ubuntu-22.04 + name: Build ${{ inputs.artifact_name }} (${{ inputs.os }} ${{ inputs.arch }}) + # No support for mac x86, sorry + runs-on: ${{ + (inputs.os == 'Linux' && inputs.arch == 'arm64' && 'ubuntu-26.04-arm') || + (inputs.os == 'Linux' && inputs.arch == 'x86_64' && 'ubuntu-26.04') || + (inputs.os == 'macOS' && inputs.arch == 'arm64' && 'xcode-27') || + (inputs.os == 'Windows' && inputs.arch == 'arm64' && 'windows-11-arm') || + (inputs.os == 'Windows' && inputs.arch == 'x86_64' && 'windows-2025') + }} + defaults: + run: + shell: bash steps: - name: Checkout 🧰 - uses: actions/checkout@v4 + uses: actions/checkout@v7 with: fetch-depth: 0 - - name: Set up NodeJS 20 💎 - uses: actions/setup-node@v4 + - name: Set up NodeJS 26 💎 + uses: actions/setup-node@v7 with: - node-version: 20 + node-version: 26 - - name: Set up Python 3.11.7 🐍 - uses: actions/setup-python@v5 + - name: Set up Python 3.14.8 🐍 + uses: actions/setup-python@v7 with: - python-version: "3.11.7" + python-version: "3.14.8" - name: Install Poetry uses: snok/install-poetry@v1 @@ -53,17 +80,19 @@ jobs: working-directory: ./backend run: | poetry dynamic-versioning - pyinstaller pyinstaller.spec + DECKY_REPO="${{ github.repository }}" DECKY_BRANCH="${{ github.event.number && format('PR{0}/{1}', github.event.number, github.head_ref) || github.ref_name }}" ${{ inputs.noconsole == true && 'DECKY_NOCONSOLE=1 ' || '' }}pyinstaller pyinstaller.spec + echo Builds: + ls ./dist - name: Upload package artifact ⬆️ if: ${{ !env.ACT }} - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: - name: PluginLoader - path: ./backend/dist/PluginLoader + name: ${{ inputs.artifact_name }} + path: ./backend/dist/${{ inputs.binary_name }} - name: Download package artifact locally if: ${{ env.ACT }} - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: - path: ./backend/dist/PluginLoader + path: ./backend/dist/${{ inputs.binary_name }} diff --git a/.github/workflows/edit-check.yml b/.github/workflows/edit-check.yml index 519d9e3e..95865a3c 100644 --- a/.github/workflows/edit-check.yml +++ b/.github/workflows/edit-check.yml @@ -7,14 +7,14 @@ jobs: runs-on: ubuntu-22.04 steps: - name: Checkout - uses: actions/checkout@8230315d06ad95c617244d2f265d237a1682d445 + uses: actions/checkout@v7 with: ref: ${{ github.sha }} fetch-depth: 0 token: ${{ secrets.GITHUB_TOKEN }} - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v7 - name: Get changed files id: changed-files diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 3ff65531..cda19c28 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -10,7 +10,12 @@ jobs: runs-on: ubuntu-22.04 steps: - - uses: actions/checkout@v4 # Check out the repository first. + - uses: actions/checkout@v7 # Check out the repository first. + + - name: Set up NodeJS 26 💎 + uses: actions/setup-node@v7 + with: + node-version: 26 - name: Install TypeScript dependencies working-directory: frontend diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index ac1637e4..9f69a294 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -27,13 +27,13 @@ permissions: jobs: create_tag: name: Tag a new version of the package - runs-on: ubuntu-22.04 + runs-on: ubuntu-26.04 outputs: tag_name: ${{ steps.ready_tag.outputs.tag_name }} steps: - name: Checkout 🧰 - uses: actions/checkout@v4 + uses: actions/checkout@v7 - name: Install semver-tool asdf uses: asdf-vm/actions/install@v4 @@ -42,11 +42,11 @@ jobs: semver 3.4.0 - name: Get latest release - uses: rez0n/actions-github-release@main + uses: rez0n/actions-github-release@v2.1 id: latest_release with: token: ${{ secrets.GITHUB_TOKEN }} - repository: "SteamDeckHomebrew/decky-loader" + repository: ${{ github.repository }} type: "nodraft" - name: Prepare tag ⚙️ @@ -115,42 +115,89 @@ jobs: echo tag_name=v$OUT >> $GITHUB_OUTPUT - name: Push tag 📤 - uses: rickstaa/action-create-tag@v1.3.2 + uses: rickstaa/action-create-tag@v1.7.2 if: ${{ steps.ready_tag.outputs.tag_name && !env.ACT }} with: tag: ${{ steps.ready_tag.outputs.tag_name }} message: Pre-release ${{ steps.ready_tag.outputs.tag_name }} - build: - name: Build tagged artifact - uses: ./.github/workflows/build.yml + build_linux_x86_64: + name: Build tagged artifact (Linux, x86_64) + uses: ./.github/workflows/build-linux-x86_64.yml + needs: [create_tag] + + build_linux_arm64: + name: Build tagged artifact (Linux, arm64) + uses: ./.github/workflows/build-linux-arm64.yml + needs: [create_tag] + + build_win_x86_64: + name: Build tagged artifact (Windows, arm64) + uses: ./.github/workflows/build-win-arm64.yml + needs: [create_tag] + + build_win_arm64: + name: Build tagged artifact (Windows, x86_64) + uses: ./.github/workflows/build-win-x86_64.yml + needs: [create_tag] + + build_macos: + name: Build tagged artifact (macOS) + uses: ./.github/workflows/build-mac.yml needs: [create_tag] release: - name: Release tagged artifact - runs-on: ubuntu-22.04 - needs: [create_tag, build] + name: Release tagged artifacts + runs-on: ubuntu-26.04 + needs: [create_tag, build_linux_x86_64, build_linux_arm64, build_win_x86_64, build_win_arm64, build_macos] steps: - - name: Fetch package artifact ⬇️ - uses: actions/download-artifact@v4 + - name: Fetch package artifacts ⬇️ + uses: actions/download-artifact@v8 with: - name: PluginLoader + path: ./temp_artifacts + + - name: Name release assets 🛠️ + run: | + ARTIFACTS=("default" "arm64" "win" "win-noconsole" "win-arm64" "win-arm64-noconsole" "mac") + + for artifact in "${ARTIFACTS[@]}"; do + echo "naming $artifact" + + if [ "$artifact" = "default" ]; then + suffix="" + else + suffix="-$artifact" + fi + + # stupid windows + if [[ "$artifact" == win* ]]; then + ext=".exe" + else + ext="" + fi + + source="./temp_artifacts/PluginLoader$suffix" + dest="./PluginLoader$suffix$ext" + mv "$source"/PluginLoader$ext "$dest" + done - name: Pre-release 📦 if: github.event.inputs.release == 'prerelease' - uses: softprops/action-gh-release@v1 + uses: softprops/action-gh-release@v3 with: name: Prerelease ${{ needs.create_tag.outputs.tag_name }} tag_name: ${{ needs.create_tag.outputs.tag_name }} - files: ./PluginLoader + files: | + ./PluginLoade* prerelease: true generate_release_notes: true - name: Release 📦 if: github.event.inputs.release == 'release' - uses: softprops/action-gh-release@v1 + uses: softprops/action-gh-release@v3 with: name: Release ${{ needs.create_tag.outputs.tag_name }} tag_name: ${{ needs.create_tag.outputs.tag_name }} - files: ./PluginLoader + files: | + ./PluginLoade* prerelease: false generate_release_notes: true diff --git a/.github/workflows/typecheck.yml b/.github/workflows/typecheck.yml index 86690aa0..113b3d30 100644 --- a/.github/workflows/typecheck.yml +++ b/.github/workflows/typecheck.yml @@ -10,17 +10,17 @@ jobs: runs-on: ubuntu-22.04 steps: - - uses: actions/checkout@v4 # Check out the repository first. + - uses: actions/checkout@v7 # Check out the repository first. - - name: Set up NodeJS 20 💎 - uses: actions/setup-node@v4 + - name: Set up NodeJS 26 💎 + uses: actions/setup-node@v7 with: - node-version: 20 + node-version: 26 - - name: Set up Python 3.11.7 🐍 - uses: actions/setup-python@v5 + - name: Set up Python 3.14.8 🐍 + uses: actions/setup-python@v7 with: - python-version: "3.11.7" + python-version: "3.14.8" - name: Install Poetry uses: snok/install-poetry@v1 @@ -40,7 +40,7 @@ jobs: - name: Run pyright (Python) uses: jakebailey/pyright-action@v1 with: - python-version: "3.10.6" + python-version: "3.14.8" no-comments: true working-directory: backend |
