From e49c779bc01777397b59432d516e92f8a26f0993 Mon Sep 17 00:00:00 2001 From: Crimson-Hawk Date: Tue, 5 Mar 2024 20:20:29 +0800 Subject: [PATCH] try three of importing hidden files from legacy On branch master Your branch is up to date with 'origin/master'. Changes to be committed: new file: .ci/.DS_Store new file: .ci/scripts/android/build.sh new file: .ci/scripts/android/eabuild.sh new file: .ci/scripts/android/mainlinebuild.sh new file: .ci/scripts/android/upload.sh new file: .ci/scripts/clang/docker.sh new file: .ci/scripts/clang/exec.sh new file: .ci/scripts/clang/upload.sh new file: .ci/scripts/common/post-upload.sh new file: .ci/scripts/common/pre-upload.sh new file: .ci/scripts/format/docker.sh new file: .ci/scripts/format/exec.sh new file: .ci/scripts/format/script.sh new file: .ci/scripts/linux/docker.sh new file: .ci/scripts/linux/exec.sh new file: .ci/scripts/linux/upload.sh new file: .ci/scripts/merge/apply-patches-by-label-private.py new file: .ci/scripts/merge/apply-patches-by-label.py new file: .ci/scripts/merge/check-label-presence.py new file: .ci/scripts/merge/yuzubot-git-config.sh new file: .ci/scripts/transifex/docker.sh new file: .ci/scripts/windows/docker.sh new file: .ci/scripts/windows/exec.sh new file: .ci/scripts/windows/install-vulkan-sdk.ps1 new file: .ci/scripts/windows/scan_dll.py new file: .ci/scripts/windows/upload.ps1 new file: .ci/scripts/windows/upload.sh new file: .ci/templates/build-mock.yml new file: .ci/templates/build-msvc.yml new file: .ci/templates/build-single.yml new file: .ci/templates/build-standard.yml new file: .ci/templates/build-testing.yml new file: .ci/templates/format-check.yml new file: .ci/templates/merge-private.yml new file: .ci/templates/merge.yml new file: .ci/templates/mergebot-private.yml new file: .ci/templates/mergebot.yml new file: .ci/templates/release-download.yml new file: .ci/templates/release-github.yml new file: .ci/templates/release-private-tag.yml new file: .ci/templates/release-universal.yml new file: .ci/templates/retrieve-artifact-source.yml new file: .ci/templates/retrieve-master-source.yml new file: .ci/templates/sync-source.yml new file: .ci/yuzu-mainline-step1.yml new file: .ci/yuzu-mainline-step2.yml new file: .ci/yuzu-patreon-step1.yml new file: .ci/yuzu-patreon-step2.yml new file: .ci/yuzu-repo-sync.yml new file: .ci/yuzu-verify.yml new file: .codespellrc new file: .git-blame-ignore-revs new file: .gitattributes new file: .gitignore new file: .gitmodules new file: .reuse/dep5 --- .ci/.DS_Store | Bin 0 -> 6148 bytes .ci/scripts/android/build.sh | 29 ++++ .ci/scripts/android/eabuild.sh | 21 +++ .ci/scripts/android/mainlinebuild.sh | 21 +++ .ci/scripts/android/upload.sh | 22 +++ .ci/scripts/clang/docker.sh | 32 ++++ .ci/scripts/clang/exec.sh | 11 ++ .ci/scripts/clang/upload.sh | 23 +++ .ci/scripts/common/post-upload.sh | 20 +++ .ci/scripts/common/pre-upload.sh | 10 ++ .ci/scripts/format/docker.sh | 9 + .ci/scripts/format/exec.sh | 10 ++ .ci/scripts/format/script.sh | 37 ++++ .ci/scripts/linux/docker.sh | 79 +++++++++ .ci/scripts/linux/exec.sh | 16 ++ .ci/scripts/linux/upload.sh | 67 ++++++++ .../merge/apply-patches-by-label-private.py | 48 ++++++ .ci/scripts/merge/apply-patches-by-label.py | 38 +++++ .ci/scripts/merge/check-label-presence.py | 21 +++ .ci/scripts/merge/yuzubot-git-config.sh | 5 + .ci/scripts/transifex/docker.sh | 19 +++ .ci/scripts/windows/docker.sh | 66 +++++++ .ci/scripts/windows/exec.sh | 11 ++ .ci/scripts/windows/install-vulkan-sdk.ps1 | 33 ++++ .ci/scripts/windows/scan_dll.py | 109 ++++++++++++ .ci/scripts/windows/upload.ps1 | 118 +++++++++++++ .ci/scripts/windows/upload.sh | 22 +++ .ci/templates/build-mock.yml | 8 + .ci/templates/build-msvc.yml | 31 ++++ .ci/templates/build-single.yml | 26 +++ .ci/templates/build-standard.yml | 33 ++++ .ci/templates/build-testing.yml | 40 +++++ .ci/templates/format-check.yml | 17 ++ .ci/templates/merge-private.yml | 44 +++++ .ci/templates/merge.yml | 43 +++++ .ci/templates/mergebot-private.yml | 33 ++++ .ci/templates/mergebot.yml | 18 ++ .ci/templates/release-download.yml | 16 ++ .ci/templates/release-github.yml | 16 ++ .ci/templates/release-private-tag.yml | 12 ++ .ci/templates/release-universal.yml | 13 ++ .ci/templates/retrieve-artifact-source.yml | 19 +++ .ci/templates/retrieve-master-source.yml | 14 ++ .ci/templates/sync-source.yml | 10 ++ .ci/yuzu-mainline-step1.yml | 14 ++ .ci/yuzu-mainline-step2.yml | 64 +++++++ .ci/yuzu-patreon-step1.yml | 14 ++ .ci/yuzu-patreon-step2.yml | 59 +++++++ .ci/yuzu-repo-sync.yml | 22 +++ .ci/yuzu-verify.yml | 23 +++ .codespellrc | 6 + .git-blame-ignore-revs | 5 + .gitattributes | 7 + .gitignore | 38 +++++ .gitmodules | 69 ++++++++ .reuse/dep5 | 161 ++++++++++++++++++ 56 files changed, 1772 insertions(+) create mode 100644 .ci/.DS_Store create mode 100755 .ci/scripts/android/build.sh create mode 100644 .ci/scripts/android/eabuild.sh create mode 100644 .ci/scripts/android/mainlinebuild.sh create mode 100755 .ci/scripts/android/upload.sh create mode 100755 .ci/scripts/clang/docker.sh create mode 100644 .ci/scripts/clang/exec.sh create mode 100755 .ci/scripts/clang/upload.sh create mode 100644 .ci/scripts/common/post-upload.sh create mode 100644 .ci/scripts/common/pre-upload.sh create mode 100644 .ci/scripts/format/docker.sh create mode 100644 .ci/scripts/format/exec.sh create mode 100755 .ci/scripts/format/script.sh create mode 100755 .ci/scripts/linux/docker.sh create mode 100644 .ci/scripts/linux/exec.sh create mode 100755 .ci/scripts/linux/upload.sh create mode 100644 .ci/scripts/merge/apply-patches-by-label-private.py create mode 100644 .ci/scripts/merge/apply-patches-by-label.py create mode 100644 .ci/scripts/merge/check-label-presence.py create mode 100644 .ci/scripts/merge/yuzubot-git-config.sh create mode 100755 .ci/scripts/transifex/docker.sh create mode 100755 .ci/scripts/windows/docker.sh create mode 100644 .ci/scripts/windows/exec.sh create mode 100644 .ci/scripts/windows/install-vulkan-sdk.ps1 create mode 100644 .ci/scripts/windows/scan_dll.py create mode 100644 .ci/scripts/windows/upload.ps1 create mode 100755 .ci/scripts/windows/upload.sh create mode 100644 .ci/templates/build-mock.yml create mode 100644 .ci/templates/build-msvc.yml create mode 100644 .ci/templates/build-single.yml create mode 100644 .ci/templates/build-standard.yml create mode 100644 .ci/templates/build-testing.yml create mode 100644 .ci/templates/format-check.yml create mode 100644 .ci/templates/merge-private.yml create mode 100644 .ci/templates/merge.yml create mode 100644 .ci/templates/mergebot-private.yml create mode 100644 .ci/templates/mergebot.yml create mode 100644 .ci/templates/release-download.yml create mode 100644 .ci/templates/release-github.yml create mode 100644 .ci/templates/release-private-tag.yml create mode 100644 .ci/templates/release-universal.yml create mode 100644 .ci/templates/retrieve-artifact-source.yml create mode 100644 .ci/templates/retrieve-master-source.yml create mode 100644 .ci/templates/sync-source.yml create mode 100644 .ci/yuzu-mainline-step1.yml create mode 100644 .ci/yuzu-mainline-step2.yml create mode 100644 .ci/yuzu-patreon-step1.yml create mode 100644 .ci/yuzu-patreon-step2.yml create mode 100644 .ci/yuzu-repo-sync.yml create mode 100644 .ci/yuzu-verify.yml create mode 100644 .codespellrc create mode 100644 .git-blame-ignore-revs create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 .gitmodules create mode 100644 .reuse/dep5 diff --git a/.ci/.DS_Store b/.ci/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..78ffb2a0b45251cbde71ffafb2d505835a3b500a GIT binary patch literal 6148 zcmeHKu};H447EcgQn7SoykF?Vgh;FK1^oeNivTH6B3kzR27kfM%)}?~Be3y&c1xoK z#8d&YCEvUF?40v*iSLMrr}xV-(TIprs9-Wg(<3r2+L6R8GRW~BHLYn?T#sjqs^jg3 z-^hTxyF*&hg6`;+cHUoEYr6Hk>rqyDJ})X6NzY#2o*rJFCw*SaA9&R_vRZ65ew0av zSVdPZv>7 "${ANDROID_KEYSTORE_FILE}" +fi + +cd src/android +chmod +x ./gradlew +./gradlew "assemble${BUILD_FLAVOR}${BUILD_TYPE}" "bundle${BUILD_FLAVOR}${BUILD_TYPE}" + +ccache -s + +if [ ! -z "${ANDROID_KEYSTORE_B64}" ]; then + rm "${ANDROID_KEYSTORE_FILE}" +fi diff --git a/.ci/scripts/android/eabuild.sh b/.ci/scripts/android/eabuild.sh new file mode 100644 index 0000000000..1672f29489 --- /dev/null +++ b/.ci/scripts/android/eabuild.sh @@ -0,0 +1,21 @@ +#!/bin/bash -ex + +# SPDX-FileCopyrightText: 2024 yuzu Emulator Project +# SPDX-License-Identifier: GPL-3.0-or-later + +export NDK_CCACHE="$(which ccache)" +ccache -s + +export ANDROID_KEYSTORE_FILE="${GITHUB_WORKSPACE}/ks.jks" +base64 --decode <<< "${EA_PLAY_ANDROID_KEYSTORE_B64}" > "${ANDROID_KEYSTORE_FILE}" +export ANDROID_KEY_ALIAS="${PLAY_ANDROID_KEY_ALIAS}" +export ANDROID_KEYSTORE_PASS="${PLAY_ANDROID_KEYSTORE_PASS}" +export SERVICE_ACCOUNT_KEY_PATH="${GITHUB_WORKSPACE}/sa.json" +base64 --decode <<< "${EA_SERVICE_ACCOUNT_KEY_B64}" > "${SERVICE_ACCOUNT_KEY_PATH}" +./gradlew "publishEaReleaseBundle" + +ccache -s + +if [ ! -z "${ANDROID_KEYSTORE_B64}" ]; then + rm "${ANDROID_KEYSTORE_FILE}" +fi diff --git a/.ci/scripts/android/mainlinebuild.sh b/.ci/scripts/android/mainlinebuild.sh new file mode 100644 index 0000000000..f3b89ed1c1 --- /dev/null +++ b/.ci/scripts/android/mainlinebuild.sh @@ -0,0 +1,21 @@ +#!/bin/bash -ex + +# SPDX-FileCopyrightText: 2024 yuzu Emulator Project +# SPDX-License-Identifier: GPL-3.0-or-later + +export NDK_CCACHE="$(which ccache)" +ccache -s + +export ANDROID_KEYSTORE_FILE="${GITHUB_WORKSPACE}/ks.jks" +base64 --decode <<< "${MAINLINE_PLAY_ANDROID_KEYSTORE_B64}" > "${ANDROID_KEYSTORE_FILE}" +export ANDROID_KEY_ALIAS="${PLAY_ANDROID_KEY_ALIAS}" +export ANDROID_KEYSTORE_PASS="${PLAY_ANDROID_KEYSTORE_PASS}" +export SERVICE_ACCOUNT_KEY_PATH="${GITHUB_WORKSPACE}/sa.json" +base64 --decode <<< "${MAINLINE_SERVICE_ACCOUNT_KEY_B64}" > "${SERVICE_ACCOUNT_KEY_PATH}" +./gradlew "publishMainlineReleaseBundle" + +ccache -s + +if [ ! -z "${ANDROID_KEYSTORE_B64}" ]; then + rm "${ANDROID_KEYSTORE_FILE}" +fi diff --git a/.ci/scripts/android/upload.sh b/.ci/scripts/android/upload.sh new file mode 100755 index 0000000000..26b1a7efa2 --- /dev/null +++ b/.ci/scripts/android/upload.sh @@ -0,0 +1,22 @@ +#!/bin/bash -ex + +# SPDX-FileCopyrightText: 2023 yuzu Emulator Project +# SPDX-License-Identifier: GPL-3.0-or-later + +. ./.ci/scripts/common/pre-upload.sh + +REV_NAME="yuzu-${GITDATE}-${GITREV}" + +BUILD_FLAVOR="mainline" + +BUILD_TYPE_LOWER="release" +BUILD_TYPE_UPPER="Release" +if [ "${GITHUB_REPOSITORY}" == "yuzu-emu/yuzu" ]; then + BUILD_TYPE_LOWER="relWithDebInfo" + BUILD_TYPE_UPPER="RelWithDebInfo" +fi + +cp src/android/app/build/outputs/apk/"${BUILD_FLAVOR}/${BUILD_TYPE_LOWER}/app-${BUILD_FLAVOR}-${BUILD_TYPE_LOWER}.apk" \ + "artifacts/${REV_NAME}.apk" +cp src/android/app/build/outputs/bundle/"${BUILD_FLAVOR}${BUILD_TYPE_UPPER}"/"app-${BUILD_FLAVOR}-${BUILD_TYPE_LOWER}.aab" \ + "artifacts/${REV_NAME}.aab" diff --git a/.ci/scripts/clang/docker.sh b/.ci/scripts/clang/docker.sh new file mode 100755 index 0000000000..f878e24e15 --- /dev/null +++ b/.ci/scripts/clang/docker.sh @@ -0,0 +1,32 @@ +#!/bin/bash -ex + +# SPDX-FileCopyrightText: 2021 yuzu Emulator Project +# SPDX-License-Identifier: GPL-2.0-or-later + +# Exit on error, rather than continuing with the rest of the script. +set -e + +ccache -s + +mkdir build || true && cd build +cmake .. \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_CXX_FLAGS="-march=x86-64-v2" \ + -DCMAKE_CXX_COMPILER=/usr/lib/ccache/clang++ \ + -DCMAKE_C_COMPILER=/usr/lib/ccache/clang \ + -DCMAKE_INSTALL_PREFIX="/usr" \ + -DDISPLAY_VERSION=$1 \ + -DENABLE_COMPATIBILITY_LIST_DOWNLOAD=ON \ + -DENABLE_QT_TRANSLATION=ON \ + -DUSE_DISCORD_PRESENCE=ON \ + -DYUZU_CRASH_DUMPS=ON \ + -DYUZU_ENABLE_COMPATIBILITY_REPORTING=${ENABLE_COMPATIBILITY_REPORTING:-"OFF"} \ + -DYUZU_USE_BUNDLED_FFMPEG=ON \ + -GNinja + +ninja + +ccache -s + +ctest -VV -C Release + diff --git a/.ci/scripts/clang/exec.sh b/.ci/scripts/clang/exec.sh new file mode 100644 index 0000000000..664fce5f84 --- /dev/null +++ b/.ci/scripts/clang/exec.sh @@ -0,0 +1,11 @@ +#!/bin/bash -ex + +# SPDX-FileCopyrightText: 2021 yuzu Emulator Project +# SPDX-License-Identifier: GPL-2.0-or-later + +mkdir -p "ccache" || true +chmod a+x ./.ci/scripts/clang/docker.sh +# the UID for the container yuzu user is 1027 +sudo chown -R 1027 ./ +docker run -e ENABLE_COMPATIBILITY_REPORTING -e CCACHE_DIR=/yuzu/ccache -v "$(pwd):/yuzu" -w /yuzu yuzuemu/build-environments:linux-fresh /bin/bash /yuzu/.ci/scripts/clang/docker.sh "$1" +sudo chown -R $UID ./ diff --git a/.ci/scripts/clang/upload.sh b/.ci/scripts/clang/upload.sh new file mode 100755 index 0000000000..0b4b3e330b --- /dev/null +++ b/.ci/scripts/clang/upload.sh @@ -0,0 +1,23 @@ +#!/bin/bash -ex + +# SPDX-FileCopyrightText: 2021 yuzu Emulator Project +# SPDX-License-Identifier: GPL-2.0-or-later + +. .ci/scripts/common/pre-upload.sh + +REV_NAME="yuzu-linux-${GITDATE}-${GITREV}" +ARCHIVE_NAME="${REV_NAME}.tar.xz" +COMPRESSION_FLAGS="-cJvf" + +if [ "${RELEASE_NAME}" = "mainline" ]; then + DIR_NAME="${REV_NAME}" +else + DIR_NAME="${REV_NAME}_${RELEASE_NAME}" +fi + +mkdir "$DIR_NAME" + +cp build/bin/yuzu-cmd "$DIR_NAME" +cp build/bin/yuzu "$DIR_NAME" + +. .ci/scripts/common/post-upload.sh diff --git a/.ci/scripts/common/post-upload.sh b/.ci/scripts/common/post-upload.sh new file mode 100644 index 0000000000..0930b7a7bd --- /dev/null +++ b/.ci/scripts/common/post-upload.sh @@ -0,0 +1,20 @@ +#!/bin/bash -ex + +# SPDX-FileCopyrightText: 2019 yuzu Emulator Project +# SPDX-License-Identifier: GPL-2.0-or-later + +# Copy documentation +cp LICENSE.txt "$DIR_NAME" +cp README.md "$DIR_NAME" + +if [[ -z "${NO_SOURCE_PACK}" ]]; then + git clone --depth 1 file://$(readlink -e .) ${REV_NAME}-source + tar -cJvf "${REV_NAME}-source.tar.xz" ${REV_NAME}-source + cp -v "${REV_NAME}-source.tar.xz" "$DIR_NAME" + cp -v "${REV_NAME}-source.tar.xz" "${ARTIFACTS_DIR}/" +fi + +tar $COMPRESSION_FLAGS "$ARCHIVE_NAME" "$DIR_NAME" + +# move the compiled archive into the artifacts directory to be uploaded by travis releases +mv "$ARCHIVE_NAME" "${ARTIFACTS_DIR}/" diff --git a/.ci/scripts/common/pre-upload.sh b/.ci/scripts/common/pre-upload.sh new file mode 100644 index 0000000000..3583f98402 --- /dev/null +++ b/.ci/scripts/common/pre-upload.sh @@ -0,0 +1,10 @@ +#!/bin/bash -ex + +# SPDX-FileCopyrightText: 2019 yuzu Emulator Project +# SPDX-License-Identifier: GPL-2.0-or-later + +GITDATE="`git show -s --date=short --format='%ad' | sed 's/-//g'`" +GITREV="`git show -s --format='%h'`" +ARTIFACTS_DIR="$PWD/artifacts" + +mkdir -p "${ARTIFACTS_DIR}/" diff --git a/.ci/scripts/format/docker.sh b/.ci/scripts/format/docker.sh new file mode 100644 index 0000000000..a0f7a61cce --- /dev/null +++ b/.ci/scripts/format/docker.sh @@ -0,0 +1,9 @@ +#!/bin/bash -ex + +# SPDX-FileCopyrightText: 2019 yuzu Emulator Project +# SPDX-License-Identifier: GPL-2.0-or-later + +# Run clang-format +cd /yuzu +chmod a+x ./.ci/scripts/format/script.sh +./.ci/scripts/format/script.sh diff --git a/.ci/scripts/format/exec.sh b/.ci/scripts/format/exec.sh new file mode 100644 index 0000000000..40ab41abda --- /dev/null +++ b/.ci/scripts/format/exec.sh @@ -0,0 +1,10 @@ +#!/bin/bash -ex + +# SPDX-FileCopyrightText: 2019 yuzu Emulator Project +# SPDX-License-Identifier: GPL-2.0-or-later + +chmod a+x ./.ci/scripts/format/docker.sh +# the UID for the container yuzu user is 1027 +sudo chown -R 1027 ./ +docker run -v "$(pwd):/yuzu" -w /yuzu yuzuemu/build-environments:linux-clang-format /bin/bash -ex /yuzu/.ci/scripts/format/docker.sh +sudo chown -R $UID ./ diff --git a/.ci/scripts/format/script.sh b/.ci/scripts/format/script.sh new file mode 100755 index 0000000000..f9c63dbfa3 --- /dev/null +++ b/.ci/scripts/format/script.sh @@ -0,0 +1,37 @@ +#!/bin/bash -ex + +# SPDX-FileCopyrightText: 2019 yuzu Emulator Project +# SPDX-License-Identifier: GPL-2.0-or-later + +shopt -s nullglob globstar + +if git grep -nrI '\s$' src **/*.yml **/*.txt **/*.md Doxyfile .gitignore .gitmodules .ci* dist/*.desktop dist/*.svg dist/*.xml; then + echo Trailing whitespace found, aborting + exit 1 +fi + +# Default clang-format points to default 3.5 version one +CLANG_FORMAT="${CLANG_FORMAT:-clang-format-15}" +"$CLANG_FORMAT" --version + +# Turn off tracing for this because it's too verbose +set +x + +# Check everything for branch pushes +FILES_TO_LINT="$(find src/ -name '*.cpp' -or -name '*.h')" + +for f in $FILES_TO_LINT; do + echo "$f" + "$CLANG_FORMAT" -i "$f" +done + +DIFF=$(git -c core.fileMode=false diff) + +if [ ! -z "$DIFF" ]; then + echo "!!! Not compliant to coding style, here is the fix:" + echo "$DIFF" + exit 1 +fi + +cd src/android +./gradlew ktlintCheck diff --git a/.ci/scripts/linux/docker.sh b/.ci/scripts/linux/docker.sh new file mode 100755 index 0000000000..7bba01d62a --- /dev/null +++ b/.ci/scripts/linux/docker.sh @@ -0,0 +1,79 @@ +#!/bin/bash -ex + +# SPDX-FileCopyrightText: 2019 yuzu Emulator Project +# SPDX-License-Identifier: GPL-2.0-or-later + +# Exit on error, rather than continuing with the rest of the script. +set -e + +ccache -s + +mkdir build || true && cd build +cmake .. \ + -DBoost_USE_STATIC_LIBS=ON \ + -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DCMAKE_CXX_FLAGS="-march=x86-64-v2" \ + -DCMAKE_CXX_COMPILER=/usr/lib/ccache/g++ \ + -DCMAKE_C_COMPILER=/usr/lib/ccache/gcc \ + -DCMAKE_INSTALL_PREFIX="/usr" \ + -DDISPLAY_VERSION=$1 \ + -DENABLE_COMPATIBILITY_LIST_DOWNLOAD=ON \ + -DENABLE_QT_TRANSLATION=ON \ + -DUSE_DISCORD_PRESENCE=ON \ + -DYUZU_ENABLE_COMPATIBILITY_REPORTING=${ENABLE_COMPATIBILITY_REPORTING:-"OFF"} \ + -DYUZU_USE_BUNDLED_FFMPEG=ON \ + -DYUZU_ENABLE_LTO=ON \ + -DYUZU_CRASH_DUMPS=ON \ + -GNinja + +ninja + +ccache -s + +ctest -VV -C Release + +# Separate debug symbols from specified executables +for EXE in yuzu; do + EXE_PATH="bin/$EXE" + # Copy debug symbols out + objcopy --only-keep-debug $EXE_PATH $EXE_PATH.debug + # Add debug link and strip debug symbols + objcopy -g --add-gnu-debuglink=$EXE_PATH.debug $EXE_PATH $EXE_PATH.out + # Overwrite original with stripped copy + mv $EXE_PATH.out $EXE_PATH +done +# Strip debug symbols from all executables +find bin/ -type f -not -regex '.*.debug' -exec strip -g {} ';' + +DESTDIR="$PWD/AppDir" ninja install +rm -vf AppDir/usr/bin/yuzu-cmd AppDir/usr/bin/yuzu-tester + +# Download tools needed to build an AppImage +wget -nc https://raw.githubusercontent.com/yuzu-emu/ext-linux-bin/main/appimage/deploy-linux.sh +wget -nc https://raw.githubusercontent.com/yuzu-emu/AppImageKit-checkrt/old/AppRun.sh +wget -nc https://github.com/yuzu-emu/ext-linux-bin/raw/main/appimage/exec-x86_64.so +# Set executable bit +chmod 755 \ + deploy-linux.sh \ + AppRun.sh \ + exec-x86_64.so \ + +# Workaround for https://github.com/AppImage/AppImageKit/issues/828 +export APPIMAGE_EXTRACT_AND_RUN=1 + +mkdir -p AppDir/usr/optional +mkdir -p AppDir/usr/optional/libstdc++ +mkdir -p AppDir/usr/optional/libgcc_s + +# Deploy yuzu's needed dependencies +DEPLOY_QT=1 ./deploy-linux.sh AppDir/usr/bin/yuzu AppDir + +# Workaround for libQt5MultimediaGstTools indirectly requiring libwayland-client and breaking Vulkan usage on end-user systems +find AppDir -type f -regex '.*libwayland-client\.so.*' -delete -print + +# Workaround for building yuzu with GCC 10 but also trying to distribute it to Ubuntu 18.04 et al. +# See https://github.com/darealshinji/AppImageKit-checkrt +cp exec-x86_64.so AppDir/usr/optional/exec.so +cp AppRun.sh AppDir/AppRun +cp --dereference /usr/lib/x86_64-linux-gnu/libstdc++.so.6 AppDir/usr/optional/libstdc++/libstdc++.so.6 +cp --dereference /lib/x86_64-linux-gnu/libgcc_s.so.1 AppDir/usr/optional/libgcc_s/libgcc_s.so.1 diff --git a/.ci/scripts/linux/exec.sh b/.ci/scripts/linux/exec.sh new file mode 100644 index 0000000000..04e2486a1b --- /dev/null +++ b/.ci/scripts/linux/exec.sh @@ -0,0 +1,16 @@ +#!/bin/bash -ex + +# SPDX-FileCopyrightText: 2019 yuzu Emulator Project +# SPDX-License-Identifier: GPL-2.0-or-later + +mkdir -p "ccache" || true +chmod a+x ./.ci/scripts/linux/docker.sh +# the UID for the container yuzu user is 1027 +sudo chown -R 1027 ./ + +# The environment variables listed below: +# AZURECIREPO TITLEBARFORMATIDLE TITLEBARFORMATRUNNING DISPLAYVERSION +# are requested in src/common/CMakeLists.txt and appear to be provided somewhere in Azure DevOps + +docker run -e AZURECIREPO -e TITLEBARFORMATIDLE -e TITLEBARFORMATRUNNING -e DISPLAYVERSION -e ENABLE_COMPATIBILITY_REPORTING -e CCACHE_DIR=/yuzu/ccache -v "$(pwd):/yuzu" -w /yuzu yuzuemu/build-environments:linux-fresh /bin/bash /yuzu/.ci/scripts/linux/docker.sh "$1" +sudo chown -R $UID ./ diff --git a/.ci/scripts/linux/upload.sh b/.ci/scripts/linux/upload.sh new file mode 100755 index 0000000000..fbb2d9c1b0 --- /dev/null +++ b/.ci/scripts/linux/upload.sh @@ -0,0 +1,67 @@ +#!/bin/bash -ex + +# SPDX-FileCopyrightText: 2019 yuzu Emulator Project +# SPDX-License-Identifier: GPL-2.0-or-later + +. .ci/scripts/common/pre-upload.sh + +APPIMAGE_NAME="yuzu-${RELEASE_NAME}-${GITDATE}-${GITREV}.AppImage" +BASE_NAME="yuzu-linux" +REV_NAME="${BASE_NAME}-${GITDATE}-${GITREV}" +ARCHIVE_NAME="${REV_NAME}.tar.xz" +COMPRESSION_FLAGS="-cJvf" + +if [ "${RELEASE_NAME}" = "mainline" ] || [ "${RELEASE_NAME}" = "early-access" ]; then + DIR_NAME="${BASE_NAME}-${RELEASE_NAME}" +else + DIR_NAME="${REV_NAME}-${RELEASE_NAME}" +fi + +mkdir "$DIR_NAME" + +cp build/bin/yuzu-cmd "$DIR_NAME" +if [ "${RELEASE_NAME}" != "early-access" ] && [ "${RELEASE_NAME}" != "mainline" ]; then + cp build/bin/yuzu "$DIR_NAME" +fi + +# Build an AppImage +cd build + +wget -nc https://github.com/yuzu-emu/ext-linux-bin/raw/main/appimage/appimagetool-x86_64.AppImage +chmod 755 appimagetool-x86_64.AppImage + +# if FUSE is not available, then fallback to extract and run +if ! ./appimagetool-x86_64.AppImage --version; then + export APPIMAGE_EXTRACT_AND_RUN=1 +fi + +# Don't let AppImageLauncher ask to integrate EA +if [ "${RELEASE_NAME}" = "mainline" ] || [ "${RELEASE_NAME}" = "early-access" ]; then + echo "X-AppImage-Integrate=false" >> AppDir/org.yuzu_emu.yuzu.desktop +fi + +if [ "${RELEASE_NAME}" = "mainline" ]; then + # Generate update information if releasing to mainline + ./appimagetool-x86_64.AppImage -u "gh-releases-zsync|yuzu-emu|yuzu-${RELEASE_NAME}|latest|yuzu-*.AppImage.zsync" AppDir "${APPIMAGE_NAME}" +else + ./appimagetool-x86_64.AppImage AppDir "${APPIMAGE_NAME}" +fi +cd .. + +# Copy the AppImage and update info to the artifacts directory and avoid compressing it +cp "build/${APPIMAGE_NAME}" "${ARTIFACTS_DIR}/" +if [ -f "build/${APPIMAGE_NAME}.zsync" ]; then + cp "build/${APPIMAGE_NAME}.zsync" "${ARTIFACTS_DIR}/" +fi + +# Copy the AppImage to the general release directory and remove git revision info +if [ "${RELEASE_NAME}" = "mainline" ] || [ "${RELEASE_NAME}" = "early-access" ]; then + cp "build/${APPIMAGE_NAME}" "${DIR_NAME}/yuzu-${RELEASE_NAME}.AppImage" +fi + +# Copy debug symbols to artifacts +cd build/bin +tar $COMPRESSION_FLAGS "${ARTIFACTS_DIR}/${REV_NAME}-debug.tar.xz" *.debug +cd - + +. .ci/scripts/common/post-upload.sh diff --git a/.ci/scripts/merge/apply-patches-by-label-private.py b/.ci/scripts/merge/apply-patches-by-label-private.py new file mode 100644 index 0000000000..c640c4c4da --- /dev/null +++ b/.ci/scripts/merge/apply-patches-by-label-private.py @@ -0,0 +1,48 @@ +# SPDX-FileCopyrightText: 2019 yuzu Emulator Project +# SPDX-License-Identifier: GPL-2.0-or-later + +# Download all pull requests as patches that match a specific label +# Usage: python download-patches-by-label.py