Skip to content

Build and Release

Build and Release #4

name: Build and Release
on:
workflow_dispatch:
inputs:
SPOTURL:
description: 'Direct URL to Spotify .ipa'
required: true
CHANGEVERSION:
description: 'SpotC++ Version Number'
required: false
EEVEEVERSION:
description: 'EeveeSpotify Version'
required: false
jobs:
setup:
runs-on: macos-latest
steps:
- name: Install Xcode and CLI tools
run: |
sudo xcode-select --install
- name: Install Pyzule
run: bash -c "$(curl https://raw.githubusercontent.com/asdfzxcvbn/pyzule/main/install-pyzule.sh)"
fetch_eeveespotify:
needs: setup
runs-on: macos-latest
steps:
- name: Fetch EeveeSpotify tags
id: eeveespotify
run: |
EEVEEVERSION=${{ github.event.inputs.EEVEEVERSION }}
if [ -z "$EEVEEVERSION" ]; then
REALEEVEEVERSION=$(curl -s https://api.github.com/repos/whoeevee/EeveeSpotify/releases/latest | jq -r '.tag_name')
else
REALEEVEEVERSION=$(curl -s https://api.github.com/repos/whoeevee/EeveeSpotify/releases | jq -r --arg VERSION "$EEVEEVERSION" '.[] | select(.tag_name == $VERSION) | .tag_name')
fi
echo "::set-output name=REALEEVEEVERSION::$REALEEVEEVERSION"
env:
EEVEEVERSION: ${{ github.event.inputs.EEVEEVERSION }}
download_and_scan:
needs: fetch_eeveespotify
runs-on: macos-latest
steps:
- name: Set up directory
run: mkdir -p "Build Components"
- name: Download Spotify.ipa
id: spotify_download
run: |
curl -L ${{ github.event.inputs.SPOTURL }} -o "Build Components/Spotify.ipa"
echo "::set-output name=spotifypath::Build Components/Spotify.ipa"
env:
SPOTURL: ${{ github.event.inputs.SPOTURL }}
- name: Scan Spotify.ipa
if: secrets.VIRUSTOTALKEY

Check failure on line 60 in .github/workflows/Build and Release.yml

View workflow run for this annotation

GitHub Actions / Build and Release

Invalid workflow file

The workflow is not valid. .github/workflows/Build and Release.yml (Line: 60, Col: 13): Unrecognized named-value: 'secrets'. Located at position 1 within expression: secrets.VIRUSTOTALKEY
run: |
RESPONSE=$(curl -s --request POST --url 'https://www.virustotal.com/api/v3/files' --header "x-apikey: ${{ secrets.VIRUSTOTALKEY }}" --form "file=@Build Components/Spotify.ipa")
VTVANILLASPOTIFY=$(echo $RESPONSE | jq -r '.data.id')
echo "::set-output name=VTVANILLASPOTIFY::$VTVANILLASPOTIFY"
- name: Download and Scan EeveeSpotify
id: eeveespotify_download
run: |
REALEEVEEVERSION=${{ needs.fetch_eeveespotify.outputs.REALEEVEEVERSION }}
curl -L "https://github.com/whoeevee/EeveeSpotify/releases/download/$REALEEVEEVERSION/com.eevee.spotify.iphoneos-arm.deb" -o "Build Components/Eevee-arm"
echo "::set-output name=eevee-arm::Build Components/Eevee-arm"
RESPONSE=$(curl -s --request POST --url 'https://www.virustotal.com/api/v3/files' --header "x-apikey: ${{ secrets.VIRUSTOTALKEY }}" --form "file=@Build Components/Eevee-arm")
VTEEVEE=$(echo $RESPONSE | jq -r '.data.id')
echo "::set-output name=VTEEVEE::$VTEEVEE"
env:
VIRUSTOTALKEY: ${{ secrets.VIRUSTOTALKEY }}
- name: Download and Scan SwiftProtobuf
id: swiftprotobuf_download
run: |
REALEEVEEVERSION=${{ needs.fetch_eeveespotify.outputs.REALEEVEEVERSION }}
SWIFTPROTOBUF=$(curl -s "https://api.github.com/repos/whoeevee/EeveeSpotify/releases/tags/$REALEEVEEVERSION" | jq -r '.assets[] | select(.name | startswith("org.swift.protobuf.swiftprotobuf") and endswith("iphoneos-arm.deb")) | .browser_download_url')
SWIFTPROTOBUFVERSION=$(echo $SWIFTPROTOBUF | grep -oP '(?<=swiftprotobuf_).*(?=_iphoneos-arm.deb)')
curl -L "$SWIFTPROTOBUF" -o "Build Components/SwiftProtobuf-arm"
echo "::set-output name=swiftprotobuf::Build Components/SwiftProtobuf-arm"
echo "::set-output name=SWIFTPROTOBUFVERSION::$SWIFTPROTOBUFVERSION"
RESPONSE=$(curl -s --request POST --url 'https://www.virustotal.com/api/v3/files' --header "x-apikey: ${{ secrets.VIRUSTOTALKEY }}" --form "file=@Build Components/SwiftProtobuf-arm")
VTSWIFTPROTOBUF=$(echo $RESPONSE | jq -r '.data.id')
echo "::set-output name=VTSWIFTPROTOBUF::$VTSWIFTPROTOBUF"
env:
VIRUSTOTALKEY: ${{ secrets.VIRUSTOTALKEY }}
- name: Download and Scan Orion
id: orion_download
run: |
ORION=$(curl -s 'https://repo.chariz.com/api/v1/depiction/com.chariz.orion' | jq -r '.links[0].url')
ORIONVERSION=$(echo $ORION | grep -oP '(?<=orion14_).*(?=_iphoneos-arm.deb)')
curl -L "$ORION" -o "Build Components/orion"
echo "::set-output name=orion::Build Components/orion"
echo "::set-output name=ORIONVERSION::$ORIONVERSION"
RESPONSE=$(curl -s --request POST --url 'https://www.virustotal.com/api/v3/files' --header "x-apikey: ${{ secrets.VIRUSTOTALKEY }}" --form "file=@Build Components/orion")
VTORION=$(echo $RESPONSE | jq -r '.data.id')
echo "::set-output name=VTORION::$VTORION"
env:
VIRUSTOTALKEY: ${{ secrets.VIRUSTOTALKEY }}
- name: Download and Scan Sposify
id: sposify_download
run: |
SPOSIFY=$(curl -s 'https://repo.dynastic.co/api/v1/depiction/com.spos' | jq -r '.links[0].url')
SPOSIFYVERSION=$(echo $SPOSIFY | grep -oP '(?<=spos_).*(?=_iphoneos-arm.deb)')
curl -L "$SPOSIFY" -o "Build Components/sposify"
echo "::set-output name=sposify::Build Components/sposify"
echo "::set-output name=SPOSIFYVERSION::$SPOSIFYVERSION"
RESPONSE=$(curl -s --request POST --url 'https://www.virustotal.com/api/v3/files' --header "x-apikey: ${{ secrets.VIRUSTOTALKEY }}" --form "file=@Build Components/sposify")
VTSPOSIFY=$(echo $RESPONSE | jq -r '.data.id')
echo "::set-output name=VTSPOSIFY::$VTSPOSIFY"
env:
VIRUSTOTALKEY: ${{ secrets.VIRUSTOTALKEY }}
- name: Download and Scan SposifyFix
id: sposifyfix_download
run: |
SPOSIFYFIX=$(curl -s 'https://level3tjg.me/repo/api/v1/depiction/com.level3tjg.sposifyfix' | jq -r '.links[0].url')
SPOSIFYFIXVERSION=$(echo $SPOSIFYFIX | grep -oP '(?<=sposifyfix_).*(?=_iphoneos-arm.deb)')
curl -L "$SPOSIFYFIX" -o "Build Components/sposifyfix"
echo "::set-output name=sposifyfix::Build Components/sposifyfix"
echo "::set-output name=SPOSIFYFIXVERSION::$SPOSIFYFIXVERSION"
RESPONSE=$(curl -s --request POST --url 'https://www.virustotal.com/api/v3/files' --header "x-apikey: ${{ secrets.VIRUSTOTALKEY }}" --form "file=@Build Components/sposifyfix")
VTSPOSIFYFIX=$(echo $RESPONSE | jq -r '.data.id')
echo "::set-output name=VTSPOSIFYFIX::$VTSPOSIFYFIX"
env:
VIRUSTOTALKEY: ${{ secrets.VIRUSTOTALKEY }}
build_and_release:
needs: download_and_scan
runs-on: macos-latest
steps:
- name: Clone OpenSpotifySafariExtension
run: |
git clone https://github.com/whoeevee/OpenSpotifySafariExtension
cd OpenSpotifySafariExtension
EXTCOMMIT=$(git rev-parse --short HEAD)
echo "::set-output name=EXTCOMMIT::$EXTCOMMIT"
cp OpenSpotifySafariExtension/OpenSpotifySafariExtension.appex "../Build Components/"
cd ..
env:
EXTCOMMIT: ${{ steps.clone.outputs.EXTCOMMIT }}
- name: Zip OpenSpotifySafariExtension
run: |
cd OpenSpotifySafariExtension
zip -r ../Build\ Components/OpenSpotifySafariExtension.zip .
cd ..
RESPONSE=$(curl -s --request POST --url 'https://www.virustotal.com/api/v3/files' --header "x-apikey: ${{ secrets.VIRUSTOTALKEY }}" --form "file=@Build Components/OpenSpotifySafariExtension.zip")
VTEXT=$(echo $RESPONSE | jq -r '.data.id')
echo "::set-output name=VTEXT::$VTEXT"
env:
VIRUSTOTALKEY: ${{ secrets.VIRUSTOTALKEY }}
- name: Duplicate and Unzip Spotify.ipa
run: |
cp "Build Components/Spotify.ipa" "Build Components/SpotifyAnylises.zip"
unzip "Build Components/SpotifyAnylises.zip" -d "Build Components"
cp "Build Components/payload/Spotify.app/Info.plist" "Build Components/Info.plist"
VANILLASPOTIFYVERSION=$(defaults read "Build Components/Info.plist" CFBundleVersion)
echo "::set-output name=VANILLASPOTIFYVERSION::$VANILLASPOTIFYVERSION"
- name: Modify Spotify.ipa
run: |
cp "Build Components/OpenSpotifySafariExtension.appex" "Build Components/payload/Spotify.app/Plugins/"
cd Build\ Components
zip -r SpotifyEXT.zip payload
mv SpotifyEXT.zip SpotifyEXT.ipa
echo "::set-output name=spotifyEXTpath::Build Components/SpotifyEXT.ipa"
- name: Get CHANGEVERSION
id: change_version
run: |
CHANGEVERSION=${{ github.event.inputs.CHANGEVERSION }}
if [ -z "$CHANGEVERSION" ]; then
LATEST_TAG=$(curl -s https://api.github.com/repos/SpotCompiled/SpotC-Plus-Plus/releases/latest | jq -r '.tag_name' | sed 's/^v//')
IFS='.' read -r -a VERSION_PARTS <<< "$LATEST_TAG"
CHANGEVERSION="${VERSION_PARTS[0]}.${VERSION_PARTS[1]}.$((VERSION_PARTS[2]+1))"
fi
echo "::set-output name=CHANGEVERSION::$CHANGEVERSION"
- name: Run Pyzule
run: |
pyzule -i ${{ steps.modify_spotify.outputs.spotifyEXTpath }} -o "Build Components/SpotifyPatched.ipa" -v ${{ steps.change_version.outputs.CHANGEVERSION }} -b com.yodaluca23.SpotCPlusPlus -f ${{ steps.download_and_scan.outputs.sposifyfix }} ${{ steps.download_and_scan.outputs.sposify }} ${{ steps.download_and_scan.outputs.orion }} ${{ steps.download_and_scan.outputs.swiftprotobuf }} ${{ steps.download_and_scan.outputs.eevee-arm }} -u
- name: Create GitHub Release
uses: softprops/action-gh-release@v1
with:
files: "Build Components/SpotifyPatched.ipa"
tag_name: "v${{ steps.change_version.outputs.CHANGEVERSION }}"
release_name: "SpotC++ v${{ steps.change_version.outputs.CHANGEVERSION }}"
body: |
## ChangeLog
- Updated [EeveeSpotify](https://github.com/whoeevee/EeveeSpotify) to ${{ needs.fetch_eeveespotify.outputs.REALEEVEEVERSION }}
$(curl -s https://api.github.com/repos/whoeevee/EeveeSpotify/releases/tags/${{ needs.fetch_eeveespotify.outputs.REALEEVEEVERSION }} | jq -r '.body' | sed 's/^/- (EeveeSpotify) /')
- Updated Spotify to version ${{ steps.modify_spotify.outputs.VANILLASPOTIFYVERSION }}
***
Vanilla IPA decrypted using [a fork of BagBak](https://github.com/TbhLovers/bagbak), on my personal MacBook Air and Jailbroken iPhone XR running [Dopamine](https://github.com/opa334/Dopamine), feel free to contact me with questions about this environment.
App .ipa modified and tweaks injected using Pyzule with the GitHub Action Workflow.
$(if [ -n "${{ secrets.VIRUSTOTALKEY }}" ]; then
echo "<details>
<summary>Version Details & VirusTotal Results</summary><br>
Spotify Version: v${{ steps.modify_spotify.outputs.VANILLASPOTIFYVERSION }}
[Vanilla Spotify VirusTotal](${VTVANILLASPOTIFY})<br>
EeveeSpotify Version: ${{ needs.fetch_eeveespotify.outputs.REALEEVEEVERSION }}
[EeveeSpotify .deb VirusTotal](${{ steps.download_and_scan.outputs.VTEEVEE }})<br>
Sposify v${{ steps.download_and_scan.outputs.SPOSIFYVERSION }}
[Sposify VirusTotal](${{ steps.download_and_scan.outputs.VTSPOSIFY }})<br>
OpenSpotifySafariExtension Commit: ${{ steps.clone.outputs.EXTCOMMIT }}
[OpenSpotifySafariExtension Repo Compressed .zip VirusTotal](${{ steps.zip.outputs.VTEXT }})<br>
Sposify Fix v${{ steps.download_and_scan.outputs.SPOSIFYFIXVERSION }}
[Sposify Fix VirusTotal](${{ steps.download_and_scan.outputs.VTSPOSIFYFIX }})<br>
Orion Runtime (iOS 14 - 16) v${{ steps.download_and_scan.outputs.ORIONVERSION }}
[Orion Runtime (iOS 14 - 16) .deb VirusTotal](${{ steps.download_and_scan.outputs.VTORION }})<br>
SwiftProtobuf Framework v${{ steps.download_and_scan.outputs.SWIFTPROTOBUFVERSION }}
[SwiftProtobuf Framework .deb VirusTotal](${{ steps.download_and_scan.outputs.VTSWIFTPROTOBUF }})<br>
SpotC++ Version: v${{ steps.change_version.outputs.CHANGEVERSION }}
[SpotC++ VirusTotal]()<br>
<br>
</details>"
fi)
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}