mirror of
https://git.suyu.dev/suyu/suyu
synced 2025-12-08 13:52:08 -06:00
Compare commits
1 Commits
forgejo-ci
...
ddutchie/c
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9d1a850a9c |
@@ -1,36 +0,0 @@
|
|||||||
# SPDX-FileCopyrightText: 2021 yuzu Emulator Project
|
|
||||||
# SPDX-FileCopyrightText: 2024 suyu Emulator Project
|
|
||||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
|
||||||
|
|
||||||
# Actions Documentation: https://forgejo.org/docs/next/user/actions/#list-of-tasks-in-a-repository
|
|
||||||
|
|
||||||
name: suyu-ci
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [ "forgejo-ci-testing" ]
|
|
||||||
tags: [ "*" ]
|
|
||||||
pull_request:
|
|
||||||
branches: [ "forgejo-ci-testing" ]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
# transifex:
|
|
||||||
# runs-on: ubuntu-latest
|
|
||||||
# container: fijxu/build-environments:linux-transifex
|
|
||||||
# if: ${{ GITHUB_REPOSITORY == 'suyu/suyu' && !GITHUB_HEAD_REF }}
|
|
||||||
# steps:
|
|
||||||
# - uses: https://code.forgejo.org/actions/checkout@v3
|
|
||||||
# with:
|
|
||||||
# submodules: recursive
|
|
||||||
# fetch-depth: 0
|
|
||||||
# - name: Update Translation
|
|
||||||
# run: ./.ci/scripts/transifex/docker.sh
|
|
||||||
# env:
|
|
||||||
# TX_TOKEN: ${{ secrets.TRANSIFEX_API_TOKEN }}
|
|
||||||
|
|
||||||
reuse:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: ${{ github.repository == 'suyu/suyu' }}
|
|
||||||
steps:
|
|
||||||
- uses: https://code.forgejo.org/actions/checkout@v3
|
|
||||||
- uses: https://github.com/fsfe/reuse-action@v1
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
# SPDX-FileCopyrightText: 2023 yuzu Emulator Project
|
|
||||||
# SPDX-FileCopyrightText: 2024 suyu Emulator Project
|
|
||||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
|
||||||
#
|
|
||||||
# GitHub Action to automate the identification of common misspellings in text files.
|
|
||||||
# https://github.com/codespell-project/actions-codespell
|
|
||||||
# https://github.com/codespell-project/codespell
|
|
||||||
|
|
||||||
# Actions Documentation: https://forgejo.org/docs/next/user/actions/#list-of-tasks-in-a-repository
|
|
||||||
|
|
||||||
name: codespell
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [ "*" ]
|
|
||||||
tags: [ "*" ]
|
|
||||||
pull_request:
|
|
||||||
branches: [ "*" ]
|
|
||||||
|
|
||||||
permissions: {}
|
|
||||||
jobs:
|
|
||||||
codespell:
|
|
||||||
name: Check for spelling errors
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: https://code.forgejo.org/actions/checkout@v3
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: https://github.com/codespell-project/actions-codespell@master
|
|
||||||
@@ -1,195 +0,0 @@
|
|||||||
# SPDX-FileCopyrightText: 2022 yuzu Emulator Project
|
|
||||||
# SPDX-FileCopyrightText: 2024 suyu Emulator Project
|
|
||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
||||||
|
|
||||||
# Actions Documentation: https://forgejo.org/docs/next/user/actions/#list-of-tasks-in-a-repository
|
|
||||||
|
|
||||||
name: 'suyu verify'
|
|
||||||
|
|
||||||
on:
|
|
||||||
pull_request:
|
|
||||||
branches: [ "dev" ]
|
|
||||||
env:
|
|
||||||
PR_NUMBER: pr${{ github.event.number }}
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
format:
|
|
||||||
name: 'verify format'
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: https://code.forgejo.org/actions/checkout@v3
|
|
||||||
with:
|
|
||||||
submodules: false
|
|
||||||
- name: set up JDK 17
|
|
||||||
uses: https://github.com/actions/setup-java@v3
|
|
||||||
with:
|
|
||||||
java-version: '17'
|
|
||||||
distribution: 'temurin'
|
|
||||||
- name: 'Verify Formatting'
|
|
||||||
run: bash -ex ./.ci/scripts/format/script.sh
|
|
||||||
build-linux:
|
|
||||||
name: 'test build'
|
|
||||||
needs: format
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
include:
|
|
||||||
- type: clang
|
|
||||||
image: linux-fresh
|
|
||||||
- type: linux
|
|
||||||
image: linux-fresh
|
|
||||||
- type: windows
|
|
||||||
image: linux-mingw
|
|
||||||
container:
|
|
||||||
image: fijxu/build-environments:${{ matrix.image }}
|
|
||||||
options: -u 1001
|
|
||||||
steps:
|
|
||||||
- uses: https://code.forgejo.org/actions/checkout@v3
|
|
||||||
with:
|
|
||||||
submodules: recursive
|
|
||||||
fetch-depth: 0
|
|
||||||
- name: Set up cache
|
|
||||||
uses: https://code.forgejo.org/actions/cache@v3
|
|
||||||
id: ccache-restore
|
|
||||||
with:
|
|
||||||
path: ~/.ccache
|
|
||||||
key: ${{ runner.os }}-${{ matrix.type }}-${{ github.sha }}
|
|
||||||
restore-keys: |
|
|
||||||
${{ runner.os }}-${{ matrix.type }}-
|
|
||||||
- name: Create ccache directory
|
|
||||||
if: steps.ccache-restore.outputs.cache-hit != 'true'
|
|
||||||
run: mkdir -p ~/.ccache
|
|
||||||
- name: Build
|
|
||||||
run: ./.ci/scripts/${{ matrix.type }}/docker.sh
|
|
||||||
env:
|
|
||||||
ENABLE_COMPATIBILITY_REPORTING: "ON"
|
|
||||||
- name: Pack
|
|
||||||
run: ./.ci/scripts/${{ matrix.type }}/upload.sh
|
|
||||||
env:
|
|
||||||
NO_SOURCE_PACK: "YES"
|
|
||||||
- name: Upload
|
|
||||||
uses: https://code.forgejo.org/actions/upload-artifact@v3
|
|
||||||
with:
|
|
||||||
name: ${{ matrix.type }}
|
|
||||||
path: artifacts/
|
|
||||||
# build-mac:
|
|
||||||
# name: 'test build (macos)'
|
|
||||||
# needs: format
|
|
||||||
# runs-on: macos-14
|
|
||||||
# steps:
|
|
||||||
# - uses: https://code.forgejo.org/actions/checkout@v3
|
|
||||||
# with:
|
|
||||||
# submodules: recursive
|
|
||||||
# fetch-depth: 0
|
|
||||||
# - name: Install dependencies
|
|
||||||
# run: |
|
|
||||||
# brew install autoconf automake boost ccache ffmpeg fmt glslang hidapi libtool libusb lz4 ninja nlohmann-json openssl pkg-config qt@5 sdl2 speexdsp zlib zlib zstd
|
|
||||||
# - name: Build
|
|
||||||
# run: |
|
|
||||||
# mkdir build
|
|
||||||
# cd build
|
|
||||||
# export Qt5_DIR="$(brew --prefix qt@5)/lib/cmake"
|
|
||||||
# cmake .. -GNinja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DSUYU_USE_BUNDLED_VCPKG=OFF -DSUYU_TESTS=OFF -DENABLE_WEB_SERVICE=OFF -DENABLE_LIBUSB=OFF
|
|
||||||
# ninja
|
|
||||||
# build-msvc:
|
|
||||||
# name: 'test build (windows, msvc)'
|
|
||||||
# needs: format
|
|
||||||
# runs-on: windows-2022
|
|
||||||
# steps:
|
|
||||||
# - uses: https://code.forgejo.org/actions/checkout@v3
|
|
||||||
# with:
|
|
||||||
# submodules: recursive
|
|
||||||
# fetch-depth: 0
|
|
||||||
# - name: Set up cache
|
|
||||||
# uses: https://code.forgejo.org/actions/cache@v3
|
|
||||||
# with:
|
|
||||||
# path: ~/.buildcache
|
|
||||||
# key: ${{ runner.os }}-msvc-${{ github.sha }}
|
|
||||||
# restore-keys: |
|
|
||||||
# ${{ runner.os }}-msvc-
|
|
||||||
# - name: Install dependencies
|
|
||||||
# shell: pwsh
|
|
||||||
# run: |
|
|
||||||
# $ErrorActionPreference = "Stop"
|
|
||||||
# $BuildCacheVer = "v0.28.4"
|
|
||||||
# $File = "buildcache-windows.zip"
|
|
||||||
# $Uri = "https://github.com/mbitsnbites/buildcache/releases/download/$BuildCacheVer/$File"
|
|
||||||
# $WebClient = New-Object System.Net.WebClient
|
|
||||||
# $WebClient.DownloadFile($Uri, $File)
|
|
||||||
# 7z x $File
|
|
||||||
# $CurrentDir = Convert-Path .
|
|
||||||
# echo "$CurrentDir/buildcache/bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
|
|
||||||
# - name: Install Vulkan SDK
|
|
||||||
# shell: pwsh
|
|
||||||
# run: .\.ci\scripts\windows\install-vulkan-sdk.ps1
|
|
||||||
# - name: Set up MSVC
|
|
||||||
# uses: https://github.com/ilammy/msvc-dev-cmd@v1
|
|
||||||
# - name: Configure
|
|
||||||
# env:
|
|
||||||
# CC: cl.exe
|
|
||||||
# CXX: cl.exe
|
|
||||||
# run: |
|
|
||||||
# glslangValidator --version
|
|
||||||
# mkdir build
|
|
||||||
# cmake . -B build -GNinja -DCMAKE_TOOLCHAIN_FILE="CMakeModules/MSVCCache.cmake" -DUSE_CCACHE=ON -DSUYU_USE_BUNDLED_QT=1 -DSUYU_USE_BUNDLED_SDL2=1 -DSUYU_USE_QT_WEB_ENGINE=ON -DENABLE_COMPATIBILITY_LIST_DOWNLOAD=ON -DSUYU_ENABLE_COMPATIBILITY_REPORTING=ON -DUSE_DISCORD_PRESENCE=ON -DENABLE_QT_TRANSLATION=ON -DCMAKE_BUILD_TYPE=Release -DGIT_BRANCH=pr-verify -DSUYU_CRASH_DUMPS=ON
|
|
||||||
# - name: Build
|
|
||||||
# run: cmake --build build
|
|
||||||
# - name: Cache Summary
|
|
||||||
# run: buildcache -s
|
|
||||||
# - name: Pack
|
|
||||||
# shell: pwsh
|
|
||||||
# run: .\.ci\scripts\windows\upload.ps1
|
|
||||||
# - name: Upload
|
|
||||||
# uses: https://code.forgejo.org/actions/upload-artifact@v3
|
|
||||||
# with:
|
|
||||||
# name: msvc
|
|
||||||
# path: artifacts/
|
|
||||||
# - name: Upload EXE
|
|
||||||
# uses: https://code.forgejo.org/actions/upload-artifact@v3
|
|
||||||
# with:
|
|
||||||
# name: ${{ env.INDIVIDUAL_EXE }}
|
|
||||||
# path: ${{ env.INDIVIDUAL_EXE }}
|
|
||||||
android:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
needs: format
|
|
||||||
steps:
|
|
||||||
- uses: https://code.forgejo.org/actions/checkout@v3
|
|
||||||
with:
|
|
||||||
submodules: recursive
|
|
||||||
fetch-depth: 0
|
|
||||||
- name: set up JDK 17
|
|
||||||
uses: https://github.com/actions/setup-java@v3
|
|
||||||
with:
|
|
||||||
java-version: '17'
|
|
||||||
distribution: 'temurin'
|
|
||||||
- name: Set up cache
|
|
||||||
uses: https://code.forgejo.org/actions/cache@v3
|
|
||||||
with:
|
|
||||||
path: |
|
|
||||||
~/.gradle/caches
|
|
||||||
~/.gradle/wrapper
|
|
||||||
~/.ccache
|
|
||||||
key: ${{ runner.os }}-android-${{ github.sha }}
|
|
||||||
restore-keys: |
|
|
||||||
${{ runner.os }}-android-
|
|
||||||
- name: Query tag name
|
|
||||||
uses: https://github.com/olegtarasov/get-tag@v2.1.2
|
|
||||||
id: tagName
|
|
||||||
- name: Install dependencies
|
|
||||||
run: |
|
|
||||||
sudo apt-get update
|
|
||||||
sudo apt-get install -y ccache apksigner glslang-dev glslang-tools
|
|
||||||
- name: Build
|
|
||||||
run: ./.ci/scripts/android/build.sh
|
|
||||||
- name: Copy and sign artifacts
|
|
||||||
env:
|
|
||||||
ANDROID_KEYSTORE_B64: ${{ secrets.ANDROID_KEYSTORE_B64 }}
|
|
||||||
ANDROID_KEY_ALIAS: ${{ secrets.ANDROID_KEY_ALIAS }}
|
|
||||||
ANDROID_KEYSTORE_PASS: ${{ secrets.ANDROID_KEYSTORE_PASS }}
|
|
||||||
run: ./.ci/scripts/android/upload.sh
|
|
||||||
- name: Upload
|
|
||||||
uses: https://code.forgejo.org/actions/upload-artifact@v3
|
|
||||||
with:
|
|
||||||
name: android
|
|
||||||
path: artifacts/
|
|
||||||
@@ -1,202 +0,0 @@
|
|||||||
# SPDX-FileCopyrightText: 2022 yuzu Emulator Project
|
|
||||||
# SPDX-FileCopyrightText: 2024 suyu Emulator Project
|
|
||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
||||||
|
|
||||||
# Actions Documentation: https://forgejo.org/docs/next/user/actions/#list-of-tasks-in-a-repository
|
|
||||||
|
|
||||||
name: 'suyu verify'
|
|
||||||
|
|
||||||
on:
|
|
||||||
pull_request:
|
|
||||||
branches: [ "forgejo-ci-testing" ]
|
|
||||||
push:
|
|
||||||
branches: [ "forgejo-ci-testing" ]
|
|
||||||
env:
|
|
||||||
PR_NUMBER: pr${{ github.event.number }}
|
|
||||||
CCACHE_DIR: '.ccache'
|
|
||||||
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
format:
|
|
||||||
name: 'Verify Format'
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
container:
|
|
||||||
image: fijxu/build-environments:linux-clang-format
|
|
||||||
steps:
|
|
||||||
- uses: https://code.forgejo.org/actions/checkout@v3
|
|
||||||
with:
|
|
||||||
submodules: false
|
|
||||||
# - name: set up JDK 17
|
|
||||||
# uses: https://github.com/actions/setup-java@v3
|
|
||||||
# with:
|
|
||||||
# java-version: '17'
|
|
||||||
# distribution: 'temurin'
|
|
||||||
- name: 'Verify Formatting'
|
|
||||||
run: bash -ex ./.ci/scripts/format/script.sh
|
|
||||||
build-linux:
|
|
||||||
name: 'test build'
|
|
||||||
needs: format
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
include:
|
|
||||||
- type: clang
|
|
||||||
image: linux-fresh
|
|
||||||
- type: linux
|
|
||||||
image: linux-fresh
|
|
||||||
- type: windows
|
|
||||||
image: linux-mingw
|
|
||||||
container:
|
|
||||||
image: fijxu/build-environments:${{ matrix.image }}
|
|
||||||
options: -u 1001
|
|
||||||
steps:
|
|
||||||
- uses: https://code.forgejo.org/actions/checkout@v3
|
|
||||||
with:
|
|
||||||
submodules: recursive
|
|
||||||
fetch-depth: 0
|
|
||||||
- name: Set up cache
|
|
||||||
uses: https://code.forgejo.org/actions/cache@v3
|
|
||||||
id: ccache-restore
|
|
||||||
with:
|
|
||||||
path: .ccache
|
|
||||||
key: ${{ runner.os }}-${{ matrix.type }}-${{ github.sha }}
|
|
||||||
restore-keys: |
|
|
||||||
${{ runner.os }}-${{ matrix.type }}-
|
|
||||||
- name: Create ccache directory
|
|
||||||
if: steps.ccache-restore.outputs.cache-hit != 'true'
|
|
||||||
run: mkdir -p .ccache
|
|
||||||
- name: Build
|
|
||||||
run: ./.ci/scripts/${{ matrix.type }}/docker.sh
|
|
||||||
env:
|
|
||||||
ENABLE_COMPATIBILITY_REPORTING: "ON"
|
|
||||||
- name: Pack
|
|
||||||
run: ./.ci/scripts/${{ matrix.type }}/upload.sh
|
|
||||||
env:
|
|
||||||
NO_SOURCE_PACK: "YES"
|
|
||||||
- name: Upload
|
|
||||||
uses: https://code.forgejo.org/actions/upload-artifact@v3
|
|
||||||
with:
|
|
||||||
name: ${{ matrix.type }}
|
|
||||||
path: artifacts/
|
|
||||||
# build-mac:
|
|
||||||
# name: 'test build (macos)'
|
|
||||||
# needs: format
|
|
||||||
# runs-on: macos-14
|
|
||||||
# steps:
|
|
||||||
# - uses: https://code.forgejo.org/actions/checkout@v3
|
|
||||||
# with:
|
|
||||||
# submodules: recursive
|
|
||||||
# fetch-depth: 0
|
|
||||||
# - name: Install dependencies
|
|
||||||
# run: |
|
|
||||||
# brew install autoconf automake boost ccache ffmpeg fmt glslang hidapi libtool libusb lz4 ninja nlohmann-json openssl pkg-config qt@5 sdl2 speexdsp zlib zlib zstd
|
|
||||||
# - name: Build
|
|
||||||
# run: |
|
|
||||||
# mkdir build
|
|
||||||
# cd build
|
|
||||||
# export Qt5_DIR="$(brew --prefix qt@5)/lib/cmake"
|
|
||||||
# cmake .. -GNinja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DSUYU_USE_BUNDLED_VCPKG=OFF -DSUYU_TESTS=OFF -DENABLE_WEB_SERVICE=OFF -DENABLE_LIBUSB=OFF
|
|
||||||
# ninja
|
|
||||||
# build-msvc:
|
|
||||||
# name: 'test build (windows, msvc)'
|
|
||||||
# needs: format
|
|
||||||
# runs-on: windows-2022
|
|
||||||
# steps:
|
|
||||||
# - uses: https://code.forgejo.org/actions/checkout@v3
|
|
||||||
# with:
|
|
||||||
# submodules: recursive
|
|
||||||
# fetch-depth: 0
|
|
||||||
# - name: Set up cache
|
|
||||||
# uses: https://code.forgejo.org/actions/cache@v3
|
|
||||||
# with:
|
|
||||||
# path: ~/.buildcache
|
|
||||||
# key: ${{ runner.os }}-msvc-${{ github.sha }}
|
|
||||||
# restore-keys: |
|
|
||||||
# ${{ runner.os }}-msvc-
|
|
||||||
# - name: Install dependencies
|
|
||||||
# shell: pwsh
|
|
||||||
# run: |
|
|
||||||
# $ErrorActionPreference = "Stop"
|
|
||||||
# $BuildCacheVer = "v0.28.4"
|
|
||||||
# $File = "buildcache-windows.zip"
|
|
||||||
# $Uri = "https://github.com/mbitsnbites/buildcache/releases/download/$BuildCacheVer/$File"
|
|
||||||
# $WebClient = New-Object System.Net.WebClient
|
|
||||||
# $WebClient.DownloadFile($Uri, $File)
|
|
||||||
# 7z x $File
|
|
||||||
# $CurrentDir = Convert-Path .
|
|
||||||
# echo "$CurrentDir/buildcache/bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
|
|
||||||
# - name: Install Vulkan SDK
|
|
||||||
# shell: pwsh
|
|
||||||
# run: .\.ci\scripts\windows\install-vulkan-sdk.ps1
|
|
||||||
# - name: Set up MSVC
|
|
||||||
# uses: https://github.com/ilammy/msvc-dev-cmd@v1
|
|
||||||
# - name: Configure
|
|
||||||
# env:
|
|
||||||
# CC: cl.exe
|
|
||||||
# CXX: cl.exe
|
|
||||||
# run: |
|
|
||||||
# glslangValidator --version
|
|
||||||
# mkdir build
|
|
||||||
# cmake . -B build -GNinja -DCMAKE_TOOLCHAIN_FILE="CMakeModules/MSVCCache.cmake" -DUSE_CCACHE=ON -DSUYU_USE_BUNDLED_QT=1 -DSUYU_USE_BUNDLED_SDL2=1 -DSUYU_USE_QT_WEB_ENGINE=ON -DENABLE_COMPATIBILITY_LIST_DOWNLOAD=ON -DSUYU_ENABLE_COMPATIBILITY_REPORTING=ON -DUSE_DISCORD_PRESENCE=ON -DENABLE_QT_TRANSLATION=ON -DCMAKE_BUILD_TYPE=Release -DGIT_BRANCH=pr-verify -DSUYU_CRASH_DUMPS=ON
|
|
||||||
# - name: Build
|
|
||||||
# run: cmake --build build
|
|
||||||
# - name: Cache Summary
|
|
||||||
# run: buildcache -s
|
|
||||||
# - name: Pack
|
|
||||||
# shell: pwsh
|
|
||||||
# run: .\.ci\scripts\windows\upload.ps1
|
|
||||||
# - name: Upload
|
|
||||||
# uses: https://code.forgejo.org/actions/upload-artifact@v3
|
|
||||||
# with:
|
|
||||||
# name: msvc
|
|
||||||
# path: artifacts/
|
|
||||||
# - name: Upload EXE
|
|
||||||
# uses: https://code.forgejo.org/actions/upload-artifact@v3
|
|
||||||
# with:
|
|
||||||
# name: ${{ env.INDIVIDUAL_EXE }}
|
|
||||||
# path: ${{ env.INDIVIDUAL_EXE }}
|
|
||||||
android:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
needs: format
|
|
||||||
steps:
|
|
||||||
- uses: https://code.forgejo.org/actions/checkout@v3
|
|
||||||
with:
|
|
||||||
submodules: recursive
|
|
||||||
fetch-depth: 0
|
|
||||||
- name: set up JDK 17
|
|
||||||
uses: https://github.com/actions/setup-java@v3
|
|
||||||
with:
|
|
||||||
java-version: '17'
|
|
||||||
distribution: 'temurin'
|
|
||||||
- name: Set up cache
|
|
||||||
uses: https://code.forgejo.org/actions/cache@v3
|
|
||||||
with:
|
|
||||||
path: |
|
|
||||||
~/.gradle/caches
|
|
||||||
~/.gradle/wrapper
|
|
||||||
.ccache
|
|
||||||
key: ${{ runner.os }}-android-${{ github.sha }}
|
|
||||||
restore-keys: |
|
|
||||||
${{ runner.os }}-android-
|
|
||||||
- name: Query tag name
|
|
||||||
uses: https://github.com/olegtarasov/get-tag@v2.1.2
|
|
||||||
id: tagName
|
|
||||||
- name: Install dependencies
|
|
||||||
run: |
|
|
||||||
sudo apt-get update
|
|
||||||
sudo apt-get install -y ccache apksigner glslang-dev glslang-tools
|
|
||||||
- name: Build
|
|
||||||
run: ./.ci/scripts/android/build.sh
|
|
||||||
- name: Copy and sign artifacts
|
|
||||||
env:
|
|
||||||
ANDROID_KEYSTORE_B64: ${{ secrets.ANDROID_KEYSTORE_B64 }}
|
|
||||||
ANDROID_KEY_ALIAS: ${{ secrets.ANDROID_KEY_ALIAS }}
|
|
||||||
ANDROID_KEYSTORE_PASS: ${{ secrets.ANDROID_KEYSTORE_PASS }}
|
|
||||||
run: ./.ci/scripts/android/upload.sh
|
|
||||||
- name: Upload
|
|
||||||
uses: https://code.forgejo.org/actions/upload-artifact@v3
|
|
||||||
with:
|
|
||||||
name: android
|
|
||||||
path: artifacts/
|
|
||||||
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
name: New Issue (Developers Only)
|
|
||||||
description: A blank issue template for developers only. If you are not a developer, do not use this issue template. Your issue WILL BE CLOSED if you do not use the appropriate issue template.
|
|
||||||
body:
|
|
||||||
- type: markdown
|
|
||||||
attributes:
|
|
||||||
value: |
|
|
||||||
**If you are not a developer, do not use this issue template. Your issue WILL BE CLOSED if you do not use the appropriate issue template.**
|
|
||||||
- type: textarea
|
|
||||||
attributes:
|
|
||||||
label: "Issue"
|
|
||||||
@@ -1,64 +0,0 @@
|
|||||||
name: Bug Report
|
|
||||||
description: File a bug report
|
|
||||||
body:
|
|
||||||
- type: markdown
|
|
||||||
attributes:
|
|
||||||
value: Tech support does not belong here. You should only file an issue here if you think you have experienced an actual bug with suyu.
|
|
||||||
- type: checkboxes
|
|
||||||
attributes:
|
|
||||||
label: Is there an existing issue for this?
|
|
||||||
description: Please search to see if an issue already exists for the bug you encountered.
|
|
||||||
options:
|
|
||||||
- label: I have searched the existing issues
|
|
||||||
required: true
|
|
||||||
- type: input
|
|
||||||
attributes:
|
|
||||||
label: Affected Build(s)
|
|
||||||
description: List the affected build(s) that this issue applies to.
|
|
||||||
placeholder: Mainline 1234 / Early Access 1234
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: textarea
|
|
||||||
id: issue-desc
|
|
||||||
attributes:
|
|
||||||
label: Description of Issue
|
|
||||||
description: A brief description of the issue encountered along with any images and/or videos.
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: textarea
|
|
||||||
id: expected-behavior
|
|
||||||
attributes:
|
|
||||||
label: Expected Behavior
|
|
||||||
description: A brief description of how it is expected to work along with any images and/or videos.
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: textarea
|
|
||||||
id: reproduction-steps
|
|
||||||
attributes:
|
|
||||||
label: Reproduction Steps
|
|
||||||
description: A brief explanation of how to reproduce this issue. If possible, provide a save file to aid in reproducing the issue.
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: textarea
|
|
||||||
id: log
|
|
||||||
attributes:
|
|
||||||
label: Log File
|
|
||||||
description: A log file will help our developers to better diagnose and fix the issue. Instructions can be found [here](https://suyu.dev/help/reference/log-files).
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: textarea
|
|
||||||
id: system-config
|
|
||||||
attributes:
|
|
||||||
label: System Configuration
|
|
||||||
placeholder: |
|
|
||||||
CPU: Intel i5-10400 / AMD Ryzen 5 3600
|
|
||||||
GPU/Driver: NVIDIA GeForce GTX 1060 (Driver 512.95)
|
|
||||||
RAM: 16GB DDR4-3200
|
|
||||||
OS: Windows 11 22H2 (Build 22621.819)
|
|
||||||
value: |
|
|
||||||
CPU:
|
|
||||||
GPU/Driver:
|
|
||||||
RAM:
|
|
||||||
OS:
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
blank_issues_enabled: false
|
|
||||||
contact_links:
|
|
||||||
- name: suyu Discord
|
|
||||||
url: https://discord.com/invite/suyu
|
|
||||||
about: If you are experiencing an issue with suyu, and you need tech support, or if you have a general question, try asking in the official suyu Discord linked here. Piracy is not allowed.
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
name: Feature Request
|
|
||||||
description: File a feature request
|
|
||||||
labels: "request"
|
|
||||||
body:
|
|
||||||
- type: markdown
|
|
||||||
attributes:
|
|
||||||
value: Tech support does not belong here. You should only file an issue here if you are requesting a feature you believe would make suyu better.
|
|
||||||
- type: checkboxes
|
|
||||||
attributes:
|
|
||||||
label: Is there an existing issue for this?
|
|
||||||
description: Please search to see if an issue already exists for the feature you are requesting.
|
|
||||||
options:
|
|
||||||
- label: I have searched the existing issues
|
|
||||||
required: true
|
|
||||||
- type: textarea
|
|
||||||
id: what-feature
|
|
||||||
attributes:
|
|
||||||
label: What feature are you suggesting?
|
|
||||||
description: A brief description of the requested feature.
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: textarea
|
|
||||||
id: why-feature
|
|
||||||
attributes:
|
|
||||||
label: Why would this feature be useful?
|
|
||||||
description: A brief description of why this feature would make suyu better.
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
@@ -1,80 +0,0 @@
|
|||||||
# SPDX-FileCopyrightText: 2022 yuzu Emulator Project
|
|
||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
||||||
|
|
||||||
name: 'suyu-android-build'
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
tags: [ "*" ]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
android:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: ${{ github.repository == 'suyu-emu/suyu-android' }}
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v3
|
|
||||||
with:
|
|
||||||
submodules: recursive
|
|
||||||
fetch-depth: 0
|
|
||||||
- name: Set up JDK 17
|
|
||||||
uses: actions/setup-java@v3
|
|
||||||
with:
|
|
||||||
java-version: '17'
|
|
||||||
distribution: 'temurin'
|
|
||||||
- name: Set up cache
|
|
||||||
uses: actions/cache@v3
|
|
||||||
with:
|
|
||||||
path: |
|
|
||||||
~/.gradle/caches
|
|
||||||
~/.gradle/wrapper
|
|
||||||
~/.ccache
|
|
||||||
key: ${{ runner.os }}-android-${{ github.sha }}
|
|
||||||
restore-keys: |
|
|
||||||
${{ runner.os }}-android-
|
|
||||||
- name: Query tag name
|
|
||||||
uses: olegtarasov/get-tag@v2.1.2
|
|
||||||
id: tagName
|
|
||||||
- name: Install dependencies
|
|
||||||
run: |
|
|
||||||
sudo apt-get update
|
|
||||||
sudo apt-get install -y ccache apksigner glslang-dev glslang-tools
|
|
||||||
- name: Build
|
|
||||||
run: ./.ci/scripts/android/build.sh
|
|
||||||
env:
|
|
||||||
ANDROID_KEYSTORE_B64: ${{ secrets.ANDROID_KEYSTORE_B64 }}
|
|
||||||
ANDROID_KEY_ALIAS: ${{ secrets.ANDROID_KEY_ALIAS }}
|
|
||||||
ANDROID_KEYSTORE_PASS: ${{ secrets.ANDROID_KEYSTORE_PASS }}
|
|
||||||
- name: Copy artifacts
|
|
||||||
run: ./.ci/scripts/android/upload.sh
|
|
||||||
- name: Upload
|
|
||||||
uses: actions/upload-artifact@v3
|
|
||||||
with:
|
|
||||||
name: android
|
|
||||||
path: artifacts/
|
|
||||||
# release steps
|
|
||||||
release-android:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
needs: [android]
|
|
||||||
if: ${{ startsWith(github.ref, 'refs/tags/') }}
|
|
||||||
permissions:
|
|
||||||
contents: write
|
|
||||||
steps:
|
|
||||||
- uses: actions/download-artifact@v3
|
|
||||||
- name: Query tag name
|
|
||||||
uses: olegtarasov/get-tag@v2.1.2
|
|
||||||
id: tagName
|
|
||||||
- name: Create release
|
|
||||||
uses: actions/create-release@v1
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
with:
|
|
||||||
tag_name: ${{ steps.tagName.outputs.tag }}
|
|
||||||
release_name: ${{ steps.tagName.outputs.tag }}
|
|
||||||
draft: false
|
|
||||||
prerelease: false
|
|
||||||
- name: Upload artifacts
|
|
||||||
uses: alexellis/upload-assets@0.2.3
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
with:
|
|
||||||
asset_paths: '["./**/*.apk","./**/*.aab"]'
|
|
||||||
@@ -1,66 +0,0 @@
|
|||||||
# SPDX-FileCopyrightText: 2024 yuzu Emulator Project
|
|
||||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
|
||||||
|
|
||||||
name: suyu-android-ea-play-release
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
inputs:
|
|
||||||
release-track:
|
|
||||||
description: 'Play store release track (internal/alpha/beta/production)'
|
|
||||||
required: true
|
|
||||||
default: 'alpha'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
android:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: ${{ github.repository == 'suyu-emu/suyu' }}
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v3
|
|
||||||
name: Checkout
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
submodules: true
|
|
||||||
token: ${{ secrets.ALT_GITHUB_TOKEN }}
|
|
||||||
- run: npm install execa@5
|
|
||||||
- uses: actions/github-script@v5
|
|
||||||
name: 'Merge and publish Android EA changes'
|
|
||||||
env:
|
|
||||||
ALT_GITHUB_TOKEN: ${{ secrets.ALT_GITHUB_TOKEN }}
|
|
||||||
BUILD_EA: true
|
|
||||||
with:
|
|
||||||
script: |
|
|
||||||
const execa = require("execa");
|
|
||||||
const mergebot = require('./.github/workflows/android-merge.js').mergebot;
|
|
||||||
process.chdir('${{ github.workspace }}');
|
|
||||||
mergebot(github, context, execa);
|
|
||||||
- name: Get tag name
|
|
||||||
run: echo "GIT_TAG_NAME=$(cat tag-name.txt)" >> $GITHUB_ENV
|
|
||||||
- name: Set up JDK 17
|
|
||||||
uses: actions/setup-java@v3
|
|
||||||
with:
|
|
||||||
java-version: '17'
|
|
||||||
distribution: 'temurin'
|
|
||||||
- name: Install dependencies
|
|
||||||
run: |
|
|
||||||
sudo apt-get update
|
|
||||||
sudo apt-get install -y ccache apksigner glslang-dev glslang-tools
|
|
||||||
- name: Build
|
|
||||||
run: ./.ci/scripts/android/eabuild.sh
|
|
||||||
env:
|
|
||||||
EA_PLAY_ANDROID_KEYSTORE_B64: ${{ secrets.PLAY_ANDROID_KEYSTORE_B64 }}
|
|
||||||
PLAY_ANDROID_KEY_ALIAS: ${{ secrets.PLAY_ANDROID_KEY_ALIAS }}
|
|
||||||
PLAY_ANDROID_KEYSTORE_PASS: ${{ secrets.PLAY_ANDROID_KEYSTORE_PASS }}
|
|
||||||
EA_SERVICE_ACCOUNT_KEY_B64: ${{ secrets.EA_SERVICE_ACCOUNT_KEY_B64 }}
|
|
||||||
STORE_TRACK: ${{ github.event.inputs.release-track }}
|
|
||||||
AUTO_VERSIONED: true
|
|
||||||
BUILD_EA: true
|
|
||||||
- name: Create release
|
|
||||||
uses: softprops/action-gh-release@v1
|
|
||||||
with:
|
|
||||||
tag_name: ${{ env.EA_TAG_NAME }}
|
|
||||||
name: ${{ env.EA_TAG_NAME }}
|
|
||||||
draft: false
|
|
||||||
prerelease: false
|
|
||||||
repository: suyu/suyu-android
|
|
||||||
token: ${{ secrets.ALT_GITHUB_TOKEN }}
|
|
||||||
@@ -1,59 +0,0 @@
|
|||||||
# SPDX-FileCopyrightText: 2024 yuzu Emulator Project
|
|
||||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
|
||||||
|
|
||||||
name: suyu-android-mainline-play-release
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
inputs:
|
|
||||||
release-tag:
|
|
||||||
description: 'Tag # from suyu-android that you want to build and publish'
|
|
||||||
required: true
|
|
||||||
default: '200'
|
|
||||||
release-track:
|
|
||||||
description: 'Play store release track (internal/alpha/beta/production)'
|
|
||||||
required: true
|
|
||||||
default: 'alpha'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
android:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: ${{ github.repository == 'suyu-emu/suyu' }}
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v3
|
|
||||||
name: Checkout
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
submodules: true
|
|
||||||
token: ${{ secrets.ALT_GITHUB_TOKEN }}
|
|
||||||
- run: npm install execa@5
|
|
||||||
- uses: actions/github-script@v5
|
|
||||||
name: 'Pull mainline tag'
|
|
||||||
env:
|
|
||||||
MAINLINE_TAG: ${{ github.event.inputs.release-tag }}
|
|
||||||
with:
|
|
||||||
script: |
|
|
||||||
const execa = require("execa");
|
|
||||||
const mergebot = require('./.github/workflows/android-merge.js').getMainlineTag;
|
|
||||||
process.chdir('${{ github.workspace }}');
|
|
||||||
mergebot(execa);
|
|
||||||
- name: Set up JDK 17
|
|
||||||
uses: actions/setup-java@v3
|
|
||||||
with:
|
|
||||||
java-version: '17'
|
|
||||||
distribution: 'temurin'
|
|
||||||
- name: Install dependencies
|
|
||||||
run: |
|
|
||||||
sudo apt-get update
|
|
||||||
sudo apt-get install -y ccache apksigner glslang-dev glslang-tools
|
|
||||||
- name: Build
|
|
||||||
run: |
|
|
||||||
echo "GIT_TAG_NAME=android-${{ github.event.inputs.releast-tag }}" >> $GITHUB_ENV
|
|
||||||
./.ci/scripts/android/mainlinebuild.sh
|
|
||||||
env:
|
|
||||||
MAINLINE_PLAY_ANDROID_KEYSTORE_B64: ${{ secrets.PLAY_ANDROID_KEYSTORE_B64 }}
|
|
||||||
PLAY_ANDROID_KEY_ALIAS: ${{ secrets.PLAY_ANDROID_KEY_ALIAS }}
|
|
||||||
PLAY_ANDROID_KEYSTORE_PASS: ${{ secrets.PLAY_ANDROID_KEYSTORE_PASS }}
|
|
||||||
SERVICE_ACCOUNT_KEY_B64: ${{ secrets.MAINLINE_SERVICE_ACCOUNT_KEY_B64 }}
|
|
||||||
STORE_TRACK: ${{ github.event.inputs.release-track }}
|
|
||||||
AUTO_VERSIONED: true
|
|
||||||
@@ -1,318 +0,0 @@
|
|||||||
// SPDX-FileCopyrightText: 2023 yuzu Emulator Project
|
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
||||||
|
|
||||||
// Note: This is a GitHub Actions script
|
|
||||||
// It is not meant to be executed directly on your machine without modifications
|
|
||||||
|
|
||||||
const fs = require("fs");
|
|
||||||
// which label to check for changes
|
|
||||||
const CHANGE_LABEL_MAINLINE = 'android-merge';
|
|
||||||
const CHANGE_LABEL_EA = 'android-ea-merge';
|
|
||||||
// how far back in time should we consider the changes are "recent"? (default: 24 hours)
|
|
||||||
const DETECTION_TIME_FRAME = (parseInt(process.env.DETECTION_TIME_FRAME)) || (24 * 3600 * 1000);
|
|
||||||
const BUILD_EA = process.env.BUILD_EA == 'true';
|
|
||||||
const MAINLINE_TAG = process.env.MAINLINE_TAG;
|
|
||||||
|
|
||||||
async function checkBaseChanges(github) {
|
|
||||||
// query the commit date of the latest commit on this branch
|
|
||||||
const query = `query($owner:String!, $name:String!, $ref:String!) {
|
|
||||||
repository(name:$name, owner:$owner) {
|
|
||||||
ref(qualifiedName:$ref) {
|
|
||||||
target {
|
|
||||||
... on Commit { id pushedDate oid }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}`;
|
|
||||||
const variables = {
|
|
||||||
owner: 'suyu-emu',
|
|
||||||
name: 'suyu',
|
|
||||||
ref: 'refs/heads/master',
|
|
||||||
};
|
|
||||||
const result = await github.graphql(query, variables);
|
|
||||||
const pushedAt = result.repository.ref.target.pushedDate;
|
|
||||||
console.log(`Last commit pushed at ${pushedAt}.`);
|
|
||||||
const delta = new Date() - new Date(pushedAt);
|
|
||||||
if (delta <= DETECTION_TIME_FRAME) {
|
|
||||||
console.info('New changes detected, triggering a new build.');
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
console.info('No new changes detected.');
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
async function checkAndroidChanges(github) {
|
|
||||||
if (checkBaseChanges(github)) return true;
|
|
||||||
const pulls = getPulls(github, false);
|
|
||||||
for (let i = 0; i < pulls.length; i++) {
|
|
||||||
let pull = pulls[i];
|
|
||||||
if (new Date() - new Date(pull.headRepository.pushedAt) <= DETECTION_TIME_FRAME) {
|
|
||||||
console.info(`${pull.number} updated at ${pull.headRepository.pushedAt}`);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
console.info("No changes detected in any tagged pull requests.");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
async function tagAndPush(github, owner, repo, execa, commit=false) {
|
|
||||||
let altToken = process.env.ALT_GITHUB_TOKEN;
|
|
||||||
if (!altToken) {
|
|
||||||
throw `Please set ALT_GITHUB_TOKEN environment variable. This token should have write access to ${owner}/${repo}.`;
|
|
||||||
}
|
|
||||||
const query = `query ($owner:String!, $name:String!) {
|
|
||||||
repository(name:$name, owner:$owner) {
|
|
||||||
refs(refPrefix: "refs/tags/", orderBy: {field: TAG_COMMIT_DATE, direction: DESC}, first: 10) {
|
|
||||||
nodes { name }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}`;
|
|
||||||
const variables = {
|
|
||||||
owner: owner,
|
|
||||||
name: repo,
|
|
||||||
};
|
|
||||||
const tags = await github.graphql(query, variables);
|
|
||||||
const tagList = tags.repository.refs.nodes;
|
|
||||||
let lastTag = 'android-1';
|
|
||||||
for (let i = 0; i < tagList.length; ++i) {
|
|
||||||
if (tagList[i].name.includes('android-')) {
|
|
||||||
lastTag = tagList[i].name;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
const tagNumber = /\w+-(\d+)/.exec(lastTag)[1] | 0;
|
|
||||||
const channel = repo.split('-')[1];
|
|
||||||
const newTag = `${channel}-${tagNumber + 1}`;
|
|
||||||
console.log(`New tag: ${newTag}`);
|
|
||||||
if (commit) {
|
|
||||||
let channelName = channel[0].toUpperCase() + channel.slice(1);
|
|
||||||
console.info(`Committing pending commit as ${channelName} ${tagNumber + 1}`);
|
|
||||||
await execa("git", ['commit', '-m', `${channelName} ${tagNumber + 1}`]);
|
|
||||||
}
|
|
||||||
console.info('Pushing tags to GitHub ...');
|
|
||||||
await execa("git", ['tag', newTag]);
|
|
||||||
await execa("git", ['remote', 'add', 'target', `https://${altToken}@github.com/${owner}/${repo}.git`]);
|
|
||||||
await execa("git", ['push', 'target', 'master', '-f']);
|
|
||||||
await execa("git", ['push', 'target', 'master', '--tags']);
|
|
||||||
console.info('Successfully pushed new changes.');
|
|
||||||
}
|
|
||||||
|
|
||||||
async function tagAndPushEA(github, owner, repo, execa) {
|
|
||||||
let altToken = process.env.ALT_GITHUB_TOKEN;
|
|
||||||
if (!altToken) {
|
|
||||||
throw `Please set ALT_GITHUB_TOKEN environment variable. This token should have write access to ${owner}/${repo}.`;
|
|
||||||
}
|
|
||||||
const query = `query ($owner:String!, $name:String!) {
|
|
||||||
repository(name:$name, owner:$owner) {
|
|
||||||
refs(refPrefix: "refs/tags/", orderBy: {field: TAG_COMMIT_DATE, direction: DESC}, first: 10) {
|
|
||||||
nodes { name }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}`;
|
|
||||||
const variables = {
|
|
||||||
owner: owner,
|
|
||||||
name: repo,
|
|
||||||
};
|
|
||||||
const tags = await github.graphql(query, variables);
|
|
||||||
const tagList = tags.repository.refs.nodes;
|
|
||||||
let lastTag = 'ea-1';
|
|
||||||
for (let i = 0; i < tagList.length; ++i) {
|
|
||||||
if (tagList[i].name.includes('ea-')) {
|
|
||||||
lastTag = tagList[i].name;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
const tagNumber = /\w+-(\d+)/.exec(lastTag)[1] | 0;
|
|
||||||
const newTag = `ea-${tagNumber + 1}`;
|
|
||||||
console.log(`New tag: ${newTag}`);
|
|
||||||
console.info('Pushing tags to GitHub ...');
|
|
||||||
await execa("git", ["remote", "add", "android", "https://gitlab.com/suyu-emu/suyu-android.git"]);
|
|
||||||
await execa("git", ["fetch", "android"]);
|
|
||||||
|
|
||||||
await execa("git", ['tag', newTag]);
|
|
||||||
await execa("git", ['push', 'android', `${newTag}`]);
|
|
||||||
|
|
||||||
fs.writeFile('tag-name.txt', newTag, (err) => {
|
|
||||||
if (err) throw 'Could not write tag name to file!'
|
|
||||||
})
|
|
||||||
|
|
||||||
console.info('Successfully pushed new changes.');
|
|
||||||
}
|
|
||||||
|
|
||||||
async function generateReadme(pulls, context, mergeResults, execa) {
|
|
||||||
let baseUrl = `https://github.com/${context.repo.owner}/${context.repo.repo}/`;
|
|
||||||
let output =
|
|
||||||
"| Pull Request | Commit | Title | Author | Merged? |\n|----|----|----|----|----|\n";
|
|
||||||
for (let pull of pulls) {
|
|
||||||
let pr = pull.number;
|
|
||||||
let result = mergeResults[pr];
|
|
||||||
output += `| [${pr}](${baseUrl}/pull/${pr}) | [\`${result.rev || "N/A"}\`](${baseUrl}/pull/${pr}/files) | ${pull.title} | [${pull.author.login}](https://github.com/${pull.author.login}/) | ${result.success ? "Yes" : "No"} |\n`;
|
|
||||||
}
|
|
||||||
output +=
|
|
||||||
"\n\nEnd of merge log. You can find the original README.md below the break.\n\n-----\n\n";
|
|
||||||
output += fs.readFileSync("./README.md");
|
|
||||||
fs.writeFileSync("./README.md", output);
|
|
||||||
await execa("git", ["add", "README.md"]);
|
|
||||||
}
|
|
||||||
|
|
||||||
async function fetchPullRequests(pulls, repoUrl, execa) {
|
|
||||||
console.log("::group::Fetch pull requests");
|
|
||||||
for (let pull of pulls) {
|
|
||||||
let pr = pull.number;
|
|
||||||
console.info(`Fetching PR ${pr} ...`);
|
|
||||||
await execa("git", [
|
|
||||||
"fetch",
|
|
||||||
"-f",
|
|
||||||
"--no-recurse-submodules",
|
|
||||||
repoUrl,
|
|
||||||
`pull/${pr}/head:pr-${pr}`,
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
console.log("::endgroup::");
|
|
||||||
}
|
|
||||||
|
|
||||||
async function mergePullRequests(pulls, execa) {
|
|
||||||
let mergeResults = {};
|
|
||||||
console.log("::group::Merge pull requests");
|
|
||||||
await execa("git", ["config", "--global", "user.name", "suyubot"]);
|
|
||||||
await execa("git", [
|
|
||||||
"config",
|
|
||||||
"--global",
|
|
||||||
"user.email",
|
|
||||||
"suyu\x40suyu-emu\x2eorg", // prevent email harvesters from scraping the address
|
|
||||||
]);
|
|
||||||
let hasFailed = false;
|
|
||||||
for (let pull of pulls) {
|
|
||||||
let pr = pull.number;
|
|
||||||
console.info(`Merging PR ${pr} ...`);
|
|
||||||
try {
|
|
||||||
const process1 = execa("git", [
|
|
||||||
"merge",
|
|
||||||
"--squash",
|
|
||||||
"--no-edit",
|
|
||||||
`pr-${pr}`,
|
|
||||||
]);
|
|
||||||
process1.stdout.pipe(process.stdout);
|
|
||||||
await process1;
|
|
||||||
|
|
||||||
const process2 = execa("git", ["commit", "-m", `Merge suyu-emu#${pr}`]);
|
|
||||||
process2.stdout.pipe(process.stdout);
|
|
||||||
await process2;
|
|
||||||
|
|
||||||
const process3 = await execa("git", ["rev-parse", "--short", `pr-${pr}`]);
|
|
||||||
mergeResults[pr] = {
|
|
||||||
success: true,
|
|
||||||
rev: process3.stdout,
|
|
||||||
};
|
|
||||||
} catch (err) {
|
|
||||||
console.log(
|
|
||||||
`::error title=#${pr} not merged::Failed to merge pull request: ${pr}: ${err}`
|
|
||||||
);
|
|
||||||
mergeResults[pr] = { success: false };
|
|
||||||
hasFailed = true;
|
|
||||||
await execa("git", ["reset", "--hard"]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
console.log("::endgroup::");
|
|
||||||
if (hasFailed) {
|
|
||||||
throw 'There are merge failures. Aborting!';
|
|
||||||
}
|
|
||||||
return mergeResults;
|
|
||||||
}
|
|
||||||
|
|
||||||
async function resetBranch(execa) {
|
|
||||||
console.log("::group::Reset master branch");
|
|
||||||
let hasFailed = false;
|
|
||||||
try {
|
|
||||||
await execa("git", ["remote", "add", "source", "https://gitlab.com/suyu-emu/suyu.git"]);
|
|
||||||
await execa("git", ["fetch", "source"]);
|
|
||||||
const process1 = await execa("git", ["rev-parse", "source/master"]);
|
|
||||||
const headCommit = process1.stdout;
|
|
||||||
|
|
||||||
await execa("git", ["reset", "--hard", headCommit]);
|
|
||||||
} catch (err) {
|
|
||||||
console.log(`::error title=Failed to reset master branch`);
|
|
||||||
hasFailed = true;
|
|
||||||
}
|
|
||||||
console.log("::endgroup::");
|
|
||||||
if (hasFailed) {
|
|
||||||
throw 'Failed to reset the master branch. Aborting!';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
async function getPulls(github) {
|
|
||||||
const query = `query ($owner:String!, $name:String!, $label:String!) {
|
|
||||||
repository(name:$name, owner:$owner) {
|
|
||||||
pullRequests(labels: [$label], states: OPEN, first: 100) {
|
|
||||||
nodes {
|
|
||||||
number title author { login }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}`;
|
|
||||||
const mainlineVariables = {
|
|
||||||
owner: 'suyu-emu',
|
|
||||||
name: 'suyu',
|
|
||||||
label: CHANGE_LABEL_MAINLINE,
|
|
||||||
};
|
|
||||||
const mainlineResult = await github.graphql(query, mainlineVariables);
|
|
||||||
const pulls = mainlineResult.repository.pullRequests.nodes;
|
|
||||||
if (BUILD_EA) {
|
|
||||||
const eaVariables = {
|
|
||||||
owner: 'suyu-emu',
|
|
||||||
name: 'suyu',
|
|
||||||
label: CHANGE_LABEL_EA,
|
|
||||||
};
|
|
||||||
const eaResult = await github.graphql(query, eaVariables);
|
|
||||||
const eaPulls = eaResult.repository.pullRequests.nodes;
|
|
||||||
return pulls.concat(eaPulls);
|
|
||||||
}
|
|
||||||
return pulls;
|
|
||||||
}
|
|
||||||
|
|
||||||
async function getMainlineTag(execa) {
|
|
||||||
console.log(`::group::Getting mainline tag android-${MAINLINE_TAG}`);
|
|
||||||
let hasFailed = false;
|
|
||||||
try {
|
|
||||||
await execa("git", ["remote", "add", "mainline", "https://gitlab.com/suyu-emu/suyu-android.git"]);
|
|
||||||
await execa("git", ["fetch", "mainline", "--tags"]);
|
|
||||||
await execa("git", ["checkout", `tags/android-${MAINLINE_TAG}`]);
|
|
||||||
await execa("git", ["submodule", "update", "--init", "--recursive"]);
|
|
||||||
} catch (err) {
|
|
||||||
console.log('::error title=Failed pull tag');
|
|
||||||
hasFailed = true;
|
|
||||||
}
|
|
||||||
console.log("::endgroup::");
|
|
||||||
if (hasFailed) {
|
|
||||||
throw 'Failed pull mainline tag. Aborting!';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
async function mergebot(github, context, execa) {
|
|
||||||
// Reset our local copy of master to what appears on suyu-emu/suyu - master
|
|
||||||
await resetBranch(execa);
|
|
||||||
|
|
||||||
const pulls = await getPulls(github);
|
|
||||||
let displayList = [];
|
|
||||||
for (let i = 0; i < pulls.length; i++) {
|
|
||||||
let pull = pulls[i];
|
|
||||||
displayList.push({ PR: pull.number, Title: pull.title });
|
|
||||||
}
|
|
||||||
console.info("The following pull requests will be merged:");
|
|
||||||
console.table(displayList);
|
|
||||||
await fetchPullRequests(pulls, "https://gitlab.com/suyu-emu/suyu", execa);
|
|
||||||
const mergeResults = await mergePullRequests(pulls, execa);
|
|
||||||
|
|
||||||
if (BUILD_EA) {
|
|
||||||
await tagAndPushEA(github, 'suyu-emu', `suyu-android`, execa);
|
|
||||||
} else {
|
|
||||||
await generateReadme(pulls, context, mergeResults, execa);
|
|
||||||
await tagAndPush(github, 'suyu-emu', `suyu-android`, execa, true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports.mergebot = mergebot;
|
|
||||||
module.exports.checkAndroidChanges = checkAndroidChanges;
|
|
||||||
module.exports.tagAndPush = tagAndPush;
|
|
||||||
module.exports.checkBaseChanges = checkBaseChanges;
|
|
||||||
module.exports.getMainlineTag = getMainlineTag;
|
|
||||||
@@ -1,57 +0,0 @@
|
|||||||
# SPDX-FileCopyrightText: 2024 yuzu Emulator Project
|
|
||||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
|
||||||
|
|
||||||
name: yuzu-android-publish
|
|
||||||
|
|
||||||
on:
|
|
||||||
schedule:
|
|
||||||
- cron: '37 0 * * *'
|
|
||||||
workflow_dispatch:
|
|
||||||
inputs:
|
|
||||||
android:
|
|
||||||
description: 'Whether to trigger an Android build (true/false/auto)'
|
|
||||||
required: false
|
|
||||||
default: 'true'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
android:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: ${{ github.event.inputs.android != 'false' && github.repository == 'yuzu-emu/yuzu' }}
|
|
||||||
steps:
|
|
||||||
# this checkout is required to make sure the GitHub Actions scripts are available
|
|
||||||
- uses: actions/checkout@v3
|
|
||||||
name: Pre-checkout
|
|
||||||
with:
|
|
||||||
submodules: false
|
|
||||||
- uses: actions/github-script@v6
|
|
||||||
id: check-changes
|
|
||||||
name: 'Check for new changes'
|
|
||||||
env:
|
|
||||||
# 24 hours
|
|
||||||
DETECTION_TIME_FRAME: 86400000
|
|
||||||
with:
|
|
||||||
script: |
|
|
||||||
if (context.payload.inputs && context.payload.inputs.android === 'true') return true;
|
|
||||||
const checkAndroidChanges = require('./.github/workflows/android-merge.js').checkAndroidChanges;
|
|
||||||
return checkAndroidChanges(github);
|
|
||||||
- run: npm install execa@5
|
|
||||||
if: ${{ steps.check-changes.outputs.result == 'true' }}
|
|
||||||
- uses: actions/checkout@v3
|
|
||||||
name: Checkout
|
|
||||||
if: ${{ steps.check-changes.outputs.result == 'true' }}
|
|
||||||
with:
|
|
||||||
path: 'yuzu-merge'
|
|
||||||
fetch-depth: 0
|
|
||||||
submodules: true
|
|
||||||
token: ${{ secrets.ALT_GITHUB_TOKEN }}
|
|
||||||
- uses: actions/github-script@v5
|
|
||||||
name: 'Check and merge Android changes'
|
|
||||||
if: ${{ steps.check-changes.outputs.result == 'true' }}
|
|
||||||
env:
|
|
||||||
ALT_GITHUB_TOKEN: ${{ secrets.ALT_GITHUB_TOKEN }}
|
|
||||||
with:
|
|
||||||
script: |
|
|
||||||
const execa = require("execa");
|
|
||||||
const mergebot = require('./.github/workflows/android-merge.js').mergebot;
|
|
||||||
process.chdir('${{ github.workspace }}/yuzu-merge');
|
|
||||||
mergebot(github, context, execa);
|
|
||||||
1
.gitignore
vendored
1
.gitignore
vendored
@@ -4,7 +4,6 @@
|
|||||||
# Build directory
|
# Build directory
|
||||||
[Bb]uild*/
|
[Bb]uild*/
|
||||||
doc-build/
|
doc-build/
|
||||||
cmake-build*/
|
|
||||||
|
|
||||||
# Generated source files
|
# Generated source files
|
||||||
src/common/scm_rev.cpp
|
src/common/scm_rev.cpp
|
||||||
|
|||||||
@@ -1,6 +1,3 @@
|
|||||||
# SPDX-FileCopyrightText: 2024 suyu Emulator Project
|
|
||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
||||||
|
|
||||||
stages:
|
stages:
|
||||||
- format
|
- format
|
||||||
- build
|
- build
|
||||||
@@ -11,9 +8,9 @@ variables:
|
|||||||
ARTIFACT_COMPRESSION_LEVEL: "fast"
|
ARTIFACT_COMPRESSION_LEVEL: "fast"
|
||||||
CACHE_COMPRESSION_LEVEL: "fastest"
|
CACHE_COMPRESSION_LEVEL: "fastest"
|
||||||
CACHE_REQUEST_TIMEOUT: 5
|
CACHE_REQUEST_TIMEOUT: 5
|
||||||
# Use FASTZIP for faster compression in cache and artifacts (boolean)
|
# Use FASTZIP for faster compression in cache and artifacts
|
||||||
# https://docs.gitlab.com/runner/configuration/feature-flags.html#available-feature-flags
|
# https://docs.gitlab.com/runner/configuration/feature-flags.html#available-feature-flags
|
||||||
FF_USE_FASTZIP: 1
|
FF_USE_FASTZIP: true
|
||||||
|
|
||||||
# Our Variables
|
# Our Variables
|
||||||
CACHE_DIR: "$CI_PROJECT_DIR/ccache"
|
CACHE_DIR: "$CI_PROJECT_DIR/ccache"
|
||||||
@@ -54,7 +51,9 @@ build-linux:
|
|||||||
GIT_SUBMODULE_DEPTH: 1
|
GIT_SUBMODULE_DEPTH: 1
|
||||||
RELEASE_NAME: mainline
|
RELEASE_NAME: mainline
|
||||||
script:
|
script:
|
||||||
|
- chmod -R 1027 ./
|
||||||
- bash .ci/scripts/linux/docker.sh
|
- bash .ci/scripts/linux/docker.sh
|
||||||
|
- chmod -R $UID ./
|
||||||
- bash .ci/scripts/linux/upload.sh
|
- bash .ci/scripts/linux/upload.sh
|
||||||
artifacts:
|
artifacts:
|
||||||
paths:
|
paths:
|
||||||
@@ -81,6 +80,6 @@ android:
|
|||||||
paths:
|
paths:
|
||||||
- artifacts/*
|
- artifacts/*
|
||||||
tags:
|
tags:
|
||||||
- Android
|
- Linux
|
||||||
- Parallelized
|
- Parallelized
|
||||||
|
|
||||||
|
|||||||
@@ -71,7 +71,7 @@ option(SUYU_ENABLE_PORTABLE "Allow suyu to enable portable mode if a user folder
|
|||||||
|
|
||||||
CMAKE_DEPENDENT_OPTION(SUYU_USE_FASTER_LD "Check if a faster linker is available" ON "NOT WIN32" OFF)
|
CMAKE_DEPENDENT_OPTION(SUYU_USE_FASTER_LD "Check if a faster linker is available" ON "NOT WIN32" OFF)
|
||||||
|
|
||||||
CMAKE_DEPENDENT_OPTION(USE_SYSTEM_MOLTENVK "Use the system MoltenVK lib (instead of the bundled one)" OFF "APPLE" OFF)
|
CMAKE_DEPENDENT_OPTION(USE_SYSTEM_MOLTENVK "Use the system MoltenVK lib (instead of the bundled one)" OFF "APPLE" ON)
|
||||||
|
|
||||||
option(USE_CCACHE "Use CCache for faster building" ON)
|
option(USE_CCACHE "Use CCache for faster building" ON)
|
||||||
|
|
||||||
|
|||||||
10
README.md
10
README.md
@@ -1,6 +1,6 @@
|
|||||||
<!--
|
<!--
|
||||||
SPDX-FileCopyrightText: 2024 suyu emulator project
|
SPDX-FileCopyrightText: 2024 suyu emulator project
|
||||||
SPDX-License-Identifier: GPL-3.0-or-later
|
SPDX-License-Identifier: GPL v3
|
||||||
-->
|
-->
|
||||||
|
|
||||||
**Note**: We do not support or condone piracy in any form. In order to use suyu, you'll need keys from your real Switch system, and games which you have legally obtained and paid for. We do not intend to make money or profit from this project.
|
**Note**: We do not support or condone piracy in any form. In order to use suyu, you'll need keys from your real Switch system, and games which you have legally obtained and paid for. We do not intend to make money or profit from this project.
|
||||||
@@ -51,12 +51,10 @@ You can also contact any of the developers on Discord to learn more about the cu
|
|||||||
|
|
||||||
## Downloads
|
## Downloads
|
||||||
|
|
||||||
* __Windows__: [Releases](https://gitlab.com/suyu-emu/suyu/-/releases)
|
* __Windows__: WIP
|
||||||
* __Linux__: [Releases](https://gitlab.com/suyu-emu/suyu/-/releases)
|
* __Linux__: WIP
|
||||||
* __macOS__: [Releases](https://gitlab.com/suyu-emu/suyu/-/releases)
|
|
||||||
* __Android__: [Releases](https://gitlab.com/suyu-emu/suyu/-/releases)
|
|
||||||
|
|
||||||
We have official builds [here.](https://gitlab.com/suyu-emu/suyu/-/releases) If any website or person is claiming to have a build for suyu, take that with a grain of salt.
|
We don't have any official builds yet! If any website or person is claiming to have a build for suyu, take that with a grain of salt, because it might contain malware. Until we do have an official build, it might be a better idea to keep using the last version of yuzu.
|
||||||
|
|
||||||
## Building
|
## Building
|
||||||
|
|
||||||
|
|||||||
88
dist/icns_generator.sh
vendored
88
dist/icns_generator.sh
vendored
@@ -1,76 +1,14 @@
|
|||||||
#!/bin/bash
|
mkdir suyu.iconset
|
||||||
|
convert -background none -resize 16x16 suyu.svg suyu.iconset/icon_16x16.png;
|
||||||
|
convert -background none -resize 32x32 suyu.svg suyu.iconset/icon_16x16@2x.png;
|
||||||
|
convert -background none -resize 32x32 suyu.svg suyu.iconset/icon_32x32.png;
|
||||||
|
convert -background none -resize 64x64 suyu.svg suyu.iconset/icon_32x32@2x.png;
|
||||||
|
convert -background none -resize 128x128 suyu.svg suyu.iconset/icon_128x128.png;
|
||||||
|
convert -background none -resize 256x256 suyu.svg suyu.iconset/icon_256x256.png;
|
||||||
|
convert -background none -resize 256x256 suyu.svg suyu.iconset/icon_128x128@2x.png;
|
||||||
|
convert -background none -resize 512x512 suyu.svg suyu.iconset/icon_256x256@2x.png;
|
||||||
|
convert -background none -resize 512x512 suyu.svg suyu.iconset/icon_512x512.png;
|
||||||
|
convert -background none -resize 1024x1024 suyu.svg suyu.iconset/icon_512x512@2x.png;
|
||||||
|
|
||||||
# SPDX-FileCopyrightText: 2024 suyu Emulator Project
|
iconutil -c icns suyu.iconset
|
||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
rm -rf suyu.iconset
|
||||||
|
|
||||||
# icns_generator.sh
|
|
||||||
# Run this script when a new logo is made and the svg file inside.
|
|
||||||
# You should install Imagemagick to make the conversions: $brew install imagemagick
|
|
||||||
|
|
||||||
# Change working dir to where this script is located.
|
|
||||||
cd "${0%/*}"
|
|
||||||
|
|
||||||
if [ -z $1 ]; then
|
|
||||||
echo "icns_generator.sh GNU GPLv3 License"
|
|
||||||
echo "Run this script when a new logo is made and the svg file inside."
|
|
||||||
echo ""
|
|
||||||
echo "Syntax: ./icns_generator <input.svg>"
|
|
||||||
echo ""
|
|
||||||
echo "Don't forget to install imagemagick: "
|
|
||||||
echo "$ brew install imagemagick"
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Error Handling Stuff:
|
|
||||||
## Check command availability
|
|
||||||
check_command() {
|
|
||||||
if ! command -v "$1" &> /dev/null; then
|
|
||||||
read -s -n 1 -p "Error: '$1' command not found. Please install $2."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
## Convert image with error handling
|
|
||||||
convert_image() {
|
|
||||||
convert -background none -resize "$2" "$1" "$3" || {
|
|
||||||
read -s -n 1 -p "Error: Conversion failed for $1"
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# Check required commands
|
|
||||||
check_command "convert" "ImageMagick"
|
|
||||||
check_command "iconutil" "macOS"
|
|
||||||
|
|
||||||
# Create the iconset directory
|
|
||||||
mkdir suyu.iconset || {
|
|
||||||
read -s -n 1 -p "Error: Unable to create suyu.iconset directory."
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
# Convert images
|
|
||||||
convert_image "$1" 16x16 suyu.iconset/icon_16x16.png
|
|
||||||
convert_image "$1" 32x32 suyu.iconset/icon_16x16@2x.png
|
|
||||||
convert_image "$1" 32x32 suyu.iconset/icon_32x32.png
|
|
||||||
convert_image "$1" 64x64 suyu.iconset/icon_32x32@2x.png
|
|
||||||
convert_image "$1" 128x128 suyu.iconset/icon_128x128.png
|
|
||||||
convert_image "$1" 256x256 suyu.iconset/icon_256x256.png
|
|
||||||
convert_image "$1" 256x256 suyu.iconset/icon_128x128@2x.png
|
|
||||||
convert_image "$1" 512x512 suyu.iconset/icon_256x256@2x.png
|
|
||||||
convert_image "$1" 512x512 suyu.iconset/icon_512x512.png
|
|
||||||
convert_image "$1" 1024x1024 suyu.iconset/icon_512x512@2x.png
|
|
||||||
|
|
||||||
# Create the ICNS file
|
|
||||||
iconutil -c icns suyu.iconset || {
|
|
||||||
read -s -n 1 -p "Error: Failed to create ICNS file."
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
# Remove the temporary iconset directory
|
|
||||||
rm -rf suyu.iconset || {
|
|
||||||
read -s -n 1 -p "Error: Unable to remove suyu.iconset directory."
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
echo -s -n 1 -p "Icon generation completed successfully."
|
|
||||||
echo ""
|
|
||||||
|
|||||||
@@ -611,7 +611,7 @@ struct Values {
|
|||||||
Category::Network};
|
Category::Network};
|
||||||
|
|
||||||
// WebService
|
// WebService
|
||||||
Setting<std::string> web_api_url{linkage, "https://suyu.dev", "web_api_url",
|
Setting<std::string> web_api_url{linkage, "http://74.113.97.71:3000", "web_api_url",
|
||||||
Category::WebService};
|
Category::WebService};
|
||||||
Setting<std::string> suyu_username{linkage, std::string(), "suyu_username",
|
Setting<std::string> suyu_username{linkage, std::string(), "suyu_username",
|
||||||
Category::WebService};
|
Category::WebService};
|
||||||
|
|||||||
@@ -11,8 +11,6 @@
|
|||||||
#include <dynarmic/frontend/A64/decoder/a64.h>
|
#include <dynarmic/frontend/A64/decoder/a64.h>
|
||||||
#include <dynarmic/frontend/imm.h>
|
#include <dynarmic/frontend/imm.h>
|
||||||
|
|
||||||
#include "common/common_types.h"
|
|
||||||
|
|
||||||
#pragma GCC diagnostic pop
|
#pragma GCC diagnostic pop
|
||||||
|
|
||||||
namespace Core {
|
namespace Core {
|
||||||
|
|||||||
@@ -668,7 +668,7 @@ static bool ValidCryptoRevisionString(std::string_view base, size_t begin, size_
|
|||||||
|
|
||||||
void KeyManager::LoadFromFile(const std::filesystem::path& file_path, bool is_title_keys) {
|
void KeyManager::LoadFromFile(const std::filesystem::path& file_path, bool is_title_keys) {
|
||||||
if (!Common::FS::Exists(file_path)) {
|
if (!Common::FS::Exists(file_path)) {
|
||||||
LOG_ERROR(Crypto, "Cannot handle key file '{}': File not found",
|
LOG_ERROR(Crypto, "Failed to load key file at '{}': File not found",
|
||||||
file_path.generic_string());
|
file_path.generic_string());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -803,7 +803,8 @@ bool KeyManager::BaseDeriveNecessary() const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!Common::FS::Exists(suyu_keys_dir / "title.keys")) {
|
if (!Common::FS::Exists(suyu_keys_dir / "title.keys")) {
|
||||||
LOG_WARNING(Crypto, "Could not locate a title.keys file");
|
LOG_ERROR(Crypto, "No title.keys found");
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (check_key_existence(S256KeyType::Header)) {
|
if (check_key_existence(S256KeyType::Header)) {
|
||||||
|
|||||||
@@ -55,6 +55,10 @@ AppLoader_NAX::LoadResult AppLoader_NAX::Load(Kernel::KProcess& process, Core::S
|
|||||||
return {ResultStatus::ErrorMissingProductionKeyFile, {}};
|
return {ResultStatus::ErrorMissingProductionKeyFile, {}};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!Core::Crypto::KeyManager::KeyFileExists(true)) {
|
||||||
|
return {ResultStatus::ErrorMissingProductionKeyFile, {}};
|
||||||
|
}
|
||||||
|
|
||||||
return {ResultStatus::ErrorNAXInconvertibleToNCA, {}};
|
return {ResultStatus::ErrorNAXInconvertibleToNCA, {}};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -102,6 +102,10 @@ AppLoader_NSP::LoadResult AppLoader_NSP::Load(Kernel::KProcess& process, Core::S
|
|||||||
return {ResultStatus::ErrorMissingProductionKeyFile, {}};
|
return {ResultStatus::ErrorMissingProductionKeyFile, {}};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!Core::Crypto::KeyManager::KeyFileExists(true)) {
|
||||||
|
return {ResultStatus::ErrorMissingProductionKeyFile, {}};
|
||||||
|
}
|
||||||
|
|
||||||
return {ResultStatus::ErrorNSPMissingProgramNCA, {}};
|
return {ResultStatus::ErrorNSPMissingProgramNCA, {}};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -71,6 +71,10 @@ AppLoader_XCI::LoadResult AppLoader_XCI::Load(Kernel::KProcess& process, Core::S
|
|||||||
return {ResultStatus::ErrorMissingProductionKeyFile, {}};
|
return {ResultStatus::ErrorMissingProductionKeyFile, {}};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!xci->HasProgramNCA() && !Core::Crypto::KeyManager::KeyFileExists(true)) {
|
||||||
|
return {ResultStatus::ErrorMissingProductionKeyFile, {}};
|
||||||
|
}
|
||||||
|
|
||||||
const auto result = nca_loader->Load(process, system);
|
const auto result = nca_loader->Load(process, system);
|
||||||
if (result.first != ResultStatus::Success) {
|
if (result.first != ResultStatus::Success) {
|
||||||
return result;
|
return result;
|
||||||
|
|||||||
@@ -762,8 +762,6 @@ void EmulatedController::StartMotionCalibration() {
|
|||||||
|
|
||||||
void EmulatedController::SetButton(const Common::Input::CallbackStatus& callback, std::size_t index,
|
void EmulatedController::SetButton(const Common::Input::CallbackStatus& callback, std::size_t index,
|
||||||
Common::UUID uuid) {
|
Common::UUID uuid) {
|
||||||
const auto player_index = Service::HID::NpadIdTypeToIndex(npad_id_type);
|
|
||||||
const auto& player = Settings::values.players.GetValue()[player_index];
|
|
||||||
if (index >= controller.button_values.size()) {
|
if (index >= controller.button_values.size()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -919,9 +917,14 @@ void EmulatedController::SetButton(const Common::Input::CallbackStatus& callback
|
|||||||
|
|
||||||
lock.unlock();
|
lock.unlock();
|
||||||
|
|
||||||
if (player.connected) {
|
if (!is_connected) {
|
||||||
|
if (npad_id_type == NpadIdType::Player1 && npad_type != NpadStyleIndex::Handheld) {
|
||||||
Connect();
|
Connect();
|
||||||
}
|
}
|
||||||
|
if (npad_id_type == NpadIdType::Handheld && npad_type == NpadStyleIndex::Handheld) {
|
||||||
|
Connect();
|
||||||
|
}
|
||||||
|
}
|
||||||
TriggerOnChange(ControllerTriggerType::Button, true);
|
TriggerOnChange(ControllerTriggerType::Button, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -63,11 +63,11 @@ void ConfigureWeb::RetranslateUI() {
|
|||||||
ui->retranslateUi(this);
|
ui->retranslateUi(this);
|
||||||
|
|
||||||
ui->web_signup_link->setText(
|
ui->web_signup_link->setText(
|
||||||
tr("<a href='https://suyu.dev/signup'><span style=\"text-decoration: underline; "
|
tr("<a href='https://profile.suyu.dev/'><span style=\"text-decoration: underline; "
|
||||||
"color:#039be5;\">Sign up</span></a>"));
|
"color:#039be5;\">Sign up</span></a>"));
|
||||||
|
|
||||||
ui->web_token_info_link->setText(
|
ui->web_token_info_link->setText(
|
||||||
tr("<a href='https://suyu.dev/account'><span style=\"text-decoration: "
|
tr("<a href='https://suyu.dev/wiki/suyu-web-service/'><span style=\"text-decoration: "
|
||||||
"underline; color:#039be5;\">What is my token?</span></a>"));
|
"underline; color:#039be5;\">What is my token?</span></a>"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1755,9 +1755,9 @@ bool GMainWindow::LoadROM(const QString& filename, Service::AM::FrontendAppletPa
|
|||||||
if (!ContentManager::AreKeysPresent()) {
|
if (!ContentManager::AreKeysPresent()) {
|
||||||
QMessageBox::warning(this, tr("Derivation Components Missing"),
|
QMessageBox::warning(this, tr("Derivation Components Missing"),
|
||||||
tr("Encryption keys are missing. "
|
tr("Encryption keys are missing. "
|
||||||
"In order to use this emulator"
|
"You need to provide both your own title.keys "
|
||||||
"you need to provide your own encryption keys"
|
"and your own prod.keys "
|
||||||
"in order to play them."));
|
"in order to play games"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4630,9 +4630,9 @@ void GMainWindow::OnCheckFirmwareDecryption() {
|
|||||||
if (!ContentManager::AreKeysPresent()) {
|
if (!ContentManager::AreKeysPresent()) {
|
||||||
QMessageBox::warning(this, tr("Derivation Components Missing"),
|
QMessageBox::warning(this, tr("Derivation Components Missing"),
|
||||||
tr("Encryption keys are missing. "
|
tr("Encryption keys are missing. "
|
||||||
"In order to use this emulator"
|
"You need to provide both your own title.keys "
|
||||||
"you need to provide your own encryption keys"
|
"and your own prod.keys "
|
||||||
"in order to play them."));
|
"in order to play games"));
|
||||||
}
|
}
|
||||||
|
|
||||||
SetFirmwareVersion();
|
SetFirmwareVersion();
|
||||||
|
|||||||
@@ -408,7 +408,7 @@ if (MSVC)
|
|||||||
/we4244 # 'conversion': conversion from 'type1' to 'type2', possible loss of data
|
/we4244 # 'conversion': conversion from 'type1' to 'type2', possible loss of data
|
||||||
)
|
)
|
||||||
else()
|
else()
|
||||||
if (APPLE OR ARCHITECTURE_arm64)
|
if (APPLE)
|
||||||
# error: declaration shadows a typedef in 'interval_base_set<SubType, DomainT, Compare, Interval, Alloc>'
|
# error: declaration shadows a typedef in 'interval_base_set<SubType, DomainT, Compare, Interval, Alloc>'
|
||||||
# error: implicit conversion loses integer precision: 'int' to 'boost::icl::bound_type' (aka 'unsigned char')
|
# error: implicit conversion loses integer precision: 'int' to 'boost::icl::bound_type' (aka 'unsigned char')
|
||||||
target_compile_options(video_core PRIVATE -Wno-shadow -Wno-unused-local-typedef)
|
target_compile_options(video_core PRIVATE -Wno-shadow -Wno-unused-local-typedef)
|
||||||
|
|||||||
@@ -1364,7 +1364,6 @@ void Device::CollectToolingInfo() {
|
|||||||
LOG_INFO(Render_Vulkan, "Attached debugging tool: {}", name);
|
LOG_INFO(Render_Vulkan, "Attached debugging tool: {}", name);
|
||||||
has_renderdoc = has_renderdoc || name == "RenderDoc";
|
has_renderdoc = has_renderdoc || name == "RenderDoc";
|
||||||
has_nsight_graphics = has_nsight_graphics || name == "NVIDIA Nsight Graphics";
|
has_nsight_graphics = has_nsight_graphics || name == "NVIDIA Nsight Graphics";
|
||||||
has_radeon_gpu_profiler = has_radeon_gpu_profiler || name == "Radeon GPU Profiler";
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -592,7 +592,7 @@ public:
|
|||||||
|
|
||||||
/// Returns true when a known debugging tool is attached.
|
/// Returns true when a known debugging tool is attached.
|
||||||
bool HasDebuggingToolAttached() const {
|
bool HasDebuggingToolAttached() const {
|
||||||
return has_renderdoc || has_nsight_graphics || has_radeon_gpu_profiler;
|
return has_renderdoc || has_nsight_graphics;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @returns True if compute pipelines can cause crashing.
|
/// @returns True if compute pipelines can cause crashing.
|
||||||
@@ -702,7 +702,7 @@ public:
|
|||||||
return properties.driver.driverID == VK_DRIVER_ID_NVIDIA_PROPRIETARY;
|
return properties.driver.driverID == VK_DRIVER_ID_NVIDIA_PROPRIETARY;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Checks if we are running MolvenVK.
|
/// Checks if we are runing MolvenVK.
|
||||||
bool IsMoltenVK() const noexcept {
|
bool IsMoltenVK() const noexcept {
|
||||||
return properties.driver.driverID == VK_DRIVER_ID_MOLTENVK;
|
return properties.driver.driverID == VK_DRIVER_ID_MOLTENVK;
|
||||||
}
|
}
|
||||||
@@ -821,7 +821,6 @@ private:
|
|||||||
bool has_broken_parallel_compiling{}; ///< Has broken parallel shader compiling.
|
bool has_broken_parallel_compiling{}; ///< Has broken parallel shader compiling.
|
||||||
bool has_renderdoc{}; ///< Has RenderDoc attached
|
bool has_renderdoc{}; ///< Has RenderDoc attached
|
||||||
bool has_nsight_graphics{}; ///< Has Nsight Graphics attached
|
bool has_nsight_graphics{}; ///< Has Nsight Graphics attached
|
||||||
bool has_radeon_gpu_profiler{}; ///< Has Radeon GPU Profiler attached.
|
|
||||||
bool supports_d24_depth{}; ///< Supports D24 depth buffers.
|
bool supports_d24_depth{}; ///< Supports D24 depth buffers.
|
||||||
bool cant_blit_msaa{}; ///< Does not support MSAA<->MSAA blitting.
|
bool cant_blit_msaa{}; ///< Does not support MSAA<->MSAA blitting.
|
||||||
bool must_emulate_scaled_formats{}; ///< Requires scaled vertex format emulation
|
bool must_emulate_scaled_formats{}; ///< Requires scaled vertex format emulation
|
||||||
|
|||||||
Reference in New Issue
Block a user