From fc357d3ba414b38d9dee2f5eda8b0db34a83164a Mon Sep 17 00:00:00 2001
From: Ryujinx Administrator
Date: Sat, 28 Mar 2026 22:43:58 -0500
Subject: [PATCH 01/12] [ci skip] Lock GLI to v2.0.30 in Canary workflow
---
.github/workflows/canary.yml | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/.github/workflows/canary.yml b/.github/workflows/canary.yml
index 18e00b6d2..3327d72d3 100644
--- a/.github/workflows/canary.yml
+++ b/.github/workflows/canary.yml
@@ -50,7 +50,7 @@ jobs:
- name: Install gli
run: |
mkdir -p $HOME/.bin
- gh release download -R GreemDev/GLI -O gli -p 'gli-linux-x64'
+ gh release download -R GreemDev/GLI -O gli -p 'gli-linux-x64' 2.0.30
chmod +x gli
mv gli $HOME/.bin/
echo "$HOME/.bin" >> $GITHUB_PATH
@@ -162,7 +162,7 @@ jobs:
- name: Install gli
run: |
mkdir -p $HOME/.bin
- gh release download -R GreemDev/GLI -O gli -p 'gli-linux-x64'
+ gh release download -R GreemDev/GLI -O gli -p 'gli-linux-x64' 2.0.30
chmod +x gli
mv gli $HOME/.bin/
echo "$HOME/.bin" >> $GITHUB_PATH
@@ -215,7 +215,7 @@ jobs:
- name: Install gli
run: |
mkdir -p $HOME/.bin
- gh release download -R GreemDev/GLI -O gli -p 'gli-linux-x64'
+ gh release download -R GreemDev/GLI -O gli -p 'gli-linux-x64' 2.0.30
chmod +x gli
mv gli $HOME/.bin/
echo "$HOME/.bin" >> $GITHUB_PATH
From 6fe7fb8dcb144cd2fc1a449b10a7c7433d9e215d Mon Sep 17 00:00:00 2001
From: Ryujinx Administrator
Date: Sat, 28 Mar 2026 22:44:55 -0500
Subject: [PATCH 02/12] [ci skip] Lock GLI to v2.0.30 in Stable workflow
---
.github/workflows/release.yml | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 3c1b6f2de..32971626c 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -44,7 +44,7 @@ jobs:
- name: Install gli
run: |
mkdir -p $HOME/.bin
- gh release download -R GreemDev/GLI -O gli -p 'gli-linux-x64'
+ gh release download -R GreemDev/GLI -O gli -p 'gli-linux-x64' 2.0.30
chmod +x gli
mv gli $HOME/.bin/
echo "$HOME/.bin" >> $GITHUB_PATH
@@ -161,7 +161,7 @@ jobs:
- name: Install gli
run: |
mkdir -p $HOME/.bin
- gh release download -R GreemDev/GLI -O gli -p 'gli-linux-x64'
+ gh release download -R GreemDev/GLI -O gli -p 'gli-linux-x64' 2.0.30
chmod +x gli
mv gli $HOME/.bin/
echo "$HOME/.bin" >> $GITHUB_PATH
@@ -217,7 +217,7 @@ jobs:
- name: Install gli
run: |
mkdir -p $HOME/.bin
- gh release download -R GreemDev/GLI -O gli -p 'gli-linux-x64'
+ gh release download -R GreemDev/GLI -O gli -p 'gli-linux-x64' 2.0.30
chmod +x gli
mv gli $HOME/.bin/
echo "$HOME/.bin" >> $GITHUB_PATH
From 3ad4d4a69272baf21fed7a3155ddc455833dc453 Mon Sep 17 00:00:00 2001
From: LotP <22-lotp@users.noreply.git.ryujinx.app>
Date: Wed, 1 Apr 2026 11:08:10 -0500
Subject: [PATCH 03/12] Accurate Service Names (ryubing/ryujinx!296)
See merge request ryubing/ryujinx!296
---
src/Ryujinx.HLE/HOS/Horizon.cs | 22 +++++++++----------
src/Ryujinx.HLE/HOS/Services/ServerBase.cs | 10 +++++++--
.../HOS/Services/Sm/IUserInterface.cs | 10 ++++++---
src/Ryujinx.Horizon/ServiceEntry.cs | 4 +++-
src/Ryujinx.Horizon/ServiceTable.cs | 2 +-
5 files changed, 30 insertions(+), 18 deletions(-)
diff --git a/src/Ryujinx.HLE/HOS/Horizon.cs b/src/Ryujinx.HLE/HOS/Horizon.cs
index 38d504bbf..bcce72d1a 100644
--- a/src/Ryujinx.HLE/HOS/Horizon.cs
+++ b/src/Ryujinx.HLE/HOS/Horizon.cs
@@ -246,21 +246,21 @@ namespace Ryujinx.HLE.HOS
public void InitializeServices()
{
SmRegistry = new SmRegistry();
- SmServer = new ServerBase(KernelContext, "SmServer", () => new IUserInterface(KernelContext, SmRegistry));
+ SmServer = new ServerBase(KernelContext, "Sm", () => new IUserInterface(KernelContext, SmRegistry));
// Wait until SM server thread is done with initialization,
// only then doing connections to SM is safe.
SmServer.InitDone.WaitOne();
- BsdServer = new ServerBase(KernelContext, "BsdServer");
- FsServer = new ServerBase(KernelContext, "FsServer");
- HidServer = new ServerBase(KernelContext, "HidServer");
- NvDrvServer = new ServerBase(KernelContext, "NvservicesServer");
- TimeServer = new ServerBase(KernelContext, "TimeServer");
- ViServer = new ServerBase(KernelContext, "ViServerU");
- ViServerM = new ServerBase(KernelContext, "ViServerM");
- ViServerS = new ServerBase(KernelContext, "ViServerS");
- LdnServer = new ServerBase(KernelContext, "LdnServer");
+ BsdServer = new ServerBase(KernelContext, "Bsd");
+ FsServer = new ServerBase(KernelContext, "Fs");
+ HidServer = new ServerBase(KernelContext, "Hid");
+ NvDrvServer = new ServerBase(KernelContext, "Nv");
+ TimeServer = new ServerBase(KernelContext, "Time");
+ ViServer = new ServerBase(KernelContext, "Vi:u");
+ ViServerM = new ServerBase(KernelContext, "Vi:m");
+ ViServerS = new ServerBase(KernelContext, "Vi:s");
+ LdnServer = new ServerBase(KernelContext, "Ldn");
StartNewServices();
}
@@ -286,7 +286,7 @@ namespace Ryujinx.HLE.HOS
ProcessCreationFlags.Is64Bit |
ProcessCreationFlags.PoolPartitionSystem;
- ProcessCreationInfo creationInfo = new("Service", 1, 0, 0x8000000, 1, Flags, 0, 0);
+ ProcessCreationInfo creationInfo = new(service.Name, 1, 0, 0x8000000, 1, Flags, 0, 0);
uint[] defaultCapabilities =
[
diff --git a/src/Ryujinx.HLE/HOS/Services/ServerBase.cs b/src/Ryujinx.HLE/HOS/Services/ServerBase.cs
index a54dc637e..0eb36865b 100644
--- a/src/Ryujinx.HLE/HOS/Services/ServerBase.cs
+++ b/src/Ryujinx.HLE/HOS/Services/ServerBase.cs
@@ -79,9 +79,15 @@ namespace Ryujinx.HLE.HOS.Services
ProcessCreationFlags.Is64Bit |
ProcessCreationFlags.PoolPartitionSystem;
- ProcessCreationInfo creationInfo = new("Service", 1, 0, 0x8000000, 1, Flags, 0, 0);
+ ProcessCreationInfo creationInfo = new(Name, 1, 0, 0x8000000, 1, Flags, 0, 0);
- KernelStatic.StartInitialProcess(context, creationInfo, DefaultCapabilities, 44, Main);
+ KernelStatic.StartInitialProcess(context, creationInfo, DefaultCapabilities, 44, () =>
+ {
+ var currentThread = KernelStatic.GetCurrentThread();
+ currentThread.HostThread.Name = $"{{{Name}}}";
+
+ Main();
+ });
}
private void AddPort(int serverPortHandle, Func objectFactory)
diff --git a/src/Ryujinx.HLE/HOS/Services/Sm/IUserInterface.cs b/src/Ryujinx.HLE/HOS/Services/Sm/IUserInterface.cs
index f19eeebfc..6aaad74d3 100644
--- a/src/Ryujinx.HLE/HOS/Services/Sm/IUserInterface.cs
+++ b/src/Ryujinx.HLE/HOS/Services/Sm/IUserInterface.cs
@@ -17,13 +17,12 @@ namespace Ryujinx.HLE.HOS.Services.Sm
private static readonly Dictionary _services;
private readonly SmRegistry _registry;
- private readonly ServerBase _commonServer;
+ private ServerBase _commonServer;
private bool _isInitialized;
public IUserInterface(KernelContext context, SmRegistry registry) : base(registerTipc: true)
{
- _commonServer = new ServerBase(context, "CommonServer");
_registry = registry;
}
@@ -97,6 +96,11 @@ namespace Ryujinx.HLE.HOS.Services.Sm
IpcService service = GetServiceInstance(type, context, serviceAttribute.Parameter);
+ if (_commonServer is null)
+ {
+ _commonServer = new ServerBase(context.Device.System.KernelContext, "Common");
+ }
+
service.TrySetServer(_commonServer);
service.Server.AddSessionObj(session.ServerSession, service);
}
@@ -253,7 +257,7 @@ namespace Ryujinx.HLE.HOS.Services.Sm
public override void DestroyAtExit()
{
- _commonServer.Dispose();
+ _commonServer?.Dispose();
base.DestroyAtExit();
}
diff --git a/src/Ryujinx.Horizon/ServiceEntry.cs b/src/Ryujinx.Horizon/ServiceEntry.cs
index edf76fcd8..8cdeeff21 100644
--- a/src/Ryujinx.Horizon/ServiceEntry.cs
+++ b/src/Ryujinx.Horizon/ServiceEntry.cs
@@ -9,12 +9,14 @@ namespace Ryujinx.Horizon
private readonly Action _entrypoint;
private readonly ServiceTable _serviceTable;
private readonly HorizonOptions _options;
+ public readonly string Name;
- internal ServiceEntry(Action entrypoint, ServiceTable serviceTable, HorizonOptions options)
+ internal ServiceEntry(Action entrypoint, ServiceTable serviceTable, HorizonOptions options, string name)
{
_entrypoint = entrypoint;
_serviceTable = serviceTable;
_options = options;
+ Name = name;
}
public void Start(ISyscallApi syscallApi, IVirtualMemoryManager addressSpace, IThreadContext threadContext)
diff --git a/src/Ryujinx.Horizon/ServiceTable.cs b/src/Ryujinx.Horizon/ServiceTable.cs
index db24c193d..172d2919b 100644
--- a/src/Ryujinx.Horizon/ServiceTable.cs
+++ b/src/Ryujinx.Horizon/ServiceTable.cs
@@ -37,7 +37,7 @@ namespace Ryujinx.Horizon
void RegisterService() where T : IService
{
- entries.Add(new ServiceEntry(T.Main, this, options));
+ entries.Add(new ServiceEntry(T.Main, this, options, typeof(T).Name));
}
RegisterService();
From ecd1c1240ce2d3f50243893230a1e1deb1e27a19 Mon Sep 17 00:00:00 2001
From: Ryujinx Administrator
Date: Thu, 2 Apr 2026 01:23:03 -0500
Subject: [PATCH 04/12] bump to GLI 2.0.31 (uses legacy.git.ryujinx.app)
---
.github/workflows/canary.yml | 2 +-
.github/workflows/release.yml | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/.github/workflows/canary.yml b/.github/workflows/canary.yml
index 3327d72d3..b631b48a2 100644
--- a/.github/workflows/canary.yml
+++ b/.github/workflows/canary.yml
@@ -50,7 +50,7 @@ jobs:
- name: Install gli
run: |
mkdir -p $HOME/.bin
- gh release download -R GreemDev/GLI -O gli -p 'gli-linux-x64' 2.0.30
+ gh release download -R GreemDev/GLI -O gli -p 'gli-linux-x64' 2.0.31
chmod +x gli
mv gli $HOME/.bin/
echo "$HOME/.bin" >> $GITHUB_PATH
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 32971626c..7ebbdbe98 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -44,7 +44,7 @@ jobs:
- name: Install gli
run: |
mkdir -p $HOME/.bin
- gh release download -R GreemDev/GLI -O gli -p 'gli-linux-x64' 2.0.30
+ gh release download -R GreemDev/GLI -O gli -p 'gli-linux-x64' 2.0.31
chmod +x gli
mv gli $HOME/.bin/
echo "$HOME/.bin" >> $GITHUB_PATH
From 744c41937b3f69eb1b284875366459d26b7c4c44 Mon Sep 17 00:00:00 2001
From: GreemDev
Date: Sat, 11 Apr 2026 18:10:31 -0500
Subject: [PATCH 05/12] feature: Forgejo Actions
---
{.github => .forgejo}/csc.json | 0
{.github => .forgejo}/labeler.yml | 2 +-
{.github => .forgejo}/reviewers.yml | 0
.forgejo/workflows/build.yml | 197 ++++++++++++++++++
{.github => .forgejo}/workflows/canary.yml | 152 +++++++-------
{.github => .forgejo}/workflows/pr_triage.yml | 7 +-
{.github => .forgejo}/workflows/release.yml | 138 ++++++------
.../workflows/unused}/nightly_pr_comment.yml | 0
.github/ISSUE_TEMPLATE/bug_report.yml | 86 --------
.github/ISSUE_TEMPLATE/config.yml | 5 -
.github/ISSUE_TEMPLATE/feature_request.yml | 31 ---
.../missing_cpu_instruction.yml | 26 ---
.../ISSUE_TEMPLATE/missing_service_call.yml | 25 ---
.../missing_shader_instruction.yml | 19 --
.github/workflows/build.yml | 168 ---------------
.github/workflows/checks.yml | 25 ---
16 files changed, 338 insertions(+), 543 deletions(-)
rename {.github => .forgejo}/csc.json (100%)
rename {.github => .forgejo}/labeler.yml (90%)
rename {.github => .forgejo}/reviewers.yml (100%)
create mode 100644 .forgejo/workflows/build.yml
rename {.github => .forgejo}/workflows/canary.yml (59%)
rename {.github => .forgejo}/workflows/pr_triage.yml (83%)
rename {.github => .forgejo}/workflows/release.yml (61%)
rename {.github/workflows => .forgejo/workflows/unused}/nightly_pr_comment.yml (100%)
delete mode 100644 .github/ISSUE_TEMPLATE/bug_report.yml
delete mode 100644 .github/ISSUE_TEMPLATE/config.yml
delete mode 100644 .github/ISSUE_TEMPLATE/feature_request.yml
delete mode 100644 .github/ISSUE_TEMPLATE/missing_cpu_instruction.yml
delete mode 100644 .github/ISSUE_TEMPLATE/missing_service_call.yml
delete mode 100644 .github/ISSUE_TEMPLATE/missing_shader_instruction.yml
delete mode 100644 .github/workflows/build.yml
delete mode 100644 .github/workflows/checks.yml
diff --git a/.github/csc.json b/.forgejo/csc.json
similarity index 100%
rename from .github/csc.json
rename to .forgejo/csc.json
diff --git a/.github/labeler.yml b/.forgejo/labeler.yml
similarity index 90%
rename from .github/labeler.yml
rename to .forgejo/labeler.yml
index b80dbb1fb..3fe991a18 100644
--- a/.github/labeler.yml
+++ b/.forgejo/labeler.yml
@@ -36,7 +36,7 @@ kernel:
infra:
- changed-files:
- - any-glob-to-any-file: ['.github/**', 'distribution/**', 'Directory.Packages.props', 'src/Ryujinx.BuildValidationTasks/**']
+ - any-glob-to-any-file: ['.forgejo/**', 'distribution/**', 'Directory.Packages.props', 'src/Ryujinx.BuildValidationTasks/**']
documentation:
- changed-files:
diff --git a/.github/reviewers.yml b/.forgejo/reviewers.yml
similarity index 100%
rename from .github/reviewers.yml
rename to .forgejo/reviewers.yml
diff --git a/.forgejo/workflows/build.yml b/.forgejo/workflows/build.yml
new file mode 100644
index 000000000..3a23f2ae8
--- /dev/null
+++ b/.forgejo/workflows/build.yml
@@ -0,0 +1,197 @@
+name: Build PR
+
+on:
+ pull_request:
+ branches: [ master ]
+ paths:
+ - '**'
+ - '!.forgejo/**'
+ - '!*.yml'
+ - '!*.config'
+ - '!*.md'
+ - '.forgejo/workflows/*.yml'
+
+env:
+ POWERSHELL_TELEMETRY_OPTOUT: 1
+ DOTNET_CLI_TELEMETRY_OPTOUT: 1
+ RELEASE: 0
+
+jobs:
+ build:
+ name: ${{ matrix.platform.name }} (${{ matrix.configuration }})
+ runs-on: docker
+ container:
+ image: ghcr.io/catthehacker/ubuntu:act-latest
+ timeout-minutes: 45
+ strategy:
+ matrix:
+ configuration: [Release]
+ platform:
+ - { name: win-x64, zip_os_name: win_x64 }
+ #- { name: win-arm64, zip_os_name: win_arm64 }
+ - { name: linux-x64, zip_os_name: linux_x64 }
+ - { name: linux-arm64, zip_os_name: linux_arm64 }
+ #- { name: osx-x64, zip_os_name: osx_x64 }
+
+ fail-fast: false
+ steps:
+ - uses: actions/checkout@v4
+
+ - uses: actions/setup-dotnet@v4
+ with:
+ global-json-file: global.json
+
+ - name: Install GLI
+ uses: actions/setup-gli@v1
+ with:
+ token: ${{ secrets.SETUP_GLI_TOKEN }}
+
+ - name: Overwrite csc problem matcher
+ run: echo "::add-matcher::.forgejo/csc.json"
+
+ - name: Get version info
+ id: version_info
+ run: |
+ echo "result=$(gli get-next-version -c Stable -R)" >> $FORGEJO_OUTPUT
+ echo "git_short_hash=$(git rev-parse --short "${{ forgejo.sha }}")" >> $FORGEJO_OUTPUT
+ shell: bash
+
+ - name: Change config filename
+ run: sed -r --in-place 's/\%\%RYUJINX_CONFIG_FILE_NAME\%\%/PRConfig\.json/g;' src/Ryujinx.Common/ReleaseInformation.cs
+ shell: bash
+ if: forgejo.event_name == 'pull_request'
+
+ - name: 'Cache: ~/.nuget/packages'
+ uses: actions/cache@v5
+ with:
+ path: |
+ ~/.nuget/packages
+ key: ${{ runner.os }}-${{ hashFiles('**/global.json', '**/*.csproj', '**/Directory.Packages.props') }}
+
+ - name: Build
+ run: dotnet build -c "${{ matrix.configuration }}" -p:Version="${{ steps.version_info.outputs.result }}" -p:SourceRevisionId="${{ steps.version_info.outputs.git_short_hash }}" -p:ExtraDefineConstants=DISABLE_UPDATER
+
+ - name: Test
+ uses: actions/unstable-commands@v1
+ with:
+ commands: dotnet test --no-build -c "${{ matrix.configuration }}"
+ timeout-minutes: 10
+ retry-codes: 139
+ if: matrix.platform.name != 'linux-arm64'
+
+ - name: Publish Ryujinx
+ run: dotnet publish -c "${{ matrix.configuration }}" -r "${{ matrix.platform.name }}" -o ./publish -p:Version="${{ steps.version_info.outputs.result }}" -p:DebugType=embedded -p:SourceRevisionId="${{ steps.version_info.outputs.git_short_hash }}" -p:ExtraDefineConstants=DISABLE_UPDATER src/Ryujinx --self-contained
+ if: forgejo.event_name == 'pull_request'
+
+ - name: Set executable bit
+ run: |
+ chmod +x ./publish/Ryujinx ./publish/Ryujinx.sh
+ if: forgejo.event_name == 'pull_request' && contains(matrix.platform.name, 'linux')
+
+ - name: Build AppImage
+ if: forgejo.event_name == 'pull_request' && contains(matrix.platform.name, 'linux')
+ run: |
+ PLATFORM_NAME="${{ matrix.platform.name }}"
+
+ sudo apt update && sudo apt install -y zsync desktop-file-utils appstream libfuse2t64
+
+ mkdir -p tools
+ export PATH="$PATH:$(readlink -f tools)"
+
+ # Setup appimagetool
+ wget -q -O tools/appimagetool "https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage"
+ chmod +x tools/appimagetool
+ chmod +x distribution/linux/appimage/build-appimage.sh
+
+ # Explicitly set $ARCH for appimagetool ($ARCH_NAME is for the file name)
+ if [ "$PLATFORM_NAME" = "linux-x64" ]; then
+ ARCH_NAME=x64
+ export ARCH=x86_64
+ elif [ "$PLATFORM_NAME" = "linux-arm64" ]; then
+ ARCH_NAME=arm64
+ export ARCH=aarch64
+ else
+ echo "Unexpected PLATFORM_NAME "$PLATFORM_NAME""
+ exit 1
+ fi
+
+ BUILDDIR=publish OUTDIR=publish_appimage distribution/linux/appimage/build-appimage.sh
+ shell: bash
+
+ - name: Upload Ryujinx artifact
+ uses: actions/upload-artifact@v4
+ with:
+ name: ryujinx-${{ matrix.configuration }}-${{ steps.version_info.outputs.result }}+${{ steps.version_info.outputs.git_short_hash }}-${{ matrix.platform.zip_os_name }}
+ path: publish
+ if: forgejo.event_name == 'pull_request'
+
+ - name: Upload Ryujinx (AppImage) artifact
+ uses: actions/upload-artifact@v4
+ if: forgejo.event_name == 'pull_request' && contains(matrix.platform.name, 'linux')
+ with:
+ name: ryujinx-${{ matrix.configuration }}-${{ steps.version_info.outputs.result }}+${{ steps.version_info.outputs.git_short_hash }}-${{ matrix.platform.zip_os_name }}-AppImage
+ path: publish_appimage
+
+ build_macos:
+ name: macOS Universal (${{ matrix.configuration }})
+ runs-on: ubuntu-latest
+ timeout-minutes: 45
+ strategy:
+ matrix:
+ configuration: [ Release ]
+
+ steps:
+ - uses: actions/checkout@v4
+
+ - uses: actions/setup-dotnet@v4
+ with:
+ global-json-file: global.json
+
+ - name: Setup LLVM 17
+ run: |
+ wget https://apt.llvm.org/llvm.sh
+ chmod +x llvm.sh
+ sudo ./llvm.sh 17
+
+ - name: Install GLI
+ uses: actions/setup-gli@v1
+ with:
+ token: ${{ secrets.SETUP_GLI_TOKEN }}
+
+ - name: Install rcodesign
+ run: |
+ gli ghr -R indygreg/apple-platform-rs -p apple-codesign-*-x86_64-unknown-linux-musl.tar.gz -O apple-codesign.tar.gz
+ tar -xzvf apple-codesign.tar.gz --wildcards '*/rcodesign' --strip-components=1
+ rm apple-codesign.tar.gz
+ sudo mv rcodesign /usr/bin/rcodesign
+
+ - name: Get version info
+ id: version_info
+ run: |
+ echo "result=$(gli get-next-version -c Stable -R)" >> $FORGEJO_OUTPUT
+ echo "git_short_hash=$(git rev-parse --short "${{ forgejo.sha }}")" >> $FORGEJO_OUTPUT
+ shell: bash
+
+ - name: Change config filename
+ run: sed -r --in-place 's/\%\%RYUJINX_CONFIG_FILE_NAME\%\%/PRConfig\.json/g;' src/Ryujinx.Common/ReleaseInformation.cs
+ shell: bash
+ if: forgejo.event_name == 'pull_request'
+
+ - name: 'Cache: ~/.nuget/packages'
+ uses: actions/cache@v5
+ with:
+ path: |
+ ~/.nuget/packages
+ key: ${{ runner.os }}-${{ hashFiles('**/global.json', '**/*.csproj', '**/Directory.Packages.props') }}
+
+ - name: Publish macOS Ryujinx
+ run: |
+ bash distribution/macos/create_macos_pr_build_ava.sh . publish_tmp publish ./distribution/macos/entitlements.xml "${{ steps.version_info.outputs.result }}" "${{ steps.version_info.outputs.git_short_hash }}" "${{ matrix.configuration }}" "-p:ExtraDefineConstants=DISABLE_UPDATER"
+ shell: bash
+
+ - name: Upload Ryujinx artifact
+ uses: actions/upload-artifact@v4
+ with:
+ name: ryujinx-${{ matrix.configuration }}-${{ steps.version_info.outputs.result }}+${{ steps.version_info.outputs.git_short_hash }}-macos_universal
+ path: "publish/*.tar.gz"
+ if: forgejo.event_name == 'pull_request'
diff --git a/.github/workflows/canary.yml b/.forgejo/workflows/canary.yml
similarity index 59%
rename from .github/workflows/canary.yml
rename to .forgejo/workflows/canary.yml
index b631b48a2..f602696a3 100644
--- a/.github/workflows/canary.yml
+++ b/.forgejo/workflows/canary.yml
@@ -6,7 +6,7 @@ on:
push:
branches: [ master ]
paths-ignore:
- - '.github/**'
+ - '.forgejo/**'
- 'docs/**'
- 'assets/**'
- '*.yml'
@@ -25,45 +25,42 @@ env:
jobs:
release:
name: Release for ${{ matrix.platform.name }}
- runs-on: ${{ matrix.platform.os }}
+ runs-on: docker
+ container:
+ image: ${{ matrix.platform.os }}
strategy:
matrix:
platform:
- - { name: win-x64, os: ubuntu-latest, zip_os_name: win_x64 }
- #- { name: win-arm64, os: ubuntu-latest, zip_os_name: win_arm64 }
- - { name: linux-x64, os: ubuntu-latest, zip_os_name: linux_x64 }
- - { name: linux-arm64, os: ubuntu-latest, zip_os_name: linux_arm64 }
+ - { name: win-x64, os: ghcr.io/catthehacker/ubuntu:act-latest, zip_os_name: win_x64 }
+ #- { name: win-arm64, os: ghcr.io/catthehacker/ubuntu:act-latest, zip_os_name: win_arm64 }
+ - { name: linux-x64, os: ghcr.io/catthehacker/ubuntu:act-latest, zip_os_name: linux_x64 }
+ - { name: linux-arm64, os: ghcr.io/catthehacker/ubuntu:act-latest, zip_os_name: linux_arm64 }
steps:
- - uses: actions/checkout@v4
+ - uses: actions/checkout@v6
- - uses: actions/setup-dotnet@v4
+ - uses: actions/setup-dotnet@v5
with:
global-json-file: global.json
- name: Overwrite csc problem matcher
- run: echo "::add-matcher::.github/csc.json"
+ run: echo "::add-matcher::.forgejo/csc.json"
+
+ - name: Install GLI
+ uses: actions/setup-gli@v1
+ with:
+ token: ${{ secrets.SETUP_GLI_TOKEN }}
- name: Install 7zip
run: |
- sudo apt install -y 7zip
-
- - name: Install gli
- run: |
- mkdir -p $HOME/.bin
- gh release download -R GreemDev/GLI -O gli -p 'gli-linux-x64' 2.0.31
- chmod +x gli
- mv gli $HOME/.bin/
- echo "$HOME/.bin" >> $GITHUB_PATH
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ sudo apt update && sudo apt install -y 7zip
- name: Get version info
id: version_info
run: |
- echo "build_version=$(gli get-next-version -c Canary -R)" >> $GITHUB_OUTPUT
- echo "prev_build_version=$(gli get-current-version -c Canary -R)" >> $GITHUB_OUTPUT
- echo "git_short_hash=$(git rev-parse --short "${{ github.sha }}")" >> $GITHUB_OUTPUT
- shell: bash
+ echo "build_version=$(gli get-next-version -c Canary -R)" >> $FORGEJO_OUTPUT
+ echo "prev_build_version=$(gli get-current-version -c Canary -R)" >> $FORGEJO_OUTPUT
+ echo "git_short_hash=$(git rev-parse --short "${{ forgejo.sha }}")" >> $FORGEJO_OUTPUT
+ shell: bash
- name: Configure for release
run: |
@@ -88,11 +85,7 @@ jobs:
rm libarmeilleure-jitsupport.dylib
7z a ../release_output/ryujinx-canary-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.zip ../publish
popd
-
- gli upload-generic-package -T ${{ secrets.GITLAB_TOKEN }} -P ryubing/canary -n Ryubing-Canary -v ${{ steps.version_info.outputs.build_version }} -r 5 -p release_output/ryujinx-canary-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.zip
shell: bash
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Packing Linux builds
if: contains(matrix.platform.name, 'linux')
@@ -102,8 +95,6 @@ jobs:
chmod +x Ryujinx.sh Ryujinx
tar -czvf ../release_output/ryujinx-canary-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.tar.gz ../publish
popd
-
- gli upload-generic-package -T ${{ secrets.GITLAB_TOKEN }} -P ryubing/canary -n Ryubing-Canary -v ${{ steps.version_info.outputs.build_version }} -r 5 -p release_output/ryujinx-canary-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.tar.gz
shell: bash
- name: Build AppImage (Linux)
@@ -112,7 +103,7 @@ jobs:
BUILD_VERSION="${{ steps.version_info.outputs.build_version }}"
PLATFORM_NAME="${{ matrix.platform.name }}"
- sudo apt install -y zsync desktop-file-utils appstream
+ sudo apt update && sudo apt install -y zsync desktop-file-utils appstream libfuse2t64
mkdir -p tools
export PATH="$PATH:$(readlink -f tools)"
@@ -139,17 +130,27 @@ jobs:
pushd publish_appimage
mv Ryujinx.AppImage ../release_output/ryujinx-canary-$BUILD_VERSION-$ARCH_NAME.AppImage
popd
-
- gli upload-generic-package -T ${{ secrets.GITLAB_TOKEN }} -P ryubing/canary -n Ryubing-Canary -v ${{ steps.version_info.outputs.build_version }} -r 5 -p release_output/ryujinx-canary-$BUILD_VERSION-$ARCH_NAME.AppImage
shell: bash
+ - name: Create release
+ uses: actions/create-release@v1
+ with:
+ name: "Canary ${{ steps.version_info.outputs.build_version }}"
+ repository: "Ryubing/canary-test"
+ token: ${{ secrets.RELEASER_TOKEN }}
+ tag_name: ${{ steps.version_info.outputs.build_version }}
+ files: |-
+ release_output/**
+
macos_release:
name: Release MacOS universal
- runs-on: ubuntu-24.04
+ runs-on: docker
+ container:
+ image: ghcr.io/catthehacker/ubuntu:act-latest
steps:
- - uses: actions/checkout@v4
+ - uses: actions/checkout@v6
- - uses: actions/setup-dotnet@v4
+ - uses: actions/setup-dotnet@v5
with:
global-json-file: global.json
@@ -159,33 +160,24 @@ jobs:
chmod +x llvm.sh
sudo ./llvm.sh 17
- - name: Install gli
- run: |
- mkdir -p $HOME/.bin
- gh release download -R GreemDev/GLI -O gli -p 'gli-linux-x64' 2.0.30
- chmod +x gli
- mv gli $HOME/.bin/
- echo "$HOME/.bin" >> $GITHUB_PATH
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ - name: Install GLI
+ uses: actions/setup-gli@v1
+ with:
+ token: ${{ secrets.SETUP_GLI_TOKEN }}
- name: Install rcodesign
run: |
- mkdir -p $HOME/.bin
- gh release download -R indygreg/apple-platform-rs -O apple-codesign.tar.gz -p 'apple-codesign-*-x86_64-unknown-linux-musl.tar.gz'
+ gli ghr -R indygreg/apple-platform-rs -p apple-codesign-*-x86_64-unknown-linux-musl.tar.gz -O apple-codesign.tar.gz
tar -xzvf apple-codesign.tar.gz --wildcards '*/rcodesign' --strip-components=1
rm apple-codesign.tar.gz
- mv rcodesign $HOME/.bin/
- echo "$HOME/.bin" >> $GITHUB_PATH
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ mv rcodesign /usr/bin/rcodesign
- name: Get version info
id: version_info
run: |
- echo "build_version=$(gli get-next-version -c Canary -R)" >> $GITHUB_OUTPUT
- echo "prev_build_version=$(gli get-current-version -c Canary -R)" >> $GITHUB_OUTPUT
- echo "git_short_hash=$(git rev-parse --short "${{ github.sha }}")" >> $GITHUB_OUTPUT
+ echo "build_version=$(gli get-next-version -c Canary -R)" >> $FORGEJO_OUTPUT
+ echo "prev_build_version=$(gli get-current-version -c Canary -R)" >> $FORGEJO_OUTPUT
+ echo "git_short_hash=$(git rev-parse --short "${{ forgejo.sha }}")" >> $FORGEJO_OUTPUT
shell: bash
- name: Configure for release
@@ -201,46 +193,52 @@ jobs:
- name: Publish macOS Ryujinx
run: |
./distribution/macos/create_macos_build_ava.sh . publish_tmp_ava publish_ava ./distribution/macos/entitlements.xml "${{ steps.version_info.outputs.build_version }}" "${{ steps.version_info.outputs.git_short_hash }}" Release 1
- gli upload-generic-package -T ${{ secrets.GITLAB_TOKEN }} -P ryubing/canary -n Ryubing-Canary -v ${{ steps.version_info.outputs.build_version }} -r 5 -p publish_ava/ryujinx-canary-${{ steps.version_info.outputs.build_version }}-macos_universal.app.tar.gz
- create_gitlab_release:
- name: Create GitLab Release
- runs-on: ubuntu-24.04
+ - name: Create release
+ uses: actions/create-release@v1
+ with:
+ name: "Canary ${{ steps.version_info.outputs.build_version }}"
+ repository: "Ryubing/canary-test"
+ token: ${{ secrets.RELEASER_TOKEN }}
+ tag_name: ${{ steps.version_info.outputs.build_version }}
+ files: |-
+ publish_ava/ryujinx-canary-${{ steps.version_info.outputs.build_version }}-macos_universal.app.tar.gz
+
+ post_ci:
+ name: Post CI Steps
+ runs-on: docker
+ container:
+ image: ghcr.io/catthehacker/ubuntu:act-latest
needs:
- macos_release
- release
steps:
- uses: actions/checkout@v4
- - name: Install gli
- run: |
- mkdir -p $HOME/.bin
- gh release download -R GreemDev/GLI -O gli -p 'gli-linux-x64' 2.0.30
- chmod +x gli
- mv gli $HOME/.bin/
- echo "$HOME/.bin" >> $GITHUB_PATH
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ - name: Install GLI
+ uses: actions/setup-gli@v1
+ with:
+ token: ${{ secrets.SETUP_GLI_TOKEN }}
- name: Get version info
id: version_info
run: |
- echo "build_version=$(gli get-next-version -c Canary -R)" >> $GITHUB_OUTPUT
- echo "prev_build_version=$(gli get-current-version -c Canary -R)" >> $GITHUB_OUTPUT
- echo "git_short_hash=$(git rev-parse --short "${{ github.sha }}")" >> $GITHUB_OUTPUT
+ echo "build_version=$(gli get-next-version -c Canary -R)" >> $FORGEJO_OUTPUT
+ echo "prev_build_version=$(gli get-current-version -c Canary -R)" >> $FORGEJO_OUTPUT
+ echo "git_short_hash=$(git rev-parse --short "${{ forgejo.sha }}")" >> $FORGEJO_OUTPUT
shell: bash
- name: Create tag
run: |
- gli create-tag -T ${{ secrets.GITLAB_TOKEN }} -P ryubing/ryujinx -n Canary-${{ steps.version_info.outputs.build_version }} -r ${{ steps.version_info.outputs.git_short_hash }}
-
- - name: Create release
- run: |
- gli create-release-from-generic-package-files -T ${{ secrets.GITLAB_TOKEN }} -P ryubing/canary -n Ryubing-Canary -v ${{ steps.version_info.outputs.build_version }} -r main -t "Canary ${{ steps.version_info.outputs.build_version }}" -b "**Full Changelog:** [${{ steps.version_info.outputs.prev_build_version }}...${{ steps.version_info.outputs.build_version }}](https://git.ryujinx.app/ryubing/ryujinx/-/compare/Canary-${{ steps.version_info.outputs.prev_build_version }}...Canary-${{ steps.version_info.outputs.build_version }})"
+ gli create-tag -T ${{ secrets.RELEASER_TOKEN }} -P projects/Ryubing -n Canary-${{ steps.version_info.outputs.build_version }} -r ${{ steps.version_info.outputs.git_short_hash }}
+ - name: Link to actual source archives for Canary
+ run: |
+ gli canary-release -T ${{ secrets.RELEASER_TOKEN }} -P Ryubing/Canary -r ${{ steps.version_info.outputs.build_version }}
+
- name: Send notification webhook
run: |
- gli send-update-message -T ${{ secrets.GITLAB_TOKEN }} -P ryubing/canary -t ${{ steps.version_info.outputs.build_version }} -c FF4500 -w ${{ secrets.CANARY_DISCORD_WEBHOOK }} -i https://avatars.githubusercontent.com/u/192939710?s=200&v=4
+ gli send-update-message -T ${{ secrets.RELEASER_TOKEN }} -P Ryubing/Canary -t ${{ steps.version_info.outputs.build_version }} -c FF4500 -w ${{ secrets.CANARY_DISCORD_WEBHOOK }} -i https://avatars.githubusercontent.com/u/192939710?s=200&v=4
- name: Notify update server of new builds
run: |
@@ -248,4 +246,4 @@ jobs:
- name: Advance to the next version
run: |
- gli increment-version -T ${{ secrets.UPDATE_SERVER_ADMIN_TOKEN }} -c Canary
+ gli increment-version -T ${{ secrets.UPDATE_SERVER_ADMIN_TOKEN }} -c Canary
\ No newline at end of file
diff --git a/.github/workflows/pr_triage.yml b/.forgejo/workflows/pr_triage.yml
similarity index 83%
rename from .github/workflows/pr_triage.yml
rename to .forgejo/workflows/pr_triage.yml
index 2c4936159..954615d68 100644
--- a/.github/workflows/pr_triage.yml
+++ b/.forgejo/workflows/pr_triage.yml
@@ -5,10 +5,6 @@ on:
jobs:
triage:
- permissions:
- contents: read
- pull-requests: write
-
runs-on: ubuntu-latest
steps:
@@ -18,11 +14,12 @@ jobs:
with:
# Ensure we pin the source origin as pull_request_target run under forks.
fetch-depth: 0
- repository: GreemDev/Ryujinx
+ repository: projects/Ryubing
ref: master
- name: Update labels based on changes
uses: actions/labeler@v5
with:
+ configuration-path: .forgejo/labeler.yml
sync-labels: true
dot: true
diff --git a/.github/workflows/release.yml b/.forgejo/workflows/release.yml
similarity index 61%
rename from .github/workflows/release.yml
rename to .forgejo/workflows/release.yml
index 7ebbdbe98..ed9171f3d 100644
--- a/.github/workflows/release.yml
+++ b/.forgejo/workflows/release.yml
@@ -19,18 +19,20 @@ env:
jobs:
release:
name: Release for ${{ matrix.platform.name }}
- runs-on: ${{ matrix.platform.os }}
+ runs-on: docker
+ container:
+ image: ${{ matrix.platform.os }}
strategy:
matrix:
platform:
- - { name: win-x64, os: ubuntu-latest, zip_os_name: win_x64 }
- #- { name: win-arm64, os: ubuntu-latest, zip_os_name: win_arm64 }
- - { name: linux-x64, os: ubuntu-latest, zip_os_name: linux_x64 }
- - { name: linux-arm64, os: ubuntu-latest, zip_os_name: linux_arm64 }
+ - { name: win-x64, os: ghcr.io/catthehacker/ubuntu:act-latest, zip_os_name: win_x64 }
+ #- { name: win-arm64, os: ghcr.io/catthehacker/ubuntu:act-latest, zip_os_name: win_arm64 }
+ - { name: linux-x64, os: ghcr.io/catthehacker/ubuntu:act-latest, zip_os_name: linux_x64 }
+ - { name: linux-arm64, os: ghcr.io/catthehacker/ubuntu:act-latest, zip_os_name: linux_arm64 }
steps:
- - uses: actions/checkout@v4
+ - uses: actions/checkout@v6
- - uses: actions/setup-dotnet@v4
+ - uses: actions/setup-dotnet@v5
with:
global-json-file: global.json
@@ -41,26 +43,21 @@ jobs:
run: |
sudo apt install -y 7zip
- - name: Install gli
- run: |
- mkdir -p $HOME/.bin
- gh release download -R GreemDev/GLI -O gli -p 'gli-linux-x64' 2.0.31
- chmod +x gli
- mv gli $HOME/.bin/
- echo "$HOME/.bin" >> $GITHUB_PATH
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ - name: Install GLI
+ uses: actions/setup-gli@v1
+ with:
+ token: ${{ secrets.SETUP_GLI_TOKEN }}
- name: Get version info
id: version_info
run: |
if [ '${{ inputs.is_bugfix_release }}' == 'false' ]; then
- echo "build_version=$(gli get-next-version -m -c Stable -R)" >> $GITHUB_OUTPUT
+ echo "build_version=$(gli get-next-version -m -c Stable -R)" >> $FORGEJO_OUTPUT
else
- echo "build_version=$(gli get-next-version -c Stable -R)" >> $GITHUB_OUTPUT
+ echo "build_version=$(gli get-next-version -c Stable -R)" >> $FORGEJO_OUTPUT
fi
- echo "prev_build_version=$(gli get-current-version -c Stable -R)" >> $GITHUB_OUTPUT
- echo "git_short_hash=$(git rev-parse --short "${{ github.sha }}")" >> $GITHUB_OUTPUT
+ echo "prev_build_version=$(gli get-current-version -c Stable -R)" >> $FORGEJO_OUTPUT
+ echo "git_short_hash=$(git rev-parse --short "${{ forgejo.sha }}")" >> $FORGEJO_OUTPUT
shell: bash
- name: Configure for release
@@ -85,11 +82,7 @@ jobs:
rm libarmeilleure-jitsupport.dylib
7z a ../release_output/ryujinx-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.zip ../publish
popd
-
- gli upload-generic-package -T ${{ secrets.GITLAB_TOKEN }} -P ryubing/ryujinx -n Ryubing -v ${{ steps.version_info.outputs.build_version }} -r 5 -p release_output/ryujinx-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.zip
shell: bash
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Packing Linux builds
if: contains(matrix.platform.name, 'linux')
@@ -99,11 +92,7 @@ jobs:
chmod +x Ryujinx.sh Ryujinx
tar -czvf ../release_output/ryujinx-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.tar.gz ../publish
popd
-
- gli upload-generic-package -T ${{ secrets.GITLAB_TOKEN }} -P ryubing/ryujinx -n Ryubing -v ${{ steps.version_info.outputs.build_version }} -r 5 -p release_output/ryujinx-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.tar.gz
shell: bash
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Build AppImage (Linux)
if: contains(matrix.platform.name, 'linux')
@@ -138,17 +127,27 @@ jobs:
pushd publish_appimage
mv Ryujinx.AppImage ../release_output/ryujinx-$BUILD_VERSION-$ARCH_NAME.AppImage
popd
-
- gli upload-generic-package -T ${{ secrets.GITLAB_TOKEN }} -P ryubing/ryujinx -n Ryubing -v ${{ steps.version_info.outputs.build_version }} -r 5 -p release_output/ryujinx-$BUILD_VERSION-$ARCH_NAME.AppImage
shell: bash
+ - name: Create release
+ uses: actions/create-release@v1
+ with:
+ name: "${{ steps.version_info.outputs.build_version }}"
+ repository: "projects/Ryubing"
+ token: ${{ secrets.RELEASER_TOKEN }}
+ tag_name: ${{ steps.version_info.outputs.build_version }}
+ files: |-
+ release_output/**
+
macos_release:
name: Release MacOS universal
- runs-on: ubuntu-24.04
+ runs-on: docker
+ container:
+ image: ghcr.io/catthehacker/ubuntu:act-latest
steps:
- - uses: actions/checkout@v4
+ - uses: actions/checkout@v6
- - uses: actions/setup-dotnet@v4
+ - uses: actions/setup-dotnet@v5
with:
global-json-file: global.json
@@ -158,37 +157,28 @@ jobs:
chmod +x llvm.sh
sudo ./llvm.sh 17
- - name: Install gli
- run: |
- mkdir -p $HOME/.bin
- gh release download -R GreemDev/GLI -O gli -p 'gli-linux-x64' 2.0.30
- chmod +x gli
- mv gli $HOME/.bin/
- echo "$HOME/.bin" >> $GITHUB_PATH
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ - name: Install GLI
+ uses: actions/setup-gli@v1
+ with:
+ token: ${{ secrets.SETUP_GLI_TOKEN }}
- name: Install rcodesign
run: |
- mkdir -p $HOME/.bin
- gh release download -R indygreg/apple-platform-rs -O apple-codesign.tar.gz -p 'apple-codesign-*-x86_64-unknown-linux-musl.tar.gz'
+ gli ghr -R indygreg/apple-platform-rs -p apple-codesign-*-x86_64-unknown-linux-musl.tar.gz -O apple-codesign.tar.gz
tar -xzvf apple-codesign.tar.gz --wildcards '*/rcodesign' --strip-components=1
rm apple-codesign.tar.gz
- mv rcodesign $HOME/.bin/
- echo "$HOME/.bin" >> $GITHUB_PATH
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ mv rcodesign /usr/bin/rcodesign
- name: Get version info
id: version_info
run: |
if [ '${{ inputs.is_bugfix_release }}' == 'false' ]; then
- echo "build_version=$(gli get-next-version -m -c Stable -R)" >> $GITHUB_OUTPUT
+ echo "build_version=$(gli get-next-version -m -c Stable -R)" >> $FORGEJO_OUTPUT
else
- echo "build_version=$(gli get-next-version -c Stable -R)" >> $GITHUB_OUTPUT
+ echo "build_version=$(gli get-next-version -c Stable -R)" >> $FORGEJO_OUTPUT
fi
- echo "prev_build_version=$(gli get-current-version -c Stable -R)" >> $GITHUB_OUTPUT
- echo "git_short_hash=$(git rev-parse --short "${{ github.sha }}")" >> $GITHUB_OUTPUT
+ echo "prev_build_version=$(gli get-current-version -c Stable -R)" >> $FORGEJO_OUTPUT
+ echo "git_short_hash=$(git rev-parse --short "${{ forgejo.sha }}")" >> $FORGEJO_OUTPUT
shell: bash
- name: Configure for release
@@ -201,10 +191,18 @@ jobs:
- name: Publish macOS Ryujinx
run: |
- ./distribution/macos/create_macos_build_ava.sh . publish_tmp_ava publish ./distribution/macos/entitlements.xml "${{ steps.version_info.outputs.build_version }}" "${{ steps.version_info.outputs.git_short_hash }}" Release 0
-
- gli upload-generic-package -T ${{ secrets.GITLAB_TOKEN }} -P ryubing/ryujinx -n Ryubing -v ${{ steps.version_info.outputs.build_version }} -r 5 -p publish/ryujinx-${{ steps.version_info.outputs.build_version }}-macos_universal.app.tar.gz
-
+ bash distribution/macos/create_macos_build_ava.sh . publish_tmp_ava publish ./distribution/macos/entitlements.xml "${{ steps.version_info.outputs.build_version }}" "${{ steps.version_info.outputs.git_short_hash }}" Release 0
+
+ - name: Create release
+ uses: actions/create-release@v1
+ with:
+ name: "${{ steps.version_info.outputs.build_version }}"
+ repository: "projects/Ryubing"
+ token: ${{ secrets.RELEASER_TOKEN }}
+ tag_name: ${{ steps.version_info.outputs.build_version }}
+ files: |-
+ publish_ava/ryujinx-canary-${{ steps.version_info.outputs.build_version }}-macos_universal.app.tar.gz
+
create_gitlab_release:
name: Create GitLab Release
runs-on: ubuntu-24.04
@@ -214,36 +212,26 @@ jobs:
steps:
- uses: actions/checkout@v4
- - name: Install gli
- run: |
- mkdir -p $HOME/.bin
- gh release download -R GreemDev/GLI -O gli -p 'gli-linux-x64' 2.0.30
- chmod +x gli
- mv gli $HOME/.bin/
- echo "$HOME/.bin" >> $GITHUB_PATH
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ - name: Install GLI
+ uses: actions/setup-gli@v1
+ with:
+ token: ${{ secrets.SETUP_GLI_TOKEN }}
- name: Get version info
id: version_info
run: |
if [ '${{ inputs.is_bugfix_release }}' == 'false' ]; then
- echo "build_version=$(gli get-next-version -m -c Stable -R)" >> $GITHUB_OUTPUT
+ echo "build_version=$(gli get-next-version -m -c Stable -R)" >> $FORGEJO_OUTPUT
else
- echo "build_version=$(gli get-next-version -c Stable -R)" >> $GITHUB_OUTPUT
+ echo "build_version=$(gli get-next-version -c Stable -R)" >> $FORGEJO_OUTPUT
fi
- echo "prev_build_version=$(gli get-current-version -c Stable -R)" >> $GITHUB_OUTPUT
- echo "git_short_hash=$(git rev-parse --short "${{ github.sha }}")" >> $GITHUB_OUTPUT
- echo "commit_message=$(git log -1 --pretty=%B)" >> $GITHUB_OUTPUT
+ echo "prev_build_version=$(gli get-current-version -c Stable -R)" >> $FORGEJO_OUTPUT
+ echo "git_short_hash=$(git rev-parse --short "${{ forgejo.sha }}")" >> $FORGEJO_OUTPUT
shell: bash
- - name: Create release
- run: |
- gli create-release-from-generic-package-files -T ${{ secrets.GITLAB_TOKEN }} -P ryubing/ryujinx -n Ryubing -v ${{ steps.version_info.outputs.build_version }} -r ${{ steps.version_info.outputs.git_short_hash }} -t "${{ steps.version_info.outputs.build_version }}" -b "msd:${{ steps.version_info.outputs.build_version }}"
-
- name: Send notification webhook
run: |
- gli send-update-message -T ${{ secrets.GITLAB_TOKEN }} -P ryubing/ryujinx -t ${{ steps.version_info.outputs.build_version }} -c 32cd32 -w ${{ secrets.STABLE_DISCORD_WEBHOOK }} -i https://avatars.githubusercontent.com/u/192939710?s=200&v=4
+ gli send-update-message -T ${{ secrets.RELEASER_TOKEN }} -P projects/Ryubing -t ${{ steps.version_info.outputs.build_version }} -c 32cd32 -w ${{ secrets.STABLE_DISCORD_WEBHOOK }} -i https://avatars.githubusercontent.com/u/192939710?s=200&v=4
- name: Notify update server of new builds
run: |
diff --git a/.github/workflows/nightly_pr_comment.yml b/.forgejo/workflows/unused/nightly_pr_comment.yml
similarity index 100%
rename from .github/workflows/nightly_pr_comment.yml
rename to .forgejo/workflows/unused/nightly_pr_comment.yml
diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml
deleted file mode 100644
index 45f233dff..000000000
--- a/.github/ISSUE_TEMPLATE/bug_report.yml
+++ /dev/null
@@ -1,86 +0,0 @@
-name: Bug Report
-description: File a bug report
-title: "[Bug]"
-labels: bug
-body:
- - type: textarea
- id: issue
- attributes:
- label: Description of the issue
- description: What's the issue you encountered?
- validations:
- required: true
- - type: textarea
- id: repro
- attributes:
- label: Reproduction steps
- description: How can the issue be reproduced?
- placeholder: Describe each step as precisely as possible
- 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. UPLOAD THE FILE. DO NOT COPY AND PASTE THE FILE'S CONTENT."
- placeholder: Logs files can be found under "Logs" folder in Ryujinx program folder. They can also be accessed by opening Ryujinx, then going to File > Open Logs Folder. You can drag and drop the log on to the text area (do not copy paste).
- validations:
- required: true
- - type: input
- id: os
- attributes:
- label: OS
- placeholder: "e.g. Windows 10"
- validations:
- required: true
- - type: input
- id: ryujinx-version
- attributes:
- label: Ryujinx version
- placeholder: "e.g. 1.0.470"
- validations:
- required: true
- - type: input
- id: game-version
- attributes:
- label: Game version
- placeholder: "e.g. 1.1.1"
- validations:
- required: false
- - type: input
- id: cpu
- attributes:
- label: CPU
- placeholder: "e.g. i7-6700"
- validations:
- required: false
- - type: input
- id: gpu
- attributes:
- label: GPU
- placeholder: "e.g. NVIDIA RTX 2070"
- validations:
- required: false
- - type: input
- id: ram
- attributes:
- label: RAM
- placeholder: "e.g. 16GB"
- validations:
- required: false
- - type: textarea
- id: mods
- attributes:
- label: List of applied mods
- placeholder: You can list applied mods here.
- validations:
- required: false
- - type: textarea
- id: additional-context
- attributes:
- label: Additional context?
- description: |
- - Additional info about your environment:
- - Any other information relevant to your issue.
- validations:
- required: false
diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml
deleted file mode 100644
index abad80a3e..000000000
--- a/.github/ISSUE_TEMPLATE/config.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-blank_issues_enabled: false
-contact_links:
- - name: Ryujinx Discord
- url: https://discord.gg/N2FmfVc
- about: This is for development related issues. For support and technical issues, please come to our Discord server.
diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml
deleted file mode 100644
index 399aa039c..000000000
--- a/.github/ISSUE_TEMPLATE/feature_request.yml
+++ /dev/null
@@ -1,31 +0,0 @@
-name: Feature Request
-description: Suggest a new feature for Ryujinx.
-title: "[Feature Request]"
-labels: enhancement
-body:
- - type: textarea
- id: overview
- attributes:
- label: Overview
- description: Include the basic, high-level concepts for this feature here.
- validations:
- required: true
- - type: textarea
- id: details
- attributes:
- label: Smaller details
- description: These may include specific methods of implementation etc.
- validations:
- required: true
- - type: textarea
- id: request
- attributes:
- label: Nature of request
- validations:
- required: true
- - type: textarea
- id: feature
- attributes:
- label: Why would this feature be useful?
- validations:
- required: true
diff --git a/.github/ISSUE_TEMPLATE/missing_cpu_instruction.yml b/.github/ISSUE_TEMPLATE/missing_cpu_instruction.yml
deleted file mode 100644
index d815ddfd9..000000000
--- a/.github/ISSUE_TEMPLATE/missing_cpu_instruction.yml
+++ /dev/null
@@ -1,26 +0,0 @@
-name: Missing CPU Instruction
-description: CPU Instruction is missing in Ryujinx.
-title: "[CPU]"
-labels: [cpu, not-implemented]
-body:
- - type: textarea
- id: instruction
- attributes:
- label: CPU instruction
- description: What CPU instruction is missing?
- validations:
- required: true
- - type: textarea
- id: name
- attributes:
- label: Instruction name
- description: Include the name from [armconverter.com](https://armconverter.com/?disasm) or [shell-storm.org](http://shell-storm.org/online/Online-Assembler-and-Disassembler/?arch=arm64&endianness=big&dis_with_raw=True&dis_with_ins=True) in the above code block
- validations:
- required: true
- - type: textarea
- id: required
- attributes:
- label: Required by
- description: Add links to the [compatibility list page(s)](https://github.com/Ryujinx/Ryujinx-Games-List/issues) of the game(s) that require this instruction.
- validations:
- required: true
diff --git a/.github/ISSUE_TEMPLATE/missing_service_call.yml b/.github/ISSUE_TEMPLATE/missing_service_call.yml
deleted file mode 100644
index 80aae533b..000000000
--- a/.github/ISSUE_TEMPLATE/missing_service_call.yml
+++ /dev/null
@@ -1,25 +0,0 @@
-name: Missing Service Call
-description: Service call is missing in Ryujinx.
-labels: not-implemented
-body:
- - type: textarea
- id: instruction
- attributes:
- label: Service call
- description: What service call is missing?
- validations:
- required: true
- - type: textarea
- id: name
- attributes:
- label: Service description
- description: Include the description/explanation from [Switchbrew](https://switchbrew.org/w/index.php?title=Services_API) and/or [SwIPC](https://reswitched.github.io/SwIPC/) in the above code block
- validations:
- required: true
- - type: textarea
- id: required
- attributes:
- label: Required by
- description: Add links to the [compatibility list page(s)](https://github.com/Ryujinx/Ryujinx-Games-List/issues) of the game(s) that require this service.
- validations:
- required: true
\ No newline at end of file
diff --git a/.github/ISSUE_TEMPLATE/missing_shader_instruction.yml b/.github/ISSUE_TEMPLATE/missing_shader_instruction.yml
deleted file mode 100644
index df37859a5..000000000
--- a/.github/ISSUE_TEMPLATE/missing_shader_instruction.yml
+++ /dev/null
@@ -1,19 +0,0 @@
-name: Missing Shader Instruction
-description: Shader Instruction is missing in Ryujinx.
-title: "[GPU]"
-labels: [gpu, not-implemented]
-body:
- - type: textarea
- id: instruction
- attributes:
- label: Shader instruction
- description: What shader instruction is missing?
- validations:
- required: true
- - type: textarea
- id: required
- attributes:
- label: Required by
- description: Add links to the [compatibility list page(s)](https://github.com/Ryujinx/Ryujinx-Games-List/issues) of the game(s) that require this instruction.
- validations:
- required: true
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
deleted file mode 100644
index a70dcc6f8..000000000
--- a/.github/workflows/build.yml
+++ /dev/null
@@ -1,168 +0,0 @@
-name: Build job
-
-on:
- workflow_call:
-
-env:
- POWERSHELL_TELEMETRY_OPTOUT: 1
- DOTNET_CLI_TELEMETRY_OPTOUT: 1
- RYUJINX_BASE_VERSION: "1.2.0"
- RELEASE: 0
-
-jobs:
- build:
- name: ${{ matrix.platform.name }} (${{ matrix.configuration }})
- runs-on: ${{ matrix.platform.os }}
- timeout-minutes: 45
- strategy:
- matrix:
- configuration: [Debug, Release]
- platform:
- - { name: win-x64, os: windows-latest, zip_os_name: win_x64 }
- - { name: win-arm64, os: windows-latest, zip_os_name: win_arm64 }
- - { name: linux-x64, os: ubuntu-latest, zip_os_name: linux_x64 }
- - { name: linux-arm64, os: ubuntu-latest, zip_os_name: linux_arm64 }
- - { name: osx-x64, os: macos-13, zip_os_name: osx_x64 }
-
- fail-fast: false
- steps:
- - uses: actions/checkout@v4
-
- - uses: actions/setup-dotnet@v4
- with:
- global-json-file: global.json
-
- - name: Overwrite csc problem matcher
- run: echo "::add-matcher::.github/csc.json"
-
- - name: Get git short hash
- id: git_short_hash
- run: echo "result=$(git rev-parse --short "${{ github.sha }}")" >> $GITHUB_OUTPUT
- shell: bash
-
- - name: Change config filename
- run: sed -r --in-place 's/\%\%RYUJINX_CONFIG_FILE_NAME\%\%/PRConfig\.json/g;' src/Ryujinx.Common/ReleaseInformation.cs
- shell: bash
- if: github.event_name == 'pull_request' && matrix.platform.os != 'macos-13'
-
- - name: Change config filename for macOS
- run: sed -r -i '' 's/\%\%RYUJINX_CONFIG_FILE_NAME\%\%/PRConfig\.json/g;' src/Ryujinx.Common/ReleaseInformation.cs
- shell: bash
- if: github.event_name == 'pull_request' && matrix.platform.os == 'macos-13'
-
- - name: Build
- run: dotnet build -c "${{ matrix.configuration }}" -p:Version="${{ env.RYUJINX_BASE_VERSION }}" -p:SourceRevisionId="${{ steps.git_short_hash.outputs.result }}" -p:ExtraDefineConstants=DISABLE_UPDATER
-
- - name: Test
- uses: TSRBerry/unstable-commands@v1
- with:
- commands: dotnet test --no-build -c "${{ matrix.configuration }}"
- timeout-minutes: 10
- retry-codes: 139
- if: matrix.platform.name != 'linux-arm64'
-
- - name: Publish Ryujinx
- run: dotnet publish -c "${{ matrix.configuration }}" -r "${{ matrix.platform.name }}" -o ./publish -p:Version="${{ env.RYUJINX_BASE_VERSION }}" -p:DebugType=embedded -p:SourceRevisionId="${{ steps.git_short_hash.outputs.result }}" -p:ExtraDefineConstants=DISABLE_UPDATER src/Ryujinx --self-contained
- if: github.event_name == 'pull_request' && matrix.platform.os != 'macos-13'
-
- - name: Set executable bit
- run: |
- chmod +x ./publish/Ryujinx ./publish/Ryujinx.sh
- if: github.event_name == 'pull_request' && matrix.platform.os == 'ubuntu-latest'
-
- - name: Build AppImage
- if: github.event_name == 'pull_request' && matrix.platform.os == 'ubuntu-latest'
- run: |
- PLATFORM_NAME="${{ matrix.platform.name }}"
-
- sudo apt install -y zsync desktop-file-utils appstream
-
- mkdir -p tools
- export PATH="$PATH:$(readlink -f tools)"
-
- # Setup appimagetool
- wget -q -O tools/appimagetool "https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage"
- chmod +x tools/appimagetool
- chmod +x distribution/linux/appimage/build-appimage.sh
-
- # Explicitly set $ARCH for appimagetool ($ARCH_NAME is for the file name)
- if [ "$PLATFORM_NAME" = "linux-x64" ]; then
- ARCH_NAME=x64
- export ARCH=x86_64
- elif [ "$PLATFORM_NAME" = "linux-arm64" ]; then
- ARCH_NAME=arm64
- export ARCH=aarch64
- else
- echo "Unexpected PLATFORM_NAME "$PLATFORM_NAME""
- exit 1
- fi
-
- export UFLAG="gh-releases-zsync|${{ github.repository_owner }}|${{ github.event.repository.name }}|latest|*-$ARCH_NAME.AppImage.zsync"
- BUILDDIR=publish OUTDIR=publish_appimage distribution/linux/appimage/build-appimage.sh
- shell: bash
-
- - name: Upload Ryujinx artifact
- uses: actions/upload-artifact@v4
- with:
- name: ryujinx-${{ matrix.configuration }}-${{ env.RYUJINX_BASE_VERSION }}+${{ steps.git_short_hash.outputs.result }}-${{ matrix.platform.zip_os_name }}
- path: publish
- if: github.event_name == 'pull_request' && matrix.platform.os != 'macos-13'
-
- - name: Upload Ryujinx (AppImage) artifact
- uses: actions/upload-artifact@v4
- if: github.event_name == 'pull_request' && matrix.platform.os == 'ubuntu-latest'
- with:
- name: ryujinx-${{ matrix.configuration }}-${{ env.RYUJINX_BASE_VERSION }}+${{ steps.git_short_hash.outputs.result }}-${{ matrix.platform.zip_os_name }}-AppImage
- path: publish_appimage
-
- build_macos:
- name: macOS Universal (${{ matrix.configuration }})
- runs-on: ubuntu-latest
- timeout-minutes: 45
- strategy:
- matrix:
- configuration: [ Debug, Release ]
-
- steps:
- - uses: actions/checkout@v4
-
- - uses: actions/setup-dotnet@v4
- with:
- global-json-file: global.json
-
- - name: Setup LLVM 17
- run: |
- wget https://apt.llvm.org/llvm.sh
- chmod +x llvm.sh
- sudo ./llvm.sh 17
-
- - name: Install rcodesign
- run: |
- mkdir -p $HOME/.bin
- gh release download -R indygreg/apple-platform-rs -O apple-codesign.tar.gz -p 'apple-codesign-*-x86_64-unknown-linux-musl.tar.gz'
- tar -xzvf apple-codesign.tar.gz --wildcards '*/rcodesign' --strip-components=1
- rm apple-codesign.tar.gz
- mv rcodesign $HOME/.bin/
- echo "$HOME/.bin" >> $GITHUB_PATH
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-
- - name: Get git short hash
- id: git_short_hash
- run: echo "result=$(git rev-parse --short "${{ github.sha }}")" >> $GITHUB_OUTPUT
-
- - name: Change config filename
- run: sed -r --in-place 's/\%\%RYUJINX_CONFIG_FILE_NAME\%\%/PRConfig\.json/g;' src/Ryujinx.Common/ReleaseInformation.cs
- shell: bash
- if: github.event_name == 'pull_request'
-
- - name: Publish macOS Ryujinx
- run: |
- ./distribution/macos/create_macos_build_ava.sh . publish_tmp publish ./distribution/macos/entitlements.xml "${{ env.RYUJINX_BASE_VERSION }}" "${{ steps.git_short_hash.outputs.result }}" "${{ matrix.configuration }}" "-p:ExtraDefineConstants=DISABLE_UPDATER"
-
- - name: Upload Ryujinx artifact
- uses: actions/upload-artifact@v4
- with:
- name: ryujinx-${{ matrix.configuration }}-${{ env.RYUJINX_BASE_VERSION }}+${{ steps.git_short_hash.outputs.result }}-macos_universal
- path: "publish/*.tar.gz"
- if: github.event_name == 'pull_request'
diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml
deleted file mode 100644
index 43c5f227a..000000000
--- a/.github/workflows/checks.yml
+++ /dev/null
@@ -1,25 +0,0 @@
-name: Build PR
-
-on:
- pull_request:
- branches: [ master ]
- paths:
- - '**'
- - '!.github/**'
- - '!*.yml'
- - '!*.config'
- - '!*.md'
- - '.github/workflows/*.yml'
-
-permissions:
- pull-requests: write
- checks: write
-
-concurrency:
- group: pr-checks-${{ github.event.number }}
- cancel-in-progress: true
-
-jobs:
- pr_build:
- uses: ./.github/workflows/build.yml
- secrets: inherit
From 3e393449aa8a519f5e16251c98ced6856182928e Mon Sep 17 00:00:00 2001
From: ryuadmin
Date: Sat, 11 Apr 2026 23:16:35 +0000
Subject: [PATCH 06/12] fix nuget sources post-migration
---
nuget.config | 7 +------
1 file changed, 1 insertion(+), 6 deletions(-)
diff --git a/nuget.config b/nuget.config
index c8d71a836..6ed8f8d89 100644
--- a/nuget.config
+++ b/nuget.config
@@ -5,8 +5,7 @@
-
-
+
@@ -14,10 +13,6 @@
-
-
-
-
From 66d9bc5a35ff3ae2e41c57e69b706d54ca86eb91 Mon Sep 17 00:00:00 2001
From: ryuadmin
Date: Sat, 11 Apr 2026 23:22:45 +0000
Subject: [PATCH 07/12] how did this happen lol
---
.forgejo/workflows/canary.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.forgejo/workflows/canary.yml b/.forgejo/workflows/canary.yml
index f602696a3..b26c22c0c 100644
--- a/.forgejo/workflows/canary.yml
+++ b/.forgejo/workflows/canary.yml
@@ -60,7 +60,7 @@ jobs:
echo "build_version=$(gli get-next-version -c Canary -R)" >> $FORGEJO_OUTPUT
echo "prev_build_version=$(gli get-current-version -c Canary -R)" >> $FORGEJO_OUTPUT
echo "git_short_hash=$(git rev-parse --short "${{ forgejo.sha }}")" >> $FORGEJO_OUTPUT
- shell: bash
+ shell: bash
- name: Configure for release
run: |
From 339cddd0e2bf09bac7b92c3607088ad7494f320c Mon Sep 17 00:00:00 2001
From: ryuadmin
Date: Sat, 11 Apr 2026 23:33:46 +0000
Subject: [PATCH 08/12] fix: extract-and-run AppImageTool in CI
---
distribution/linux/appimage/build-appimage.sh | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/distribution/linux/appimage/build-appimage.sh b/distribution/linux/appimage/build-appimage.sh
index 3ae65db30..b6eb394d8 100755
--- a/distribution/linux/appimage/build-appimage.sh
+++ b/distribution/linux/appimage/build-appimage.sh
@@ -22,5 +22,5 @@ chmod +x AppDir/AppRun AppDir/usr/bin/Ryujinx*
mkdir -p "$OUTDIR"
-appimagetool -n --comp zstd --mksquashfs-opt -Xcompression-level --mksquashfs-opt 21 \
- AppDir "$OUTDIR"/Ryujinx.AppImage
+appimagetool --appimage-extract-and-run -n --comp zstd --mksquashfs-opt -Xcompression-level --mksquashfs-opt 21 \
+ AppDir "$OUTDIR"/Ryujinx.AppImage
\ No newline at end of file
From 17a768a5df5727bf37faca60e1d85b0247125fb6 Mon Sep 17 00:00:00 2001
From: ryuadmin
Date: Sat, 11 Apr 2026 23:39:44 +0000
Subject: [PATCH 09/12] Update .forgejo/workflows/canary.yml
---
.forgejo/workflows/canary.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.forgejo/workflows/canary.yml b/.forgejo/workflows/canary.yml
index b26c22c0c..cd8f3aa1d 100644
--- a/.forgejo/workflows/canary.yml
+++ b/.forgejo/workflows/canary.yml
@@ -136,7 +136,7 @@ jobs:
uses: actions/create-release@v1
with:
name: "Canary ${{ steps.version_info.outputs.build_version }}"
- repository: "Ryubing/canary-test"
+ repository: "Ryubing/Canary"
token: ${{ secrets.RELEASER_TOKEN }}
tag_name: ${{ steps.version_info.outputs.build_version }}
files: |-
@@ -198,7 +198,7 @@ jobs:
uses: actions/create-release@v1
with:
name: "Canary ${{ steps.version_info.outputs.build_version }}"
- repository: "Ryubing/canary-test"
+ repository: "Ryubing/Canary"
token: ${{ secrets.RELEASER_TOKEN }}
tag_name: ${{ steps.version_info.outputs.build_version }}
files: |-
From 78eb95733a0e835a3dc835f86223f32e98132f35 Mon Sep 17 00:00:00 2001
From: ryuadmin
Date: Sun, 12 Apr 2026 00:17:13 +0000
Subject: [PATCH 10/12] Update README.md
---
README.md | 24 ++++++++++++------------
1 file changed, 12 insertions(+), 12 deletions(-)
diff --git a/README.md b/README.md
index 7a785055f..3ec3176ff 100644
--- a/README.md
+++ b/README.md
@@ -7,8 +7,8 @@
# Ryujinx
-[](https://update.ryujinx.app/latest/stable)
-[](https://update.ryujinx.app/latest/canary)
+[](https://update.ryujinx.app/latest/stable)
+[](https://update.ryujinx.app/latest/canary)
@@ -21,7 +21,7 @@
Ryujinx is an open-source Nintendo Switch emulator, originally created by gdkchan, written in C#.
This emulator aims at providing excellent accuracy and performance, a user-friendly interface and consistent builds.
It was written from scratch and development on the project began in September 2017.
- Ryujinx is available on a self-managed GitLab instance under the MIT license.
+ Ryujinx is available on a self-managed modified Forgejo instance under the MIT license.
@@ -31,11 +31,11 @@
This is not a Ryujinx revival project. This is not a Phoenix project.
- Guides and documentation can be found on the Wiki tab.
+ Guides and documentation can be found on the Wiki tab.
-
+
## Usage
@@ -49,17 +49,17 @@ Stable builds are made every so often, based on the `master` branch, that then g
These stable builds exist so that the end user can get a more **enjoyable and stable experience**.
They are released every month or so, to ensure consistent updates, while not being an annoying amount of individual updates to download over the course of that month.
-You can find the stable releases [here](https://git.ryujinx.app/ryubing/ryujinx/-/releases).
+You can find the stable releases [here](https://git.ryujinx.app/projects/Ryubing/releases).
Canary builds are compiled automatically for each commit on the `master` branch.
While we strive to ensure optimal stability and performance prior to pushing an update, these builds **may be unstable or completely broken**.
These canary builds are only recommended for experienced users.
-You can find the canary releases [here](https://git.ryujinx.app/ryubing/canary/-/releases).
+You can find the canary releases [here](https://git.ryujinx.app/Ryubing/Canary/releases).
## Documentation
-If you are planning to contribute or just want to learn more about this project please read through our [documentation](docs/README.md).
+If you are planning to contribute or just want to learn more about this project please read through our [documentation](https://git.ryujinx.app/projects/Ryubing/src/branch/master/docs/README.md).
## Features
@@ -105,13 +105,13 @@ If you are planning to contribute or just want to learn more about this project
## License
-This software is licensed under the terms of the [MIT license](LICENSE.txt).
+This software is licensed under the terms of the [MIT license](https://git.ryujinx.app/projects/Ryubing/src/branch/master/LICENSE.txt).
This project makes use of code authored by the libvpx project, licensed under BSD and the ffmpeg project, licensed under LGPLv3.
-See [LICENSE.txt](LICENSE.txt) and [THIRDPARTY.md](distribution/legal/THIRDPARTY.md) for more details.
+See [LICENSE.txt](https://git.ryujinx.app/projects/Ryubing/src/branch/master/LICENSE.txt) and [THIRDPARTY.md](https://git.ryujinx.app/projects/Ryubing/src/branch/master/distribution/legal/THIRDPARTY.md) for more details.
## Credits
-- [LibHac](https://git.ryujinx.app/ryubing/libhac) is used for our file-system.
+- [LibHac](https://git.ryujinx.app/projects/LibHac) is used for our file-system.
- [AmiiboAPI](https://www.amiiboapi.com) is used in our Amiibo emulation.
- [ldn_mitm](https://github.com/spacemeowx2/ldn_mitm) is used for one of our available multiplayer modes.
-- [ShellLink](https://github.com/securifybv/ShellLink) is used for Windows shortcut generation.
\ No newline at end of file
+- [ShellLink](https://github.com/securifybv/ShellLink) is used for Windows shortcut generation.
From 25b70e05d7d824f721f0af2a739494fa9ee03583 Mon Sep 17 00:00:00 2001
From: Shyanne
Date: Sat, 11 Apr 2026 22:34:03 -0400
Subject: [PATCH 11/12] Update BiquadFilterEffectParameterTests.cs
---
.../Parameter/Effect/BiquadFilterEffectParameterTests.cs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/Ryujinx.Tests/Audio/Renderer/Parameter/Effect/BiquadFilterEffectParameterTests.cs b/src/Ryujinx.Tests/Audio/Renderer/Parameter/Effect/BiquadFilterEffectParameterTests.cs
index d76478ed8..df63046af 100644
--- a/src/Ryujinx.Tests/Audio/Renderer/Parameter/Effect/BiquadFilterEffectParameterTests.cs
+++ b/src/Ryujinx.Tests/Audio/Renderer/Parameter/Effect/BiquadFilterEffectParameterTests.cs
@@ -10,7 +10,7 @@ namespace Ryujinx.Tests.Audio.Renderer.Parameter.Effect
public void EnsureTypeSize()
{
Assert.AreEqual(0x18, Unsafe.SizeOf());
- Assert.AreEqual(0x24, Unsafe.SizeOf());
+ Assert.AreEqual(0x28, Unsafe.SizeOf());
}
}
}
From 0079e0bfa5d51702a9b487d886140d9fe6105066 Mon Sep 17 00:00:00 2001
From: greem
Date: Sun, 12 Apr 2026 03:11:13 +0000
Subject: [PATCH 12/12] Add distribution/macos/create_macos_pr_build_ava.sh
(#3)
Reviewed-on: https://git.ryujinx.app/projects/Ryubing/pulls/3
---
.../macos/create_macos_pr_build_ava.sh | 120 ++++++++++++++++++
1 file changed, 120 insertions(+)
create mode 100644 distribution/macos/create_macos_pr_build_ava.sh
diff --git a/distribution/macos/create_macos_pr_build_ava.sh b/distribution/macos/create_macos_pr_build_ava.sh
new file mode 100644
index 000000000..206f2eec9
--- /dev/null
+++ b/distribution/macos/create_macos_pr_build_ava.sh
@@ -0,0 +1,120 @@
+#!/bin/bash
+
+set -e
+
+if [ "$#" -lt 8 ]; then
+ echo "usage "
+ exit 1
+fi
+
+mkdir -p "$1"
+mkdir -p "$2"
+mkdir -p "$3"
+
+BASE_DIR=$(readlink -f "$1")
+TEMP_DIRECTORY=$(readlink -f "$2")
+OUTPUT_DIRECTORY=$(readlink -f "$3")
+ENTITLEMENTS_FILE_PATH=$(readlink -f "$4")
+VERSION=$5
+SOURCE_REVISION_ID=$6
+CONFIGURATION=$7
+
+if [[ "$(uname)" == "Darwin" ]]; then
+ echo "Clearing xattr on all dot undercsore files"
+ find "$BASE_DIR" -type f -name "._*" -exec sh -c '
+ for f; do
+ dir=$(dirname "$f")
+ base=$(basename "$f")
+ orig="$dir/${base#._}"
+ [ -f "$orig" ] && xattr -c "$orig" || true
+ done
+ ' sh {} +
+fi
+
+RELEASE_TAR_FILE_NAME=ryujinx-$CONFIGURATION-$VERSION+$SOURCE_REVISION_ID-macos_universal.app.tar
+
+ARM64_APP_BUNDLE="$TEMP_DIRECTORY/output_arm64/Ryujinx.app"
+X64_APP_BUNDLE="$TEMP_DIRECTORY/output_x64/Ryujinx.app"
+UNIVERSAL_APP_BUNDLE="$OUTPUT_DIRECTORY/Ryujinx.app"
+EXECUTABLE_SUB_PATH=Contents/MacOS/Ryujinx
+
+rm -rf "$TEMP_DIRECTORY"
+mkdir -p "$TEMP_DIRECTORY"
+
+DOTNET_COMMON_ARGS=(-p:DebugType=embedded -p:Version="$VERSION" -p:SourceRevisionId="$SOURCE_REVISION_ID" --self-contained true $EXTRA_ARGS)
+
+dotnet restore
+dotnet build -c "$CONFIGURATION" src/Ryujinx
+dotnet publish -c "$CONFIGURATION" -r osx-arm64 -o "$TEMP_DIRECTORY/publish_arm64" "${DOTNET_COMMON_ARGS[@]}" src/Ryujinx
+dotnet publish -c "$CONFIGURATION" -r osx-x64 -o "$TEMP_DIRECTORY/publish_x64" "${DOTNET_COMMON_ARGS[@]}" src/Ryujinx
+
+# Get rid of the support library for ARMeilleure for x64 (that's only for arm64)
+rm -rf "$TEMP_DIRECTORY/publish_x64/libarmeilleure-jitsupport.dylib"
+
+# Get rid of libsoundio from arm64 builds as we don't have a arm64 variant
+# TODO: remove this once done
+rm -rf "$TEMP_DIRECTORY/publish_arm64/libsoundio.dylib"
+
+pushd "$BASE_DIR/distribution/macos"
+./create_app_bundle.sh "$TEMP_DIRECTORY/publish_x64" "$TEMP_DIRECTORY/output_x64" "$ENTITLEMENTS_FILE_PATH"
+./create_app_bundle.sh "$TEMP_DIRECTORY/publish_arm64" "$TEMP_DIRECTORY/output_arm64" "$ENTITLEMENTS_FILE_PATH"
+popd
+
+rm -rf "$UNIVERSAL_APP_BUNDLE"
+mkdir -p "$OUTPUT_DIRECTORY"
+
+# Let's copy one of the two different app bundle and remove the executable
+cp -R "$ARM64_APP_BUNDLE" "$UNIVERSAL_APP_BUNDLE"
+rm "$UNIVERSAL_APP_BUNDLE/$EXECUTABLE_SUB_PATH"
+
+# Make its libraries universal
+python3 "$BASE_DIR/distribution/macos/construct_universal_dylib.py" "$ARM64_APP_BUNDLE" "$X64_APP_BUNDLE" "$UNIVERSAL_APP_BUNDLE" "**/*.dylib"
+
+if ! [ -x "$(command -v lipo)" ];
+then
+ if ! [ -x "$(command -v llvm-lipo-17)" ];
+ then
+ LIPO=llvm-lipo
+ else
+ LIPO=llvm-lipo-17
+ fi
+else
+ LIPO=lipo
+fi
+
+# Make the executable universal
+$LIPO "$ARM64_APP_BUNDLE/$EXECUTABLE_SUB_PATH" "$X64_APP_BUNDLE/$EXECUTABLE_SUB_PATH" -output "$UNIVERSAL_APP_BUNDLE/$EXECUTABLE_SUB_PATH" -create
+
+# Patch up the Info.plist to have appropriate version
+sed -r -i.bck "s/\%\%RYUJINX_BUILD_VERSION\%\%/$VERSION/g;" "$UNIVERSAL_APP_BUNDLE/Contents/Info.plist"
+sed -r -i.bck "s/\%\%RYUJINX_BUILD_GIT_HASH\%\%/$SOURCE_REVISION_ID/g;" "$UNIVERSAL_APP_BUNDLE/Contents/Info.plist"
+rm "$UNIVERSAL_APP_BUNDLE/Contents/Info.plist.bck"
+
+# Now sign it
+if ! [ -x "$(command -v codesign)" ];
+then
+ if ! [ -x "$(command -v rcodesign)" ];
+ then
+ echo "Cannot find rcodesign on your system, please install rcodesign."
+ exit 1
+ fi
+
+ # NOTE: Currently require https://github.com/indygreg/apple-platform-rs/pull/44 to work on other OSes.
+ # cargo install --git "https://github.com/marysaka/apple-platform-rs" --branch "fix/adhoc-app-bundle" apple-codesign --bin "rcodesign"
+ echo "Using rcodesign for ad-hoc signing"
+ rcodesign sign --entitlements-xml-path "$ENTITLEMENTS_FILE_PATH" "$UNIVERSAL_APP_BUNDLE"
+else
+ echo "Using codesign for ad-hoc signing"
+ codesign --entitlements "$ENTITLEMENTS_FILE_PATH" -f -s - "$UNIVERSAL_APP_BUNDLE"
+fi
+
+echo "Creating archive"
+pushd "$OUTPUT_DIRECTORY"
+tar --exclude "Ryujinx.app/Contents/MacOS/Ryujinx" -cvf "$RELEASE_TAR_FILE_NAME" Ryujinx.app 1> /dev/null
+python3 "$BASE_DIR/distribution/misc/add_tar_exec.py" "$RELEASE_TAR_FILE_NAME" "Ryujinx.app/Contents/MacOS/Ryujinx" "Ryujinx.app/Contents/MacOS/Ryujinx"
+gzip -9 < "$RELEASE_TAR_FILE_NAME" > "$RELEASE_TAR_FILE_NAME.gz"
+rm "$RELEASE_TAR_FILE_NAME"
+
+popd
+
+echo "Done"