Build and Release YTLitePlus #9
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Original idea by @ISnackable. Many thanks to him for handling the most hardest parts! | |
# https://github.com/ISnackable/CercubePlus/blob/main/.github/workflows/Build.yml | |
name: Build and Release YTLitePlus | |
on: | |
workflow_dispatch: | |
inputs: | |
sdk_version: | |
description: "iOS SDK Version" | |
default: "16.5" | |
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: true | |
required: false | |
type: boolean | |
catbox_upload: | |
description: "Upload ipa to Catbox.moe" | |
default: false | |
required: false | |
type: boolean | |
create_release: | |
description: "Create a draft release" | |
default: false | |
required: false | |
type: boolean | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
jobs: | |
build: | |
name: Build YTLitePlus | |
runs-on: macos-12 | |
permissions: | |
contents: write | |
steps: | |
- name: Checkout Main | |
uses: actions/[email protected] | |
with: | |
path: main | |
ref: ${{ github.event.inputs.commit_id || github.ref }} | |
submodules: recursive | |
- name: Install Dependencies | |
run: brew install ldid dpkg make | |
- name: Setup Theos | |
uses: actions/[email protected] | |
with: | |
repository: theos/theos | |
ref: 3da31488281ecf4394d10302d2629607f4a1aa07 | |
path: theos | |
submodules: recursive | |
- name: SDK Caching | |
id: SDK | |
uses: actions/[email protected] | |
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 -n --depth=1 --filter=tree:0 https://github.com/theos/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/[email protected] | |
with: | |
repository: qnblackcat/theos-jailed | |
ref: master | |
path: theos-jailed | |
submodules: recursive | |
- name: Set PATH environment variable | |
run: echo "$(brew --prefix make)/libexec/gnubin" >> $GITHUB_PATH | |
- name: Install Theos Jailed | |
run: | | |
./theos-jailed/install | |
env: | |
THEOS: ${{ github.workspace }}/theos | |
- name: Prepare YouTube iPA | |
run: | | |
wget "$YOUTUBE_URL" --no-verbose -O main/YouTube.ipa | |
unzip -q main/YouTube.ipa -d main/tmp | |
echo "YT_VERSION=$(grep -A 1 '<key>CFBundleVersion</key>' main/tmp/Payload/YouTube.app/Info.plist | grep '<string>' | awk -F'[><]' '{print $3}')" >> $GITHUB_ENV | |
wget -qO- https://github.com/dayanch96/YTLite/releases/latest > main/tmp/release_page.html | |
YTLITE_VERSION=$(grep -o -E '/tag/v[^"]+' main/tmp/release_page.html | head -n 1 | sed 's/\/tag\/v//') | |
echo "YTLITE_VERSION=${YTLITE_VERSION}" >> $GITHUB_ENV | |
echo $YTLITE_VERSION | |
rm -rf main/tmp/Payload/YouTube.app/_CodeSignature/CodeResources | |
rm -rf main/tmp/Payload/YouTube.app/PlugIns/* | |
cp -R main/Extensions/*.appex main/tmp/Payload/YouTube.app/PlugIns | |
env: | |
THEOS: ${{ github.workspace }}/theos | |
YOUTUBE_URL: ${{ inputs.decrypted_youtube_url }} | |
- name: Fix Compiling & Build Package | |
id: build_package | |
run: | | |
(echo export PATH="/usr/local/opt/make/libexec/gnubin:$PATH" >> ~/.bash_profile) | |
source ~/.bash_profile | |
cd ${{ github.workspace }}/main | |
sed -i '' "12s#.*#BUNDLE_ID = ${{ env.BUNDLE_ID }}#g" Makefile | |
sed -i '' "11s#.*#DISPLAY_NAME = ${{ env.APP_NAME }}#g" Makefile | |
sed -i '' "s/^PACKAGE_VERSION.*$/PACKAGE_VERSION = ${{ env.YT_VERSION }}-${{ env.YTLITE_VERSION }}/" Makefile | |
sed -i '' "1s#.*#export TARGET = iphone:clang:${{ inputs.sdk_version }}:14.0#g" Makefile | |
make package FINALPACKAGE=1 | |
(mv "packages/$(ls -t packages | head -n1)" "packages/YTLitePlus_${{ env.YT_VERSION }}_${{ env.YTLITE_VERSION }}.ipa") | |
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 | |
BUNDLE_ID: ${{ inputs.bundle_id }} | |
APP_NAME: ${{ inputs.app_name }} | |
- name: Upload Artifact | |
if: ${{ inputs.upload_artifact }} | |
uses: actions/[email protected] | |
with: | |
name: YTLitePlus_${{ env.YT_VERSION }}_${{ env.YTLITE_VERSION }} | |
path: ${{ github.workspace }}/main/packages/${{ steps.build_package.outputs.package }} | |
if-no-files-found: error | |
- name: Upload Artifact to Catbox | |
if: ${{ inputs.catbox_upload }} | |
run: | | |
RESPONSE=$(curl -F "reqtype=fileupload" -F "fileToUpload=@${{ github.workspace }}/main/packages/${{ steps.build_package.outputs.package }}" https://catbox.moe/user/api.php) | |
CATBOX_URL=$(echo $RESPONSE | grep -o -E 'https://files.catbox.moe/[^"]*') | |
echo "Uploaded artifact to $CATBOX_URL" | |
CATBOX_FILE=$(echo $CATBOX_URL | sed 's|https://files.catbox.moe/||') | |
echo "CATBOX_FILE=$CATBOX_FILE" >> $GITHUB_ENV | |
- name: Prepare Release Notes | |
if: ${{ inputs.create_release }} | |
run: | | |
export TODAY=$(date '+%Y-%m-%d') | |
sed "s/%ytliteplus_version%/${{ env.YTLITE_VERSION }}/g; s/%youtube_version%/${{ env.YT_VERSION }}/g; s/%catbox_url%/${{ env.CATBOX_FILE }}/g; s/%date%/$TODAY/g" \ | |
main/.github/RELEASE_TEMPLATE/Release.md > ${{ github.workspace }}/release_notes.md | |
- name: Create Release | |
if: ${{ inputs.create_release }} | |
id: create_release | |
uses: softprops/[email protected] | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
tag_name: v${{ env.YT_VERSION }}-${{ env.YTLITE_VERSION }} | |
name: v${{ env.YT_VERSION }}-${{ env.YTLITE_VERSION }} - YTLitePlus | |
files: main/packages/*.ipa | |
draft: true | |
body_path: ${{ github.workspace }}/release_notes.md | |
- name: Update Altstore Source with latest release | |
if: ${{ inputs.create_release }} | |
run: | | |
curl --location --request POST 'https://api.github.com/repos/Balackburn/YTLitePlusAltstore/dispatches' \ | |
--header 'Authorization: token ${{ secrets.PERSONAL_ACCESS_TOKEN }}' \ | |
--header 'Content-Type: application/json' \ | |
--data-raw '{ | |
"event_type": "update-altstore-source-trigger" | |
}' |