2022-01-22 17:56:09 +01:00
name : Release job
on :
workflow_dispatch :
inputs : {}
push :
2024-11-06 23:48:20 +01:00
branches : [ release ]
2022-01-22 17:56:09 +01:00
paths-ignore :
2023-06-12 20:42:27 +02:00
- '.github/**'
2024-10-13 23:32:24 +02:00
- 'docs/**'
2024-10-19 07:29:04 +02:00
- 'assets/**'
2022-01-22 17:56:09 +01:00
- '*.yml'
2023-06-12 20:42:27 +02:00
- '*.json'
- '*.config'
2024-01-27 20:50:28 +01:00
- '*.md'
2022-01-22 17:56:09 +01:00
2022-12-09 17:15:28 +01:00
concurrency : release
2022-01-22 17:56:09 +01:00
2023-03-11 19:09:48 +01:00
env :
POWERSHELL_TELEMETRY_OPTOUT : 1
DOTNET_CLI_TELEMETRY_OPTOUT : 1
2024-10-11 04:49:38 +02:00
RYUJINX_BASE_VERSION : "1.2"
2024-11-06 23:48:20 +01:00
RYUJINX_TARGET_RELEASE_CHANNEL_NAME : "release"
2024-10-11 01:40:37 +02:00
RYUJINX_TARGET_RELEASE_CHANNEL_OWNER : "GreemDev"
2024-10-11 04:49:38 +02:00
RYUJINX_TARGET_RELEASE_CHANNEL_REPO : "Ryujinx"
2024-10-26 14:36:49 +02:00
RELEASE : 1
2023-03-11 19:09:48 +01:00
2022-01-22 17:56:09 +01:00
jobs :
2023-05-11 17:36:53 +02:00
tag :
name : Create tag
2023-11-11 22:38:54 +01:00
runs-on : ubuntu-20.04
2023-05-11 17:36:53 +02:00
steps :
- name : Get version info
id : version_info
run : |
echo "build_version=${{ env.RYUJINX_BASE_VERSION }}.${{ github.run_number }}" >> $GITHUB_OUTPUT
2024-10-21 09:42:32 +02:00
echo "prev_build_version=${{ env.RYUJINX_BASE_VERSION }}.$((${{ github.run_number }} - 1))" >> $GITHUB_OUTPUT
2023-05-11 17:36:53 +02:00
shell : bash
- name : Create tag
2024-10-20 02:42:03 +02:00
uses : actions/github-script@v7
2023-05-11 17:36:53 +02:00
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
})
2024-03-02 12:58:03 +01:00
- name : Create release
uses : ncipollo/release-action@v1
with :
name : ${{ steps.version_info.outputs.build_version }}
tag : ${{ steps.version_info.outputs.build_version }}
2024-12-10 18:02:18 +01:00
body : |
# Regular builds:
| Platform | Artifact |
|--|--|
| Windows 64 bit | [Release Windows Artifact](https://github.com/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-${{ steps.version_info.outputs.build_version }}-win_x64.zip) |
| Linux 64 bit | [Release Linux Artifact](https://github.com/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-${{ steps.version_info.outputs.build_version }}-linux_x64.tar.gz) |
| Linux arm 64 bit | [Release Linux arm Artifact](https://github.com/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-${{ steps.version_info.outputs.build_version }}-linux_arm64.tar.gz) |
| macOS | [Release macOS Artifact](https://github.com/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-${{ steps.version_info.outputs.build_version }}-macos_universal.app.tar.gz) |
**Full Changelog** : https://github.com/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/compare/${{ steps.version_info.outputs.prev_build_version }}...${{ steps.version_info.outputs.build_version }}
2024-03-02 12:58:03 +01:00
omitBodyDuringUpdate : true
owner : ${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}
repo : ${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}
token : ${{ secrets.RELEASE_TOKEN }}
2022-01-22 17:56:09 +01:00
release :
2024-02-10 22:05:46 +01:00
name : Release for ${{ matrix.platform.name }}
runs-on : ${{ matrix.platform.os }}
2023-05-11 17:36:53 +02:00
strategy :
matrix :
2024-02-10 22:05:46 +01:00
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 }
2022-01-22 17:56:09 +01:00
steps :
2023-09-04 22:16:17 +02:00
- uses : actions/checkout@v4
2023-05-11 17:36:53 +02:00
2023-12-04 19:15:30 +01:00
- uses : actions/setup-dotnet@v4
2022-01-22 17:56:09 +01:00
with :
2023-03-11 19:04:13 +01:00
global-json-file : global.json
2024-03-13 23:26:35 +01:00
2023-08-16 22:58:34 +02:00
- name : Overwrite csc problem matcher
run : echo "::add-matcher::.github/csc.json"
2023-05-11 17:36:53 +02:00
2022-01-22 17:56:09 +01:00
- name : Get version info
id : version_info
run : |
2022-10-21 10:31:38 +02:00
echo "build_version=${{ env.RYUJINX_BASE_VERSION }}.${{ github.run_number }}" >> $GITHUB_OUTPUT
2024-10-21 09:42:32 +02:00
echo "prev_build_version=${{ env.RYUJINX_BASE_VERSION }}.$((${{ github.run_number }} - 1))" >> $GITHUB_OUTPUT
2022-10-21 10:31:38 +02:00
echo "git_short_hash=$(git rev-parse --short "${{ github.sha }}")" >> $GITHUB_OUTPUT
2022-01-22 17:56:09 +01:00
shell : bash
2023-05-11 17:36:53 +02:00
2022-01-22 17:56:09 +01:00
- name : Configure for release
run : |
2023-04-26 05:12:19 +02:00
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
2024-11-11 06:32:37 +01:00
sed -r --in-place 's/\%\%RYUJINX_TARGET_RELEASE_CHANNEL_SOURCE_REPO\%\%/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/g;' src/Ryujinx.Common/ReleaseInformation.cs
2024-01-29 19:58:18 +01:00
sed -r --in-place 's/\%\%RYUJINX_CONFIG_FILE_NAME\%\%/Config\.json/g;' src/Ryujinx.Common/ReleaseInformation.cs
2022-01-22 17:56:09 +01:00
shell : bash
2023-05-11 17:36:53 +02:00
2022-01-22 17:56:09 +01:00
- name : Create output dir
run : "mkdir release_output"
2023-05-11 17:36:53 +02:00
- name : Publish
2022-01-22 17:56:09 +01:00
run : |
2024-11-23 00:51:42 +01:00
dotnet publish -c Release -r "${{ matrix.platform.name }}" -o ./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
dotnet publish -c Release -r "${{ matrix.platform.name }}" -o ./publish_sdl2_headless -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
2023-05-11 17:36:53 +02:00
2022-01-22 17:56:09 +01:00
- name : Packing Windows builds
2024-02-10 22:05:46 +01:00
if : matrix.platform.os == 'windows-latest'
2022-01-22 17:56:09 +01:00
run : |
2024-11-10 02:30:19 +01:00
pushd publish
rm libarmeilleure-jitsupport.dylib
7z a ../release_output/ryujinx-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.zip ../publish
2022-01-22 17:56:09 +01:00
popd
2023-05-11 17:36:53 +02:00
pushd publish_sdl2_headless
2024-11-10 02:30:19 +01:00
rm libarmeilleure-jitsupport.dylib
2024-11-20 19:20:38 +01:00
7z a ../release_output/nogui-ryujinx-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.zip ../publish
2022-05-15 16:28:32 +02:00
popd
2022-01-22 17:56:09 +01:00
shell : bash
2024-11-10 02:30:19 +01:00
- name : Build AppImage (Linux)
if : matrix.platform.os == 'ubuntu-latest'
run : |
BUILD_VERSION="${{ steps.version_info.outputs.build_version }}"
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
pushd publish_appimage
mv Ryujinx.AppImage ../release_output/ryujinx-$BUILD_VERSION-$ARCH_NAME.AppImage
mv Ryujinx.AppImage.zsync ../release_output/ryujinx-$BUILD_VERSION-$ARCH_NAME.AppImage.zsync
popd
shell : bash
2022-01-22 17:56:09 +01:00
- name : Packing Linux builds
2024-02-10 22:05:46 +01:00
if : matrix.platform.os == 'ubuntu-latest'
2022-01-22 17:56:09 +01:00
run : |
2024-11-10 02:30:19 +01:00
pushd publish
chmod +x Ryujinx.sh Ryujinx
tar -czvf ../release_output/ryujinx-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.tar.gz ../publish
2022-01-22 17:56:09 +01:00
popd
2023-05-11 17:36:53 +02:00
pushd publish_sdl2_headless
2024-11-10 02:30:19 +01:00
chmod +x Ryujinx.sh Ryujinx.Headless.SDL2
2024-11-20 19:20:38 +01:00
tar -czvf ../release_output/nogui-ryujinx-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.tar.gz ../publish
2022-05-15 16:28:32 +02:00
popd
2022-01-22 17:56:09 +01:00
shell : bash
- name : Pushing new release
uses : ncipollo/release-action@v1
with :
name : ${{ steps.version_info.outputs.build_version }}
2024-11-19 16:30:41 +01:00
artifacts : "release_output/*.tar.gz,release_output/*.zip,release_output/*AppImage*"
2022-01-22 17:56:09 +01:00
tag : ${{ steps.version_info.outputs.build_version }}
2024-12-10 18:02:18 +01:00
body : |
# Regular builds:
| Platform | Artifact |
|--|--|
| Windows 64 bit | https://github.com/${{ github.repository }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-${{ steps.version_info.outputs.build_version }}-win_x64.zip |
| Linux 64 bit | https://github.com/${{ github.repository }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-${{ steps.version_info.outputs.build_version }}-linux_x64.tar.gz |
| Linux arm 64 bit | https://github.com/${{ github.repository }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-${{ steps.version_info.outputs.build_version }}-linux_arm64.tar.gz |
| Macos | https://github.com/${{ github.repository }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-${{ steps.version_info.outputs.build_version }}-macos_universal.app.tar.gz |
"**Full Changelog**: https://github.com/${{ github.repository }}/compare/${{ steps.version_info.outputs.prev_build_version }}...${{ steps.version_info.outputs.build_version }}"
2023-05-11 17:36:53 +02:00
omitBodyDuringUpdate : true
2022-01-22 17:56:09 +01:00
allowUpdates : true
replacesArtifacts : true
owner : ${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}
repo : ${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}
token : ${{ secrets.RELEASE_TOKEN }}
2023-03-11 19:04:13 +01:00
2023-05-11 17:36:53 +02:00
macos_release :
name : Release MacOS universal
runs-on : ubuntu-latest
steps :
2023-09-04 22:16:17 +02:00
- uses : actions/checkout@v4
2023-05-11 17:36:53 +02:00
2023-12-04 19:15:30 +01:00
- uses : actions/setup-dotnet@v4
2023-03-22 13:17:28 +01:00
with :
2023-05-11 17:36:53 +02:00
global-json-file : global.json
2023-05-13 13:24:43 +02:00
2023-11-11 22:35:58 +01:00
- name : Setup LLVM 15
2023-05-11 17:36:53 +02:00
run : |
wget https://apt.llvm.org/llvm.sh
chmod +x llvm.sh
2023-11-11 22:35:58 +01:00
sudo ./llvm.sh 15
2023-05-11 17:36:53 +02:00
- 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
2024-10-21 09:42:32 +02:00
echo "prev_build_version=${{ env.RYUJINX_BASE_VERSION }}.$((${{ github.run_number }} - 1))" >> $GITHUB_OUTPUT
2023-05-11 17:36:53 +02:00
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
2024-11-11 06:32:37 +01:00
sed -r --in-place 's/\%\%RYUJINX_TARGET_RELEASE_CHANNEL_SOURCE_REPO\%\%/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/g;' src/Ryujinx.Common/ReleaseInformation.cs
2024-01-29 19:58:18 +01:00
sed -r --in-place 's/\%\%RYUJINX_CONFIG_FILE_NAME\%\%/Config\.json/g;' src/Ryujinx.Common/ReleaseInformation.cs
2023-05-11 17:36:53 +02:00
shell : bash
2024-03-02 12:51:05 +01:00
- name : Publish macOS Ryujinx
2023-05-11 17:36:53 +02:00
run : |
2024-11-21 19:34:53 +01:00
./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
2024-03-02 12:51:05 +01:00
2023-09-05 01:28:44 +02:00
- name : Publish macOS Ryujinx.Headless.SDL2
run : |
2024-11-21 19:34:53 +01:00
./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 0
2023-05-11 17:36:53 +02:00
- name : Pushing new release
uses : ncipollo/release-action@v1
with :
name : ${{ steps.version_info.outputs.build_version }}
2024-11-10 02:30:19 +01:00
artifacts : "publish/*.tar.gz, publish_headless/*.tar.gz"
2023-05-11 17:36:53 +02:00
tag : ${{ steps.version_info.outputs.build_version }}
2024-12-10 18:02:18 +01:00
body : |
# Regular builds:
| Platform | Artifact |
|--|--|
| Windows 64 bit | https://github.com/${{ github.repository }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-${{ steps.version_info.outputs.build_version }}-win_x64.zip |
| Linux 64 bit | https://github.com/${{ github.repository }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-${{ steps.version_info.outputs.build_version }}-linux_x64.tar.gz |
| Linux arm 64 bit | https://github.com/${{ github.repository }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-${{ steps.version_info.outputs.build_version }}-linux_arm64.tar.gz |
| Macos | https://github.com/${{ github.repository }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-${{ steps.version_info.outputs.build_version }}-macos_universal.app.tar.gz |
"**Full Changelog**: https://github.com/${{ github.repository }}/compare/${{ steps.version_info.outputs.prev_build_version }}...${{ steps.version_info.outputs.build_version }}"
2023-05-11 17:36:53 +02:00
omitBodyDuringUpdate : true
allowUpdates : true
replacesArtifacts : true
owner : ${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}
repo : ${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}
token : ${{ secrets.RELEASE_TOKEN }}