Skip to content

Commit f8c59ab

Browse files
committed
automatic release workflow\!
1 parent 458571d commit f8c59ab

4 files changed

Lines changed: 224 additions & 75 deletions

File tree

Lines changed: 223 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,223 @@
1+
name: Build and Release Swift
2+
3+
on:
4+
workflow_dispatch:
5+
6+
env:
7+
SWIFTPROTOBUF_VERSION: "1.29.0"
8+
9+
jobs:
10+
build:
11+
runs-on: macos-latest
12+
env:
13+
THEOS: ${{ github.workspace }}/theos
14+
steps:
15+
- uses: actions/checkout@v4
16+
- uses: maxim-lobanov/setup-xcode@v1
17+
with:
18+
xcode-version: '16.2.0'
19+
20+
- name: Setup Theos
21+
uses: actions/checkout@v4
22+
with:
23+
repository: theos/theos
24+
path: ${{ github.workspace }}/theos
25+
submodules: recursive
26+
27+
- name: Install Dependencies
28+
run: |
29+
brew install make dpkg ldid
30+
echo "$(brew --prefix make)/libexec/gnubin" >> $GITHUB_PATH
31+
32+
- name: Copy SwiftProtobuf (rootful)
33+
run: |
34+
mkdir swiftprotobuf && cd "$_"
35+
wget https://github.com/whoeevee/swift-protobuf/releases/download/${{ env.SWIFTPROTOBUF_VERSION }}/org.swift.protobuf.swiftprotobuf_${{ env.SWIFTPROTOBUF_VERSION }}_iphoneos-arm.deb
36+
ar -x org.swift.protobuf.swiftprotobuf_${{ env.SWIFTPROTOBUF_VERSION }}_iphoneos-arm.deb
37+
tar -xvf data.tar.lzma
38+
cp -r Library/Frameworks/SwiftProtobuf.framework $THEOS/lib
39+
40+
- name: Copy SwiftProtobuf (rootless)
41+
run: |
42+
mkdir swiftprotobuf-rootless && cd "$_"
43+
wget https://github.com/whoeevee/swift-protobuf/releases/download/${{ env.SWIFTPROTOBUF_VERSION }}/org.swift.protobuf.swiftprotobuf_${{ env.SWIFTPROTOBUF_VERSION }}_iphoneos-arm64.deb
44+
ar -x org.swift.protobuf.swiftprotobuf_${{ env.SWIFTPROTOBUF_VERSION }}_iphoneos-arm64.deb
45+
tar -xvf data.tar.lzma
46+
cp -r var/jb/Library/Frameworks/SwiftProtobuf.framework $THEOS/lib/iphone/rootless
47+
48+
- name: Build EeveeSpotify (rootful)
49+
run: |
50+
make package FINALPACKAGE=1
51+
echo "filename=$(find . -not -name '*debug*' -path './packages/*' | cut -d/ -f3)" >> $GITHUB_ENV
52+
- uses: actions/upload-artifact@v4
53+
with:
54+
name: ${{env.filename}}
55+
path: packages/${{env.filename}}
56+
if-no-files-found: error
57+
58+
- name: Build EeveeSpotify (rootless)
59+
run: |
60+
make package FINALPACKAGE=1 THEOS_PACKAGE_SCHEME=rootless
61+
echo "filename=$(find . -name '*arm64*' -path './packages/*' | cut -d/ -f3)" >> $GITHUB_ENV
62+
- uses: actions/upload-artifact@v4
63+
with:
64+
name: ${{env.filename}}
65+
path: packages/${{env.filename}}
66+
if-no-files-found: error
67+
68+
release:
69+
needs: build
70+
runs-on: macos-latest
71+
defaults:
72+
run:
73+
shell: zsh {0}
74+
steps:
75+
- uses: actions/checkout@v4
76+
77+
- name: Download Artifacts
78+
uses: actions/download-artifact@v4
79+
with:
80+
merge-multiple: true
81+
82+
- name: Set EeveeSpotify Versions
83+
run: |
84+
EEVEESPOTIFY_ROOTFUL=$(echo *iphoneos-arm.deb)
85+
EEVEESPOTIFY_ROOTLESS=$(echo *iphoneos-arm64.deb)
86+
EEVEESPOTIFY_VERSION=${${(s:_:)EEVEESPOTIFY_ROOTFUL}[2]}
87+
88+
echo "EEVEESPOTIFY_ROOTFUL=$EEVEESPOTIFY_ROOTFUL" >> $GITHUB_ENV
89+
echo "EEVEESPOTIFY_ROOTLESS=$EEVEESPOTIFY_ROOTLESS" >> $GITHUB_ENV
90+
echo "EEVEESPOTIFY_VERSION=$EEVEESPOTIFY_VERSION" >> $GITHUB_ENV
91+
92+
- name: Download SwiftProtobuf
93+
run: |
94+
wget https://github.com/whoeevee/swift-protobuf/releases/download/${{ env.SWIFTPROTOBUF_VERSION }}/org.swift.protobuf.swiftprotobuf_${{ env.SWIFTPROTOBUF_VERSION }}_iphoneos-arm.deb
95+
wget https://github.com/whoeevee/swift-protobuf/releases/download/${{ env.SWIFTPROTOBUF_VERSION }}/org.swift.protobuf.swiftprotobuf_${{ env.SWIFTPROTOBUF_VERSION }}_iphoneos-arm64.deb
96+
97+
echo "SWIFTPROTOBUF_ROOTFUL=org.swift.protobuf.swiftprotobuf_${{ env.SWIFTPROTOBUF_VERSION }}_iphoneos-arm.deb" >> $GITHUB_ENV
98+
echo "SWIFTPROTOBUF_ROOTLESS=org.swift.protobuf.swiftprotobuf_${{ env.SWIFTPROTOBUF_VERSION }}_iphoneos-arm64.deb" >> $GITHUB_ENV
99+
100+
- name: Download OpenSpotifySafariExtension
101+
run: |
102+
git clone https://github.com/BillyCurtis/OpenSpotifySafariExtension
103+
echo "OPENSPOTIFYSAFARIEXTENSION=OpenSpotifySafariExtension/OpenSpotifySafariExtension.appex" >> $GITHUB_ENV
104+
105+
- name: Download Decrypted Spotify Package
106+
run: |
107+
response=$(curl -s 'https://decrypt.whoeevee.com/decrypted?appId=324684580&apiKey=${{ secrets.EEVEEDECRYPTER_API_KEY }}')
108+
link=$(echo "$response" | jq -r '.link')
109+
wget -q $link
110+
echo "SPOTIFY_VERSION=${${(s/-/)link}[2]%.ipa}" >> $GITHUB_ENV
111+
echo "SPOTIFY_PACKAGE=$(echo *.ipa)" >> $GITHUB_ENV
112+
113+
- name: Setup insert-dylib
114+
run: |
115+
git clone https://github.com/Tyilo/insert_dylib.git
116+
xcrun clang -x c -arch arm64 ./insert_dylib/insert_dylib/main.c -I/usr/include/ -o insert-dylib
117+
sudo mv insert-dylib /usr/local/bin/
118+
sudo chmod +x /usr/local/bin/insert-dylib
119+
120+
- name: Setup ivinject
121+
run: |
122+
git clone https://github.com/whoeevee/ivinject.git
123+
cp -r ./ivinject/KnownFrameworks ~/.ivinject
124+
wget https://github.com/whoeevee/ivinject/releases/download/first/ivinject-arm64
125+
sudo mv ivinject-arm64 /usr/local/bin/
126+
sudo chmod +x /usr/local/bin/ivinject-arm64
127+
128+
- name: Setup ipapatch
129+
run: |
130+
wget https://github.com/asdfzxcvbn/ipapatch/releases/download/v2.0.0/ipapatch.macos-arm64
131+
sudo mv ipapatch.macos-arm64 /usr/local/bin/ipapatch
132+
sudo chmod +x /usr/local/bin/ipapatch
133+
134+
- name: Check Version
135+
env:
136+
GH_TOKEN: ${{ github.token }}
137+
run: |
138+
LATEST_EEVEESPOTIFY_VERSION=$(gh release list --limit 1 --json tagName --jq '.[0].tagName[5:]')
139+
echo "LATEST_EEVEESPOTIFY_VERSION=$LATEST_EEVEESPOTIFY_VERSION" >> $GITHUB_ENV
140+
141+
- name: Create EeveeSpotify Package
142+
run: |
143+
EEVEESPOTIFY_PACKAGE="EeveeSpotify-${EEVEESPOTIFY_VERSION}-${SPOTIFY_VERSION}.ipa"
144+
echo "EEVEESPOTIFY_PACKAGE=$EEVEESPOTIFY_PACKAGE" >> $GITHUB_ENV
145+
146+
ivinject-arm64 "$SPOTIFY_PACKAGE" "$EEVEESPOTIFY_PACKAGE" \
147+
-i "$EEVEESPOTIFY_ROOTFUL" "$SWIFTPROTOBUF_ROOTFUL" "$OPENSPOTIFYSAFARIEXTENSION" \
148+
-s - -d --level Optimal
149+
150+
- name: Create Patched Package
151+
run: |
152+
EEVEESPOTIFY_PATCHED_PACKAGE="EeveeSpotify-${EEVEESPOTIFY_VERSION}-${SPOTIFY_VERSION}-patched.ipa"
153+
echo "EEVEESPOTIFY_PATCHED_PACKAGE=$EEVEESPOTIFY_PATCHED_PACKAGE" >> $GITHUB_ENV
154+
155+
ipapatch -input "$EEVEESPOTIFY_PACKAGE" -output "$EEVEESPOTIFY_PATCHED_PACKAGE"
156+
157+
- name: Compose Changelog
158+
if: env.LATEST_EEVEESPOTIFY_VERSION != env.EEVEESPOTIFY_VERSION
159+
env:
160+
GH_TOKEN: ${{ github.token }}
161+
run: |
162+
last_update_repo_date=$(git log -1 --grep="update: repo" --format=%cI)
163+
CHANGELOG=""
164+
165+
gh pr list --state merged --search "merged:>${last_update_repo_date}" --json files,author \
166+
| jq -r '
167+
.[]
168+
| .author.login as $login
169+
| .files[0].path as $file
170+
| "\($login) \($file)"
171+
' \
172+
| tail -r \
173+
| while read -r login file; do
174+
lang_code=$(echo "$file" | grep -oE '/([a-zA-Z-]+)\.lproj/' | sed -E 's|/([a-zA-Z-]+)\.lproj/|\1|')
175+
lang_name=$(echo "import Foundation; print(Locale.current.localizedString(forIdentifier: \"$lang_code\") ?? \"\")" | swift -)
176+
177+
if [ -z "$lang_name" ]; then
178+
continue
179+
fi
180+
181+
CHANGELOG+="* Updated ${lang_name} localization by @${login}"$'\n'
182+
done
183+
184+
echo "CHANGELOG<<EOF" >> $GITHUB_ENV
185+
echo "$CHANGELOG" >> $GITHUB_ENV
186+
echo "EOF" >> $GITHUB_ENV
187+
188+
- name: Create Release
189+
if: env.LATEST_EEVEESPOTIFY_VERSION != env.EEVEESPOTIFY_VERSION
190+
uses: actions/create-release@v1
191+
env:
192+
GITHUB_TOKEN: ${{ github.token }}
193+
with:
194+
tag_name: swift${{ env.EEVEESPOTIFY_VERSION }}
195+
release_name: Swift ${{ env.EEVEESPOTIFY_VERSION }}
196+
body: ${{ env.CHANGELOG }}
197+
draft: false
198+
prerelease: false
199+
200+
- name: Upload Packages
201+
env:
202+
GH_TOKEN: ${{ github.token }}
203+
run: |
204+
gh release upload "swift$EEVEESPOTIFY_VERSION" \
205+
"$EEVEESPOTIFY_PACKAGE" \
206+
"$EEVEESPOTIFY_ROOTFUL" "$EEVEESPOTIFY_ROOTLESS" \
207+
"$SWIFTPROTOBUF_ROOTFUL" "$SWIFTPROTOBUF_ROOTLESS" \
208+
--clobber
209+
210+
- name: Upload Packages to Telegram
211+
env:
212+
API_ID: ${{ secrets.API_ID }}
213+
API_HASH: ${{ secrets.API_HASH }}
214+
BOT_TOKEN: ${{ secrets.BOT_TOKEN }}
215+
EEVEESPOTIFY_CHANNEL_ID: ${{ secrets.EEVEESPOTIFY_CHANNEL_ID }}
216+
EEVEESPOTIFY_CHANNEL_ACCESS_HASH: ${{ secrets.EEVEESPOTIFY_CHANNEL_ACCESS_HASH }}
217+
run: ./Tools/TelegramUploadEeveeSpotify
218+
219+
update-repo:
220+
needs: release
221+
permissions:
222+
contents: write
223+
uses: ./.github/workflows/update-repo.yml

.github/workflows/build-swift.yml

Lines changed: 0 additions & 75 deletions
This file was deleted.

.github/workflows/update-repo.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ name: Update Repo
22

33
on:
44
workflow_dispatch:
5+
workflow_call:
56

67
jobs:
78
build:

Tools/TelegramUploadEeveeSpotify

8.83 MB
Binary file not shown.

0 commit comments

Comments
 (0)