mirror of
https://github.com/SideStore/SideStore.git
synced 2026-03-30 15:25:39 +02:00
Compare commits
23 Commits
9706a43bc1
...
bff192be4e
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bff192be4e | ||
|
|
a863b2f39a | ||
|
|
bf72a0edfc | ||
|
|
06ad6488cc | ||
|
|
12f84b2365 | ||
|
|
118f64de8a | ||
|
|
555bb3d985 | ||
|
|
25925aceef | ||
|
|
5444fdd9bb | ||
|
|
f91e0a6295 | ||
|
|
4e4f0f6a3f | ||
|
|
f412f6df23 | ||
|
|
625389ab96 | ||
|
|
f7e34cbbe9 | ||
|
|
0fe8d7fed9 | ||
|
|
1a1aa42e02 | ||
|
|
7ff4b48223 | ||
|
|
4801f6e8f2 | ||
|
|
ff28f6fa8f | ||
|
|
2d141afbaf | ||
|
|
06e38aae00 | ||
|
|
d8783230a7 | ||
|
|
6c479bfede |
2
.github/workflows/alpha.yml
vendored
2
.github/workflows/alpha.yml
vendored
@@ -28,7 +28,7 @@ jobs:
|
||||
- name: Find Last Successful commit
|
||||
run: |
|
||||
LAST_SUCCESSFUL_COMMIT=$(python3 scripts/ci/workflow.py last-successful-commit \
|
||||
"${{ github.workflow }}" "${{ env.CHANNEL }}" || echo "")
|
||||
"false" "${{ env.CHANNEL }}" || echo "")
|
||||
echo "LAST_SUCCESSFUL_COMMIT=$LAST_SUCCESSFUL_COMMIT" | tee -a $GITHUB_ENV
|
||||
|
||||
- run: brew install ldid xcbeautify
|
||||
|
||||
2
.github/workflows/nightly.yml
vendored
2
.github/workflows/nightly.yml
vendored
@@ -30,7 +30,7 @@ jobs:
|
||||
- name: Find Last Successful commit
|
||||
run: |
|
||||
LAST_SUCCESSFUL_COMMIT=$(python3 scripts/ci/workflow.py last-successful-commit \
|
||||
"${{ github.workflow }}" "${{ env.CHANNEL }}" || echo "")
|
||||
"false" "${{ env.CHANNEL }}" || echo "")
|
||||
echo "LAST_SUCCESSFUL_COMMIT=$LAST_SUCCESSFUL_COMMIT" | tee -a $GITHUB_ENV
|
||||
|
||||
- name: Check for new changes (on schedule)
|
||||
|
||||
14
.github/workflows/stable.yml
vendored
14
.github/workflows/stable.yml
vendored
@@ -17,7 +17,6 @@ jobs:
|
||||
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
RELEASE_NAME: Stable
|
||||
CHANNEL: stable
|
||||
UPSTREAM_CHANNEL: ""
|
||||
|
||||
@@ -27,6 +26,12 @@ jobs:
|
||||
submodules: recursive
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Find Last Successful commit
|
||||
run: |
|
||||
LAST_SUCCESSFUL_COMMIT=$(python3 scripts/ci/workflow.py last-successful-commit \
|
||||
"true" || echo "")
|
||||
echo "LAST_SUCCESSFUL_COMMIT=$LAST_SUCCESSFUL_COMMIT" | tee -a $GITHUB_ENV
|
||||
|
||||
- run: brew install ldid xcbeautify
|
||||
|
||||
- name: Setup Env
|
||||
@@ -68,9 +73,6 @@ jobs:
|
||||
~/Library/Caches/org.swift.swiftpm
|
||||
key: xcode-build-cache-stable-
|
||||
|
||||
- name: Clean
|
||||
run: python3 scripts/ci/workflow.py clean
|
||||
|
||||
- name: Build
|
||||
id: build
|
||||
env:
|
||||
@@ -112,7 +114,7 @@ jobs:
|
||||
IPA_NAME="$PRODUCT_NAME.ipa"
|
||||
|
||||
python3 scripts/ci/workflow.py generate-metadata \
|
||||
"$CHANNEL" \
|
||||
"${{ github.ref_name }}" \
|
||||
"$SHORT_COMMIT" \
|
||||
"$MARKETING_VERSION" \
|
||||
"$CHANNEL" \
|
||||
@@ -125,7 +127,7 @@ jobs:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
python3 scripts/ci/workflow.py upload-release \
|
||||
"$RELEASE_NAME" \
|
||||
"${{ github.ref_name }}" \
|
||||
"${{ github.ref_name }}" \
|
||||
"$GITHUB_SHA" \
|
||||
"$GITHUB_REPOSITORY" \
|
||||
|
||||
@@ -1903,6 +1903,90 @@
|
||||
remoteGlobalIDString = 44962FDA23E7A54A00E2A598;
|
||||
remoteInfo = SwiftSampleApp;
|
||||
};
|
||||
A8F3FC062F4E998F006BC252 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = A8F3F7E42F4E96D7006BC252 /* libfragmentzip.xcodeproj */;
|
||||
proxyType = 2;
|
||||
remoteGlobalIDString = 87B8C3401E0E9C37002F817D;
|
||||
remoteInfo = "fragmentzip-cli-macOS";
|
||||
};
|
||||
A8F3FC082F4E998F006BC252 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = A8F3F7E42F4E96D7006BC252 /* libfragmentzip.xcodeproj */;
|
||||
proxyType = 2;
|
||||
remoteGlobalIDString = B315FDB02866CCF8002E243C;
|
||||
remoteInfo = "fragmentzip-cli-iOS";
|
||||
};
|
||||
A8F3FC0A2F4E998F006BC252 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = A8F3F7E42F4E96D7006BC252 /* libfragmentzip.xcodeproj */;
|
||||
proxyType = 2;
|
||||
remoteGlobalIDString = B315FDB52866CD91002E243C;
|
||||
remoteInfo = "fragmentzip-macOS";
|
||||
};
|
||||
A8F3FC0C2F4E998F006BC252 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = A8F3F7E42F4E96D7006BC252 /* libfragmentzip.xcodeproj */;
|
||||
proxyType = 2;
|
||||
remoteGlobalIDString = B315FDCE2866CDD3002E243C;
|
||||
remoteInfo = "fragmentzip-iOS";
|
||||
};
|
||||
A8F3FC0F2F4E998F006BC252 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = A8F3F7C02F4E96D7006BC252 /* libgeneral.xcodeproj */;
|
||||
proxyType = 2;
|
||||
remoteGlobalIDString = 87977F6F227C4B71004F31DA;
|
||||
remoteInfo = libgeneral;
|
||||
};
|
||||
A8F3FC142F4E998F006BC252 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = A8F3FB642F4E96D7006BC252 /* Roxas.xcodeproj */;
|
||||
proxyType = 2;
|
||||
remoteGlobalIDString = BFADAFF819AE7BB70050CF31;
|
||||
remoteInfo = Roxas;
|
||||
};
|
||||
A8F3FC162F4E998F006BC252 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = A8F3FB642F4E96D7006BC252 /* Roxas.xcodeproj */;
|
||||
proxyType = 2;
|
||||
remoteGlobalIDString = BF8624801BB742E700C12EEE;
|
||||
remoteInfo = RoxasTV;
|
||||
};
|
||||
A8F3FC182F4E998F006BC252 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = A8F3FB642F4E96D7006BC252 /* Roxas.xcodeproj */;
|
||||
proxyType = 2;
|
||||
remoteGlobalIDString = BFADB00319AE7BB80050CF31;
|
||||
remoteInfo = RoxasTests;
|
||||
};
|
||||
A8F3FC1B2F4E998F006BC252 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = A8F3FAD92F4E96D7006BC252 /* SampleApp.xcodeproj */;
|
||||
proxyType = 2;
|
||||
remoteGlobalIDString = 44E8FA8923D90632009E1D13;
|
||||
remoteInfo = SampleApp;
|
||||
};
|
||||
A8F3FC1F2F4E998F006BC252 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = A8F3FAC02F4E96D7006BC252 /* SampleApp.xcodeproj */;
|
||||
proxyType = 2;
|
||||
remoteGlobalIDString = 44B1EE7C23DB90D5004E2E29;
|
||||
remoteInfo = SampleApp;
|
||||
};
|
||||
A8F3FC212F4E998F006BC252 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = A8F3FAC02F4E96D7006BC252 /* SampleApp.xcodeproj */;
|
||||
proxyType = 2;
|
||||
remoteGlobalIDString = 445A906A2400612800B487B4;
|
||||
remoteInfo = "NSAttributedString+MarkdownTests";
|
||||
};
|
||||
A8F3FC242F4E998F006BC252 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = A8F3FAE52F4E96D7006BC252 /* SwiftSampleApp.xcodeproj */;
|
||||
proxyType = 2;
|
||||
remoteGlobalIDString = 44962FDA23E7A54A00E2A598;
|
||||
remoteInfo = SwiftSampleApp;
|
||||
};
|
||||
A8FAC1CE2F4B51980061A851 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = A8FAC0562F4B50D10061A851 /* em_proxy.xcodeproj */;
|
||||
@@ -2465,6 +2549,12 @@
|
||||
A8F3C00A2F4E3794006BC252 /* SampleApp.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = SampleApp.xcodeproj; sourceTree = "<group>"; };
|
||||
A8F3C0162F4E3794006BC252 /* SwiftSampleApp.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = SwiftSampleApp.xcodeproj; sourceTree = "<group>"; };
|
||||
A8F3C0952F4E3794006BC252 /* Roxas.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = Roxas.xcodeproj; sourceTree = "<group>"; };
|
||||
A8F3F7C02F4E96D7006BC252 /* libgeneral.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = libgeneral.xcodeproj; sourceTree = "<group>"; };
|
||||
A8F3F7E42F4E96D7006BC252 /* libfragmentzip.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = libfragmentzip.xcodeproj; sourceTree = "<group>"; };
|
||||
A8F3FAC02F4E96D7006BC252 /* SampleApp.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = SampleApp.xcodeproj; sourceTree = "<group>"; };
|
||||
A8F3FAD92F4E96D7006BC252 /* SampleApp.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = SampleApp.xcodeproj; sourceTree = "<group>"; };
|
||||
A8F3FAE52F4E96D7006BC252 /* SwiftSampleApp.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = SwiftSampleApp.xcodeproj; sourceTree = "<group>"; };
|
||||
A8F3FB642F4E96D7006BC252 /* Roxas.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = Roxas.xcodeproj; sourceTree = "<group>"; };
|
||||
A8FABA492F4B50D00061A851 /* libimobiledevice.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libimobiledevice.a; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
A8FABA4A2F4B50D00061A851 /* libem_proxy_swift.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libem_proxy_swift.a; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
A8FABCC32F4B50D10061A851 /* libgeneral.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = libgeneral.xcodeproj; sourceTree = "<group>"; };
|
||||
@@ -4223,6 +4313,60 @@
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
A8F3F7EB2F4E96D7006BC252 /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
A8F3FC072F4E998F006BC252 /* libfragmentzip */,
|
||||
A8F3FC092F4E998F006BC252 /* libfragmentzip */,
|
||||
A8F3FC0B2F4E998F006BC252 /* libfragmentzip.a */,
|
||||
A8F3FC0D2F4E998F006BC252 /* libfragmentzip.a */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
A8F3F7ED2F4E96D7006BC252 /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
A8F3FC102F4E998F006BC252 /* libgeneral */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
A8F3FAED2F4E96D7006BC252 /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
A8F3FC1C2F4E998F006BC252 /* SampleApp.app */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
A8F3FAEF2F4E96D7006BC252 /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
A8F3FC252F4E998F006BC252 /* SwiftSampleApp.app */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
A8F3FAF12F4E96D7006BC252 /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
A8F3FC202F4E998F006BC252 /* SampleApp.app */,
|
||||
A8F3FC222F4E998F006BC252 /* NSAttributedString+MarkdownTests.xctest */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
A8F3FB652F4E96D7006BC252 /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
A8F3FC152F4E998F006BC252 /* Roxas.framework */,
|
||||
A8F3FC172F4E998F006BC252 /* Roxas.framework */,
|
||||
A8F3FC192F4E998F006BC252 /* RoxasTests.xctest */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
A8FAC0592F4B50D10061A851 /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
@@ -4812,6 +4956,10 @@
|
||||
ProductGroup = A85AEC6B2F4B22F6002E2E11 /* Products */;
|
||||
ProjectRef = A85AE43E2F4B22F6002E2E11 /* libfragmentzip.xcodeproj */;
|
||||
},
|
||||
{
|
||||
ProductGroup = A8F3F7EB2F4E96D7006BC252 /* Products */;
|
||||
ProjectRef = A8F3F7E42F4E96D7006BC252 /* libfragmentzip.xcodeproj */;
|
||||
},
|
||||
{
|
||||
ProductGroup = A8A5B3BA2F4C4C8600572B4A /* Products */;
|
||||
ProjectRef = A8A5B3B32F4C4C8600572B4A /* libfragmentzip.xcodeproj */;
|
||||
@@ -4908,6 +5056,10 @@
|
||||
ProductGroup = A8FAD7302F4B61310061A851 /* Products */;
|
||||
ProjectRef = A8FAD38F2F4B61310061A851 /* libgeneral.xcodeproj */;
|
||||
},
|
||||
{
|
||||
ProductGroup = A8F3F7ED2F4E96D7006BC252 /* Products */;
|
||||
ProjectRef = A8F3F7C02F4E96D7006BC252 /* libgeneral.xcodeproj */;
|
||||
},
|
||||
{
|
||||
ProductGroup = A8EEDA212F4B19B000F2436D /* Products */;
|
||||
ProjectRef = A8EED1D72F4B19B000F2436D /* libgeneral.xcodeproj */;
|
||||
@@ -5040,6 +5192,10 @@
|
||||
ProductGroup = A8A5BE7E2F4C4D6800572B4A /* Products */;
|
||||
ProjectRef = A8A5BE7D2F4C4D6800572B4A /* Roxas.xcodeproj */;
|
||||
},
|
||||
{
|
||||
ProductGroup = A8F3FB652F4E96D7006BC252 /* Products */;
|
||||
ProjectRef = A8F3FB642F4E96D7006BC252 /* Roxas.xcodeproj */;
|
||||
},
|
||||
{
|
||||
ProductGroup = A85AEC732F4B22F6002E2E11 /* Products */;
|
||||
ProjectRef = A85AEC612F4B22F6002E2E11 /* Roxas.xcodeproj */;
|
||||
@@ -5232,6 +5388,10 @@
|
||||
ProductGroup = A8FAC0632F4B50D10061A851 /* Products */;
|
||||
ProjectRef = A8FABF722F4B50D10061A851 /* SampleApp.xcodeproj */;
|
||||
},
|
||||
{
|
||||
ProductGroup = A8F3FAED2F4E96D7006BC252 /* Products */;
|
||||
ProjectRef = A8F3FAD92F4E96D7006BC252 /* SampleApp.xcodeproj */;
|
||||
},
|
||||
{
|
||||
ProductGroup = A8FACFA52F4B5CD40061A851 /* Products */;
|
||||
ProjectRef = A8FACE982F4B5CD40061A851 /* SampleApp.xcodeproj */;
|
||||
@@ -5252,6 +5412,10 @@
|
||||
ProductGroup = A85A11E02F4B34EF002E2E11 /* Products */;
|
||||
ProjectRef = A85A10DD2F4B34EF002E2E11 /* SampleApp.xcodeproj */;
|
||||
},
|
||||
{
|
||||
ProductGroup = A8F3FAF12F4E96D7006BC252 /* Products */;
|
||||
ProjectRef = A8F3FAC02F4E96D7006BC252 /* SampleApp.xcodeproj */;
|
||||
},
|
||||
{
|
||||
ProductGroup = A8CCC24E2F4B654400B0089A /* Products */;
|
||||
ProjectRef = A8CCC1792F4B654400B0089A /* SampleApp.xcodeproj */;
|
||||
@@ -5336,6 +5500,10 @@
|
||||
ProductGroup = A85AEC752F4B22F6002E2E11 /* Products */;
|
||||
ProjectRef = A85AE6D52F4B22F6002E2E11 /* SwiftSampleApp.xcodeproj */;
|
||||
},
|
||||
{
|
||||
ProductGroup = A8F3FAEF2F4E96D7006BC252 /* Products */;
|
||||
ProjectRef = A8F3FAE52F4E96D7006BC252 /* SwiftSampleApp.xcodeproj */;
|
||||
},
|
||||
{
|
||||
ProductGroup = A8FACF9B2F4B5CD40061A851 /* Products */;
|
||||
ProjectRef = A8FACEBD2F4B5CD40061A851 /* SwiftSampleApp.xcodeproj */;
|
||||
@@ -7211,6 +7379,90 @@
|
||||
remoteRef = A8F3C14F2F4E37A5006BC252 /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
A8F3FC072F4E998F006BC252 /* libfragmentzip */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = "compiled.mach-o.executable";
|
||||
path = libfragmentzip;
|
||||
remoteRef = A8F3FC062F4E998F006BC252 /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
A8F3FC092F4E998F006BC252 /* libfragmentzip */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = "compiled.mach-o.executable";
|
||||
path = libfragmentzip;
|
||||
remoteRef = A8F3FC082F4E998F006BC252 /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
A8F3FC0B2F4E998F006BC252 /* libfragmentzip.a */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = archive.ar;
|
||||
path = libfragmentzip.a;
|
||||
remoteRef = A8F3FC0A2F4E998F006BC252 /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
A8F3FC0D2F4E998F006BC252 /* libfragmentzip.a */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = archive.ar;
|
||||
path = libfragmentzip.a;
|
||||
remoteRef = A8F3FC0C2F4E998F006BC252 /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
A8F3FC102F4E998F006BC252 /* libgeneral */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = "compiled.mach-o.executable";
|
||||
path = libgeneral;
|
||||
remoteRef = A8F3FC0F2F4E998F006BC252 /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
A8F3FC152F4E998F006BC252 /* Roxas.framework */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = wrapper.framework;
|
||||
path = Roxas.framework;
|
||||
remoteRef = A8F3FC142F4E998F006BC252 /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
A8F3FC172F4E998F006BC252 /* Roxas.framework */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = wrapper.framework;
|
||||
path = Roxas.framework;
|
||||
remoteRef = A8F3FC162F4E998F006BC252 /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
A8F3FC192F4E998F006BC252 /* RoxasTests.xctest */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = wrapper.cfbundle;
|
||||
path = RoxasTests.xctest;
|
||||
remoteRef = A8F3FC182F4E998F006BC252 /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
A8F3FC1C2F4E998F006BC252 /* SampleApp.app */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = wrapper.application;
|
||||
path = SampleApp.app;
|
||||
remoteRef = A8F3FC1B2F4E998F006BC252 /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
A8F3FC202F4E998F006BC252 /* SampleApp.app */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = wrapper.application;
|
||||
path = SampleApp.app;
|
||||
remoteRef = A8F3FC1F2F4E998F006BC252 /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
A8F3FC222F4E998F006BC252 /* NSAttributedString+MarkdownTests.xctest */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = wrapper.cfbundle;
|
||||
path = "NSAttributedString+MarkdownTests.xctest";
|
||||
remoteRef = A8F3FC212F4E998F006BC252 /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
A8F3FC252F4E998F006BC252 /* SwiftSampleApp.app */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = wrapper.application;
|
||||
path = SwiftSampleApp.app;
|
||||
remoteRef = A8F3FC242F4E998F006BC252 /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
A8FAC1CF2F4B51980061A851 /* libem_proxy_static.a */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = archive.ar;
|
||||
|
||||
@@ -997,6 +997,7 @@ extension AppManager
|
||||
case .failure(let error): completionHandler(.failure(error))
|
||||
case .success(let installedApp): completionHandler(.success(installedApp))
|
||||
}
|
||||
//UIApplication.shared.open(shortcutURLon, options: [:], completionHandler: nil)
|
||||
}
|
||||
installOperation.addDependency(sendAppOperation)
|
||||
|
||||
|
||||
@@ -11,6 +11,8 @@ import AltStoreCore
|
||||
import AltSign
|
||||
import Roxas
|
||||
|
||||
let shortcutURLonDelay = URL(string: "shortcuts://run-shortcut?name=TurnOnDataDelay")!
|
||||
|
||||
@objc(InstallAppOperation)
|
||||
final class InstallAppOperation: ResultOperation<InstalledApp>
|
||||
{
|
||||
@@ -211,6 +213,10 @@ final class InstallAppOperation: ResultOperation<InstalledApp>
|
||||
let alert = UIAlertController(title: "Finish Refresh", message: "Please reopen SideStore after the process is finished.To finish refreshing, SideStore must be moved to the background. To do this, you can either go to the Home Screen manually or by hitting Continue. Please reopen SideStore after doing this.", preferredStyle: .alert)
|
||||
alert.addAction(UIAlertAction(title: NSLocalizedString("Continue", comment: ""), style: .default, handler: { _ in
|
||||
print("Going home")
|
||||
// Cell Shortcut
|
||||
UIApplication.shared.open(shortcutURLonDelay, options: [:]) { _ in
|
||||
print("Cell OFF Shortcut finished execution.")}
|
||||
|
||||
UIApplication.shared.perform(#selector(NSXPCConnection.suspend))
|
||||
}))
|
||||
|
||||
@@ -227,6 +233,8 @@ final class InstallAppOperation: ResultOperation<InstalledApp>
|
||||
}
|
||||
}
|
||||
}
|
||||
// Cell Shortcut
|
||||
UIApplication.shared.open(shortcutURLonDelay, options: [:]) { _ in print("Cell OFF Shortcut finished execution.")}
|
||||
UIApplication.shared.perform(#selector(NSXPCConnection.suspend))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -211,7 +211,6 @@ private extension PatchAppOperation
|
||||
#if targetEnvironment(simulator)
|
||||
throw PatchAppError.unsupportedOperatingSystemVersion(ProcessInfo.processInfo.operatingSystemVersion)
|
||||
#else
|
||||
|
||||
let spotlightPath = "Applications/Spotlight.app/Spotlight"
|
||||
let spotlightFileURL = self.patchDirectory.appendingPathComponent(spotlightPath)
|
||||
|
||||
|
||||
@@ -25,12 +25,10 @@ final class SendAppOperation: ResultOperation<()>
|
||||
self.progress.totalUnitCount = 1
|
||||
}
|
||||
|
||||
override func main()
|
||||
{
|
||||
override func main() {
|
||||
super.main()
|
||||
|
||||
if let error = self.context.error
|
||||
{
|
||||
if let error = self.context.error {
|
||||
return self.finish(.failure(error))
|
||||
}
|
||||
|
||||
@@ -38,16 +36,31 @@ final class SendAppOperation: ResultOperation<()>
|
||||
return self.finish(.failure(OperationError.invalidParameters("SendAppOperation.main: self.resignedApp is nil")))
|
||||
}
|
||||
|
||||
// self.context.resignedApp.fileURL points to the app bundle, but we want the .ipa.
|
||||
let shortcutURLoff = URL(string: "shortcuts://run-shortcut?name=TurnOffData")!
|
||||
|
||||
let app = AnyApp(name: resignedApp.name, bundleIdentifier: self.context.bundleIdentifier, url: resignedApp.fileURL, storeApp: nil)
|
||||
let fileURL = InstalledApp.refreshedIPAURL(for: app)
|
||||
|
||||
print("AFC App `fileURL`: \(fileURL.absoluteString)")
|
||||
|
||||
if let data = NSData(contentsOf: fileURL) {
|
||||
// Wait for Shortcut to Finish Before Proceeding
|
||||
UIApplication.shared.open(shortcutURLoff, options: [:]) { _ in
|
||||
print("Shortcut finished execution. Proceeding with file transfer.")
|
||||
|
||||
DispatchQueue.global().async {
|
||||
self.processFile(at: fileURL, for: app.bundleIdentifier)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private func processFile(at fileURL: URL, for bundleIdentifier: String) {
|
||||
guard let data = NSData(contentsOf: fileURL) else {
|
||||
print("IPA doesn't exist????")
|
||||
return self.finish(.failure(OperationError(.appNotFound(name: bundleIdentifier))))
|
||||
}
|
||||
|
||||
do {
|
||||
let bytes = Data(data)
|
||||
try yeetAppAFC(app.bundleIdentifier, bytes)
|
||||
try yeetAppAFC(bundleIdentifier, bytes)
|
||||
self.progress.completedUnitCount += 1
|
||||
self.finish(.success(()))
|
||||
} catch {
|
||||
@@ -55,9 +68,5 @@ final class SendAppOperation: ResultOperation<()>
|
||||
self.progress.completedUnitCount += 1
|
||||
self.finish(.success(()))
|
||||
}
|
||||
} else {
|
||||
print("IPA doesn't exist????")
|
||||
self.finish(.failure(OperationError(.appNotFound(name: resignedApp.name))))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
2
Dependencies/AltSign
vendored
2
Dependencies/AltSign
vendored
Submodule Dependencies/AltSign updated: 4819a7984f...7efe511440
@@ -95,6 +95,7 @@ def resolve_start_commit(last_successful: str):
|
||||
except Exception:
|
||||
return first_commit()
|
||||
|
||||
|
||||
def generate_release_notes(last_successful, tag, branch):
|
||||
current = head_commit()
|
||||
|
||||
@@ -124,7 +125,12 @@ def generate_release_notes(last_successful, tag, branch):
|
||||
for m in messages:
|
||||
section += f"{fmt_msg(m)}\n"
|
||||
|
||||
prev_authors = authors(branch)
|
||||
if commit_exists(branch):
|
||||
previous_range = branch
|
||||
else:
|
||||
previous_range = last_successful
|
||||
|
||||
prev_authors = authors(previous_range)
|
||||
recent_authors = authors(f"{last_successful}..{current}")
|
||||
new_authors = recent_authors - prev_authors
|
||||
|
||||
@@ -137,13 +143,26 @@ def generate_release_notes(last_successful, tag, branch):
|
||||
url = repo_url()
|
||||
section += (
|
||||
f"\n{HEADER_MARKER} Full Changelog: "
|
||||
f"[{last_successful[:8]}...{current[:8]}]"
|
||||
f"[{ref_display(last_successful)}...{ref_display(current)}]"
|
||||
f"({url}/compare/{last_successful}...{current})\n"
|
||||
)
|
||||
|
||||
return section
|
||||
|
||||
|
||||
def ref_display(ref):
|
||||
try:
|
||||
tag = run(f'git describe --tags --exact-match "{ref}" 2>/dev/null || true').strip()
|
||||
|
||||
# allow only semantic version tags: X.Y.Z
|
||||
if re.fullmatch(r'\d+\.\d+\.\d+', tag):
|
||||
return tag
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
return ref[:8]
|
||||
|
||||
|
||||
# ----------------------------------------------------------
|
||||
# markdown update
|
||||
# ----------------------------------------------------------
|
||||
|
||||
@@ -107,13 +107,13 @@ def main():
|
||||
gen_cmd = (
|
||||
f"python3 {script} "
|
||||
f"{args.last_successful_commit} {args.release_tag} "
|
||||
f"--output-dir \"{notes_dir}\""
|
||||
f'--output-dir "{notes_dir}"'
|
||||
)
|
||||
else:
|
||||
gen_cmd = (
|
||||
f"python3 {script} "
|
||||
f"{args.short_commit} {args.release_tag} "
|
||||
f"--output-dir \"{notes_dir}\""
|
||||
f'--output-dir "{notes_dir}"'
|
||||
)
|
||||
|
||||
sh(gen_cmd, cwd=repo_root)
|
||||
|
||||
@@ -216,12 +216,11 @@ def tests_run(model):
|
||||
|
||||
def encrypt_logs(name):
|
||||
pwd = getenv("BUILD_LOG_ZIP_PASSWORD")
|
||||
|
||||
# skip encryption entirely if no password provided
|
||||
if not pwd or not pwd.strip():
|
||||
print("BUILD_LOG_ZIP_PASSWORD not set — skipping encryption", file=sys.stderr)
|
||||
return
|
||||
cwd = getcwd()
|
||||
if not pwd or not pwd.strip():
|
||||
print("BUILD_LOG_ZIP_PASSWORD not set — logs will be uploaded UNENCRYPTED", file=sys.stderr)
|
||||
run(f'cd {cwd}/build/logs && zip -r {cwd}/{name}.zip *')
|
||||
return
|
||||
run(f'cd {cwd}/build/logs && zip -e -P "{pwd}" {cwd}/{name}.zip *')
|
||||
|
||||
# ----------------------------------------------------------
|
||||
@@ -319,21 +318,32 @@ def deploy(repo, source_json, release_tag, marketing_version):
|
||||
raise SystemExit("Deploy push failed after retries")
|
||||
|
||||
|
||||
def last_successful_commit(workflow, branch):
|
||||
import json
|
||||
def last_successful_commit(is_stable, tag=None):
|
||||
is_stable = str(is_stable).lower() in ("1", "true", "yes")
|
||||
|
||||
try:
|
||||
out = runAndGet(
|
||||
f'gh run list '
|
||||
f'--workflow "{workflow}" '
|
||||
f'--json headSha,conclusion,headBranch'
|
||||
)
|
||||
if is_stable:
|
||||
prev_tag = runAndGet(
|
||||
r'git tag --sort=-v:refname '
|
||||
r'| grep -E "^[0-9]+\.[0-9]+\.[0-9]+$" '
|
||||
r'| sed -n "2p" || true'
|
||||
).strip()
|
||||
|
||||
runs = json.loads(out)
|
||||
if prev_tag:
|
||||
return runAndGet(f'git rev-parse "{prev_tag}^{{commit}}"')
|
||||
|
||||
for r in runs:
|
||||
if r.get("conclusion") == "success" and r.get("headBranch") == branch:
|
||||
return r["headSha"]
|
||||
return None # ← changed
|
||||
|
||||
if tag:
|
||||
exists = subprocess.call(
|
||||
f'git rev-parse -q --verify "refs/tags/{tag}"',
|
||||
shell=True,
|
||||
stdout=subprocess.DEVNULL,
|
||||
stderr=subprocess.DEVNULL,
|
||||
) == 0
|
||||
|
||||
if exists:
|
||||
return runAndGet(f'git rev-parse "{tag}^{{commit}}"')
|
||||
|
||||
except Exception:
|
||||
pass
|
||||
@@ -342,15 +352,13 @@ def last_successful_commit(workflow, branch):
|
||||
|
||||
def upload_release(release_name, release_tag, commit_sha, repo, upstream_tag_recommended, is_stable=False):
|
||||
is_stable = str(is_stable).lower() in ("1", "true", "yes")
|
||||
draft = False
|
||||
prerelease = True
|
||||
latest = False
|
||||
|
||||
if is_stable:
|
||||
draft = True # always create a draft for stable and let user publish release
|
||||
update_tag = False
|
||||
prerelease = False
|
||||
else:
|
||||
draft = False
|
||||
update_tag = True # update existing
|
||||
prerelease = True
|
||||
latest = True
|
||||
|
||||
token = getenv("GH_TOKEN")
|
||||
if token:
|
||||
@@ -378,8 +386,9 @@ def upload_release(release_name, release_tag, commit_sha, repo, upstream_tag_rec
|
||||
f"--output-dir {ROOT}"
|
||||
)
|
||||
|
||||
if is_stable:
|
||||
release_notes = re.sub(
|
||||
r'^\s*#{1,6}\s*what(?:\'?s|\s+is)?\s+(?:new|changed).*',
|
||||
r'(?im)^[ \t]*#{1,6}[ \t]*what[’\']?s[ \t]+changed[ \t]*$',
|
||||
"## What's Changed",
|
||||
release_notes,
|
||||
flags=re.IGNORECASE | re.MULTILINE,
|
||||
@@ -390,7 +399,7 @@ def upload_release(release_name, release_tag, commit_sha, repo, upstream_tag_rec
|
||||
tag = upstream_tag_recommended.strip()
|
||||
upstream_block = (
|
||||
f"If you want to try out new features early but want a lower chance of bugs, "
|
||||
f"you can look at [SideStore {tag}]"
|
||||
f"you can look at [{repo} {tag}]"
|
||||
f"(https://github.com/{repo}/releases?q={tag}).\n\n"
|
||||
)
|
||||
|
||||
@@ -406,14 +415,31 @@ def upload_release(release_name, release_tag, commit_sha, repo, upstream_tag_rec
|
||||
|
||||
draft_flag = "--draft" if draft else ""
|
||||
prerelease_flag = "--prerelease" if prerelease else ""
|
||||
latest_flag = "" if update_tag else "--latest=false"
|
||||
latest_flag = "--latest=true" if latest else ""
|
||||
|
||||
# create release if it doesn't exist
|
||||
exists = subprocess.call(
|
||||
f'gh release view "{release_tag}"',
|
||||
shell=True,
|
||||
cwd=ROOT,
|
||||
stdout=subprocess.DEVNULL,
|
||||
stderr=subprocess.DEVNULL,
|
||||
) == 0
|
||||
|
||||
if exists:
|
||||
run(
|
||||
f'gh release edit "{release_tag}" '
|
||||
f'--title "{release_name}" '
|
||||
f'--notes-file "{body_file}" '
|
||||
f'{draft_flag} {prerelease_flag} {latest_flag}'
|
||||
)
|
||||
else:
|
||||
run(
|
||||
f'gh release create "{release_tag}" '
|
||||
f'--title "{release_name}" '
|
||||
f'--notes-file "{body_file}" '
|
||||
f'{draft_flag} {prerelease_flag} {latest_flag}'
|
||||
)
|
||||
|
||||
run(
|
||||
f'gh release upload "{release_tag}" '
|
||||
@@ -498,7 +524,7 @@ COMMANDS = {
|
||||
# ----------------------------------------------------------
|
||||
# RELEASE / DEPLOY
|
||||
# ----------------------------------------------------------
|
||||
"last-successful-commit" : (last_successful_commit, 2, "<workflow_name> <branch>"),
|
||||
"last-successful-commit" : (last_successful_commit, 1, "<is_stable> [tag]"),
|
||||
"release-notes" : (release_notes, 1, "<tag>"),
|
||||
"retrieve-release-notes" : (retrieve_release_notes, 1, "<tag>"),
|
||||
"generate-metadata" : (generate_metadata, 7,
|
||||
@@ -532,9 +558,9 @@ def main():
|
||||
suffix = f" {arg_usage}" if arg_usage else ""
|
||||
raise SystemExit(f"Usage: workflow.py {cmd}{suffix}")
|
||||
|
||||
args = sys.argv[2:2 + argc]
|
||||
args = sys.argv[2:]
|
||||
|
||||
result = func(*args) if argc else func()
|
||||
result = func(*args) if args else func()
|
||||
|
||||
# ONLY real outputs go to stdout
|
||||
if result is not None:
|
||||
|
||||
Reference in New Issue
Block a user