From eb65e20ac128f22d13bf6cb3c903520f4f120eb2 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 28 Mar 2026 14:03:09 +0000 Subject: [PATCH 01/11] Fix all Copilot review issues in GitHub Actions workflows from PR #12 Agent-Logs-Url: https://github.com/SillyLittleTech/Flean/sessions/960cce85-06d1-413b-bc44-758cb70d3d30 Co-authored-by: kiyarose <75678535+kiyarose@users.noreply.github.com> --- .github/workflows/build-and-release.yml | 186 ++++++++++++++++++++++++ .github/workflows/prerelease.yml | 72 +++++++++ 2 files changed, 258 insertions(+) create mode 100644 .github/workflows/build-and-release.yml create mode 100644 .github/workflows/prerelease.yml diff --git a/.github/workflows/build-and-release.yml b/.github/workflows/build-and-release.yml new file mode 100644 index 0000000..8b71504 --- /dev/null +++ b/.github/workflows/build-and-release.yml @@ -0,0 +1,186 @@ +name: Build & Release iOS and macOS Extensions + +on: + push: + branches: + - main + paths: + - '**.swift' + - 'ios/**' + - 'mos/**' + - '.github/workflows/build-and-release.yml' + workflow_dispatch: + inputs: + draft: + description: 'Create as draft (for testing)' + required: true + default: 'true' + type: choice + options: + - 'true' + - 'false' + +jobs: + check-version: + runs-on: ubuntu-latest + permissions: + contents: read + outputs: + version: ${{ steps.extract.outputs.version }} + tag_exists: ${{ steps.check_tag.outputs.exists }} + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + fetch-tags: true + + - name: Extract version from Xcode project + id: extract + run: | + VERSION=$(grep -m1 'MARKETING_VERSION = ' ios/Flean.xcodeproj/project.pbxproj | awk -F ' = ' '{ gsub(/;/,"",$2); print $2; exit }') + echo "version=v$VERSION" >> $GITHUB_OUTPUT + echo "Detected version: v$VERSION" + + - name: Check if tag exists + id: check_tag + run: | + if git ls-remote --tags --exit-code origin "refs/tags/${{ steps.extract.outputs.version }}" >/dev/null 2>&1; then + echo "exists=true" >> $GITHUB_OUTPUT + echo "Tag already exists!" + else + echo "exists=false" >> $GITHUB_OUTPUT + echo "Tag does not exist - ready to build" + fi + + build-and-release: + needs: check-version + if: needs.check-version.outputs.tag_exists == 'false' + runs-on: macos-latest + permissions: + contents: write + + steps: + - uses: actions/checkout@v4 + + # iOS Build + - name: Build iOS IPA + run: | + cd ios + mkdir -p build + + # Build archive + xcodebuild archive \ + -project Flean.xcodeproj \ + -target Flean \ + -archivePath build/Flean.xcarchive \ + -configuration Release \ + -destination 'generic/platform=iOS' \ + -skipPackagePluginValidation \ + CODE_SIGN_IDENTITY="" \ + CODE_SIGNING_REQUIRED=NO \ + CODE_SIGN_ENTITLEMENTS="" 2>&1 | tee build.log + + # Check for build errors + if grep -i "error:" build.log; then + echo "❌ iOS build failed" + exit 1 + fi + + # Export IPA from archive + cat > build/ExportOptions.plist << 'EOF' + + + + + method + ad-hoc + signingStyle + manual + + + EOF + + xcodebuild -exportArchive \ + -archivePath build/Flean.xcarchive \ + -exportPath build/export \ + -exportOptionsPlist build/ExportOptions.plist \ + CODE_SIGN_IDENTITY="" \ + CODE_SIGNING_REQUIRED=NO \ + CODE_SIGN_ENTITLEMENTS="" 2>&1 | tee export.log + + echo "✅ iOS build succeeded" + + # macOS Build + - name: Build macOS App + run: | + cd mos + mkdir -p build + + # Build directly to app + xcodebuild build \ + -project Flean.xcodeproj \ + -target Flean \ + -configuration Release \ + -derivedDataPath build \ + -skipPackagePluginValidation \ + CODE_SIGN_IDENTITY="" \ + CODE_SIGNING_REQUIRED=NO \ + CODE_SIGN_ENTITLEMENTS="" 2>&1 | tee build.log + + # Check for build errors + if grep -i "error:" build.log; then + echo "❌ macOS build failed" + exit 1 + fi + + # Find and zip the .app into a fixed location matching the upload step + APP_PATH=$(find build -name "Flean.app" -type d | head -1) + if [ -z "$APP_PATH" ]; then + echo "❌ Flean.app not found" + exit 1 + fi + + zip -r build/Flean.app.zip "$APP_PATH" + echo "✅ macOS build succeeded" + + # Create tag + - name: Create Git Tag + run: | + git config user.name "github-actions" + git config user.email "github-actions@github.com" + git tag ${{ needs.check-version.outputs.version }} + git push origin ${{ needs.check-version.outputs.version }} + + # Create Release + - name: Create Release + uses: actions/create-release@v1 + id: create_release + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ needs.check-version.outputs.version }} + release_name: "Flean ${{ needs.check-version.outputs.version }}" + draft: ${{ github.event.inputs.draft == 'true' }} + prerelease: false + + # Upload iOS IPA + - name: Upload iOS IPA + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} + asset_path: ./ios/build/export/Flean.ipa + asset_name: Flean.ipa + asset_content_type: application/octet-stream + + # Upload macOS App + - name: Upload macOS App + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} + asset_path: ./mos/build/Flean.app.zip + asset_name: Flean.app.zip + asset_content_type: application/zip diff --git a/.github/workflows/prerelease.yml b/.github/workflows/prerelease.yml new file mode 100644 index 0000000..640c241 --- /dev/null +++ b/.github/workflows/prerelease.yml @@ -0,0 +1,72 @@ +name: Create Prerelease on PR Ready + +on: + pull_request: + branches: + - main + types: + - ready_for_review + paths: + - '.github/workflows/**' + - '**.swift' + - 'ios/**' + - 'mos/**' + +jobs: + create-prerelease: + runs-on: macos-latest + permissions: + contents: write + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Extract version from Xcode project + id: extract + run: | + VERSION=$(grep -m1 'MARKETING_VERSION = ' ios/Flean.xcodeproj/project.pbxproj | awk -F ' = ' '{ gsub(/;/,"",$2); print $2; exit }') + echo "version=v$VERSION" >> $GITHUB_OUTPUT + echo "Detected version: v$VERSION" + + - name: Build iOS + run: | + cd ios + mkdir -p build + xcodebuild build \ + -project Flean.xcodeproj \ + -target Flean \ + -configuration Release \ + -derivedDataPath build \ + -destination 'generic/platform=iOS' \ + CODE_SIGN_IDENTITY="" \ + CODE_SIGNING_REQUIRED=NO + + - name: Build macOS + run: | + cd mos + mkdir -p build + xcodebuild build \ + -project Flean.xcodeproj \ + -target Flean \ + -configuration Release \ + -derivedDataPath build \ + CODE_SIGN_IDENTITY="" \ + CODE_SIGNING_REQUIRED=NO + + - name: Create Prerelease + uses: actions/create-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ steps.extract.outputs.version }}-prerelease-${{ github.run_number }} + release_name: "Flean ${{ steps.extract.outputs.version }} - Prerelease (PR #${{ github.event.pull_request.number }})" + body: | + 🧪 **Prerelease Build** from PR #${{ github.event.pull_request.number }} + + **Branch:** ${{ github.event.pull_request.head.ref }} + **Author:** @${{ github.event.pull_request.user.login }} + + This is a prerelease. Testing and feedback welcome! + draft: false + prerelease: true From c9e5246f44b13a052b0ec5fe94efccfd16dea745 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 28 Mar 2026 14:09:04 +0000 Subject: [PATCH 02/11] Fix: replace -derivedDataPath with SYMROOT= in xcodebuild commands Agent-Logs-Url: https://github.com/SillyLittleTech/Flean/sessions/315054d2-fcca-4e5c-baef-a13ea62da596 Co-authored-by: kiyarose <75678535+kiyarose@users.noreply.github.com> --- .github/workflows/build-and-release.yml | 2 +- .github/workflows/prerelease.yml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build-and-release.yml b/.github/workflows/build-and-release.yml index 8b71504..a87e0bb 100644 --- a/.github/workflows/build-and-release.yml +++ b/.github/workflows/build-and-release.yml @@ -121,8 +121,8 @@ jobs: -project Flean.xcodeproj \ -target Flean \ -configuration Release \ - -derivedDataPath build \ -skipPackagePluginValidation \ + SYMROOT=build \ CODE_SIGN_IDENTITY="" \ CODE_SIGNING_REQUIRED=NO \ CODE_SIGN_ENTITLEMENTS="" 2>&1 | tee build.log diff --git a/.github/workflows/prerelease.yml b/.github/workflows/prerelease.yml index 640c241..3865883 100644 --- a/.github/workflows/prerelease.yml +++ b/.github/workflows/prerelease.yml @@ -37,8 +37,8 @@ jobs: -project Flean.xcodeproj \ -target Flean \ -configuration Release \ - -derivedDataPath build \ -destination 'generic/platform=iOS' \ + SYMROOT=build \ CODE_SIGN_IDENTITY="" \ CODE_SIGNING_REQUIRED=NO @@ -50,7 +50,7 @@ jobs: -project Flean.xcodeproj \ -target Flean \ -configuration Release \ - -derivedDataPath build \ + SYMROOT=build \ CODE_SIGN_IDENTITY="" \ CODE_SIGNING_REQUIRED=NO From 967d770c3b6ca1edf8769b37c50511b5b92fc059 Mon Sep 17 00:00:00 2001 From: Kiya Rose Ren-Miyakari Date: Sat, 28 Mar 2026 10:11:12 -0400 Subject: [PATCH 03/11] Update .github/workflows/build-and-release.yml Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .github/workflows/build-and-release.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build-and-release.yml b/.github/workflows/build-and-release.yml index a87e0bb..82f5248 100644 --- a/.github/workflows/build-and-release.yml +++ b/.github/workflows/build-and-release.yml @@ -140,7 +140,11 @@ jobs: exit 1 fi - zip -r build/Flean.app.zip "$APP_PATH" + # Create a zip whose top-level entry is Flean.app + OUT_ZIP="$(pwd)/build/Flean.app.zip" + APP_DIR="$(dirname "$APP_PATH")" + APP_NAME="$(basename "$APP_PATH")" + ( cd "$APP_DIR" && zip -r "$OUT_ZIP" "$APP_NAME" ) echo "✅ macOS build succeeded" # Create tag From 0eb632c4578743d8bd1a60c54083e8863cd16097 Mon Sep 17 00:00:00 2001 From: Kiya Rose Ren-Miyakari Date: Sat, 28 Mar 2026 10:11:40 -0400 Subject: [PATCH 04/11] Update .github/workflows/prerelease.yml Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .github/workflows/prerelease.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/prerelease.yml b/.github/workflows/prerelease.yml index 3865883..3cb5be3 100644 --- a/.github/workflows/prerelease.yml +++ b/.github/workflows/prerelease.yml @@ -38,9 +38,9 @@ jobs: -target Flean \ -configuration Release \ -destination 'generic/platform=iOS' \ - SYMROOT=build \ + -destination 'generic/platform=iOS Simulator' \ CODE_SIGN_IDENTITY="" \ - CODE_SIGNING_REQUIRED=NO + CODE_SIGNING_ALLOWED=NO - name: Build macOS run: | From 7be08a7fc09b5455377da983355c6e8e70db202d Mon Sep 17 00:00:00 2001 From: Kiya Rose Ren-Miyakari Date: Sat, 28 Mar 2026 10:12:31 -0400 Subject: [PATCH 05/11] Update .github/workflows/build-and-release.yml Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .github/workflows/build-and-release.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-and-release.yml b/.github/workflows/build-and-release.yml index 82f5248..2e14087 100644 --- a/.github/workflows/build-and-release.yml +++ b/.github/workflows/build-and-release.yml @@ -93,9 +93,9 @@ jobs: method - ad-hoc + development signingStyle - manual + automatic EOF From 0a0cf7f881b72df33f632b6e137c0f0deb4d52ea Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 28 Mar 2026 14:21:29 +0000 Subject: [PATCH 06/11] Fix iOS linker error: set SDKROOT=iphoneos and clean macOS-specific target settings Agent-Logs-Url: https://github.com/SillyLittleTech/Flean/sessions/43931195-3986-4ca5-a7a1-fadc37c17e52 Co-authored-by: kiyarose <75678535+kiyarose@users.noreply.github.com> --- ios/Flean.xcodeproj/project.pbxproj | 22 ++++++++-------------- ios/Flean/iOS/FleanApp.swift | 5 ----- 2 files changed, 8 insertions(+), 19 deletions(-) diff --git a/ios/Flean.xcodeproj/project.pbxproj b/ios/Flean.xcodeproj/project.pbxproj index 894c7cb..510ea3b 100644 --- a/ios/Flean.xcodeproj/project.pbxproj +++ b/ios/Flean.xcodeproj/project.pbxproj @@ -576,20 +576,17 @@ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_ENTITLEMENTS = Flean/Flean.entitlements; CODE_SIGN_STYLE = Automatic; - COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 2; DEVELOPMENT_TEAM = PWL627GZ4Y; - ENABLE_HARDENED_RUNTIME = YES; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_KEY_CFBundleDisplayName = Flean; INFOPLIST_KEY_NSHumanReadableCopyright = ""; - INFOPLIST_KEY_NSMainStoryboardFile = Main; - INFOPLIST_KEY_NSPrincipalClass = NSApplication; + INFOPLIST_KEY_UILaunchScreen_Generation = YES; + IPHONEOS_DEPLOYMENT_TARGET = 16.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", - "@executable_path/../Frameworks", + "@executable_path/Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 10.14; MARKETING_VERSION = 2.1.3; OTHER_LDFLAGS = ( "-framework", @@ -599,7 +596,7 @@ ); PRODUCT_BUNDLE_IDENTIFIER = slf.Flean; PRODUCT_NAME = "$(TARGET_NAME)"; - REGISTER_APP_GROUPS = YES; + SDKROOT = iphoneos; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; SUPPORTS_MACCATALYST = NO; SWIFT_EMIT_LOC_STRINGS = YES; @@ -615,20 +612,17 @@ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_ENTITLEMENTS = Flean/Flean.entitlements; CODE_SIGN_STYLE = Automatic; - COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 2; DEVELOPMENT_TEAM = PWL627GZ4Y; - ENABLE_HARDENED_RUNTIME = YES; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_KEY_CFBundleDisplayName = Flean; INFOPLIST_KEY_NSHumanReadableCopyright = ""; - INFOPLIST_KEY_NSMainStoryboardFile = Main; - INFOPLIST_KEY_NSPrincipalClass = NSApplication; + INFOPLIST_KEY_UILaunchScreen_Generation = YES; + IPHONEOS_DEPLOYMENT_TARGET = 16.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", - "@executable_path/../Frameworks", + "@executable_path/Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 10.14; MARKETING_VERSION = 2.1.3; OTHER_LDFLAGS = ( "-framework", @@ -638,7 +632,7 @@ ); PRODUCT_BUNDLE_IDENTIFIER = slf.Flean; PRODUCT_NAME = "$(TARGET_NAME)"; - REGISTER_APP_GROUPS = YES; + SDKROOT = iphoneos; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; SUPPORTS_MACCATALYST = NO; SWIFT_EMIT_LOC_STRINGS = YES; diff --git a/ios/Flean/iOS/FleanApp.swift b/ios/Flean/iOS/FleanApp.swift index 360973f..feda925 100644 --- a/ios/Flean/iOS/FleanApp.swift +++ b/ios/Flean/iOS/FleanApp.swift @@ -1,6 +1,3 @@ -// iOS-only app entry. Guard so the file can live in the repo without -// conflicting with the macOS `@main` app in `Flean/AppDelegate.swift`. -#if os(iOS) import SwiftUI import WebKit @@ -12,5 +9,3 @@ struct FleanApp: App { } } } - -#endif From 44494d53558f017113b5918a558f020a7801b8cb Mon Sep 17 00:00:00 2001 From: "deepsource-autofix[bot]" <62050782+deepsource-autofix[bot]@users.noreply.github.com> Date: Sat, 28 Mar 2026 14:28:57 +0000 Subject: [PATCH 07/11] style: format code with PHP CS Fixer, StandardJS and swift-format This commit fixes the style issues introduced in 0a0cf7f according to the output from PHP CS Fixer, StandardJS and swift-format. Details: https://github.com/SillyLittleTech/Flean/pull/14 --- ios/Flean/iOS/FleanApp.swift | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ios/Flean/iOS/FleanApp.swift b/ios/Flean/iOS/FleanApp.swift index feda925..f0d8771 100644 --- a/ios/Flean/iOS/FleanApp.swift +++ b/ios/Flean/iOS/FleanApp.swift @@ -3,9 +3,9 @@ import WebKit @main struct FleanApp: App { - var body: some Scene { - WindowGroup { - WebViewContainer() - } + var body: some Scene { + WindowGroup { + WebViewContainer() } + } } From 7133f178e4fb67535c80119a51d3b5233d6545bb Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 28 Mar 2026 14:30:35 +0000 Subject: [PATCH 08/11] Plan: sync build-and-release.yml with prerelease.yml and add duplicate tag handling Agent-Logs-Url: https://github.com/SillyLittleTech/Flean/sessions/0d9831c6-41ea-44f5-b116-a54ae0e79047 Co-authored-by: kiyarose <75678535+kiyarose@users.noreply.github.com> --- .github/workflows/prerelease.yml | 58 +++++++++++++++++++++++++++++--- 1 file changed, 54 insertions(+), 4 deletions(-) diff --git a/.github/workflows/prerelease.yml b/.github/workflows/prerelease.yml index 3cb5be3..fd2dec2 100644 --- a/.github/workflows/prerelease.yml +++ b/.github/workflows/prerelease.yml @@ -33,29 +33,59 @@ jobs: run: | cd ios mkdir -p build - xcodebuild build \ + + xcodebuild archive \ -project Flean.xcodeproj \ -target Flean \ -configuration Release \ + -archivePath build/Flean.xcarchive \ -destination 'generic/platform=iOS' \ - -destination 'generic/platform=iOS Simulator' \ + -skipPackagePluginValidation \ CODE_SIGN_IDENTITY="" \ - CODE_SIGNING_ALLOWED=NO + CODE_SIGNING_REQUIRED=NO \ + CODE_SIGN_ENTITLEMENTS="" + + # Zip the .app from inside the xcarchive for distribution + APP_PATH=$(find build/Flean.xcarchive/Products -name "Flean.app" -type d | head -1) + if [ -z "$APP_PATH" ]; then + echo "❌ Flean.app not found in xcarchive" + exit 1 + fi + APP_DIR="$(dirname "$APP_PATH")" + OUT_ZIP="$(pwd)/build/Flean-iOS.app.zip" + ( cd "$APP_DIR" && zip -r "$OUT_ZIP" "Flean.app" ) + echo "✅ iOS build succeeded" - name: Build macOS run: | cd mos mkdir -p build + xcodebuild build \ -project Flean.xcodeproj \ -target Flean \ -configuration Release \ + -skipPackagePluginValidation \ SYMROOT=build \ CODE_SIGN_IDENTITY="" \ - CODE_SIGNING_REQUIRED=NO + CODE_SIGNING_REQUIRED=NO \ + CODE_SIGN_ENTITLEMENTS="" + + # Find and zip the .app + APP_PATH=$(find build -name "Flean.app" -type d | head -1) + if [ -z "$APP_PATH" ]; then + echo "❌ Flean.app not found" + exit 1 + fi + OUT_ZIP="$(pwd)/build/Flean.app.zip" + APP_DIR="$(dirname "$APP_PATH")" + APP_NAME="$(basename "$APP_PATH")" + ( cd "$APP_DIR" && zip -r "$OUT_ZIP" "$APP_NAME" ) + echo "✅ macOS build succeeded" - name: Create Prerelease uses: actions/create-release@v1 + id: create_prerelease env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: @@ -70,3 +100,23 @@ jobs: This is a prerelease. Testing and feedback welcome! draft: false prerelease: true + + - name: Upload iOS App + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.create_prerelease.outputs.upload_url }} + asset_path: ./ios/build/Flean-iOS.app.zip + asset_name: Flean-iOS.app.zip + asset_content_type: application/zip + + - name: Upload macOS App + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.create_prerelease.outputs.upload_url }} + asset_path: ./mos/build/Flean.app.zip + asset_name: Flean.app.zip + asset_content_type: application/zip From 399964b47c33ea0ee368b705ff76b7fd40260d54 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 28 Mar 2026 14:32:59 +0000 Subject: [PATCH 09/11] Sync build-and-release.yml with prerelease.yml and add duplicate-tag handling Agent-Logs-Url: https://github.com/SillyLittleTech/Flean/sessions/0d9831c6-41ea-44f5-b116-a54ae0e79047 Co-authored-by: kiyarose <75678535+kiyarose@users.noreply.github.com> --- .github/workflows/build-and-release.yml | 69 +++++++++---------------- 1 file changed, 24 insertions(+), 45 deletions(-) diff --git a/.github/workflows/build-and-release.yml b/.github/workflows/build-and-release.yml index 2e14087..d52e133 100644 --- a/.github/workflows/build-and-release.yml +++ b/.github/workflows/build-and-release.yml @@ -63,51 +63,31 @@ jobs: - uses: actions/checkout@v4 # iOS Build - - name: Build iOS IPA + - name: Build iOS App run: | cd ios mkdir -p build - # Build archive xcodebuild archive \ -project Flean.xcodeproj \ -target Flean \ - -archivePath build/Flean.xcarchive \ -configuration Release \ + -archivePath build/Flean.xcarchive \ -destination 'generic/platform=iOS' \ -skipPackagePluginValidation \ CODE_SIGN_IDENTITY="" \ CODE_SIGNING_REQUIRED=NO \ - CODE_SIGN_ENTITLEMENTS="" 2>&1 | tee build.log + CODE_SIGN_ENTITLEMENTS="" - # Check for build errors - if grep -i "error:" build.log; then - echo "❌ iOS build failed" + # Zip the .app from inside the xcarchive for distribution + APP_PATH=$(find build/Flean.xcarchive/Products -name "Flean.app" -type d | head -1) + if [ -z "$APP_PATH" ]; then + echo "❌ Flean.app not found in xcarchive" exit 1 fi - - # Export IPA from archive - cat > build/ExportOptions.plist << 'EOF' - - - - - method - development - signingStyle - automatic - - - EOF - - xcodebuild -exportArchive \ - -archivePath build/Flean.xcarchive \ - -exportPath build/export \ - -exportOptionsPlist build/ExportOptions.plist \ - CODE_SIGN_IDENTITY="" \ - CODE_SIGNING_REQUIRED=NO \ - CODE_SIGN_ENTITLEMENTS="" 2>&1 | tee export.log - + APP_DIR="$(dirname "$APP_PATH")" + OUT_ZIP="$(pwd)/build/Flean-iOS.app.zip" + ( cd "$APP_DIR" && zip -r "$OUT_ZIP" "Flean.app" ) echo "✅ iOS build succeeded" # macOS Build @@ -116,7 +96,6 @@ jobs: cd mos mkdir -p build - # Build directly to app xcodebuild build \ -project Flean.xcodeproj \ -target Flean \ @@ -125,13 +104,7 @@ jobs: SYMROOT=build \ CODE_SIGN_IDENTITY="" \ CODE_SIGNING_REQUIRED=NO \ - CODE_SIGN_ENTITLEMENTS="" 2>&1 | tee build.log - - # Check for build errors - if grep -i "error:" build.log; then - echo "❌ macOS build failed" - exit 1 - fi + CODE_SIGN_ENTITLEMENTS="" # Find and zip the .app into a fixed location matching the upload step APP_PATH=$(find build -name "Flean.app" -type d | head -1) @@ -152,8 +125,14 @@ jobs: run: | git config user.name "github-actions" git config user.email "github-actions@github.com" - git tag ${{ needs.check-version.outputs.version }} - git push origin ${{ needs.check-version.outputs.version }} + VERSION="${{ needs.check-version.outputs.version }}" + # Create local tag (no-op if already exists locally from a shallow clone) + git tag "$VERSION" 2>/dev/null || echo "Local tag $VERSION already exists, proceeding with push" + # Push to remote; fail clearly if the tag was created by a concurrent run + if ! git push origin "$VERSION"; then + echo "::error::Tag $VERSION already exists on remote. A release for this version may already exist." + exit 1 + fi # Create Release - name: Create Release @@ -167,16 +146,16 @@ jobs: draft: ${{ github.event.inputs.draft == 'true' }} prerelease: false - # Upload iOS IPA - - name: Upload iOS IPA + # Upload iOS App + - name: Upload iOS App uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.create_release.outputs.upload_url }} - asset_path: ./ios/build/export/Flean.ipa - asset_name: Flean.ipa - asset_content_type: application/octet-stream + asset_path: ./ios/build/Flean-iOS.app.zip + asset_name: Flean-iOS.app.zip + asset_content_type: application/zip # Upload macOS App - name: Upload macOS App From 65d9c8d4115879a5455d100b9215693f816d048c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 28 Mar 2026 14:37:38 +0000 Subject: [PATCH 10/11] Fix xcodebuild archive -target incompatibility in iOS build steps Agent-Logs-Url: https://github.com/SillyLittleTech/Flean/sessions/731f651e-2d58-461d-8575-496b03ece0d7 Co-authored-by: kiyarose <75678535+kiyarose@users.noreply.github.com> --- .github/workflows/build-and-release.yml | 15 ++++++++------- .github/workflows/prerelease.yml | 15 ++++++++------- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/.github/workflows/build-and-release.yml b/.github/workflows/build-and-release.yml index d52e133..9f33330 100644 --- a/.github/workflows/build-and-release.yml +++ b/.github/workflows/build-and-release.yml @@ -68,26 +68,27 @@ jobs: cd ios mkdir -p build - xcodebuild archive \ + xcodebuild build \ -project Flean.xcodeproj \ -target Flean \ -configuration Release \ - -archivePath build/Flean.xcarchive \ -destination 'generic/platform=iOS' \ -skipPackagePluginValidation \ + SYMROOT=build \ CODE_SIGN_IDENTITY="" \ CODE_SIGNING_REQUIRED=NO \ CODE_SIGN_ENTITLEMENTS="" - # Zip the .app from inside the xcarchive for distribution - APP_PATH=$(find build/Flean.xcarchive/Products -name "Flean.app" -type d | head -1) + # Find and zip the .app + APP_PATH=$(find build -name "Flean.app" -type d | head -1) if [ -z "$APP_PATH" ]; then - echo "❌ Flean.app not found in xcarchive" + echo "❌ Flean.app not found" exit 1 fi - APP_DIR="$(dirname "$APP_PATH")" OUT_ZIP="$(pwd)/build/Flean-iOS.app.zip" - ( cd "$APP_DIR" && zip -r "$OUT_ZIP" "Flean.app" ) + APP_DIR="$(dirname "$APP_PATH")" + APP_NAME="$(basename "$APP_PATH")" + ( cd "$APP_DIR" && zip -r "$OUT_ZIP" "$APP_NAME" ) echo "✅ iOS build succeeded" # macOS Build diff --git a/.github/workflows/prerelease.yml b/.github/workflows/prerelease.yml index fd2dec2..ad050aa 100644 --- a/.github/workflows/prerelease.yml +++ b/.github/workflows/prerelease.yml @@ -34,26 +34,27 @@ jobs: cd ios mkdir -p build - xcodebuild archive \ + xcodebuild build \ -project Flean.xcodeproj \ -target Flean \ -configuration Release \ - -archivePath build/Flean.xcarchive \ -destination 'generic/platform=iOS' \ -skipPackagePluginValidation \ + SYMROOT=build \ CODE_SIGN_IDENTITY="" \ CODE_SIGNING_REQUIRED=NO \ CODE_SIGN_ENTITLEMENTS="" - # Zip the .app from inside the xcarchive for distribution - APP_PATH=$(find build/Flean.xcarchive/Products -name "Flean.app" -type d | head -1) + # Find and zip the .app + APP_PATH=$(find build -name "Flean.app" -type d | head -1) if [ -z "$APP_PATH" ]; then - echo "❌ Flean.app not found in xcarchive" + echo "❌ Flean.app not found" exit 1 fi - APP_DIR="$(dirname "$APP_PATH")" OUT_ZIP="$(pwd)/build/Flean-iOS.app.zip" - ( cd "$APP_DIR" && zip -r "$OUT_ZIP" "Flean.app" ) + APP_DIR="$(dirname "$APP_PATH")" + APP_NAME="$(basename "$APP_PATH")" + ( cd "$APP_DIR" && zip -r "$OUT_ZIP" "$APP_NAME" ) echo "✅ iOS build succeeded" - name: Build macOS From b5f63e044e1a932da71ef4bcd2d11abd35515984 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 28 Mar 2026 14:44:19 +0000 Subject: [PATCH 11/11] Package iOS CI build as Flean.ipa instead of Flean-iOS.app.zip Agent-Logs-Url: https://github.com/SillyLittleTech/Flean/sessions/abaddb4f-78c1-4c80-bc9f-a97d9589c5bf Co-authored-by: kiyarose <75678535+kiyarose@users.noreply.github.com> --- .github/workflows/build-and-release.yml | 15 +++++++-------- .github/workflows/prerelease.yml | 15 +++++++-------- 2 files changed, 14 insertions(+), 16 deletions(-) diff --git a/.github/workflows/build-and-release.yml b/.github/workflows/build-and-release.yml index 9f33330..557c62a 100644 --- a/.github/workflows/build-and-release.yml +++ b/.github/workflows/build-and-release.yml @@ -79,16 +79,15 @@ jobs: CODE_SIGNING_REQUIRED=NO \ CODE_SIGN_ENTITLEMENTS="" - # Find and zip the .app + # Package the .app as a proper IPA (Payload/Flean.app zipped) APP_PATH=$(find build -name "Flean.app" -type d | head -1) if [ -z "$APP_PATH" ]; then echo "❌ Flean.app not found" exit 1 fi - OUT_ZIP="$(pwd)/build/Flean-iOS.app.zip" - APP_DIR="$(dirname "$APP_PATH")" - APP_NAME="$(basename "$APP_PATH")" - ( cd "$APP_DIR" && zip -r "$OUT_ZIP" "$APP_NAME" ) + mkdir -p build/ipa/Payload + cp -r "$APP_PATH" build/ipa/Payload/ + ( cd build/ipa && zip -r ../Flean.ipa Payload ) echo "✅ iOS build succeeded" # macOS Build @@ -154,9 +153,9 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.create_release.outputs.upload_url }} - asset_path: ./ios/build/Flean-iOS.app.zip - asset_name: Flean-iOS.app.zip - asset_content_type: application/zip + asset_path: ./ios/build/Flean.ipa + asset_name: Flean.ipa + asset_content_type: application/octet-stream # Upload macOS App - name: Upload macOS App diff --git a/.github/workflows/prerelease.yml b/.github/workflows/prerelease.yml index ad050aa..71e3f1e 100644 --- a/.github/workflows/prerelease.yml +++ b/.github/workflows/prerelease.yml @@ -45,16 +45,15 @@ jobs: CODE_SIGNING_REQUIRED=NO \ CODE_SIGN_ENTITLEMENTS="" - # Find and zip the .app + # Package the .app as a proper IPA (Payload/Flean.app zipped) APP_PATH=$(find build -name "Flean.app" -type d | head -1) if [ -z "$APP_PATH" ]; then echo "❌ Flean.app not found" exit 1 fi - OUT_ZIP="$(pwd)/build/Flean-iOS.app.zip" - APP_DIR="$(dirname "$APP_PATH")" - APP_NAME="$(basename "$APP_PATH")" - ( cd "$APP_DIR" && zip -r "$OUT_ZIP" "$APP_NAME" ) + mkdir -p build/ipa/Payload + cp -r "$APP_PATH" build/ipa/Payload/ + ( cd build/ipa && zip -r ../Flean.ipa Payload ) echo "✅ iOS build succeeded" - name: Build macOS @@ -108,9 +107,9 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.create_prerelease.outputs.upload_url }} - asset_path: ./ios/build/Flean-iOS.app.zip - asset_name: Flean-iOS.app.zip - asset_content_type: application/zip + asset_path: ./ios/build/Flean.ipa + asset_name: Flean.ipa + asset_content_type: application/octet-stream - name: Upload macOS App uses: actions/upload-release-asset@v1