name: Release job on: workflow_dispatch: inputs: {} #push: # branches: [ mirror/release ] # paths-ignore: # - '.github/**' # - '*.yml' # - '*.json' # - '*.config' # - '*.md' concurrency: release env: POWERSHELL_TELEMETRY_OPTOUT: 1 DOTNET_CLI_TELEMETRY_OPTOUT: 1 #RYUJINX_BASE_VERSION: "1.1" # NOTE: For now, releases for the fork will be named after Git revision hashes, this is ignored # Should be unnecessary for us, we're releasing in-repo #RYUJINX_TARGET_RELEASE_CHANNEL_OWNER: "ryujinx-mirror" #RYUJINX_TARGET_RELEASE_CHANNEL_REPO: "ryujinx" #RYUJINX_TARGET_RELEASE_CHANNEL_NAME: "mirror/master" jobs: tag: name: Create tag runs-on: ubuntu-20.04 steps: - name: Get version info id: version_info run: | echo "build_version=r.`echo ${{ github.sha }} | cut -c1-7`" >> $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 }} draft: "true" omitBody: true #omitBodyDuringUpdate: true #owner: ${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }} #repo: ${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }} token: ${{ secrets.GITHUB_TOKEN }} release: name: Release for ${{ matrix.platform.name }} runs-on: ${{ matrix.platform.os }} timeout-minutes: 60 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=r.`echo ${{ github.sha }} | cut -c1-7`" >> $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_OWNER\%\%&${{ github.repository_owner }}&g;' src/Ryujinx.Common/ReleaseInformation.cs sed -r --in-place 's&\%\%RYUJINX_TARGET_RELEASE_CHANNEL_REPO\%\%&${{ github.event.repository.name }}&g;' src/Ryujinx.Common/ReleaseInformation.cs sed -r --in-place 's&\%\%RYUJINX_TARGET_RELEASE_CHANNEL_NAME\%\%&${{ github.ref_name }}&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 -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 -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: | BUILD_VERSION="${{ steps.version_info.outputs.build_version }}" ZIP_OS_NAME="${{ matrix.platform.zip_os_name }}" pushd publish_ava cp Ryujinx.exe Ryujinx.Ava.exe 7z a ../release_output/ryujinx-$BUILD_VERSION-$ZIP_OS_NAME.zip * popd pushd publish_sdl2_headless 7z a ../release_output/sdl2-ryujinx-headless-$BUILD_VERSION-$ZIP_OS_NAME.zip * popd shell: bash - 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 # 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_ava OUTDIR=publish_ava_appimage distribution/linux/appimage/build-appimage.sh # Add to release output pushd publish_ava_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 - name: Packing Linux builds if: matrix.platform.os == 'ubuntu-latest' run: | BUILD_VERSION="${{ steps.version_info.outputs.build_version }}" ZIP_OS_NAME="${{ matrix.platform.zip_os_name }}" pushd publish_ava cp Ryujinx Ryujinx.Ava chmod +x Ryujinx.sh Ryujinx Ryujinx.Ava tar -czvf ../release_output/ryujinx-$BUILD_VERSION-$ZIP_OS_NAME.tar.gz * popd pushd publish_sdl2_headless chmod +x Ryujinx.sh Ryujinx.Headless.SDL2 tar -czvf ../release_output/sdl2-ryujinx-headless-$BUILD_VERSION-$ZIP_OS_NAME.tar.gz * popd shell: bash - name: Pushing new release uses: ncipollo/release-action@v1 with: name: ${{ steps.version_info.outputs.build_version }} tag: ${{ steps.version_info.outputs.build_version }} artifacts: "release_output/*.tar.gz,release_output/*.zip,release_output/*AppImage*" draft: "true" omitBody: true #omitBodyDuringUpdate: true allowUpdates: true replacesArtifacts: true #owner: ${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }} #repo: ${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }} token: ${{ secrets.GITHUB_TOKEN }} macos_release: name: Release MacOS universal runs-on: ubuntu-latest timeout-minutes: 60 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=r.`echo ${{ github.sha }} | cut -c1-7`" >> $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_OWNER\%\%&${{ github.repository_owner }}&g;' src/Ryujinx.Common/ReleaseInformation.cs sed -r --in-place 's&\%\%RYUJINX_TARGET_RELEASE_CHANNEL_REPO\%\%&${{ github.event.repository.name }}&g;' src/Ryujinx.Common/ReleaseInformation.cs sed -r --in-place 's&\%\%RYUJINX_TARGET_RELEASE_CHANNEL_NAME\%\%&${{ github.ref_name }}&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 }} tag: ${{ steps.version_info.outputs.build_version }} artifacts: "publish_ava/*.tar.gz, publish_headless/*.tar.gz" draft: "true" omitBody: true #omitBodyDuringUpdate: true allowUpdates: true replacesArtifacts: true #owner: ${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }} #repo: ${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }} token: ${{ secrets.GITHUB_TOKEN }} set_latest_release: name: Set as latest release runs-on: ubuntu-latest needs: [release, macos_release] steps: - name: Get version info id: version_info run: | echo "build_version=r.`echo ${{ github.sha }} | cut -c1-7`" >> $GITHUB_OUTPUT shell: bash - name: Update release uses: ncipollo/release-action@v1 with: name: ${{ steps.version_info.outputs.build_version }} tag: ${{ steps.version_info.outputs.build_version }} makeLatest: "true" omitBody: true allowUpdates: true #owner: ${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }} #repo: ${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }} token: ${{ secrets.GITHUB_TOKEN }}