Skip to content

Build and Release

Build and Release #11

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:
build:
runs-on: macos-latest
steps:
- name: Checkout repository
uses: actions/checkout@v2
- name: Install Pyzule
run: bash -c "$(curl https://raw.githubusercontent.com/asdfzxcvbn/pyzule/main/install-pyzule.sh)"
- name: Fetch EeveeSpotify release tags
id: fetch_eevee_tags
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 EEVEEVERSION "$EEVEEVERSION" '.[] | select(.tag_name | contains($EEVEEVERSION)) | .tag_name' | head -n 1)
fi
echo "REALEEVEEVERSION=$REALEEVEEVERSION" >> $GITHUB_ENV
- name: Create Build Components folder
run: mkdir -p "Build Components"
- name: Download Spotify.ipa
run: |
curl -L ${{ github.event.inputs.SPOTURL }} -o "Build Components/Spotify.ipa"
echo "spotifypath=Build Components/Spotify.ipa" >> $GITHUB_ENV
if: ${{ secrets.VIRUSTOTALKEY }}

Check failure on line 44 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: 44, Col: 13): Unrecognized named-value: 'secrets'. Located at position 1 within expression: secrets.VIRUSTOTALKEY .github/workflows/Build and Release.yml (Line: 53, Col: 13): Unrecognized named-value: 'secrets'. Located at position 1 within expression: secrets.VIRUSTOTALKEY
- name: Upload Spotify.ipa to VirusTotal
uses: crazy-max/ghaction-virustotal@v4
with:
api_key: ${{ secrets.VIRUSTOTALKEY }}
path: "Build Components/Spotify.ipa"
id: scan_spotify
- name: Set VirusTotal Analysis URL for Spotify.ipa
run: echo "VTVANILLASPOTIFY=${{ steps.scan_spotify.outputs.analysis }}" >> $GITHUB_ENV
if: ${{ secrets.VIRUSTOTALKEY }}
- name: Download EeveeSpotify .deb files
id: download_eevee
run: |
REALEEVEEVERSION=${{ env.REALEEVEEVERSION }}
EEVEERELEASE_URL="https://api.github.com/repos/whoeevee/EeveeSpotify/releases/tags/$REALEEVEEVERSION"
EEVEERESPONSE=$(curl -s $EEVEERELEASE_URL)
EEVEEDOWNLOAD=$(echo $EEVEERESPONSE | jq -r '.assets[] | select(.name | startswith("com.eevee.spotify") and endswith("iphoneos-arm.deb")) | .browser_download_url')
SWIFTPROTOBUF=$(echo $EEVEERESPONSE | jq -r '.assets[] | select(.name | startswith("org.swift.protobuf.swiftprotobuf") and endswith("iphoneos-arm.deb")) | .browser_download_url')
SWIFTPROTOBUFVERSION=$(echo $SWIFTPROTOBUF | sed -n 's/.*org.swift.protobuf.swiftprotobuf_\(.*\)_iphoneos-arm.deb/\1/p')
curl -L $EEVEEDOWNLOAD -o "Build Components/Eevee-arm"
curl -L $SWIFTPROTOBUF -o "Build Components/SwiftProtobuf-arm"
echo "eevee-arm=Build Components/Eevee-arm" >> $GITHUB_ENV
echo "swiftprotobuf=Build Components/SwiftProtobuf-arm" >> $GITHUB_ENV
echo "SWIFTPROTOBUFVERSION=$SWIFTPROTOBUFVERSION" >> $GITHUB_ENV
- name: Upload EeveeSpotify and SwiftProtobuf to VirusTotal
uses: crazy-max/ghaction-virustotal@v4
with:
api_key: ${{ secrets.VIRUSTOTALKEY }}
path: "Build Components/Eevee-arm,Build Components/SwiftProtobuf-arm"
id: scan_eevee
- name: Set VirusTotal Analysis URL for EeveeSpotify and SwiftProtobuf
run: |
echo "VTEEVEE=$(echo ${{ steps.scan_eevee.outputs.analysis }} | cut -d ',' -f 1)" >> $GITHUB_ENV
echo "VTSWIFTPROTOBUF=$(echo ${{ steps.scan_eevee.outputs.analysis }} | cut -d ',' -f 2)" >> $GITHUB_ENV
if: ${{ secrets.VIRUSTOTALKEY }}
- name: Download Orion from Chariz repo
run: |
ORIONURL=$(curl -s https://repo.chariz.com/api/v1/packages/dev.theos.orion14 | jq -r '.data.versions[0].links.deb')
ORIONVERSION=$(curl -s https://repo.chariz.com/api/v1/packages/dev.theos.orion14 | jq -r '.data.versions[0].version')
curl -L $ORIONURL -o "Build Components/orion"
echo "orion=Build Components/orion" >> $GITHUB_ENV
echo "ORIONVERSION=$ORIONVERSION" >> $GITHUB_ENV
- name: Upload Orion to VirusTotal
uses: crazy-max/ghaction-virustotal@v4
with:
api_key: ${{ secrets.VIRUSTOTALKEY }}
path: "Build Components/orion"
id: scan_orion
- name: Set VirusTotal Analysis URL for Orion
run: echo "VTORION=${{ steps.scan_orion.outputs.analysis }}" >> $GITHUB_ENV
if: ${{ secrets.VIRUSTOTALKEY }}
- name: Download Sposify from Dynastic repo
run: |
SPOSIFYURL=$(curl -s https://repo.dynastic.co/api/v1/packages/com.spos | jq -r '.data.versions[0].links.deb')
SPOSIFYVERSION=$(curl -s https://repo.dynastic.co/api/v1/packages/com.spos | jq -r '.data.versions[0].version')
curl -L $SPOSIFYURL -o "Build Components/sposify"
echo "sposify=Build Components/sposify" >> $GITHUB_ENV
echo "SPOSIFYVERSION=$SPOSIFYVERSION" >> $GITHUB_ENV
- name: Upload Sposify to VirusTotal
uses: crazy-max/ghaction-virustotal@v4
with:
api_key: ${{ secrets.VIRUSTOTALKEY }}
path: "Build Components/sposify"
id: scan_sposify
- name: Set VirusTotal Analysis URL for Sposify
run: echo "VTSPOSIFY=${{ steps.scan_sposify.outputs.analysis }}" >> $GITHUB_ENV
if: ${{ secrets.VIRUSTOTALKEY }}
- name: Download SposifyFix from level3tjg repo
run: |
SPOSIFYFIXURL=$(curl -s https://level3tjg.me/repo/api/Packages/com.level3tjg.sposifyfix | jq -r '.versions[0].links.deb')
SPOSIFYFIXVERSION=$(curl -s https://level3tjg.me/repo/api/Packages/com.level3tjg.sposifyfix | jq -r '.versions[0].version')
curl -L $SPOSIFYFIXURL -o "Build Components/sposifyfix"
echo "sposifyfix=Build Components/sposifyfix" >> $GITHUB_ENV
echo "SPOSIFYFIXVERSION=$SPOSIFYFIXVERSION" >> $GITHUB_ENV
- name: Upload SposifyFix to VirusTotal
uses: crazy-max/ghaction-virustotal@v4
with:
api_key: ${{ secrets.VIRUSTOTALKEY }}
path: "Build Components/sposifyfix"
id: scan_sposifyfix
- name: Set VirusTotal Analysis URL for SposifyFix
run: echo "VTSPOSIFYFIX=${{ steps.scan_sposifyfix.outputs.analysis }}" >> $GITHUB_ENV
if: ${{ secrets.VIRUSTOTALKEY }}
- name: Clone OpenSpotifySafariExtension
run: git clone https://github.com/whoeevee/OpenSpotifySafariExtension
- name: Copy OpenSpotifySafariExtension.appex
run: |
cp OpenSpotifySafariExtension/OpenSpotifySafariExtension.appex "Build Components/"
cd OpenSpotifySafariExtension
EXTCOMMIT=$(git rev-parse --short HEAD)
echo "EXTCOMMIT=$EXTCOMMIT" >> $GITHUB_ENV
- name: Compress OpenSpotifySafariExtension
run: |
zip -r OpenSpotifySafariExtension.zip OpenSpotifySafariExtension
mv OpenSpotifySafariExtension.zip "Build Components/OpenSpotifySafariExtension.zip"
- name: Upload OpenSpotifySafariExtension.zip to VirusTotal
uses: crazy-max/ghaction-virustotal@v4
with:
api_key: ${{ secrets.VIRUSTOTALKEY }}
path: "Build Components/OpenSpotifySafariExtension.zip"
id: scan_extension
- name: Set VirusTotal Analysis URL for OpenSpotifySafariExtension
run: echo "VTEXT=${{ steps.scan_extension.outputs.analysis }}" >> $GITHUB_ENV
if: ${{ secrets.VIRUSTOTALKEY }}
- name: Duplicate Spotify.ipa and unzip
run: |
cp "Build Components/Spotify.ipa" "Build Components/SpotifyAnylises.zip"
unzip "Build Components/SpotifyAnylises.zip" -d "Build Components/payload"
cp "Build Components/payload/Payload/Spotify.app/Info.plist" "Build Components/Info.plist"
VANILLASPOTIFYVERSION=$(defaults read "Build Components/Info.plist" CFBundleVersion)
echo "VANILLASPOTIFYVERSION=$VANILLASPOTIFYVERSION" >> $GITHUB_ENV
cp "Build Components/OpenSpotifySafariExtension.appex" "Build Components/payload/Payload/Spotify.app/PlugIns/"
cd "Build Components/payload"
zip -r "SpotifyEXT.zip" Payload
mv "SpotifyEXT.zip" "../SpotifyEXT.ipa"
echo "spotifyEXTpath=Build Components/SpotifyEXT.ipa" >> $GITHUB_ENV
- name: Remove temporary files
run: |
rm -rf "Build Components/Info.plist"
rm -rf "Build Components/SpotifyAnylises.zip"
rm -rf "Build Components/payload"
- name: Set SpotC++ version if not provided
run: |
if [ -z "${{ github.event.inputs.CHANGEVERSION }}" ]; then
LATEST_TAG=$(curl -s https://api.github.com/repos/SpotCompiled/SpotC-Plus-Plus/tags | jq -r '.[0].name' | sed 's/v//')
CHANGEVERSION=$(echo $LATEST_TAG | awk -F. -v OFS=. '{$NF += 1 ; print}')
else
CHANGEVERSION=${{ github.event.inputs.CHANGEVERSION }}
fi
echo "CHANGEVERSION=$CHANGEVERSION" >> $GITHUB_ENV
- name: Set components path
run: echo "componentspath=Build Components" >> $GITHUB_ENV
- name: Patch Spotify.ipa
run: |
pyzule -i ${{ env.spotifyEXTpath }} -o ${{ env.componentspath }}/SpotifyPatched.ipa -v ${{ env.CHANGEVERSION }} -b com.yodaluca23.SpotCPlusPlus -f ${{ env.sposifyfix }} ${{ env.sposify }} ${{ env.orion }} ${{ env.swiftprotobuf }} ${{ env.eevee-arm }} -u
- name: Upload SpotifyPatched.ipa to VirusTotal
uses: crazy-max/ghaction-virustotal@v4
with:
api_key: ${{ secrets.VIRUSTOTALKEY }}
path: "Build Components/SpotifyPatched.ipa"
id: scan_spotc
- name: Set VirusTotal Analysis URL for SpotC++
run: echo "VTSPOTC=${{ steps.scan_spotc.outputs.analysis }}" >> $GITHUB_ENV
if: ${{ secrets.VIRUSTOTALKEY }}
- name: Create draft release
uses: actions/create-release@v1
with:
tag_name: "v${{ env.CHANGEVERSION }}"
release_name: "SpotC++ v${{ env.CHANGEVERSION }}"
draft: true
prerelease: false
body: |
## ChangeLog
- Updated [EeveeSpotify](https://github.com/whoeevee/EeveeSpotify) to ${{ env.REALEEVEEVERSION }}
${{ steps.fetch_eevee_tags.outputs.REALEEVEEVERSION }}
- Updated Spotify to version ${{ env.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.
${{ secrets.VIRUSTOTALKEY && '
<details>
<summary>Version Details & VirusTotal Results</summary><br>
Spotify Version: v${{ env.VANILLASPOTIFYVERSION }}
[Vanilla Spotify VirusTotal](${{ env.VTVANILLASPOTIFY }})<br>
EeveeSpotify Version: ${{ env.REALEEVEEVERSION }}
[EeveeSpotify .deb VirusTotal](${{ env.VTEEVEE }})<br>
Sposify v${{ env.SPOSIFYVERSION }}
[Sposify VirusTotal](${{ env.VTSPOSIFY }})<br>
OpenSpotifySafariExtension Commit: ${{ env.EXTCOMMIT }}
[OpenSpotifySafariExtension Repo Compressed .zip VirusTotal](${{ env.VTEXT }})<br>
Sposify Fix v${{ env.SPOSIFYFIXVERSION }}
[Sposify Fix VirusTotal](${{ env.VTSPOSIFYFIX }})<br>
Orion Runtime (iOS 14 - 16) v${{ env.ORIONVERSION }}
[Orion Runtime (iOS 14 - 16) .deb VirusTotal](${{ env.VTORION }})<br>
SwiftProtobuf Framework v${{ env.SWIFTPROTOBUFVERSION }}
[SwiftProtobuf Framework .deb VirusTotal](${{ env.VTSWIFTPROTOBUF }})<br>
SpotC++ Version: v${{ env.CHANGEVERSION }}
[SpotC++ VirusTotal](${{ env.VTSPOTC }})
<br>
</details>' || '' }}
env:
CHANGEVERSION: ${{ env.CHANGEVERSION }}
REALEEVEEVERSION: ${{ env.REALEEVEEVERSION }}
VANILLASPOTIFYVERSION: ${{ env.VANILLASPOTIFYVERSION }}
SPOSIFYVERSION: ${{ env.SPOSIFYVERSION }}
SPOSIFYFIXVERSION: ${{ env.SPOSIFYFIXVERSION }}
ORIONVERSION: ${{ env.ORIONVERSION }}
SWIFTPROTOBUFVERSION: ${{ env.SWIFTPROTOBUFVERSION }}
EXTCOMMIT: ${{ env.EXTCOMMIT }}
VTVANILLASPOTIFY: ${{ env.VTVANILLASPOTIFY }}
VTEEVEE: ${{ env.VTEEVEE }}
VTSWIFTPROTOBUF: ${{ env.VTSWIFTPROTOBUF }}
VTORION: ${{ env.VTORION }}
VTSPOSIFY: ${{ env.VTSPOSIFY }}
VTSPOSIFYFIX: ${{ env.VTSPOSIFYFIX }}
VTSPOTC: ${{ env.VTSPOTC }}