name: Build and Package RyukGram on: workflow_dispatch: inputs: decrypted_instagram_url: description: "The direct URL to the decrypted Instagram IPA" default: "" required: true type: string upload_artifact: description: "Upload Artifact" default: true required: false type: boolean build_tipa: description: "Build tipa" default: false required: false type: boolean concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: build: name: Build RyukGram runs-on: macos-latest permissions: contents: write steps: - name: Checkout Main uses: actions/checkout@v4 with: path: main 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@v4 with: repository: theos/theos ref: master path: ${{ github.workspace }}/theos submodules: recursive - name: SDK Caching id: SDK uses: actions/cache@v4 env: cache-name: iPhoneOS16.2.sdk with: path: ${{ github.workspace }}/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/xybp888/iOS-SDKs/ cd iOS-SDKs git sparse-checkout set --no-cone iPhoneOS16.2.sdk git checkout mv *.sdk $THEOS/sdks env: THEOS: ${{ github.workspace }}/theos - name: Prepare Instagram IPA run: | cd main mkdir -p packages wget "$Instagram_URL" --no-verbose -O packages/com.burbn.instagram.ipa ls -la packages env: THEOS: ${{ github.workspace }}/theos Instagram_URL: ${{ inputs.decrypted_instagram_url }} - name: Get Version id: version run: | VERSION=$(awk '/Version:/ {print $2}' main/control) echo "VERSION=${VERSION}" >> "$GITHUB_ENV" echo "version=${VERSION}" >> "$GITHUB_OUTPUT" - name: Setup FFmpegKit run: cd main && ./scripts/setup-ffmpegkit.sh - name: Build sideloaded IPA (rootless deb → cyan inject) run: | pip install --force-reinstall https://github.com/asdfzxcvbn/pyzule-rw/archive/main.zip cd main curl -Lo ipapatch https://github.com/asdfzxcvbn/ipapatch/releases/download/v2.1.3/ipapatch.macos-arm64 chmod +x ipapatch export PATH=.:$PATH ./build.sh sideload ls -la packages env: THEOS: ${{ github.workspace }}/theos - name: Rename IPA run: | cd main/packages IPA=$(ls -t *.ipa | grep -iv instagram | head -n1) [ -n "$IPA" ] && mv "$IPA" "RyukGram_sideloaded_v${VERSION}.ipa" - name: Duplicate as .tipa if: ${{ inputs.build_tipa }} run: | cd main/packages cp "RyukGram_sideloaded_v${VERSION}.ipa" "RyukGram_trollstore_v${VERSION}.tipa" - name: Pass package name to upload action id: package_name run: | echo "package=$(ls -t main/packages/RyukGram_sideloaded_v*.ipa | head -n1 | xargs basename)" >> "$GITHUB_OUTPUT" - name: Upload IPA Artifact if: ${{ inputs.upload_artifact }} uses: actions/upload-artifact@v4 with: name: RyukGram_sideloaded_v${{ steps.version.outputs.version }} path: ${{ github.workspace }}/main/packages/${{ steps.package_name.outputs.package }} if-no-files-found: error - name: Upload TIPA Artifact if: ${{ inputs.upload_artifact && inputs.build_tipa }} uses: actions/upload-artifact@v4 with: name: RyukGram_trollstore_v${{ steps.version.outputs.version }} path: ${{ github.workspace }}/main/packages/RyukGram_trollstore_v*.tipa if-no-files-found: error - name: Create Release uses: softprops/action-gh-release@v2.0.6 with: name: RyukGram_sideloaded_v${{ steps.version.outputs.version }} files: | ${{ github.workspace }}/main/packages/RyukGram_sideloaded_v*.ipa ${{ github.workspace }}/main/packages/RyukGram_trollstore_v*.tipa draft: true - name: Output Release URL run: | echo "::notice::Release available at: https://github.com/${{ github.repository }}/releases"