# Original idea by @ISnackable. Thanks to him for handling the hardest parts! # https://github.com/ISnackable/YTCubePlus/blob/main/.github/workflows/Build.yml name: Build and Release uYouEnhanced on: workflow_dispatch: inputs: sdk_version: description: "iOS SDK Version" default: "17.5" required: true type: string uyou_version: description: "uYou Version" default: "3.0.4" required: true type: string decrypted_youtube_url: description: "Direct URL of the decrypted YouTube IPA" default: "" required: true type: string bundle_id: description: "Modify the bundle ID" default: "com.google.ios.youtube" required: true type: string app_name: description: "Modify the app name" default: "YouTube" required: true type: string commit_id: description: "(Optional) Commit ID to build at" default: "" required: false type: string upload_artifact: description: "Upload IPA as artifact" default: false required: false type: boolean create_release: description: "Create a draft release" default: true required: false type: boolean concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: build: name: Build uYouEnhanced runs-on: macos-13 permissions: contents: write steps: - name: Hash YT ipa url run: | URL_YT="$(jq -r '.inputs.decrypted_youtube_url' $GITHUB_EVENT_PATH)" echo ::add-mask::$URL_YT echo URL_YT=$URL_YT >> $GITHUB_ENV - name: Prepare YouTube iPA id: prepare_youtube run: | wget "$YOUTUBE_URL" --quiet --no-verbose -O main/YouTube.ipa cd ${{ github.workspace }}/main mv YouTube.ipa YouTube.zip unzip -q YouTube.zip youtube_version=$(defaults read "$(pwd)/Payload/YouTube.app/Info" CFBundleVersion) echo "==> YouTube v$youtube_version downloaded!" sed -i '' "17s#.*#YOUTUBE_VERSION = ${youtube_version}#g" Makefile echo "youtube_version=${youtube_version}" >> $GITHUB_OUTPUT env: THEOS: ${{ github.workspace }}/theos YOUTUBE_URL: ${{ env.URL_YT }} - name: Checkout Main uses: actions/checkout@v5 with: path: main ref: ${{ github.event.inputs.commit_id || github.ref }} submodules: recursive - name: Install Dependencies run: brew install ldid dpkg make - name: Set PATH environment variable run: echo "$(brew --prefix make)/libexec/gnubin" >> $GITHUB_PATH - name: Setup Theos uses: actions/checkout@v5 with: repository: theos/theos ref: master path: theos submodules: recursive - name: SDK Caching id: SDK uses: actions/cache@v4.2.4 env: cache-name: iOS-${{ inputs.sdk_version }}-SDK with: path: theos/sdks/ key: ${{ env.cache-name }} restore-keys: ${{ env.cache-name }} - name: Download iOS SDK if: steps.SDK.outputs.cache-hit != 'true' run: | git clone --quiet -n --depth=1 --filter=tree:0 https://github.com/aricloverALT/sdks/ cd sdks git sparse-checkout set --no-cone iPhoneOS${{ inputs.sdk_version }}.sdk git checkout mv *.sdk $THEOS/sdks env: THEOS: ${{ github.workspace }}/theos - name: Setup Theos Jailed uses: actions/checkout@v5 with: repository: qnblackcat/theos-jailed ref: master path: theos-jailed submodules: recursive - name: Install Theos Jailed run: | ./theos-jailed/install env: THEOS: ${{ github.workspace }}/theos - name: Fix compiling & Build Package id: build_package run: | cd ${{ github.workspace }}/main sed -i '' "30s#.*#BUNDLE_ID = ${{ env.BUNDLE_ID }}#g" Makefile # Modify the bundle ID sed -i '' "29s#.*#DISPLAY_NAME = ${{ env.APP_NAME }}#g" Makefile # Modify the app name sed -i '' "1s#.*#export TARGET = iphone:clang:${{ inputs.sdk_version }}:14.0#g" Makefile # Modify the SDK version make package THEOS_PACKAGE_SCHEME=rootless IPA=Payload/YouTube.app FINALPACKAGE=1 echo "package=$(ls -t packages | head -n1)" >>$GITHUB_OUTPUT echo -e "==> \033[1mSHASUM256: $(shasum -a 256 packages/*.ipa | cut -f1 -d' ')\033[0m" echo -e "==> \033[1mBundle ID: ${{ env.BUNDLE_ID }}\033[0m" env: THEOS: ${{ github.workspace }}/theos UYOU_VERSION: ${{ inputs.uyou_version }} BUNDLE_ID: ${{ inputs.bundle_id }} APP_NAME: ${{ inputs.app_name }} - name: Upload Artifact if: ${{ inputs.upload_artifact }} uses: actions/upload-artifact@v4.6.2 env: UYOU_VERSION: ${{ inputs.uyou_version }} YOUTUBE_VERSION: ${{ steps.prepare_youtube.outputs.youtube_version }} with: name: uYouEnhanced_${{ env.YOUTUBE_VERSION }}_${{ env.UYOU_VERSION }} path: ${{ github.workspace }}/main/packages/${{ steps.build_package.outputs.package }} if-no-files-found: error - name: Create Release if: ${{ inputs.create_release }} id: create_release uses: softprops/action-gh-release@v2.3.2 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} UYOU_VERSION: ${{ inputs.uyou_version }} YOUTUBE_VERSION: ${{ steps.prepare_youtube.outputs.youtube_version }} with: tag_name: v${{ env.YOUTUBE_VERSION }}-${{ env.UYOU_VERSION }}-(${{ github.run_number }}) name: v${{ env.YOUTUBE_VERSION }}-${{ env.UYOU_VERSION }}-(${{ github.run_number }}) files: main/packages/*.ipa draft: true