Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
6aea970
Purchase connector for flutter
pazlavi Jun 13, 2024
d92976e
runOnUi
pazlavi Jun 16, 2024
7b3f4e5
Nullable
pazlavi Jun 16, 2024
cc4dc4a
handle callbacks
pazlavi Jun 16, 2024
f201299
ui thread callback
pazlavi Jun 16, 2024
03db5e4
swift bridge file
pazlavi Jun 16, 2024
8729a3d
register callback
pazlavi Jun 16, 2024
7d78d0c
docs
pazlavi Jun 17, 2024
6529458
fixed the issue with MediationNetwork enums on Android
Dani-Koza-AF Oct 27, 2024
b85b1a4
Merge pull request #353 from AppsFlyerSDK/dev/DELIVERY-71973/mediatio…
Dani-Koza-AF Oct 28, 2024
a58a49b
Merge remote-tracking branch 'origin/development' into development
Dani-Koza-AF Oct 28, 2024
25fb530
This should fix the NullPointerException
Dani-Koza-AF Oct 30, 2024
4f4ee27
Merge pull request #357 from AppsFlyerSDK/DELIVERY-63011/fix-android-…
Dani-Koza-AF Oct 30, 2024
fa71c23
Merge remote-tracking branch 'origin/development' into development
Dani-Koza-AF Oct 31, 2024
5dab6aa
Delivery 76214/update purchase connector version (#363)
Dani-Koza-AF Dec 2, 2024
2922511
adding a note on the supported StoreKit to docs
Dani-Koza-AF Jan 13, 2025
cc74ddb
typo fix
Dani-Koza-AF Jan 13, 2025
b27f469
Squashed commit of the following:
Dani-Koza-AF Jan 16, 2025
b5ff928
Merge branch 'development' into feature/add_purchase_connector
Dani-Koza-AF Feb 19, 2025
96560ec
Merge branch 'feature/add_purchase_connector' into development
Dani-Koza-AF Feb 19, 2025
e01cc25
closing potential memory leaks
Dani-Koza-AF Feb 19, 2025
93a6b03
removed duplicated declarations =
Dani-Koza-AF Feb 19, 2025
fa40e5b
updated example project dependencies
Dani-Koza-AF Feb 20, 2025
ac1d0ae
Push notification data collection documentation updates (#381)
Dani-Koza-AF Mar 27, 2025
0f124f9
reverting addition of PC
Dani-Koza-AF Apr 9, 2025
f14a8b9
post revert fixes
Dani-Koza-AF Apr 10, 2025
ec30faa
lint
Dani-Koza-AF Apr 10, 2025
ca4743d
Fixes of tests and typos
Dani-Koza-AF Apr 10, 2025
e086a26
Dev/update manual consent api (#383)
Dani-Koza-AF Apr 28, 2025
c97b5af
Merge branch 'master' into development
Dani-Koza-AF Jun 26, 2025
49c64e1
fixed Locale issue by forcing toUpperCase(Locale.ENGLISH) (#395)
Dani-Koza-AF Jun 26, 2025
83789ce
Doc fix (#400)
Dani-Koza-AF Jul 14, 2025
5f04fa3
Add purchase connector to development branch (#402)
Dani-Koza-AF Jul 27, 2025
85c3360
Immediate actions to prevent NullPointerExceptions (#403)
Dani-Koza-AF Jul 30, 2025
cbf7c67
Latest release updates - Docs + new API for Android (#406)
Dani-Koza-AF Aug 3, 2025
5a5a390
Merge branch 'master' into development
Dani-Koza-AF Aug 20, 2025
12f7a35
Updated to AppsFlyer SDK v6.17.3 for both Android and iOS (#410)
Dani-Koza-AF Aug 24, 2025
3313a9a
Merge branch 'master' into development
Dani-Koza-AF Sep 29, 2025
8b923b1
Added an important note to deep-links docs (#416)
Dani-Koza-AF Sep 29, 2025
bdf22a6
versions bumped + docs updated (#417)
Dani-Koza-AF Sep 30, 2025
c3b40c8
Setting up the full CI/CD (#419)
Dani-Koza-AF Oct 9, 2025
43d01e9
test: verify CI workflow (#420)
Dani-Koza-AF Oct 15, 2025
67a015f
CI fix - Jira ntegration
Dani-Koza-AF Oct 15, 2025
b362556
CI fix
Dani-Koza-AF Oct 15, 2025
0b3d079
yet another fix to CI
Dani-Koza-AF Oct 15, 2025
b720c78
Hope it's the last CI fix
Dani-Koza-AF Oct 15, 2025
0e4fa80
fix: update Jira API to use /search/jql endpoint (fixes HTTP 410)
Dani-Koza-AF Oct 15, 2025
f968d64
readme update and dart analyze fix
Dani-Koza-AF Oct 21, 2025
9455db3
verions bumps + modernized to flutter lint
Dani-Koza-AF Oct 21, 2025
9a41db1
Documentation Updates - regarding push notifications
Dani-Koza-AF Oct 21, 2025
9f09927
Added GoogleAdsOnDeviceConversion dependency for testing ODM
Dani-Koza-AF Oct 22, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
294 changes: 294 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,294 @@
# =============================================================================
# CI Workflow - Continuous Integration for Pull Requests and Pushes
# =============================================================================
#
# Purpose: Validates code quality, runs tests, and builds example apps for
# both Android and iOS platforms on every PR and push to development/master.
#
# What it does:
# 1. Runs Dart/Flutter unit tests
# 2. Builds Android example app (APK)
# 3. Builds iOS example app (simulator + no-codesign IPA)
# 4. Caches dependencies for faster subsequent runs
#
# Triggers:
# - Pull requests to development or master branches
# - Direct pushes to development or master branches
# - Manual workflow dispatch for testing
#
# =============================================================================

name: CI - Build & Test

on:
# Trigger on pull requests targeting main branches
pull_request:
branches:
- development
- master
paths-ignore:
- '**.md'
- 'doc/**'
- 'assets/**'
- '.github/workflows/close_inactive_issues.yml'
- '.github/workflows/responseToSupportIssue*.yml'

# Trigger on direct pushes to main branches
push:
branches:
- development
- master
paths-ignore:
- '**.md'
- 'doc/**'
- 'assets/**'

# Allow manual triggering for testing
workflow_dispatch:

# Allow this workflow to be called by other workflows (reusable workflow)
workflow_call:

# Ensure only one CI run per PR/branch at a time
concurrency:
group: ci-${{ github.ref }}
cancel-in-progress: true

jobs:
# ===========================================================================
# Job 1: Run Unit Tests
# ===========================================================================
# Runs all Dart/Flutter unit tests for the plugin
# Uses: Ubuntu runner (fastest and free for public repos)
# ===========================================================================

test:
name: 🧪 Run Unit Tests
runs-on: ubuntu-latest

steps:
# Step 1: Checkout the repository code
- name: 📥 Checkout repository
uses: actions/checkout@v4

# Step 2: Set up Flutter SDK
# Uses subosito/flutter-action which caches Flutter SDK automatically
- name: 🔧 Setup Flutter SDK
uses: subosito/flutter-action@v2
with:
channel: 'stable' # Use latest stable Flutter
cache: true # Cache Flutter SDK for faster runs

# Step 3: Verify Flutter installation
- name: ℹ️ Display Flutter version
run: |
flutter --version
dart --version

# Step 4: Get plugin dependencies
# This installs all packages defined in pubspec.yaml
- name: 📦 Install plugin dependencies
run: flutter pub get

# Step 5: Analyze code for issues
# Checks for code quality issues, unused imports, etc.
# Only fails on actual errors, not info-level warnings
- name: 🔍 Analyze code
run: flutter analyze --no-fatal-infos --no-fatal-warnings

# Step 6: Format check
# Ensures code follows Dart formatting standards
- name: 💅 Check code formatting
run: dart format --set-exit-if-changed .

# Step 7: Run unit tests
# Executes all tests in the test/ directory
- name: 🧪 Run unit tests
run: flutter test --coverage

# Step 8: Upload coverage report (optional)
# Useful for tracking code coverage over time
- name: 📊 Upload coverage to Codecov (optional)
if: success()
uses: codecov/codecov-action@v4
with:
files: ./coverage/lcov.info
fail_ci_if_error: false # Don't fail CI if coverage upload fails

# ===========================================================================
# Job 2: Build Android Example App
# ===========================================================================
# Builds the example app for Android to ensure plugin integration works
# Uses: Ubuntu runner with Java 17
# ===========================================================================

build-android:
name: 🤖 Build Android Example
runs-on: ubuntu-latest
needs: test # Only run if tests pass

steps:
# Step 1: Checkout code
- name: 📥 Checkout repository
uses: actions/checkout@v4

# Step 2: Set up Java (required for Android builds)
# Android builds require JDK 17 for modern Gradle versions
- name: ☕ Setup Java
uses: actions/setup-java@v4
with:
distribution: 'temurin' # Eclipse Temurin (formerly AdoptOpenJDK)
java-version: '17'
cache: 'gradle' # Cache Gradle dependencies

# Step 3: Set up Flutter SDK
- name: 🔧 Setup Flutter SDK
uses: subosito/flutter-action@v2
with:
channel: 'stable'
cache: true

# Step 4: Display versions for debugging
- name: ℹ️ Display versions
run: |
flutter --version
java -version
echo "JAVA_HOME: $JAVA_HOME"

# Step 5: Get plugin dependencies
- name: 📦 Install plugin dependencies
run: flutter pub get

# Step 6: Get example app dependencies
- name: 📦 Install example app dependencies
working-directory: example
run: flutter pub get

# Step 7: Build Android APK (debug mode)
# This validates that the plugin integrates correctly with Android
- name: 🔨 Build Android APK (debug)
working-directory: example
run: flutter build apk --debug

# Step 8: Build Android App Bundle (release mode, no signing)
# App Bundle is the preferred format for Play Store
- name: 🔨 Build Android App Bundle (release)
working-directory: example
run: flutter build appbundle --release

# Step 9: Upload build artifacts (optional)
# Useful for manual testing or archiving
- name: 📤 Upload APK artifact
if: success()
uses: actions/upload-artifact@v4
with:
name: android-apk-debug
path: example/build/app/outputs/flutter-apk/app-debug.apk
retention-days: 7 # Keep for 7 days

# ===========================================================================
# Job 3: Build iOS Example App
# ===========================================================================
# Builds the example app for iOS to ensure plugin integration works
# Uses: macOS runner (required for Xcode and iOS builds)
# Note: macOS runners consume 10x minutes on private repos
# ===========================================================================

build-ios:
name: 🍎 Build iOS Example
runs-on: macos-14 # macOS 14 (Sonoma) with Xcode 15+
needs: test # Only run if tests pass

steps:
# Step 1: Checkout code
- name: 📥 Checkout repository
uses: actions/checkout@v4

# Step 2: Set up Flutter SDK
- name: 🔧 Setup Flutter SDK
uses: subosito/flutter-action@v2
with:
channel: 'stable'
cache: true

# Step 3: Display versions
- name: ℹ️ Display versions
run: |
flutter --version
xcodebuild -version
pod --version

# Step 4: Get plugin dependencies
- name: 📦 Install plugin dependencies
run: flutter pub get

# Step 5: Get example app dependencies
- name: 📦 Install example app dependencies
working-directory: example
run: flutter pub get

# Step 6: Update CocoaPods repo (ensures latest pod specs)
# This can be slow, so we only update if needed
- name: 🔄 Update CocoaPods repo
working-directory: example/ios
run: pod repo update

# Step 7: Install CocoaPods dependencies
# This installs native iOS dependencies including AppsFlyer SDK
- name: 📦 Install CocoaPods dependencies
working-directory: example/ios
run: pod install

# Step 8: Build for iOS Simulator (fastest iOS build)
# Validates that the plugin compiles for iOS
- name: 🔨 Build iOS for Simulator
working-directory: example
run: flutter build ios --simulator --debug

# Step 9: Build iOS IPA without code signing (release mode)
# This validates a full release build without requiring certificates
- name: 🔨 Build iOS IPA (no codesign)
working-directory: example
run: flutter build ipa --release --no-codesign

# Step 10: Upload build artifacts (optional)
- name: 📤 Upload iOS build artifact
if: success()
uses: actions/upload-artifact@v4
with:
name: ios-app-unsigned
path: example/build/ios/archive/Runner.xcarchive
retention-days: 7

# ===========================================================================
# Job 4: Summary Report
# ===========================================================================
# Provides a summary of all CI jobs
# ===========================================================================

ci-summary:
name: 📋 CI Summary
runs-on: ubuntu-latest
needs: [test, build-android, build-ios]
if: always() # Run even if previous jobs fail

steps:
- name: 📊 Check CI Results
run: |
echo "==================================="
echo "CI Pipeline Summary"
echo "==================================="
echo "Test Job: ${{ needs.test.result }}"
echo "Android Build: ${{ needs.build-android.result }}"
echo "iOS Build: ${{ needs.build-ios.result }}"
echo "==================================="

# Fail this job if any required job failed
if [[ "${{ needs.test.result }}" != "success" ]] || \
[[ "${{ needs.build-android.result }}" != "success" ]] || \
[[ "${{ needs.build-ios.result }}" != "success" ]]; then
echo "❌ CI Pipeline Failed"
exit 1
fi

echo "✅ CI Pipeline Passed Successfully"
Loading
Loading