mirror of
https://git.ryujinx.app/ryubing/ryujinx.git
synced 2026-05-03 03:45:49 +00:00
This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [actions/checkout](https://git.ryujinx.app/actions/checkout) | action | major | `v4` → `v6` | --- ### Release Notes <details> <summary>actions/checkout (actions/checkout)</summary> ### [`v6.0.2`](https://git.ryujinx.app/actions/checkout/blob/HEAD/CHANGELOG.md#v602) [Compare Source](https://git.ryujinx.app/actions/checkout/compare/v6.0.1...v6.0.2) - Fix tag handling: preserve annotations and explicit fetch-tags by [@​ericsciple](https://github.com/ericsciple) in [#​2356](https://github.com/actions/checkout/pull/2356) ### [`v6.0.1`](https://git.ryujinx.app/actions/checkout/blob/HEAD/CHANGELOG.md#v601) [Compare Source](https://git.ryujinx.app/actions/checkout/compare/v6...v6.0.1) - Add worktree support for persist-credentials includeIf by [@​ericsciple](https://github.com/ericsciple) in [#​2327](https://github.com/actions/checkout/pull/2327) ### [`v6.0.0`](https://git.ryujinx.app/actions/checkout/blob/HEAD/CHANGELOG.md#v600) [Compare Source](https://git.ryujinx.app/actions/checkout/compare/v6...v6) - Persist creds to a separate file by [@​ericsciple](https://github.com/ericsciple) in [#​2286](https://github.com/actions/checkout/pull/2286) - Update README to include Node.js 24 support details and requirements by [@​salmanmkc](https://github.com/salmanmkc) in [#​2248](https://github.com/actions/checkout/pull/2248) ### [`v6`](https://git.ryujinx.app/actions/checkout/blob/HEAD/CHANGELOG.md#v602) [Compare Source](https://git.ryujinx.app/actions/checkout/compare/v5.0.1...v6) - Fix tag handling: preserve annotations and explicit fetch-tags by [@​ericsciple](https://github.com/ericsciple) in [#​2356](https://github.com/actions/checkout/pull/2356) ### [`v5.0.1`](https://git.ryujinx.app/actions/checkout/blob/HEAD/CHANGELOG.md#v501) [Compare Source](https://git.ryujinx.app/actions/checkout/compare/v5...v5.0.1) - Port v6 cleanup to v5 by [@​ericsciple](https://github.com/ericsciple) in [#​2301](https://github.com/actions/checkout/pull/2301) ### [`v5.0.0`](https://git.ryujinx.app/actions/checkout/blob/HEAD/CHANGELOG.md#v500) [Compare Source](https://git.ryujinx.app/actions/checkout/compare/v5...v5) - Update actions checkout to use node 24 by [@​salmanmkc](https://github.com/salmanmkc) in [#​2226](https://github.com/actions/checkout/pull/2226) ### [`v5`](https://git.ryujinx.app/actions/checkout/blob/HEAD/CHANGELOG.md#v501) [Compare Source](https://git.ryujinx.app/actions/checkout/compare/v4.3.1...v5) - Port v6 cleanup to v5 by [@​ericsciple](https://github.com/ericsciple) in [#​2301](https://github.com/actions/checkout/pull/2301) ### [`v4.3.1`](https://git.ryujinx.app/actions/checkout/blob/HEAD/CHANGELOG.md#v431) [Compare Source](https://git.ryujinx.app/actions/checkout/compare/v4.3.0...v4.3.1) - Port v6 cleanup to v4 by [@​ericsciple](https://github.com/ericsciple) in [#​2305](https://github.com/actions/checkout/pull/2305) ### [`v4.3.0`](https://git.ryujinx.app/actions/checkout/blob/HEAD/CHANGELOG.md#v430) [Compare Source](https://git.ryujinx.app/actions/checkout/compare/v4.2.2...v4.3.0) - docs: update README.md by [@​motss](https://github.com/motss) in [#​1971](https://github.com/actions/checkout/pull/1971) - Add internal repos for checking out multiple repositories by [@​mouismail](https://github.com/mouismail) in [#​1977](https://github.com/actions/checkout/pull/1977) - Documentation update - add recommended permissions to Readme by [@​benwells](https://github.com/benwells) in [#​2043](https://github.com/actions/checkout/pull/2043) - Adjust positioning of user email note and permissions heading by [@​joshmgross](https://github.com/joshmgross) in [#​2044](https://github.com/actions/checkout/pull/2044) - Update README.md by [@​nebuk89](https://github.com/nebuk89) in [#​2194](https://github.com/actions/checkout/pull/2194) - Update CODEOWNERS for actions by [@​TingluoHuang](https://github.com/TingluoHuang) in [#​2224](https://github.com/actions/checkout/pull/2224) - Update package dependencies by [@​salmanmkc](https://github.com/salmanmkc) in [#​2236](https://github.com/actions/checkout/pull/2236) ### [`v4.2.2`](https://git.ryujinx.app/actions/checkout/blob/HEAD/CHANGELOG.md#v422) [Compare Source](https://git.ryujinx.app/actions/checkout/compare/v4.2.1...v4.2.2) - `url-helper.ts` now leverages well-known environment variables by [@​jww3](https://github.com/jww3) in [#​1941](https://github.com/actions/checkout/pull/1941) - Expand unit test coverage for `isGhes` by [@​jww3](https://github.com/jww3) in [#​1946](https://github.com/actions/checkout/pull/1946) ### [`v4.2.1`](https://git.ryujinx.app/actions/checkout/blob/HEAD/CHANGELOG.md#v421) [Compare Source](https://git.ryujinx.app/actions/checkout/compare/v4.2.0...v4.2.1) - Check out other refs/\* by commit if provided, fall back to ref by [@​orhantoy](https://github.com/orhantoy) in [#​1924](https://github.com/actions/checkout/pull/1924) ### [`v4.2.0`](https://git.ryujinx.app/actions/checkout/blob/HEAD/CHANGELOG.md#v420) [Compare Source](https://git.ryujinx.app/actions/checkout/compare/v4.1.7...v4.2.0) - Add Ref and Commit outputs by [@​lucacome](https://github.com/lucacome) in [#​1180](https://github.com/actions/checkout/pull/1180) - Dependency updates by [@​dependabot-](https://github.com/dependabot-) [#​1777](https://github.com/actions/checkout/pull/1777), [#​1872](https://github.com/actions/checkout/pull/1872) ### [`v4.1.7`](https://git.ryujinx.app/actions/checkout/blob/HEAD/CHANGELOG.md#v417) [Compare Source](https://git.ryujinx.app/actions/checkout/compare/v4.1.6...v4.1.7) - Bump the minor-npm-dependencies group across 1 directory with 4 updates by [@​dependabot](https://github.com/dependabot) in [#​1739](https://github.com/actions/checkout/pull/1739) - Bump actions/checkout from 3 to 4 by [@​dependabot](https://github.com/dependabot) in [#​1697](https://github.com/actions/checkout/pull/1697) - Check out other refs/\* by commit by [@​orhantoy](https://github.com/orhantoy) in [#​1774](https://github.com/actions/checkout/pull/1774) - Pin actions/checkout's own workflows to a known, good, stable version. by [@​jww3](https://github.com/jww3) in [#​1776](https://github.com/actions/checkout/pull/1776) ### [`v4.1.6`](https://git.ryujinx.app/actions/checkout/blob/HEAD/CHANGELOG.md#v416) [Compare Source](https://git.ryujinx.app/actions/checkout/compare/v4.1.5...v4.1.6) - Check platform to set archive extension appropriately by [@​cory-miller](https://github.com/cory-miller) in [#​1732](https://github.com/actions/checkout/pull/1732) ### [`v4.1.5`](https://git.ryujinx.app/actions/checkout/blob/HEAD/CHANGELOG.md#v415) [Compare Source](https://git.ryujinx.app/actions/checkout/compare/v4.1.4...v4.1.5) - Update NPM dependencies by [@​cory-miller](https://github.com/cory-miller) in [#​1703](https://github.com/actions/checkout/pull/1703) - Bump github/codeql-action from 2 to 3 by [@​dependabot](https://github.com/dependabot) in [#​1694](https://github.com/actions/checkout/pull/1694) - Bump actions/setup-node from 1 to 4 by [@​dependabot](https://github.com/dependabot) in [#​1696](https://github.com/actions/checkout/pull/1696) - Bump actions/upload-artifact from 2 to 4 by [@​dependabot](https://github.com/dependabot) in [#​1695](https://github.com/actions/checkout/pull/1695) - README: Suggest `user.email` to be `41898282+github-actions[bot]@​users.noreply.github.com` by [@​cory-miller](https://github.com/cory-miller) in [#​1707](https://github.com/actions/checkout/pull/1707) ### [`v4.1.4`](https://git.ryujinx.app/actions/checkout/blob/HEAD/CHANGELOG.md#v414) [Compare Source](https://git.ryujinx.app/actions/checkout/compare/v4.1.3...v4.1.4) - Disable `extensions.worktreeConfig` when disabling `sparse-checkout` by [@​jww3](https://github.com/jww3) in [#​1692](https://github.com/actions/checkout/pull/1692) - Add dependabot config by [@​cory-miller](https://github.com/cory-miller) in [#​1688](https://github.com/actions/checkout/pull/1688) - Bump the minor-actions-dependencies group with 2 updates by [@​dependabot](https://github.com/dependabot) in [#​1693](https://github.com/actions/checkout/pull/1693) - Bump word-wrap from 1.2.3 to 1.2.5 by [@​dependabot](https://github.com/dependabot) in [#​1643](https://github.com/actions/checkout/pull/1643) ### [`v4.1.3`](https://git.ryujinx.app/actions/checkout/blob/HEAD/CHANGELOG.md#v413) [Compare Source](https://git.ryujinx.app/actions/checkout/compare/v4.1.2...v4.1.3) - Check git version before attempting to disable `sparse-checkout` by [@​jww3](https://github.com/jww3) in [#​1656](https://github.com/actions/checkout/pull/1656) - Add SSH user parameter by [@​cory-miller](https://github.com/cory-miller) in [#​1685](https://github.com/actions/checkout/pull/1685) - Update `actions/checkout` version in `update-main-version.yml` by [@​jww3](https://github.com/jww3) in [#​1650](https://github.com/actions/checkout/pull/1650) ### [`v4.1.2`](https://git.ryujinx.app/actions/checkout/blob/HEAD/CHANGELOG.md#v412) [Compare Source](https://git.ryujinx.app/actions/checkout/compare/v4.1.1...v4.1.2) - Fix: Disable sparse checkout whenever `sparse-checkout` option is not present [@​dscho](https://github.com/dscho) in [#​1598](https://github.com/actions/checkout/pull/1598) ### [`v4.1.1`](https://git.ryujinx.app/actions/checkout/blob/HEAD/CHANGELOG.md#v411) [Compare Source](https://git.ryujinx.app/actions/checkout/compare/v4.1.0...v4.1.1) - Correct link to GitHub Docs by [@​peterbe](https://github.com/peterbe) in [#​1511](https://github.com/actions/checkout/pull/1511) - Link to release page from what's new section by [@​cory-miller](https://github.com/cory-miller) in [#​1514](https://github.com/actions/checkout/pull/1514) ### [`v4.1.0`](https://git.ryujinx.app/actions/checkout/blob/HEAD/CHANGELOG.md#v410) [Compare Source](https://git.ryujinx.app/actions/checkout/compare/v4...v4.1.0) - [Add support for partial checkout filters](https://github.com/actions/checkout/pull/1396) </details> Reviewed-on: https://git.ryujinx.app/projects/Ryubing/pulls/52
249 lines
10 KiB
YAML
249 lines
10 KiB
YAML
name: Stable CI
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
inputs:
|
|
is_bugfix_release:
|
|
description: "Bug fix release: If checked, this will increment the third number for only Stable, and leave the Major version alone for both Stable and Canary."
|
|
required: true
|
|
type: boolean
|
|
|
|
concurrency: release
|
|
|
|
env:
|
|
POWERSHELL_TELEMETRY_OPTOUT: 1
|
|
DOTNET_CLI_TELEMETRY_OPTOUT: 1
|
|
RYUJINX_TARGET_RELEASE_CHANNEL_NAME: "release"
|
|
RELEASE: 1
|
|
|
|
jobs:
|
|
release:
|
|
name: Release for ${{ matrix.platform.name }}
|
|
runs-on: docker
|
|
container:
|
|
image: ${{ matrix.platform.os }}
|
|
strategy:
|
|
matrix:
|
|
platform:
|
|
- { 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@v6
|
|
|
|
- uses: actions/setup-dotnet@v5
|
|
with:
|
|
global-json-file: global.json
|
|
|
|
- name: Overwrite csc problem matcher
|
|
run: echo "::add-matcher::.github/csc.json"
|
|
|
|
- name: Install 7zip
|
|
run: |
|
|
sudo apt install -y 7zip
|
|
|
|
- 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)" >> $FORGEJO_OUTPUT
|
|
else
|
|
echo "build_version=$(gli get-next-version -c Stable -R)" >> $FORGEJO_OUTPUT
|
|
fi
|
|
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
|
|
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_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 -p:Version="${{ steps.version_info.outputs.build_version }}" -p:SourceRevisionId="${{ steps.version_info.outputs.git_short_hash }}" -p:DebugType=embedded src/Ryujinx --self-contained
|
|
|
|
- name: Packing Windows builds
|
|
if: contains(matrix.platform.name, 'win')
|
|
run: |
|
|
pushd publish
|
|
rm libarmeilleure-jitsupport.dylib
|
|
7z a ../release_output/ryujinx-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.zip ../publish
|
|
7z a ../release_output/ryujinx-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.7z ../publish
|
|
popd
|
|
shell: bash
|
|
|
|
- name: Packing Linux builds
|
|
if: contains(matrix.platform.name, 'linux')
|
|
run: |
|
|
pushd publish
|
|
rm libarmeilleure-jitsupport.dylib
|
|
chmod +x Ryujinx.sh Ryujinx
|
|
tar -czvf ../release_output/ryujinx-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.tar.gz ../publish
|
|
tar -cJvf ../release_output/ryujinx-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.tar.xz ../publish
|
|
popd
|
|
shell: bash
|
|
|
|
- name: Build AppImage (Linux)
|
|
if: contains(matrix.platform.name, 'linux')
|
|
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
|
|
|
|
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
|
|
popd
|
|
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: docker
|
|
container:
|
|
image: ghcr.io/catthehacker/ubuntu:act-latest
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
|
|
- uses: actions/setup-dotnet@v5
|
|
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
|
|
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)" >> $FORGEJO_OUTPUT
|
|
else
|
|
echo "build_version=$(gli get-next-version -c Stable -R)" >> $FORGEJO_OUTPUT
|
|
fi
|
|
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
|
|
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_CONFIG_FILE_NAME\%\%/Config\.json/g;' src/Ryujinx.Common/ReleaseInformation.cs
|
|
shell: bash
|
|
|
|
- name: Publish macOS Ryujinx
|
|
run: |
|
|
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
|
|
|
|
post_ci:
|
|
name: Post-CI Steps
|
|
runs-on: ubuntu-24.04
|
|
needs:
|
|
- macos_release
|
|
- release
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
|
|
- 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)" >> $FORGEJO_OUTPUT
|
|
else
|
|
echo "build_version=$(gli get-next-version -c Stable -R)" >> $FORGEJO_OUTPUT
|
|
fi
|
|
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: Send notification webhook
|
|
run: |
|
|
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: |
|
|
gli refresh-version-cache -T ${{ secrets.UPDATE_SERVER_ADMIN_TOKEN }} -c Stable
|
|
|
|
- name: Advance to the next version
|
|
run: |
|
|
if [ '${{ inputs.is_bugfix_release }}' == 'false' ]; then
|
|
gli advance-version -T ${{ secrets.UPDATE_SERVER_ADMIN_TOKEN }}
|
|
else
|
|
gli increment-version -T ${{ secrets.UPDATE_SERVER_ADMIN_TOKEN }} -c Stable
|
|
fi
|