Skip to content

Update gptdriverscript.yml #6

Update gptdriverscript.yml

Update gptdriverscript.yml #6

name: iOS Release Build and GPTDriver Tests
on:
push:
branches:
- 'Release-*' # Trigger for branches starting with "Release-"
jobs:
BuildAndTestAppOnGPTDriver: # Updated job name
runs-on: macos-latest # macOS runner is required for iOS builds
steps:
# --- Step 1: Extract version from branch name ---
- name: Extract version from branch name
id: extract_version_step
run: |
BRANCH_NAME="${{ github.ref }}"
# Remove 'refs/heads/' prefix (e.g., refs/heads/Release-0.0.0 -> Release-0.0.0)
BRANCH_NAME_WITHOUT_PREFIX="${BRANCH_NAME#refs/heads/}"
# Extract version after "Release-" (e.g., Release-0.0.0 -> 0.0.0)
VERSION=$(echo "$BRANCH_NAME_WITHOUT_PREFIX" | sed -n 's/^Release-\([0-9]*\.[0-9]*\.[0-9]*\)$/\1/p')
if [ -z "$VERSION" ]; then
echo "Error: Could not extract version from branch name '$BRANCH_NAME_WITHOUT_PREFIX'. Expected format: Release-X.Y.Z"
exit 1
fi
echo "Extracted versionName: $VERSION"
echo "VERSION_STRING=$VERSION" >> $GITHUB_ENV
# Convert semantic version to an integer for CFBundleVersion (versionCode equivalent)
# Example: 1.2.3 -> 102003 (assuming max 2 digits for minor/patch)
# This should be adjusted based on the maximum expected values for major/minor/patch
MAJOR=$(echo "$VERSION" | cut -d. -f1)
MINOR=$(echo "$VERSION" | cut -d. -f2)
PATCH=$(echo "$VERSION" | cut -d. -f3)
# Calculate versionCode (CFBundleVersion) - ensure this fits in a 32-bit integer
# Standard Android-like conversion: Major * 10000 + Minor * 100 + Patch
# This provides sufficient uniqueness for most common versioning schemes.
VERSION_CODE_INT=$(( MAJOR * 10000 + MINOR * 100 + PATCH ))
echo "Calculated versionCode: $VERSION_CODE_INT"
echo "VERSION_CODE_INT=$VERSION_CODE_INT" >> $GITHUB_ENV
# --- Step 2: Checkout the iOS Branch SDK repository ---
- name: Checkout BranchMetrics/ios-branch-deep-linking-attribution (SDK)
uses: actions/checkout@v4
with:
repository: BranchMetrics/ios-branch-deep-linking-attribution
ref: ${{ github.ref }} # Use the same branch that triggered the workflow
path: ./branch-ios-sdk-repo # Checkout into a subdirectory
# --- Step 3: Build the iOS Branch SDK Framework ---
- name: Build Branch SDK Framework
run: |
xcodebuild build -project BranchSDK.xcodeproj \
-scheme BranchSDK \
-configuration Debug \
-sdk iphonesimulator \
BUILD_DIR="${{ github.workspace }}/branch-ios-sdk-repo/build" \
SKIP_INSTALL=NO
working-directory: ./branch-ios-sdk-repo # Run xcodebuild from the SDK's checkout directory
# --- Step 4: Checkout the iOS Branch Link Simulator App repository ---
- name: Checkout BranchMetrics/BranchLinkSimulator (App)
uses: actions/checkout@v4
with:
repository: BranchMetrics/BranchLinkSimulator
ref: gptdriver/linkingTests # Checkout the specific app branch
path: ./ios-app-repo # Checkout into another subdirectory
# --- Step 5: Copy the generated SDK Framework to the App's project ---
- name: Copy generated SDK Framework to App's project
run: |
# Create a 'Frameworks' directory within the app repo for the local SDK
mkdir -p ./ios-app-repo/Frameworks
# Copy the built framework
cp -R ./branch-ios-sdk-repo/build/Debug-iphonesimulator/BranchSDK.framework ./ios-app-repo/Frameworks/
working-directory: ${{ github.workspace }} # Run from the root of the GITHUB_WORKSPACE
# --- Step 6: Build the iOS Branch Link Simulator App using the local SDK Framework ---
- name: Build iOS App with local SDK
run: |
# The -project flag defines the project root from which SRCROOT is relative.
# The `BUILD_DIR` is where products are placed. We'll rely on xcodebuild's default DerivedData location,
# and then capture the specific path to the .app bundle using `xcodebuild -showBuildSettings`.
# This command ensures the build output variables are available.
set -o pipefail # Fail if any part of the pipe fails
XCODEBUILD_OUTPUT=$(xcodebuild build -project BranchLinkSimulator.xcodeproj \
-scheme BranchLinkSimulator \
-configuration Debug \
-sdk iphonesimulator \
-destination 'platform=iOS Simulator,name=iPhone 15' \
MARKETING_VERSION=${{ env.VERSION_STRING }} \
CURRENT_PROJECT_VERSION=${{ env.VERSION_CODE_INT }} \
FRAMEWORK_SEARCH_PATHS="$(SRCROOT)/Frameworks" \
ONLY_ACTIVE_ARCH=YES \
| xcpretty # xcpretty makes xcodebuild output readable, install it if not present
# Extract BUILT_PRODUCTS_DIR from xcodebuild output
# This command must be run AFTER the build, and often requires parsing
# a successful build log for the definitive path.
# A more robust way is to query build settings directly:
BUILT_PRODUCTS_DIR=$(xcodebuild -project BranchLinkSimulator.xcodeproj \
-scheme BranchLinkSimulator \
-configuration Debug \
-sdk iphonesimulator \
-showBuildSettings \
| grep -m 1 "BUILT_PRODUCTS_DIR =" \
| sed 's/.*BUILT_PRODUCTS_DIR = //')
if [ -z "$BUILT_PRODUCTS_DIR" ]; then
echo "Error: Could not determine BUILT_PRODUCTS_DIR."
exit 1
fi
echo "Detected BUILT_PRODUCTS_DIR: $BUILT_PRODUCTS_DIR"
echo "BUILT_PRODUCTS_DIR=$BUILT_PRODUCTS_DIR" >> $GITHUB_ENV # Set as environment variable
working-directory: ./ios-app-repo # Run xcodebuild from the App's checkout directory
# --- Step 7: Echo the location of the generated .app bundle ---
- name: Echo .app bundle location
run: |
# Use the dynamically determined BUILT_PRODUCTS_DIR
APP_PATH="${{ env.BUILT_PRODUCTS_DIR }}/BranchLinkSimulator.app"
echo "Generated .app bundle location: $APP_PATH"
# --- Step 8: Upload Build Artifacts ---
- name: Upload Build Artifacts
uses: actions/upload-artifact@v4
with:
name: BranchLinkSimulator-iOS-Debug-Build
# Use the dynamically determined BUILT_PRODUCTS_DIR
path: "${{ env.BUILT_PRODUCTS_DIR }}/BranchLinkSimulator.app"
# --- Step 9: Upload and run tests on GPTDriver service. ---
- name: Run GPTDriver tests
run: |
# Ensure the script is executable
chmod +x ./branch-ios-sdk-repo/.github/gptdriverrunscript.sh
# Use the dynamically determined BUILT_PRODUCTS_DIR
bash ./branch-ios-sdk-repo/.github/gptdriverrunscript.sh "${{ env.BUILT_PRODUCTS_DIR }}/BranchLinkSimulator.app" ios
env:
API_ORG_KEY: ${{ secrets.MOBILEBOOST_API_ORG_KEY }}
API_KEY: ${{ secrets.MOBILEBOOST_API_ORG_KEY }}
TEST_TAGS: Release