name: Build on: workflow_dispatch: inputs: ipa_url: description: "Direct link to the decrypted IPA" default: "" required: true type: string env: GH_TOKEN: ${{ github.token }} jobs: build-tweak: runs-on: macos-14 steps: - name: Checkout code uses: actions/checkout@v4 with: submodules: true - name: Download Tweak run: | set +e release_info=$(gh api --header 'Accept: application/vnd.github+json' repos/${{ github.repository }}/releases/latest) status_code=$(echo $release_info | jq -r ".status") if [ "$status_code" != "null" ]; then echo "No releases found or request failed, status code: $status_code" echo "DEB_DOWNLOADED=false" >> $GITHUB_ENV exit 0 fi set -e release_version=$(echo "$release_info" | jq -r '.assets[] | select(.name | contains("iphoneos-arm.deb")) | .name' | grep -o '_[0-9.]\+_' | tr -d '_') control_version=$(grep '^Version:' control | cut -d ' ' -f 2) if [ "$release_version" = "$control_version" ]; then echo "Versions match. Downloading DEB files..." echo "$release_info" | jq -r '.assets[] | select(.name | endswith(".deb")) | .browser_download_url' | xargs -I {} curl -L -O {} echo "DEB_DOWNLOADED=true" >> $GITHUB_ENV else echo "Versions do not match. No files will be downloaded." echo "DEB_DOWNLOADED=false" >> $GITHUB_ENV exit 0 fi - name: Check cache if: env.DEB_DOWNLOADED == 'false' run: echo upstream_heads=`git ls-remote https://github.com/theos/theos | head -n 1 | cut -f 1`-`git ls-remote https://github.com/theos/sdks | head -n 1 | cut -f 1` >> $GITHUB_ENV - name: Use cache if: env.DEB_DOWNLOADED == 'false' id: cache uses: actions/cache@v4 with: path: ${{ github.workspace }}/theos key: ${{ runner.os }}-${{ env.upstream_heads }} - name: Prepare Theos if: env.DEB_DOWNLOADED == 'false' uses: Randomblock1/theos-action@v1 - name: Build packages if: env.DEB_DOWNLOADED == 'false' run: make package FINALPACKAGE=1 && make package FINALPACKAGE=1 THEOS_PACKAGE_SCHEME=rootless - name: Set DEB path run: | if [ "${{ env.DEB_DOWNLOADED }}" == "true" ]; then echo "DEB_PATH=${{ github.workspace }}/*-arm.deb" >> $GITHUB_ENV echo "ROOTLESS_DEB_PATH=${{ github.workspace }}/*-arm64.deb" >> $GITHUB_ENV else echo "DEB_PATH=${{ github.workspace }}/packages/*-arm.deb" >> $GITHUB_ENV echo "ROOTLESS_DEB_PATH=${{ github.workspace }}/packages/*-arm64.deb" >> $GITHUB_ENV fi - name: Upload package uses: actions/upload-artifact@v4 with: name: package path: ${{ env.DEB_PATH }} - name: Upload rootless package uses: actions/upload-artifact@v4 with: name: rootless package path: ${{ env.ROOTLESS_DEB_PATH }} build-ipa: runs-on: macos-14 needs: build-tweak steps: - name: Checkout code uses: actions/checkout@v4 - name: Download build artifacts uses: actions/download-artifact@v4 with: merge-multiple: true - name: Download Discord IPA run: | curl -L -o discord.ipa ${{ github.event.inputs.ipa_url }} - name: Download IPA icons run: | curl -L -o ipa-icons.zip https://raw.githubusercontent.com/pyoncord/assets/main/ipa-icons.zip unzip ipa-icons.zip - name: Extract Values run: | NAME=$(grep '^Name:' control | cut -d ' ' -f 2) PACKAGE=$(grep '^Package:' control | cut -d ' ' -f 2) VERSION=$(grep '^Version:' control | cut -d ' ' -f 2) DEB_FILE_NAME="${PACKAGE}_${VERSION}_iphoneos-arm.deb" echo "DEB_FILE_NAME=$DEB_FILE_NAME" >> $GITHUB_ENV echo "APP_NAME=$NAME" >> $GITHUB_ENV - name: Inject tweak run: | bash -c "$(curl https://raw.githubusercontent.com/asdfzxcvbn/pyzule/main/install-pyzule.sh)" pyzule -n ${{ env.APP_NAME }} -k PyoncordIcon60x60@2x.png -d -i discord.ipa -o ${{ github.workspace }}/${{ env.APP_NAME }}.ipa -f ${{ github.workspace }}/${{ env.DEB_FILE_NAME }} - name: Upload ipa as artifact uses: actions/upload-artifact@v4 with: name: ipa path: ${{ github.workspace }}/${{ env.APP_NAME }}.ipa