mirror of
https://github.com/ryujinx-mirror/ryujinx.git
synced 2024-12-22 12:45:45 +00:00
We should be fine to remove .github-orig/
This commit is contained in:
parent
a0624de3fd
commit
4ec5eb1806
17 changed files with 0 additions and 1117 deletions
|
@ -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.
|
|
||||||
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
|
|
|
@ -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.
|
|
|
@ -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
|
|
|
@ -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
|
|
|
@ -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
|
|
|
@ -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
|
|
|
@ -1,18 +0,0 @@
|
||||||
{
|
|
||||||
"problemMatcher": [
|
|
||||||
{
|
|
||||||
"owner": "csc",
|
|
||||||
"pattern": [
|
|
||||||
{
|
|
||||||
"regexp": "^((?:\\\\|/)(?:[^\\\\/:]+(?:\\\\|/))+[^\\\\/]+)\\((\\d+),(\\d+)\\):\\s+([a-zA-Z]+)\\s+([^:]+):\\s+([^[]+)\\s+\\[",
|
|
||||||
"file": 1,
|
|
||||||
"line": 2,
|
|
||||||
"column": 3,
|
|
||||||
"severity": 4,
|
|
||||||
"code": 5,
|
|
||||||
"message": 6
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
|
@ -1,40 +0,0 @@
|
||||||
version: 2
|
|
||||||
updates:
|
|
||||||
- package-ecosystem: "github-actions"
|
|
||||||
directory: "/"
|
|
||||||
schedule:
|
|
||||||
interval: weekly
|
|
||||||
labels:
|
|
||||||
- "infra"
|
|
||||||
reviewers:
|
|
||||||
- TSRBerry
|
|
||||||
commit-message:
|
|
||||||
prefix: "ci"
|
|
||||||
|
|
||||||
- package-ecosystem: nuget
|
|
||||||
directory: /
|
|
||||||
open-pull-requests-limit: 10
|
|
||||||
schedule:
|
|
||||||
interval: daily
|
|
||||||
labels:
|
|
||||||
- "infra"
|
|
||||||
reviewers:
|
|
||||||
- TSRBerry
|
|
||||||
commit-message:
|
|
||||||
prefix: nuget
|
|
||||||
groups:
|
|
||||||
Avalonia:
|
|
||||||
patterns:
|
|
||||||
- "*Avalonia*"
|
|
||||||
Silk.NET:
|
|
||||||
patterns:
|
|
||||||
- "Silk.NET*"
|
|
||||||
OpenTK:
|
|
||||||
patterns:
|
|
||||||
- "OpenTK*"
|
|
||||||
SixLabors:
|
|
||||||
patterns:
|
|
||||||
- "SixLabors*"
|
|
||||||
NUnit:
|
|
||||||
patterns:
|
|
||||||
- "NUnit*"
|
|
|
@ -1,35 +0,0 @@
|
||||||
audio:
|
|
||||||
- changed-files:
|
|
||||||
- any-glob-to-any-file: 'src/Ryujinx.Audio*/**'
|
|
||||||
|
|
||||||
cpu:
|
|
||||||
- changed-files:
|
|
||||||
- any-glob-to-any-file: ['src/ARMeilleure/**', 'src/Ryujinx.Cpu/**', 'src/Ryujinx.Memory/**']
|
|
||||||
|
|
||||||
gpu:
|
|
||||||
- changed-files:
|
|
||||||
- any-glob-to-any-file: ['src/Ryujinx.Graphics.*/**', 'src/Spv.Generator/**', 'src/Ryujinx.ShaderTools/**']
|
|
||||||
|
|
||||||
'graphics-backend:opengl':
|
|
||||||
- changed-files:
|
|
||||||
- any-glob-to-any-file: 'src/Ryujinx.Graphics.OpenGL/**'
|
|
||||||
|
|
||||||
'graphics-backend:vulkan':
|
|
||||||
- changed-files:
|
|
||||||
- any-glob-to-any-file: ['src/Ryujinx.Graphics.Vulkan/**', 'src/Spv.Generator/**']
|
|
||||||
|
|
||||||
gui:
|
|
||||||
- changed-files:
|
|
||||||
- any-glob-to-any-file: ['src/Ryujinx/**', 'src/Ryujinx.UI.Common/**', 'src/Ryujinx.UI.LocaleGenerator/**', 'src/Ryujinx.Gtk3/**']
|
|
||||||
|
|
||||||
horizon:
|
|
||||||
- changed-files:
|
|
||||||
- any-glob-to-any-file: ['src/Ryujinx.HLE/**', 'src/Ryujinx.Horizon/**']
|
|
||||||
|
|
||||||
kernel:
|
|
||||||
- changed-files:
|
|
||||||
- any-glob-to-any-file: 'src/Ryujinx.HLE/HOS/Kernel/**'
|
|
||||||
|
|
||||||
infra:
|
|
||||||
- changed-files:
|
|
||||||
- any-glob-to-any-file: ['.github/**', 'distribution/**', 'Directory.Packages.props']
|
|
|
@ -1,25 +0,0 @@
|
||||||
|
|
||||||
cpu:
|
|
||||||
- gdkchan
|
|
||||||
- riperiperi
|
|
||||||
- LDj3SNuD
|
|
||||||
|
|
||||||
gpu:
|
|
||||||
- gdkchan
|
|
||||||
- riperiperi
|
|
||||||
|
|
||||||
gui:
|
|
||||||
- Ack77
|
|
||||||
- emmauss
|
|
||||||
- TSRBerry
|
|
||||||
|
|
||||||
horizon:
|
|
||||||
- gdkchan
|
|
||||||
- Ack77
|
|
||||||
- TSRBerry
|
|
||||||
|
|
||||||
infra:
|
|
||||||
- TSRBerry
|
|
||||||
|
|
||||||
default:
|
|
||||||
- '@developers'
|
|
|
@ -1,163 +0,0 @@
|
||||||
name: Build job
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_call:
|
|
||||||
|
|
||||||
env:
|
|
||||||
POWERSHELL_TELEMETRY_OPTOUT: 1
|
|
||||||
DOTNET_CLI_TELEMETRY_OPTOUT: 1
|
|
||||||
RYUJINX_BASE_VERSION: "1.1.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: 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 true
|
|
||||||
if: github.event_name == 'pull_request' && matrix.platform.os != 'macos-13'
|
|
||||||
|
|
||||||
- name: Publish Ryujinx.Headless.SDL2
|
|
||||||
run: dotnet publish -c "${{ matrix.configuration }}" -r "${{ matrix.platform.name }}" -o ./publish_sdl2_headless -p:Version="${{ env.RYUJINX_BASE_VERSION }}" -p:DebugType=embedded -p:SourceRevisionId="${{ steps.git_short_hash.outputs.result }}" -p:ExtraDefineConstants=DISABLE_UPDATER src/Ryujinx.Headless.SDL2 --self-contained true
|
|
||||||
if: github.event_name == 'pull_request' && matrix.platform.os != 'macos-13'
|
|
||||||
|
|
||||||
- name: Publish Ryujinx.Gtk3
|
|
||||||
run: dotnet publish -c "${{ matrix.configuration }}" -r "${{ matrix.platform.name }}" -o ./publish_gtk -p:Version="${{ env.RYUJINX_BASE_VERSION }}" -p:DebugType=embedded -p:SourceRevisionId="${{ steps.git_short_hash.outputs.result }}" -p:ExtraDefineConstants=DISABLE_UPDATER src/Ryujinx.Gtk3 --self-contained true
|
|
||||||
if: github.event_name == 'pull_request' && matrix.platform.os != 'macos-13'
|
|
||||||
|
|
||||||
- name: Set executable bit
|
|
||||||
run: |
|
|
||||||
chmod +x ./publish/Ryujinx ./publish/Ryujinx.sh
|
|
||||||
chmod +x ./publish_sdl2_headless/Ryujinx.Headless.SDL2 ./publish_sdl2_headless/Ryujinx.sh
|
|
||||||
chmod +x ./publish_gtk/Ryujinx.Gtk3 ./publish_gtk/Ryujinx.sh
|
|
||||||
if: github.event_name == 'pull_request' && matrix.platform.os == 'ubuntu-latest'
|
|
||||||
|
|
||||||
- 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.Headless.SDL2 artifact
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: sdl2-ryujinx-headless-${{ matrix.configuration }}-${{ env.RYUJINX_BASE_VERSION }}+${{ steps.git_short_hash.outputs.result }}-${{ matrix.platform.zip_os_name }}
|
|
||||||
path: publish_sdl2_headless
|
|
||||||
if: github.event_name == 'pull_request' && matrix.platform.os != 'macos-13'
|
|
||||||
|
|
||||||
- name: Upload Ryujinx.Gtk3 artifact
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: gtk-ryujinx-${{ matrix.configuration }}-${{ env.RYUJINX_BASE_VERSION }}+${{ steps.git_short_hash.outputs.result }}-${{ matrix.platform.zip_os_name }}
|
|
||||||
path: publish_gtk
|
|
||||||
if: github.event_name == 'pull_request' && matrix.platform.os != 'macos-13'
|
|
||||||
|
|
||||||
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 14
|
|
||||||
run: |
|
|
||||||
wget https://apt.llvm.org/llvm.sh
|
|
||||||
chmod +x llvm.sh
|
|
||||||
sudo ./llvm.sh 14
|
|
||||||
|
|
||||||
- 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: Publish macOS Ryujinx.Headless.SDL2
|
|
||||||
run: |
|
|
||||||
./distribution/macos/create_macos_build_headless.sh . publish_tmp_headless publish_headless ./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'
|
|
||||||
|
|
||||||
- name: Upload Ryujinx.Headless.SDL2 artifact
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: sdl2-ryujinx-headless-${{ matrix.configuration }}-${{ env.RYUJINX_BASE_VERSION }}+${{ steps.git_short_hash.outputs.result }}-macos_universal
|
|
||||||
path: "publish_headless/*.tar.gz"
|
|
||||||
if: github.event_name == 'pull_request'
|
|
|
@ -1,74 +0,0 @@
|
||||||
name: Perform checks
|
|
||||||
|
|
||||||
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:
|
|
||||||
format:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
|
|
||||||
- uses: actions/setup-dotnet@v4
|
|
||||||
with:
|
|
||||||
global-json-file: global.json
|
|
||||||
|
|
||||||
- name: Overwrite csc problem matcher
|
|
||||||
run: echo "::add-matcher::.github/csc.json"
|
|
||||||
|
|
||||||
- run: dotnet restore
|
|
||||||
|
|
||||||
- name: Print dotnet format version
|
|
||||||
run: dotnet format --version
|
|
||||||
|
|
||||||
- name: Run dotnet format whitespace
|
|
||||||
run: |
|
|
||||||
dotnet format whitespace --verify-no-changes --report ./whitespace-report.json -v d
|
|
||||||
|
|
||||||
# For some unknown reason this step sometimes fails with exit code 139 (segfault?),
|
|
||||||
# so in that case we'll try again (3 tries max).
|
|
||||||
- name: Run dotnet format style
|
|
||||||
uses: TSRBerry/unstable-commands@v1
|
|
||||||
with:
|
|
||||||
commands: dotnet format style --severity info --verify-no-changes --report ./style-report.json -v d
|
|
||||||
timeout-minutes: 5
|
|
||||||
retry-codes: 139
|
|
||||||
|
|
||||||
# For some unknown reason this step sometimes fails with exit code 139 (segfault?),
|
|
||||||
# so in that case we'll try again (3 tries max).
|
|
||||||
- name: Run dotnet format analyzers
|
|
||||||
uses: TSRBerry/unstable-commands@v1
|
|
||||||
with:
|
|
||||||
commands: dotnet format analyzers --severity info --verify-no-changes --report ./analyzers-report.json -v d
|
|
||||||
timeout-minutes: 5
|
|
||||||
retry-codes: 139
|
|
||||||
|
|
||||||
- name: Upload report
|
|
||||||
if: failure()
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: dotnet-format
|
|
||||||
path: ./*-report.json
|
|
||||||
|
|
||||||
pr_build:
|
|
||||||
uses: ./.github/workflows/build.yml
|
|
||||||
needs: format
|
|
||||||
secrets: inherit
|
|
|
@ -1,212 +0,0 @@
|
||||||
name: Flatpak release job
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_call:
|
|
||||||
inputs:
|
|
||||||
ryujinx_version:
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
|
|
||||||
|
|
||||||
concurrency: flatpak-release
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
release:
|
|
||||||
timeout-minutes: ${{ fromJSON(vars.JOB_TIMEOUT) }}
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
env:
|
|
||||||
NUGET_PACKAGES: ${{ github.workspace }}/.nuget/packages
|
|
||||||
GIT_COMMITTER_NAME: "RyujinxBot"
|
|
||||||
GIT_COMMITTER_EMAIL: "61127645+RyujinxBot@users.noreply.github.com"
|
|
||||||
RYUJINX_PROJECT_FILE: "src/Ryujinx/Ryujinx.csproj"
|
|
||||||
NUGET_SOURCES_DESTDIR: "nuget-sources"
|
|
||||||
RYUJINX_VERSION: "${{ inputs.ryujinx_version }}"
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
path: Ryujinx
|
|
||||||
|
|
||||||
- uses: actions/setup-dotnet@v4
|
|
||||||
with:
|
|
||||||
global-json-file: Ryujinx/global.json
|
|
||||||
|
|
||||||
- name: Get version info
|
|
||||||
id: version_info
|
|
||||||
working-directory: Ryujinx
|
|
||||||
run: |
|
|
||||||
echo "git_hash=$(git rev-parse HEAD)" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
repository: flathub/org.ryujinx.Ryujinx
|
|
||||||
token: ${{ secrets.RYUJINX_BOT_PAT }}
|
|
||||||
submodules: recursive
|
|
||||||
path: flathub
|
|
||||||
|
|
||||||
- name: Install dependencies
|
|
||||||
run: python -m pip install PyYAML lxml
|
|
||||||
|
|
||||||
- name: Restore Nuget packages
|
|
||||||
# With .NET 8.0.100, Microsoft.NET.ILLink.Tasks isn't restored by default and only seems to appears when publishing.
|
|
||||||
# So we just publish to grab the dependencies
|
|
||||||
run: |
|
|
||||||
dotnet publish -c Release -r linux-x64 Ryujinx/${{ env.RYUJINX_PROJECT_FILE }} --self-contained
|
|
||||||
dotnet publish -c Release -r linux-arm64 Ryujinx/${{ env.RYUJINX_PROJECT_FILE }} --self-contained
|
|
||||||
|
|
||||||
- name: Generate nuget_sources.json
|
|
||||||
shell: python
|
|
||||||
run: |
|
|
||||||
import hashlib
|
|
||||||
from pathlib import Path
|
|
||||||
import base64
|
|
||||||
import binascii
|
|
||||||
import json
|
|
||||||
import os
|
|
||||||
import urllib.request
|
|
||||||
|
|
||||||
sources = []
|
|
||||||
|
|
||||||
|
|
||||||
def create_source_from_external(name, version):
|
|
||||||
full_dir_path = Path(os.environ["NUGET_PACKAGES"]).joinpath(name).joinpath(version)
|
|
||||||
os.makedirs(full_dir_path, exist_ok=True)
|
|
||||||
|
|
||||||
filename = "{}.{}.nupkg".format(name, version)
|
|
||||||
url = "https://api.nuget.org/v3-flatcontainer/{}/{}/{}".format(
|
|
||||||
name, version, filename
|
|
||||||
)
|
|
||||||
|
|
||||||
print(f"Processing {url}...")
|
|
||||||
response = urllib.request.urlopen(url)
|
|
||||||
sha512 = hashlib.sha512(response.read()).hexdigest()
|
|
||||||
|
|
||||||
return {
|
|
||||||
"type": "file",
|
|
||||||
"url": url,
|
|
||||||
"sha512": sha512,
|
|
||||||
"dest": os.environ["NUGET_SOURCES_DESTDIR"],
|
|
||||||
"dest-filename": filename,
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
has_added_x64_apphost = False
|
|
||||||
|
|
||||||
for path in Path(os.environ["NUGET_PACKAGES"]).glob("**/*.nupkg.sha512"):
|
|
||||||
name = path.parent.parent.name
|
|
||||||
version = path.parent.name
|
|
||||||
filename = "{}.{}.nupkg".format(name, version)
|
|
||||||
url = "https://api.nuget.org/v3-flatcontainer/{}/{}/{}".format(
|
|
||||||
name, version, filename
|
|
||||||
)
|
|
||||||
|
|
||||||
with path.open() as fp:
|
|
||||||
sha512 = binascii.hexlify(base64.b64decode(fp.read())).decode("ascii")
|
|
||||||
|
|
||||||
sources.append(
|
|
||||||
{
|
|
||||||
"type": "file",
|
|
||||||
"url": url,
|
|
||||||
"sha512": sha512,
|
|
||||||
"dest": os.environ["NUGET_SOURCES_DESTDIR"],
|
|
||||||
"dest-filename": filename,
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
# .NET will not add current installed application host to the list, force inject it here.
|
|
||||||
if not has_added_x64_apphost and name.startswith('microsoft.netcore.app.host'):
|
|
||||||
sources.append(create_source_from_external("microsoft.netcore.app.host.linux-x64", version))
|
|
||||||
has_added_x64_apphost = True
|
|
||||||
|
|
||||||
with open("flathub/nuget_sources.json", "w") as fp:
|
|
||||||
json.dump(sources, fp, indent=4)
|
|
||||||
|
|
||||||
- name: Update flatpak metadata
|
|
||||||
id: metadata
|
|
||||||
env:
|
|
||||||
RYUJINX_GIT_HASH: ${{ steps.version_info.outputs.git_hash }}
|
|
||||||
shell: python
|
|
||||||
run: |
|
|
||||||
import hashlib
|
|
||||||
import hmac
|
|
||||||
import json
|
|
||||||
import os
|
|
||||||
import yaml
|
|
||||||
from datetime import datetime
|
|
||||||
from lxml import etree
|
|
||||||
|
|
||||||
|
|
||||||
# Ensure we don't destroy multiline strings
|
|
||||||
def str_presenter(dumper, data):
|
|
||||||
if len(data.splitlines()) > 1:
|
|
||||||
return dumper.represent_scalar("tag:yaml.org,2002:str", data, style="|")
|
|
||||||
return dumper.represent_scalar("tag:yaml.org,2002:str", data)
|
|
||||||
|
|
||||||
|
|
||||||
yaml.representer.SafeRepresenter.add_representer(str, str_presenter)
|
|
||||||
|
|
||||||
yaml_file = "flathub/org.ryujinx.Ryujinx.yml"
|
|
||||||
xml_file = "flathub/org.ryujinx.Ryujinx.appdata.xml"
|
|
||||||
|
|
||||||
with open(yaml_file, "r") as f:
|
|
||||||
data = yaml.safe_load(f)
|
|
||||||
|
|
||||||
for source in data["modules"][0]["sources"]:
|
|
||||||
if type(source) is str:
|
|
||||||
continue
|
|
||||||
if (
|
|
||||||
source["type"] == "git"
|
|
||||||
and source["url"] == "https://github.com/Ryujinx/Ryujinx.git"
|
|
||||||
):
|
|
||||||
source["commit"] = os.environ['RYUJINX_GIT_HASH']
|
|
||||||
|
|
||||||
is_same_version = data["modules"][0]["build-options"]["env"]["RYUJINX_VERSION"] == os.environ['RYUJINX_VERSION']
|
|
||||||
|
|
||||||
with open(os.environ['GITHUB_OUTPUT'], "a") as gh_out:
|
|
||||||
if is_same_version:
|
|
||||||
gh_out.write(f"commit_message=Retry update to {os.environ['RYUJINX_VERSION']}")
|
|
||||||
else:
|
|
||||||
gh_out.write(f"commit_message=Update to {os.environ['RYUJINX_VERSION']}")
|
|
||||||
|
|
||||||
if not is_same_version:
|
|
||||||
data["modules"][0]["build-options"]["env"]["RYUJINX_VERSION"] = os.environ['RYUJINX_VERSION']
|
|
||||||
|
|
||||||
with open(yaml_file, "w") as f:
|
|
||||||
yaml.safe_dump(data, f, sort_keys=False)
|
|
||||||
|
|
||||||
parser = etree.XMLParser(remove_blank_text=True)
|
|
||||||
tree = etree.parse(xml_file, parser)
|
|
||||||
|
|
||||||
root = tree.getroot()
|
|
||||||
|
|
||||||
releases = root.find("releases")
|
|
||||||
|
|
||||||
element = etree.Element("release")
|
|
||||||
element.set("version", os.environ['RYUJINX_VERSION'])
|
|
||||||
element.set("date", datetime.now().date().isoformat())
|
|
||||||
releases.insert(0, element)
|
|
||||||
|
|
||||||
# Ensure 4 spaces
|
|
||||||
etree.indent(root, space=" ")
|
|
||||||
|
|
||||||
with open(xml_file, "wb") as f:
|
|
||||||
f.write(
|
|
||||||
etree.tostring(
|
|
||||||
tree,
|
|
||||||
pretty_print=True,
|
|
||||||
encoding="UTF-8",
|
|
||||||
doctype='<?xml version="1.0" encoding="UTF-8"?>',
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
- name: Push flatpak update
|
|
||||||
working-directory: flathub
|
|
||||||
env:
|
|
||||||
COMMIT_MESSAGE: ${{ steps.metadata.outputs.commit_message }}
|
|
||||||
run: |
|
|
||||||
git config user.name "${{ env.GIT_COMMITTER_NAME }}"
|
|
||||||
git config user.email "${{ env.GIT_COMMITTER_EMAIL }}"
|
|
||||||
git add .
|
|
||||||
git commit -m "$COMMIT_MESSAGE"
|
|
||||||
git push origin master
|
|
|
@ -1,41 +0,0 @@
|
||||||
name: Mako
|
|
||||||
on:
|
|
||||||
discussion:
|
|
||||||
types: [created, edited, answered, unanswered, category_changed]
|
|
||||||
discussion_comment:
|
|
||||||
types: [created, edited]
|
|
||||||
gollum:
|
|
||||||
issue_comment:
|
|
||||||
types: [created, edited]
|
|
||||||
issues:
|
|
||||||
types: [opened, edited, reopened, pinned, milestoned, demilestoned, assigned, unassigned, labeled, unlabeled]
|
|
||||||
pull_request_target:
|
|
||||||
types: [opened, edited, reopened, synchronize, ready_for_review, assigned, unassigned]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
tasks:
|
|
||||||
name: Run Ryujinx tasks
|
|
||||||
permissions:
|
|
||||||
actions: read
|
|
||||||
contents: read
|
|
||||||
discussions: write
|
|
||||||
issues: write
|
|
||||||
pull-requests: write
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
if: github.event_name == 'pull_request_target'
|
|
||||||
with:
|
|
||||||
# Ensure we pin the source origin as pull_request_target run under forks.
|
|
||||||
fetch-depth: 0
|
|
||||||
repository: Ryujinx/Ryujinx
|
|
||||||
ref: master
|
|
||||||
|
|
||||||
- name: Run Mako command
|
|
||||||
uses: Ryujinx/Ryujinx-Mako@master
|
|
||||||
with:
|
|
||||||
command: exec-ryujinx-tasks
|
|
||||||
args: --event-name "${{ github.event_name }}" --event-path "${{ github.event_path }}" -w "${{ github.workspace }}" "${{ github.repository }}" "${{ github.run_id }}"
|
|
||||||
app_id: ${{ secrets.MAKO_APP_ID }}
|
|
||||||
private_key: ${{ secrets.MAKO_PRIVATE_KEY }}
|
|
||||||
installation_id: ${{ secrets.MAKO_INSTALLATION_ID }}
|
|
|
@ -1,71 +0,0 @@
|
||||||
name: Comment PR artifacts links
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_run:
|
|
||||||
workflows: ['Perform checks']
|
|
||||||
types: [completed]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
pr_comment:
|
|
||||||
if: github.event.workflow_run.event == 'pull_request' && github.event.workflow_run.conclusion == 'success'
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
timeout-minutes: ${{ fromJSON(vars.JOB_TIMEOUT) }}
|
|
||||||
steps:
|
|
||||||
- uses: actions/github-script@v6
|
|
||||||
with:
|
|
||||||
script: |
|
|
||||||
const {owner, repo} = context.repo;
|
|
||||||
const run_id = ${{github.event.workflow_run.id}};
|
|
||||||
const pull_head_sha = '${{github.event.workflow_run.head_sha}}';
|
|
||||||
|
|
||||||
const issue_number = await (async () => {
|
|
||||||
const pulls = await github.rest.pulls.list({owner, repo});
|
|
||||||
for await (const {data} of github.paginate.iterator(pulls)) {
|
|
||||||
for (const pull of data) {
|
|
||||||
if (pull.head.sha === pull_head_sha) {
|
|
||||||
return pull.number;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})();
|
|
||||||
if (issue_number) {
|
|
||||||
core.info(`Using pull request ${issue_number}`);
|
|
||||||
} else {
|
|
||||||
return core.error(`No matching pull request found`);
|
|
||||||
}
|
|
||||||
|
|
||||||
const {data: {artifacts}} = await github.rest.actions.listWorkflowRunArtifacts({owner, repo, run_id});
|
|
||||||
if (!artifacts.length) {
|
|
||||||
return core.error(`No artifacts found`);
|
|
||||||
}
|
|
||||||
let body = `Download the artifacts for this pull request:\n`;
|
|
||||||
let hidden_gtk_artifacts = `\n\n <details><summary>Old GUI (GTK3)</summary>\n`;
|
|
||||||
let hidden_headless_artifacts = `\n\n <details><summary>GUI-less (SDL2)</summary>\n`;
|
|
||||||
let hidden_debug_artifacts = `\n\n <details><summary>Only for Developers</summary>\n`;
|
|
||||||
for (const art of artifacts) {
|
|
||||||
if(art.name.includes('Debug')) {
|
|
||||||
hidden_debug_artifacts += `\n* [${art.name}](https://nightly.link/${owner}/${repo}/actions/artifacts/${art.id}.zip)`;
|
|
||||||
} else if(art.name.includes('gtk-ryujinx')) {
|
|
||||||
hidden_gtk_artifacts += `\n* [${art.name}](https://nightly.link/${owner}/${repo}/actions/artifacts/${art.id}.zip)`;
|
|
||||||
} else if(art.name.includes('sdl2-ryujinx-headless')) {
|
|
||||||
hidden_headless_artifacts += `\n* [${art.name}](https://nightly.link/${owner}/${repo}/actions/artifacts/${art.id}.zip)`;
|
|
||||||
} else {
|
|
||||||
body += `\n* [${art.name}](https://nightly.link/${owner}/${repo}/actions/artifacts/${art.id}.zip)`;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
hidden_gtk_artifacts += `\n</details>`;
|
|
||||||
hidden_headless_artifacts += `\n</details>`;
|
|
||||||
hidden_debug_artifacts += `\n</details>`;
|
|
||||||
body += hidden_gtk_artifacts;
|
|
||||||
body += hidden_headless_artifacts;
|
|
||||||
body += hidden_debug_artifacts;
|
|
||||||
|
|
||||||
const {data: comments} = await github.rest.issues.listComments({repo, owner, issue_number});
|
|
||||||
const existing_comment = comments.find((c) => c.user.login === 'github-actions[bot]');
|
|
||||||
if (existing_comment) {
|
|
||||||
core.info(`Updating comment ${existing_comment.id}`);
|
|
||||||
await github.rest.issues.updateComment({repo, owner, comment_id: existing_comment.id, body});
|
|
||||||
} else {
|
|
||||||
core.info(`Creating a comment`);
|
|
||||||
await github.rest.issues.createComment({repo, owner, issue_number, body});
|
|
||||||
}
|
|
|
@ -1,28 +0,0 @@
|
||||||
name: "Pull Request Triage"
|
|
||||||
on:
|
|
||||||
pull_request_target:
|
|
||||||
types: [opened, ready_for_review]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
triage:
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
pull-requests: write
|
|
||||||
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
steps:
|
|
||||||
# Grab sources to get latest labeler.yml
|
|
||||||
- name: Fetch sources
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
# Ensure we pin the source origin as pull_request_target run under forks.
|
|
||||||
fetch-depth: 0
|
|
||||||
repository: Ryujinx/Ryujinx
|
|
||||||
ref: master
|
|
||||||
|
|
||||||
- name: Update labels based on changes
|
|
||||||
uses: actions/labeler@v5
|
|
||||||
with:
|
|
||||||
sync-labels: true
|
|
||||||
dot: true
|
|
|
@ -1,218 +0,0 @@
|
||||||
name: Release job
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
inputs: {}
|
|
||||||
push:
|
|
||||||
branches: [ master ]
|
|
||||||
paths-ignore:
|
|
||||||
- '.github/**'
|
|
||||||
- '*.yml'
|
|
||||||
- '*.json'
|
|
||||||
- '*.config'
|
|
||||||
- '*.md'
|
|
||||||
|
|
||||||
concurrency: release
|
|
||||||
|
|
||||||
env:
|
|
||||||
POWERSHELL_TELEMETRY_OPTOUT: 1
|
|
||||||
DOTNET_CLI_TELEMETRY_OPTOUT: 1
|
|
||||||
RYUJINX_BASE_VERSION: "1.1"
|
|
||||||
RYUJINX_TARGET_RELEASE_CHANNEL_NAME: "master"
|
|
||||||
RYUJINX_TARGET_RELEASE_CHANNEL_OWNER: "Ryujinx"
|
|
||||||
RYUJINX_TARGET_RELEASE_CHANNEL_REPO: "release-channel-master"
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
tag:
|
|
||||||
name: Create tag
|
|
||||||
runs-on: ubuntu-20.04
|
|
||||||
steps:
|
|
||||||
- name: Get version info
|
|
||||||
id: version_info
|
|
||||||
run: |
|
|
||||||
echo "build_version=${{ env.RYUJINX_BASE_VERSION }}.${{ github.run_number }}" >> $GITHUB_OUTPUT
|
|
||||||
shell: bash
|
|
||||||
|
|
||||||
- name: Create tag
|
|
||||||
uses: actions/github-script@v6
|
|
||||||
with:
|
|
||||||
script: |
|
|
||||||
github.rest.git.createRef({
|
|
||||||
owner: context.repo.owner,
|
|
||||||
repo: context.repo.repo,
|
|
||||||
ref: 'refs/tags/${{ steps.version_info.outputs.build_version }}',
|
|
||||||
sha: context.sha
|
|
||||||
})
|
|
||||||
|
|
||||||
- name: Create release
|
|
||||||
uses: ncipollo/release-action@v1
|
|
||||||
with:
|
|
||||||
name: ${{ steps.version_info.outputs.build_version }}
|
|
||||||
tag: ${{ steps.version_info.outputs.build_version }}
|
|
||||||
body: "For more information about this release please check out the official [Changelog](https://github.com/Ryujinx/Ryujinx/wiki/Changelog)."
|
|
||||||
omitBodyDuringUpdate: true
|
|
||||||
owner: ${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}
|
|
||||||
repo: ${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}
|
|
||||||
token: ${{ secrets.RELEASE_TOKEN }}
|
|
||||||
|
|
||||||
release:
|
|
||||||
name: Release for ${{ matrix.platform.name }}
|
|
||||||
runs-on: ${{ matrix.platform.os }}
|
|
||||||
timeout-minutes: ${{ fromJSON(vars.JOB_TIMEOUT) }}
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
platform:
|
|
||||||
- { name: win-x64, os: windows-latest, zip_os_name: win_x64 }
|
|
||||||
- { name: linux-x64, os: ubuntu-latest, zip_os_name: linux_x64 }
|
|
||||||
- { name: linux-arm64, os: ubuntu-latest, zip_os_name: linux_arm64 }
|
|
||||||
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 version info
|
|
||||||
id: version_info
|
|
||||||
run: |
|
|
||||||
echo "build_version=${{ env.RYUJINX_BASE_VERSION }}.${{ github.run_number }}" >> $GITHUB_OUTPUT
|
|
||||||
echo "git_short_hash=$(git rev-parse --short "${{ github.sha }}")" >> $GITHUB_OUTPUT
|
|
||||||
shell: bash
|
|
||||||
|
|
||||||
- name: Configure for release
|
|
||||||
run: |
|
|
||||||
sed -r --in-place 's/\%\%RYUJINX_BUILD_VERSION\%\%/${{ steps.version_info.outputs.build_version }}/g;' src/Ryujinx.Common/ReleaseInformation.cs
|
|
||||||
sed -r --in-place 's/\%\%RYUJINX_BUILD_GIT_HASH\%\%/${{ steps.version_info.outputs.git_short_hash }}/g;' src/Ryujinx.Common/ReleaseInformation.cs
|
|
||||||
sed -r --in-place 's/\%\%RYUJINX_TARGET_RELEASE_CHANNEL_NAME\%\%/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_NAME }}/g;' src/Ryujinx.Common/ReleaseInformation.cs
|
|
||||||
sed -r --in-place 's/\%\%RYUJINX_TARGET_RELEASE_CHANNEL_OWNER\%\%/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/g;' src/Ryujinx.Common/ReleaseInformation.cs
|
|
||||||
sed -r --in-place 's/\%\%RYUJINX_TARGET_RELEASE_CHANNEL_REPO\%\%/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/g;' src/Ryujinx.Common/ReleaseInformation.cs
|
|
||||||
sed -r --in-place 's/\%\%RYUJINX_CONFIG_FILE_NAME\%\%/Config\.json/g;' src/Ryujinx.Common/ReleaseInformation.cs
|
|
||||||
shell: bash
|
|
||||||
|
|
||||||
- name: Create output dir
|
|
||||||
run: "mkdir release_output"
|
|
||||||
|
|
||||||
- name: Publish
|
|
||||||
run: |
|
|
||||||
dotnet publish -c Release -r "${{ matrix.platform.name }}" -o ./publish_ava/publish -p:Version="${{ steps.version_info.outputs.build_version }}" -p:SourceRevisionId="${{ steps.version_info.outputs.git_short_hash }}" -p:DebugType=embedded src/Ryujinx --self-contained true
|
|
||||||
dotnet publish -c Release -r "${{ matrix.platform.name }}" -o ./publish_sdl2_headless/publish -p:Version="${{ steps.version_info.outputs.build_version }}" -p:SourceRevisionId="${{ steps.version_info.outputs.git_short_hash }}" -p:DebugType=embedded src/Ryujinx.Headless.SDL2 --self-contained true
|
|
||||||
|
|
||||||
- name: Packing Windows builds
|
|
||||||
if: matrix.platform.os == 'windows-latest'
|
|
||||||
run: |
|
|
||||||
pushd publish_ava
|
|
||||||
cp publish/Ryujinx.exe publish/Ryujinx.Ava.exe
|
|
||||||
7z a ../release_output/ryujinx-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.zip publish
|
|
||||||
7z a ../release_output/test-ava-ryujinx-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.zip publish
|
|
||||||
popd
|
|
||||||
|
|
||||||
pushd publish_sdl2_headless
|
|
||||||
7z a ../release_output/sdl2-ryujinx-headless-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.zip publish
|
|
||||||
popd
|
|
||||||
shell: bash
|
|
||||||
|
|
||||||
- name: Packing Linux builds
|
|
||||||
if: matrix.platform.os == 'ubuntu-latest'
|
|
||||||
run: |
|
|
||||||
pushd publish_ava
|
|
||||||
cp publish/Ryujinx publish/Ryujinx.Ava
|
|
||||||
chmod +x publish/Ryujinx.sh publish/Ryujinx.Ava publish/Ryujinx
|
|
||||||
tar -czvf ../release_output/ryujinx-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.tar.gz publish
|
|
||||||
tar -czvf ../release_output/test-ava-ryujinx-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.tar.gz publish
|
|
||||||
popd
|
|
||||||
|
|
||||||
pushd publish_sdl2_headless
|
|
||||||
chmod +x publish/Ryujinx.sh publish/Ryujinx.Headless.SDL2
|
|
||||||
tar -czvf ../release_output/sdl2-ryujinx-headless-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.tar.gz publish
|
|
||||||
popd
|
|
||||||
shell: bash
|
|
||||||
|
|
||||||
- name: Pushing new release
|
|
||||||
uses: ncipollo/release-action@v1
|
|
||||||
with:
|
|
||||||
name: ${{ steps.version_info.outputs.build_version }}
|
|
||||||
artifacts: "release_output/*.tar.gz,release_output/*.zip"
|
|
||||||
tag: ${{ steps.version_info.outputs.build_version }}
|
|
||||||
body: "For more information about this release please check out the official [Changelog](https://github.com/Ryujinx/Ryujinx/wiki/Changelog)."
|
|
||||||
omitBodyDuringUpdate: true
|
|
||||||
allowUpdates: true
|
|
||||||
replacesArtifacts: true
|
|
||||||
owner: ${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}
|
|
||||||
repo: ${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}
|
|
||||||
token: ${{ secrets.RELEASE_TOKEN }}
|
|
||||||
|
|
||||||
macos_release:
|
|
||||||
name: Release MacOS universal
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
timeout-minutes: ${{ fromJSON(vars.JOB_TIMEOUT) }}
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- uses: actions/setup-dotnet@v4
|
|
||||||
with:
|
|
||||||
global-json-file: global.json
|
|
||||||
|
|
||||||
- name: Setup LLVM 15
|
|
||||||
run: |
|
|
||||||
wget https://apt.llvm.org/llvm.sh
|
|
||||||
chmod +x llvm.sh
|
|
||||||
sudo ./llvm.sh 15
|
|
||||||
|
|
||||||
- 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 version info
|
|
||||||
id: version_info
|
|
||||||
run: |
|
|
||||||
echo "build_version=${{ env.RYUJINX_BASE_VERSION }}.${{ github.run_number }}" >> $GITHUB_OUTPUT
|
|
||||||
echo "git_short_hash=$(git rev-parse --short "${{ github.sha }}")" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: Configure for release
|
|
||||||
run: |
|
|
||||||
sed -r --in-place 's/\%\%RYUJINX_BUILD_VERSION\%\%/${{ steps.version_info.outputs.build_version }}/g;' src/Ryujinx.Common/ReleaseInformation.cs
|
|
||||||
sed -r --in-place 's/\%\%RYUJINX_BUILD_GIT_HASH\%\%/${{ steps.version_info.outputs.git_short_hash }}/g;' src/Ryujinx.Common/ReleaseInformation.cs
|
|
||||||
sed -r --in-place 's/\%\%RYUJINX_TARGET_RELEASE_CHANNEL_NAME\%\%/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_NAME }}/g;' src/Ryujinx.Common/ReleaseInformation.cs
|
|
||||||
sed -r --in-place 's/\%\%RYUJINX_TARGET_RELEASE_CHANNEL_OWNER\%\%/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/g;' src/Ryujinx.Common/ReleaseInformation.cs
|
|
||||||
sed -r --in-place 's/\%\%RYUJINX_TARGET_RELEASE_CHANNEL_REPO\%\%/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/g;' src/Ryujinx.Common/ReleaseInformation.cs
|
|
||||||
sed -r --in-place 's/\%\%RYUJINX_CONFIG_FILE_NAME\%\%/Config\.json/g;' src/Ryujinx.Common/ReleaseInformation.cs
|
|
||||||
shell: bash
|
|
||||||
|
|
||||||
- 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
|
|
||||||
|
|
||||||
- name: Publish macOS Ryujinx.Headless.SDL2
|
|
||||||
run: |
|
|
||||||
./distribution/macos/create_macos_build_headless.sh . publish_tmp_headless publish_headless ./distribution/macos/entitlements.xml "${{ steps.version_info.outputs.build_version }}" "${{ steps.version_info.outputs.git_short_hash }}" Release
|
|
||||||
|
|
||||||
- name: Pushing new release
|
|
||||||
uses: ncipollo/release-action@v1
|
|
||||||
with:
|
|
||||||
name: ${{ steps.version_info.outputs.build_version }}
|
|
||||||
artifacts: "publish_ava/*.tar.gz, publish_headless/*.tar.gz"
|
|
||||||
tag: ${{ steps.version_info.outputs.build_version }}
|
|
||||||
body: "For more information about this release please check out the official [Changelog](https://github.com/Ryujinx/Ryujinx/wiki/Changelog)."
|
|
||||||
omitBodyDuringUpdate: true
|
|
||||||
allowUpdates: true
|
|
||||||
replacesArtifacts: true
|
|
||||||
owner: ${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}
|
|
||||||
repo: ${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}
|
|
||||||
token: ${{ secrets.RELEASE_TOKEN }}
|
|
||||||
|
|
||||||
flatpak_release:
|
|
||||||
uses: ./.github/workflows/flatpak.yml
|
|
||||||
needs: release
|
|
||||||
with:
|
|
||||||
ryujinx_version: "1.1.${{ github.run_number }}"
|
|
||||||
secrets: inherit
|
|
Loading…
Reference in a new issue