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