diff --git a/.github/workflows/beta.yml b/.github/workflows/beta.yml new file mode 100644 index 00000000..08d47507 --- /dev/null +++ b/.github/workflows/beta.yml @@ -0,0 +1,156 @@ +name: Beta SideStore build +on: + push: + branches: + - develop + +jobs: + build: + name: Build and upload SideStore Beta + if: startsWith(github.event.head_commit.message, '[beta]') + concurrency: + group: ${{ github.ref }} + cancel-in-progress: true + strategy: + fail-fast: false + matrix: + include: + - os: 'macos-12' + version: '14.2' + + runs-on: ${{ matrix.os }} + steps: + - name: Checkout code + uses: actions/checkout@v2 + with: + submodules: recursive + + # - name: Cache rust cargo + # id: cache-rust-cargo + # uses: actions/cache@v3 + # env: + # cache-name: cache-rust-cargo + # with: + # path: ~/.cargo + # key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }} + # restore-keys: | + # ${{ runner.os }}-build-${{ env.cache-name }}- + # ${{ runner.os }}-build- + # ${{ runner.os }}- + + # - name: Cache rust minimuxer + # id: cache-rust-minimuxer + # uses: actions/cache@v3 + # env: + # cache-name: cache-rust-minimuxer + # with: + # path: ./Dependencies/minimuxer/target + # key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }} + # restore-keys: | + # ${{ runner.os }}-build-${{ env.cache-name }}- + # ${{ runner.os }}-build- + # ${{ runner.os }}- + + # - name: Cache rust em_proxy + # id: cache-rust-em_proxy + # uses: actions/cache@v3 + # env: + # cache-name: cache-rust-em_proxy + # with: + # path: ./Dependencies/em_proxy/target + # key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }} + # restore-keys: | + # ${{ runner.os }}-build-${{ env.cache-name }}- + # ${{ runner.os }}-build- + # ${{ runner.os }}- + + - name: Install dependencies + run: brew install ldid + + - name: Install rustup + uses: actions-rs/toolchain@v1 + with: + toolchain: stable + override: true + target: aarch64-apple-ios + + # - name: Create emotional damage + # run: cd Dependencies/em_proxy && cargo build --release --target aarch64-apple-ios + + # - name: Build minimuxer + # run: cd Dependencies/minimuxer && cargo build --release --target aarch64-apple-ios + + - name: Add beta suffix to version + run: sed -e '/MARKETING_VERSION = .*/s/$/-beta.${{ github.run_number }}/' -i '' Build.xcconfig + + - name: Setup Xcode + uses: maxim-lobanov/setup-xcode@v1.4.1 + with: + xcode-version: ${{ matrix.version }} + + - name: Build SideStore + run: | + xcodebuild -project AltStore.xcodeproj \ + -scheme AltStore \ + -sdk iphoneos \ + archive -archivePath ./archive \ + CODE_SIGNING_REQUIRED=NO \ + AD_HOC_CODE_SIGNING_ALLOWED=YES \ + CODE_SIGNING_ALLOWED=NO \ + DEVELOPMENT_TEAM=XYZ0123456 \ + ORG_IDENTIFIER=com.SideStore \ + | xcpretty && exit ${PIPESTATUS[0]} + + - name: Fakesign app + run: | + rm -rf archive.xcarchive/Products/Applications/SideStore.app/Frameworks/AltStoreCore.framework/Frameworks/ + ldid -SAltStore/Resources/tempEnt.plist archive.xcarchive/Products/Applications/SideStore.app/SideStore + + - name: Convert to IPA + run: | + mkdir Payload + mkdir Payload/SideStore.app + cp -R archive.xcarchive/Products/Applications/SideStore.app/ Payload/SideStore.app/ + zip -r SideStore.ipa Payload + + - name: Upload Artifact + uses: actions/upload-artifact@v3.1.0 + with: + name: SideStore.ipa + path: SideStore.ipa + + - name: Get version + id: version + run: echo "version=$(grep MARKETING_VERSION Build.xcconfig | sed -e "s/MARKETING_VERSION = //g")" >> $GITHUB_OUTPUT + + - name: Get current date + id: date + run: echo "date=$(date -u +'%c')" >> $GITHUB_OUTPUT + + - name: Get current date in AltStore date form + id: date_altstore + run: echo "date=$(date -u +'%Y-%m-%d')" >> $GITHUB_OUTPUT + + - name: Upload to beta release + uses: IsaacShelton/update-existing-release@v1.3.1 + with: + token: ${{ secrets.GITHUB_TOKEN }} + release: "Beta" + tag: "beta" + prerelease: true + files: SideStore.ipa + body: | + This is an ⚠️ **EXPERIMENTAL** ⚠️ beta build for commit [${{ github.sha }}](https://github.com/${{ github.repository }}/commit/${{ github.sha }}). + + Beta builds are hand-picked builds from development commits that will allow you to try out new features earlier than normal, but with a lower chance of bugs than if you used nightly builds. However, since these changes are newer and less tested, they still have a good chance of bugs, so **use at your own risk**. + + If you want to be on the bleeding edge and use the latest development builds, you can look at [SideStore Nightly](https://github.com/${{ github.repository }}/releases/tag/nightly). **Please be aware that these builds have a much higher chance of bugs than beta or stable**. + + If you use the `SideStore (Beta)` app, it will use the latest beta build (make sure to update it in "My Apps"). + + ## Build Info + + Built at (UTC): `${{ steps.date.outputs.date }}` + Built at (UTC date): `${{ steps.date_altstore.outputs.date }}` + Commit SHA: `${{ github.sha }}` + Version: `${{ steps.version.outputs.version }}` diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml new file mode 100644 index 00000000..2f8d62ba --- /dev/null +++ b/.github/workflows/nightly.yml @@ -0,0 +1,155 @@ +name: Nightly SideStore build +on: + push: + branches: + - develop + +jobs: + build: + name: Build and upload SideStore Nightly + concurrency: + group: ${{ github.ref }} + cancel-in-progress: true + strategy: + fail-fast: false + matrix: + include: + - os: 'macos-12' + version: '14.2' + + runs-on: ${{ matrix.os }} + steps: + - name: Checkout code + uses: actions/checkout@v2 + with: + submodules: recursive + + # - name: Cache rust cargo + # id: cache-rust-cargo + # uses: actions/cache@v3 + # env: + # cache-name: cache-rust-cargo + # with: + # path: ~/.cargo + # key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }} + # restore-keys: | + # ${{ runner.os }}-build-${{ env.cache-name }}- + # ${{ runner.os }}-build- + # ${{ runner.os }}- + + # - name: Cache rust minimuxer + # id: cache-rust-minimuxer + # uses: actions/cache@v3 + # env: + # cache-name: cache-rust-minimuxer + # with: + # path: ./Dependencies/minimuxer/target + # key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }} + # restore-keys: | + # ${{ runner.os }}-build-${{ env.cache-name }}- + # ${{ runner.os }}-build- + # ${{ runner.os }}- + + # - name: Cache rust em_proxy + # id: cache-rust-em_proxy + # uses: actions/cache@v3 + # env: + # cache-name: cache-rust-em_proxy + # with: + # path: ./Dependencies/em_proxy/target + # key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }} + # restore-keys: | + # ${{ runner.os }}-build-${{ env.cache-name }}- + # ${{ runner.os }}-build- + # ${{ runner.os }}- + + - name: Install dependencies + run: brew install ldid + + - name: Install rustup + uses: actions-rs/toolchain@v1 + with: + toolchain: stable + override: true + target: aarch64-apple-ios + + # - name: Create emotional damage + # run: cd Dependencies/em_proxy && cargo build --release --target aarch64-apple-ios + + # - name: Build minimuxer + # run: cd Dependencies/minimuxer && cargo build --release --target aarch64-apple-ios + + - name: Add nightly suffix to version + run: sed -e '/MARKETING_VERSION = .*/s/$/-nightly.${{ github.run_number }}/' -i '' Build.xcconfig + + - name: Setup Xcode + uses: maxim-lobanov/setup-xcode@v1.4.1 + with: + xcode-version: ${{ matrix.version }} + + - name: Build SideStore + run: | + xcodebuild -project AltStore.xcodeproj \ + -scheme AltStore \ + -sdk iphoneos \ + archive -archivePath ./archive \ + CODE_SIGNING_REQUIRED=NO \ + AD_HOC_CODE_SIGNING_ALLOWED=YES \ + CODE_SIGNING_ALLOWED=NO \ + DEVELOPMENT_TEAM=XYZ0123456 \ + ORG_IDENTIFIER=com.SideStore \ + | xcpretty && exit ${PIPESTATUS[0]} + + - name: Fakesign app + run: | + rm -rf archive.xcarchive/Products/Applications/SideStore.app/Frameworks/AltStoreCore.framework/Frameworks/ + ldid -SAltStore/Resources/tempEnt.plist archive.xcarchive/Products/Applications/SideStore.app/SideStore + + - name: Convert to IPA + run: | + mkdir Payload + mkdir Payload/SideStore.app + cp -R archive.xcarchive/Products/Applications/SideStore.app/ Payload/SideStore.app/ + zip -r SideStore.ipa Payload + + - name: Upload Artifact + uses: actions/upload-artifact@v3.1.0 + with: + name: SideStore.ipa + path: SideStore.ipa + + - name: Get version + id: version + run: echo "version=$(grep MARKETING_VERSION Build.xcconfig | sed -e "s/MARKETING_VERSION = //g")" >> $GITHUB_OUTPUT + + - name: Get current date + id: date + run: echo "date=$(date -u +'%c')" >> $GITHUB_OUTPUT + + - name: Get current date in AltStore date form + id: date_altstore + run: echo "date=$(date -u +'%Y-%m-%d')" >> $GITHUB_OUTPUT + + - name: Upload to nightly release + uses: IsaacShelton/update-existing-release@v1.3.1 + with: + token: ${{ secrets.GITHUB_TOKEN }} + release: "Nightly" + tag: "nightly" + prerelease: true + files: SideStore.ipa + body: | + This is an ⚠️ **EXPERIMENTAL** ⚠️ nightly build for commit [${{ github.sha }}](https://github.com/${{ github.repository }}/commit/${{ github.sha }}). + + Nightly builds are built from the most recent commit which means you'll be able to try out new features very early. However, since these changes are much newer and less tested, they have a much higher chance of bugs, so **use at your own risk**. + + If you want to try out new features early but want a lower chance of bugs, you can look at [SideStore Beta](https://github.com/${{ github.repository }}/releases/tag/beta). + + If you use the `SideStore (Nightly)` app, it will use the latest nightly build (make sure to update it in "My Apps"). + + ## Build Info + + Built at (UTC): `${{ steps.date.outputs.date }}` + Built at (UTC date): `${{ steps.date_altstore.outputs.date }}` + Commit SHA: `${{ github.sha }}` + Version: `${{ steps.version.outputs.version }}` diff --git a/.github/workflows/build.yml b/.github/workflows/pr.yml similarity index 97% rename from .github/workflows/build.yml rename to .github/workflows/pr.yml index 8c7c73a1..35229496 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/pr.yml @@ -1,9 +1,5 @@ -name: Build and Upload SideStore +name: Pull Request SideStore build on: - push: - branches: - - master - - develop pull_request: jobs: diff --git a/.github/workflows/stable.yml b/.github/workflows/stable.yml new file mode 100644 index 00000000..a49bfa42 --- /dev/null +++ b/.github/workflows/stable.yml @@ -0,0 +1,145 @@ +name: Stable SideStore build +on: + push: + tags: + - '[0-9]+.[0-9]+.[0-9]+*' + +jobs: + build: + name: Build and upload SideStore + strategy: + fail-fast: false + matrix: + include: + - os: 'macos-12' + version: '14.2' + + runs-on: ${{ matrix.os }} + steps: + - name: Checkout code + uses: actions/checkout@v2 + with: + submodules: recursive + + # - name: Cache rust cargo + # id: cache-rust-cargo + # uses: actions/cache@v3 + # env: + # cache-name: cache-rust-cargo + # with: + # path: ~/.cargo + # key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }} + # restore-keys: | + # ${{ runner.os }}-build-${{ env.cache-name }}- + # ${{ runner.os }}-build- + # ${{ runner.os }}- + + # - name: Cache rust minimuxer + # id: cache-rust-minimuxer + # uses: actions/cache@v3 + # env: + # cache-name: cache-rust-minimuxer + # with: + # path: ./Dependencies/minimuxer/target + # key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }} + # restore-keys: | + # ${{ runner.os }}-build-${{ env.cache-name }}- + # ${{ runner.os }}-build- + # ${{ runner.os }}- + + # - name: Cache rust em_proxy + # id: cache-rust-em_proxy + # uses: actions/cache@v3 + # env: + # cache-name: cache-rust-em_proxy + # with: + # path: ./Dependencies/em_proxy/target + # key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }} + # restore-keys: | + # ${{ runner.os }}-build-${{ env.cache-name }}- + # ${{ runner.os }}-build- + # ${{ runner.os }}- + + - name: Install dependencies + run: brew install ldid + + - name: Install rustup + uses: actions-rs/toolchain@v1 + with: + toolchain: stable + override: true + target: aarch64-apple-ios + + # - name: Create emotional damage + # run: cd Dependencies/em_proxy && cargo build --release --target aarch64-apple-ios + + # - name: Build minimuxer + # run: cd Dependencies/minimuxer && cargo build --release --target aarch64-apple-ios + + - name: Setup Xcode + uses: maxim-lobanov/setup-xcode@v1.4.1 + with: + xcode-version: ${{ matrix.version }} + + - name: Build SideStore + run: | + xcodebuild -project AltStore.xcodeproj \ + -scheme AltStore \ + -sdk iphoneos \ + archive -archivePath ./archive \ + CODE_SIGNING_REQUIRED=NO \ + AD_HOC_CODE_SIGNING_ALLOWED=YES \ + CODE_SIGNING_ALLOWED=NO \ + DEVELOPMENT_TEAM=XYZ0123456 \ + ORG_IDENTIFIER=com.SideStore \ + | xcpretty && exit ${PIPESTATUS[0]} + + - name: Fakesign app + run: | + rm -rf archive.xcarchive/Products/Applications/SideStore.app/Frameworks/AltStoreCore.framework/Frameworks/ + ldid -SAltStore/Resources/tempEnt.plist archive.xcarchive/Products/Applications/SideStore.app/SideStore + + - name: Convert to IPA + run: | + mkdir Payload + mkdir Payload/SideStore.app + cp -R archive.xcarchive/Products/Applications/SideStore.app/ Payload/SideStore.app/ + zip -r SideStore.ipa Payload + + - name: Upload Artifact + uses: actions/upload-artifact@v3.1.0 + with: + name: SideStore.ipa + path: SideStore.ipa + + - name: Get version + id: version + run: echo "version=$(grep MARKETING_VERSION Build.xcconfig | sed -e "s/MARKETING_VERSION = //g")" >> $GITHUB_OUTPUT + + - name: Get current date + id: date + run: echo "date=$(date -u +'%c')" >> $GITHUB_OUTPUT + + - name: Get current date in AltStore date form + id: date_altstore + run: echo "date=$(date -u +'%Y-%m-%d')" >> $GITHUB_OUTPUT + + - name: Upload to new stable release + uses: softprops/action-gh-release@v1 + with: + token: ${{ secrets.GITHUB_TOKEN }} + name: ${{ steps.version.outputs.version }} + tag_name: ${{ github.ref }} + draft: true + files: SideStore.ipa + body: | + ## Changelog + + - TODO + + ## Build Info + + Built at (UTC): `${{ steps.date.outputs.date }}` + Built at (UTC date): `${{ steps.date_altstore.outputs.date }}` + Commit SHA: `${{ github.sha }}` + Version: `${{ steps.version.outputs.version }}`