Build and Release YTLitePlus #1
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: | |
decrypted_youtube_url: | |
description: "The direct URL to the decrypted YouTube ipa" | |
default: "" | |
required: true | |
type: string | |
bundle_id: | |
description: "Modify the bundle ID. Not recommended" | |
default: "com.google.ios.youtube" | |
required: true | |
type: string | |
app_name: | |
description: "Modify the name of the app on the Home Screen. Not recommended" | |
default: "YouTube" | |
required: true | |
type: string | |
commit_id: | |
description: "(Optional) Commit ID to build at" | |
default: "" | |
required: false | |
type: string | |
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 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: Caching | |
id: SDK | |
uses: actions/[email protected] | |
env: | |
cache-name: iOS-16.5-SDK | |
with: | |
path: theos/sdks/ | |
key: ${{ env.cache-name }} | |
- name: Download iOS 16.5 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 iPhoneOS16.5.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 | |
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 | |
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 | |
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 | |
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 | |
id: create_release | |
uses: softprops/[email protected] | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
DRAFT: ${{ inputs.create_release }} | |
with: | |
tag_name: v${{ env.YT_VERSION }}-${{ env.YTLITE_VERSION }} | |
name: v${{ env.YT_VERSION }}-${{ env.YTLITE_VERSION }} - YTLitePlus | |
files: main/packages/*.ipa | |
draft: ${{ env.DRAFT }} | |
body_path: ${{ github.workspace }}/release_notes.md | |
- name: Update Altstore Source with latest 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" | |
}' |