Skip to content

Create YouTube Plus or MaxTube app #149

Create YouTube Plus or MaxTube app

Create YouTube Plus or MaxTube app #149

Workflow file for this run

name: Create YouTube Plus or YTPlusM app
on:
workflow_dispatch:
inputs:
enable_youpip:
description: "Integrate YouPiP"
type: boolean
required: true
default: false
enable_ytuhd:
description: "Integrate YTUHD"
type: boolean
required: true
default: false
enable_yq:
description: "Integrate YouQuality"
type: boolean
required: true
default: false
enable_ryd:
description: "Integrate Return YouTube Dislikes"
type: boolean
required: true
default: false
enable_ytabc:
description: "Integrate YTABConfig"
type: boolean
required: true
default: false
enable_demc:
description: "Integrate DontEatMyContent"
type: boolean
required: true
default: false
enable_ytweaks:
description: "Integrate YTweaks (YTPlusM)"
type: boolean
required: true
default: false
enable_gonerino:
description: "Integrate Gonerino (YTPlusM)"
type: boolean
required: true
default: false
enable_youspeed:
description: "Integrate YouSpeed (YTPlusM)"
type: boolean
required: true
default: false
enable_ytlcm:
description: "Integrate YTLowContrastMode (YTPlusM)"
type: boolean
required: true
default: false
enable_VolumeBoostYT:
description: "Integrate VolumeBoostYT (YTPlusM)"
type: boolean
required: true
default: false
enable_YouGetCaption:
description: "Integrate YouGetCaption (YTPlusM)"
type: boolean
required: true
default: false
enable_ytpf:
description: "Integrate YTPlaybackFix, my new tweak! (YTPlusM)"
type: boolean
required: true
default: false
enable_ytpfBETA:
description: "Integrate my YTPlaybackFix but latest beta version, at your own risk... (YTPlusM)"
type: boolean
required: true
default: false
enable_ycq:
description: "NEW! Integrate YouChooseQuality (YTPlusM)"
type: boolean
required: true
default: false
enable_ys:
description: "NEW! Integrate YouShare (YTPlusM)"
type: boolean
required: true
default: false
enable_pdstm:
description: "NEW! Integrate PleaseDontStopTheMusic (YTPlusM)"
type: boolean
required: true
default: false
ipa_url:
description: "URL to the decrypted IPA file"
default: ""
required: true
type: string
tweak_version:
description: "The version of the tweak to use. Versions that you can use are from 5.1 to 5.2.2 (no 5.2)"
default: "5.2.2"
required: true
type: string
display_name:
description: "App Name (Optional)"
default: "YouTube"
required: true
type: string
bundle_id:
description: "BundleID (Optional)"
default: "com.google.ios.youtube"
required: true
type: string
info_note:
description: "TIP: Learn more about integrations in the README via the link below"
default: "https://github.com/Mark02-2012/YTPlusM#tweak-integration-details"
type: string
required: false
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
build-tweaks:
uses: ./.github/workflows/_build_tweaks.yml
with:
enable_youpip: ${{ inputs.enable_youpip }}
enable_ytuhd: ${{ inputs.enable_ytuhd }}
enable_yq: ${{ inputs.enable_yq }}
enable_ryd: ${{ inputs.enable_ryd }}
enable_ytabc: ${{ inputs.enable_ytabc }}
enable_demc: ${{ inputs.enable_demc }}
enable_ytweaks: ${{ inputs.enable_ytweaks }}
enable_gonerino: ${{ inputs.enable_gonerino }}
enable_youspeed: ${{ inputs.enable_youspeed }}
enable_ytlcm: ${{ inputs.enable_ytlcm }}
enable_VolumeBoostYT: ${{ inputs.enable_VolumeBoostYT }}
enable_YouGetCaption: ${{ inputs.enable_YouGetCaption }}
enable_ytpf: ${{ inputs.enable_ytpf }}
enable_ytpfBETA: ${{ inputs.enable_ytpfBETA }}
enable_ycq: ${{ inputs.enable_ycq }}
enable_ys: ${{ inputs.enable_ys }}
enable_pdstm: ${{ inputs.enable_pdstm }}
tweak_version: ${{ inputs.tweak_version }}
package:
name: Package IPA
runs-on: macos-latest
needs: build-tweaks
permissions:
contents: write
steps:
- name: Checkout main branch
uses: actions/checkout@v6.0.2
with:
repository: Mark02-2012/YTPlusM
ref: main
- name: Download built debs
uses: actions/download-artifact@v8
with:
name: built-debs
path: ${{ github.workspace }}
- name: Hide sensitive inputs
uses: levibostian/action-hide-sensitive-inputs@v1
with:
exclude_inputs: bundle_id,display_name,enable_demc,enable_ryd,enable_ytabc,enable_youpip,enable_yq,enable_ytuhd,enable_ytweaks,enable_gonerino,enable_youspeed,enable_ytlcm,enable_VolumeBoostYT,enable_YouGetCaption,enable_ycq,enable_ys,enable_pdstm,info_note,tweak_version
- name: Download and validate IPA
run: |
wget "${{ inputs.ipa_url }}" --no-verbose -O youtube.ipa
file_type=$(file --mime-type -b youtube.ipa)
if [[ "$file_type" != "application/x-ios-app" && "$file_type" != "application/zip" ]]; then
echo "::error::Validation failed: The downloaded file is not a valid IPA. Detected type: $file_type."
exit 1
fi
- name: Get YouTube Version
run: |
unzip -q youtube.ipa -d ytextracted
echo "YT_VERSION=$(grep -A 1 '<key>CFBundleVersion</key>' ytextracted/Payload/YouTube.app/Info.plist | grep '<string>' | awk -F'[><]' '{print $3}')" >> $GITHUB_ENV
- name: Determines the Release Title Prefix
run: |
if [ "${{ inputs.enable_ytweaks }}" = "false" ] && \
[ "${{ inputs.enable_gonerino }}" = "false" ] && \
[ "${{ inputs.enable_youspeed }}" = "false" ] && \
[ "${{ inputs.enable_ytlcm }}" = "false" ] && \
[ "${{ inputs.enable_VolumeBoostYT }}" = "false" ] && \
[ "${{ inputs.enable_YouGetCaption }}" = "false" ] && \
[ "${{ inputs.enable_ytpf }}" = "false" ] && \
[ "${{ inputs.enable_ycq }}" = "false" ] && \
[ "${{ inputs.enable_ys }}" = "false" ] && \
[ "${{ inputs.enable_pdstm }}" = "false" ] && \
[ "${{ inputs.enable_ytpfBETA }}" = "false" ]; then
echo "RELEASE_PREFIX=YTPlus" >> $GITHUB_ENV
else
echo "RELEASE_PREFIX=YTPlusM" >> $GITHUB_ENV
fi
- name: Install cyan
run: pipx install --force https://github.com/asdfzxcvbn/pyzule-rw/archive/main.zip
- name: Inject tweaks into IPA
run: |
tweaks="ytplus.deb OpenYoutubeSafariExtension.appex"
for f in *.deb; do
[ -f "$f" ] && tweaks="$tweaks $f"
done
cyan -i youtube.ipa -o ${{ env.RELEASE_PREFIX }}_${{ env.YT_VERSION }}_${{ inputs.tweak_version }}.ipa -uwef $tweaks -n "${{ inputs.display_name }}" -b ${{ inputs.bundle_id }}
- name: Prepare Releases Notes
run: |
sed "s/%yt_version%/${{ env.YT_VERSION }}/g; s/%ytlite_version%/${{ inputs.tweak_version }}/g; s/%release_prefix%/${{ env.RELEASE_PREFIX }}/g" \
.github/RELEASE_TEMPLATE/Release_Notes.md > release_notes_prepared.md
- name: Prepare Releases Notes For iOS 15
run: |
if [ "${{ env.YT_VERSION }}" = "20.21.6" ]; then
sed "s/%yt_version%/${{ env.YT_VERSION }}/g; s/%ytlite_version%/${{ inputs.tweak_version }}/g; s/%release_prefix%/${{ env.RELEASE_PREFIX }}/g" \
.github/RELEASE_TEMPLATE/Release_Notes_YT20.21.6.md > release_notes_prepared_ios_15.md
fi
- name: Choose Releases Notes
run: |
if [ "${{ env.YT_VERSION }}" = "20.21.6" ]; then
echo "NOTES_SELECTED=release_notes_prepared_ios_15.md" >> $GITHUB_ENV
else
echo "NOTES_SELECTED=release_notes_prepared.md" >> $GITHUB_ENV
fi
- name: Define compatibility app in release title
run: |
if [ "${{ env.YT_VERSION }}" = "20.21.6" ]; then
echo "FOR_IOS15=(IOS 15+)" >> $GITHUB_ENV
else
echo "FOR_IOS15=" >> $GITHUB_ENV
fi
- name: Upload to GitHub Releases
uses: softprops/action-gh-release@v3
with:
tag_name: ${{ inputs.tweak_version }}_${{ env.YT_VERSION }}(${{ github.run_number }})
name: ${{ env.RELEASE_PREFIX }} ${{ inputs.tweak_version }} and ${{ env.YT_VERSION }} ${{ env.FOR_IOS15 }}
files: ${{ env.RELEASE_PREFIX }}_${{ env.YT_VERSION }}_${{ inputs.tweak_version }}.ipa
draft: true
body_path: ${{ env.NOTES_SELECTED }}
- name: Output Release URL
run: |
echo "::notice::🚀Build completed! Release available at: https://github.com/${{ github.repository }}/releases"