Build and Release Swift #8
This file contains hidden or 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
| name: Build and Release Swift | |
| on: | |
| workflow_dispatch: | |
| env: | |
| SWIFTPROTOBUF_VERSION: "1.29.0" | |
| jobs: | |
| build: | |
| runs-on: macos-latest | |
| env: | |
| THEOS: ${{ github.workspace }}/theos | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: maxim-lobanov/setup-xcode@v1 | |
| with: | |
| xcode-version: '16.2.0' | |
| - name: Setup Theos | |
| uses: actions/checkout@v4 | |
| with: | |
| repository: theos/theos | |
| path: ${{ github.workspace }}/theos | |
| submodules: recursive | |
| - name: Install Dependencies | |
| run: | | |
| brew install make dpkg ldid | |
| echo "$(brew --prefix make)/libexec/gnubin" >> $GITHUB_PATH | |
| - name: Copy SwiftProtobuf (rootful) | |
| run: | | |
| mkdir swiftprotobuf && cd "$_" | |
| wget https://github.com/whoeevee/swift-protobuf/releases/download/${{ env.SWIFTPROTOBUF_VERSION }}/org.swift.protobuf.swiftprotobuf_${{ env.SWIFTPROTOBUF_VERSION }}_iphoneos-arm.deb | |
| ar -x org.swift.protobuf.swiftprotobuf_${{ env.SWIFTPROTOBUF_VERSION }}_iphoneos-arm.deb | |
| tar -xvf data.tar.lzma | |
| cp -r Library/Frameworks/SwiftProtobuf.framework $THEOS/lib | |
| - name: Copy SwiftProtobuf (rootless) | |
| run: | | |
| mkdir swiftprotobuf-rootless && cd "$_" | |
| wget https://github.com/whoeevee/swift-protobuf/releases/download/${{ env.SWIFTPROTOBUF_VERSION }}/org.swift.protobuf.swiftprotobuf_${{ env.SWIFTPROTOBUF_VERSION }}_iphoneos-arm64.deb | |
| ar -x org.swift.protobuf.swiftprotobuf_${{ env.SWIFTPROTOBUF_VERSION }}_iphoneos-arm64.deb | |
| tar -xvf data.tar.lzma | |
| cp -r var/jb/Library/Frameworks/SwiftProtobuf.framework $THEOS/lib/iphone/rootless | |
| - name: Build EeveeSpotify (rootful) | |
| run: | | |
| make package FINALPACKAGE=1 | |
| echo "filename=$(find . -not -name '*debug*' -path './packages/*' | cut -d/ -f3)" >> $GITHUB_ENV | |
| - uses: actions/upload-artifact@v4 | |
| with: | |
| name: ${{env.filename}} | |
| path: packages/${{env.filename}} | |
| if-no-files-found: error | |
| - name: Build EeveeSpotify (rootless) | |
| run: | | |
| make package FINALPACKAGE=1 THEOS_PACKAGE_SCHEME=rootless | |
| echo "filename=$(find . -name '*arm64*' -path './packages/*' | cut -d/ -f3)" >> $GITHUB_ENV | |
| - uses: actions/upload-artifact@v4 | |
| with: | |
| name: ${{env.filename}} | |
| path: packages/${{env.filename}} | |
| if-no-files-found: error | |
| release: | |
| needs: build | |
| permissions: | |
| contents: write | |
| runs-on: macos-latest | |
| defaults: | |
| run: | |
| shell: zsh {0} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Download Artifacts | |
| uses: actions/download-artifact@v4 | |
| with: | |
| merge-multiple: true | |
| - name: Set EeveeSpotify Versions | |
| run: | | |
| EEVEESPOTIFY_ROOTFUL=$(echo *iphoneos-arm.deb) | |
| EEVEESPOTIFY_ROOTLESS=$(echo *iphoneos-arm64.deb) | |
| EEVEESPOTIFY_VERSION=${${(s:_:)EEVEESPOTIFY_ROOTFUL}[2]} | |
| echo "EEVEESPOTIFY_ROOTFUL=$EEVEESPOTIFY_ROOTFUL" >> $GITHUB_ENV | |
| echo "EEVEESPOTIFY_ROOTLESS=$EEVEESPOTIFY_ROOTLESS" >> $GITHUB_ENV | |
| echo "EEVEESPOTIFY_VERSION=$EEVEESPOTIFY_VERSION" >> $GITHUB_ENV | |
| - name: Download SwiftProtobuf | |
| run: | | |
| wget https://github.com/whoeevee/swift-protobuf/releases/download/${{ env.SWIFTPROTOBUF_VERSION }}/org.swift.protobuf.swiftprotobuf_${{ env.SWIFTPROTOBUF_VERSION }}_iphoneos-arm.deb | |
| wget https://github.com/whoeevee/swift-protobuf/releases/download/${{ env.SWIFTPROTOBUF_VERSION }}/org.swift.protobuf.swiftprotobuf_${{ env.SWIFTPROTOBUF_VERSION }}_iphoneos-arm64.deb | |
| echo "SWIFTPROTOBUF_ROOTFUL=org.swift.protobuf.swiftprotobuf_${{ env.SWIFTPROTOBUF_VERSION }}_iphoneos-arm.deb" >> $GITHUB_ENV | |
| echo "SWIFTPROTOBUF_ROOTLESS=org.swift.protobuf.swiftprotobuf_${{ env.SWIFTPROTOBUF_VERSION }}_iphoneos-arm64.deb" >> $GITHUB_ENV | |
| - name: Download OpenSpotifySafariExtension | |
| run: | | |
| git clone https://github.com/BillyCurtis/OpenSpotifySafariExtension | |
| echo "OPENSPOTIFYSAFARIEXTENSION=OpenSpotifySafariExtension/OpenSpotifySafariExtension.appex" >> $GITHUB_ENV | |
| - name: Download Decrypted Spotify Package | |
| run: | | |
| response=$(curl -ks 'https://decrypt.whoeevee.com/decrypted?appId=324684580&apiKey=${{ secrets.EEVEEDECRYPTER_API_KEY }}') | |
| link=$(echo "$response" | jq -r '.link') | |
| wget --no-check-certificate -q $link | |
| echo "SPOTIFY_VERSION=${${(s/-/)link}[2]%.ipa}" >> $GITHUB_ENV | |
| echo "SPOTIFY_PACKAGE=$(echo *.ipa)" >> $GITHUB_ENV | |
| - name: Setup insert-dylib | |
| run: | | |
| git clone https://github.com/Tyilo/insert_dylib.git | |
| xcrun clang -x c -arch arm64 ./insert_dylib/insert_dylib/main.c -I/usr/include/ -o insert-dylib | |
| sudo mv insert-dylib /usr/local/bin/ | |
| sudo chmod +x /usr/local/bin/insert-dylib | |
| - name: Setup ivinject | |
| run: | | |
| git clone https://github.com/whoeevee/ivinject.git | |
| cp -r ./ivinject/KnownFrameworks ~/.ivinject | |
| wget https://github.com/whoeevee/ivinject/releases/download/first/ivinject-arm64 | |
| sudo mv ivinject-arm64 /usr/local/bin/ | |
| sudo chmod +x /usr/local/bin/ivinject-arm64 | |
| - name: Setup ipapatch | |
| run: | | |
| wget https://github.com/asdfzxcvbn/ipapatch/releases/download/v2.1.0/ipapatch.macos-arm64 | |
| sudo mv ipapatch.macos-arm64 /usr/local/bin/ipapatch | |
| sudo chmod +x /usr/local/bin/ipapatch | |
| - name: Check Version | |
| env: | |
| GH_TOKEN: ${{ github.token }} | |
| run: | | |
| LATEST_EEVEESPOTIFY_VERSION=$(gh release list --limit 1 --json tagName --jq '.[0].tagName[5:]') | |
| echo "LATEST_EEVEESPOTIFY_VERSION=$LATEST_EEVEESPOTIFY_VERSION" >> $GITHUB_ENV | |
| - name: Create EeveeSpotify Package | |
| run: | | |
| EEVEESPOTIFY_PACKAGE="EeveeSpotify-${EEVEESPOTIFY_VERSION}-${SPOTIFY_VERSION}.ipa" | |
| echo "EEVEESPOTIFY_PACKAGE=$EEVEESPOTIFY_PACKAGE" >> $GITHUB_ENV | |
| ivinject-arm64 "$SPOTIFY_PACKAGE" "$EEVEESPOTIFY_PACKAGE" \ | |
| -i "$EEVEESPOTIFY_ROOTFUL" "$SWIFTPROTOBUF_ROOTFUL" "$OPENSPOTIFYSAFARIEXTENSION" \ | |
| -s - -d --level Optimal | |
| - name: Create Patched Package | |
| run: | | |
| EEVEESPOTIFY_PATCHED_PACKAGE="EeveeSpotify-${EEVEESPOTIFY_VERSION}-${SPOTIFY_VERSION}-patched.ipa" | |
| echo "EEVEESPOTIFY_PATCHED_PACKAGE=$EEVEESPOTIFY_PATCHED_PACKAGE" >> $GITHUB_ENV | |
| ipapatch -input "$EEVEESPOTIFY_PACKAGE" -output "$EEVEESPOTIFY_PATCHED_PACKAGE" | |
| - name: Compose Changelog | |
| if: env.LATEST_EEVEESPOTIFY_VERSION != env.EEVEESPOTIFY_VERSION | |
| env: | |
| GH_TOKEN: ${{ github.token }} | |
| run: | | |
| last_update_repo_date=$(git log --grep="bump" --format=%cI | sed -n 2p) | |
| CHANGELOG="" | |
| gh pr list --state merged --search "merged:>${last_update_repo_date}" --json files,author \ | |
| | jq -r ' | |
| .[] | |
| | .author.login as $login | |
| | .files[0].path as $file | |
| | "\($login) \($file)" | |
| ' \ | |
| | tail -r \ | |
| | while read -r login file; do | |
| lang_code=$(echo "$file" | grep -oE '/([a-zA-Z-]+)\.lproj/' | sed -E 's|/([a-zA-Z-]+)\.lproj/|\1|') | |
| lang_name=$(echo "import Foundation; print(Locale.current.localizedString(forIdentifier: \"$lang_code\") ?? \"\")" | swift -) | |
| if [ -z "$lang_name" ]; then | |
| continue | |
| fi | |
| CHANGELOG+="* Updated ${lang_name} localization by @${login}"$'\n' | |
| done | |
| echo "CHANGELOG<<EOF" >> $GITHUB_ENV | |
| echo "$CHANGELOG" >> $GITHUB_ENV | |
| echo "EOF" >> $GITHUB_ENV | |
| - name: Create Release | |
| if: env.LATEST_EEVEESPOTIFY_VERSION != env.EEVEESPOTIFY_VERSION | |
| uses: actions/create-release@v1 | |
| env: | |
| GITHUB_TOKEN: ${{ github.token }} | |
| with: | |
| tag_name: swift${{ env.EEVEESPOTIFY_VERSION }} | |
| release_name: Swift ${{ env.EEVEESPOTIFY_VERSION }} | |
| body: ${{ env.CHANGELOG }} | |
| draft: false | |
| prerelease: false | |
| - name: Upload Packages | |
| env: | |
| GH_TOKEN: ${{ github.token }} | |
| run: | | |
| gh release upload "swift$EEVEESPOTIFY_VERSION" \ | |
| "$EEVEESPOTIFY_ROOTFUL" "$EEVEESPOTIFY_ROOTLESS" \ | |
| "$SWIFTPROTOBUF_ROOTFUL" "$SWIFTPROTOBUF_ROOTLESS" \ | |
| --clobber | |
| - name: Upload Packages to Telegram | |
| env: | |
| API_ID: ${{ secrets.API_ID }} | |
| API_HASH: ${{ secrets.API_HASH }} | |
| BOT_TOKEN: ${{ secrets.BOT_TOKEN }} | |
| EEVEESPOTIFY_CHANNEL_ID: ${{ secrets.EEVEESPOTIFY_CHANNEL_ID }} | |
| EEVEESPOTIFY_CHANNEL_ACCESS_HASH: ${{ secrets.EEVEESPOTIFY_CHANNEL_ACCESS_HASH }} | |
| run: ./Tools/TelegramUploadEeveeSpotify |