Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
c64b19a
feat: update dependencies
sda-rob Apr 7, 2026
f1be2e2
feat: load advanced beauty templates from zip config
ZGaopeng Apr 8, 2026
e75ce71
fix: add hash suffix to destroyMusicPlayer and setPlayMode (#2418)
ZGaopeng Dec 24, 2025
8091ac6
feat: upgrade SDK bindings, add render performance monitoring, and mo…
ZGaopeng Mar 17, 2026
dc5921a
refactor(web): migrate JS interop to dart:js_interop and remove js pa…
ZGaopeng Mar 17, 2026
dd91e28
chore: ignore warning
ZGaopeng Mar 17, 2026
dc53c80
chore: dart analyze
ZGaopeng Mar 17, 2026
1f54308
chore: compatible with web version
ZGaopeng Mar 17, 2026
51c2d71
chore: add web version limit
ZGaopeng Mar 17, 2026
8d8b112
Fix: resolve video black flicker on macOS (#2557)
joodo Mar 18, 2026
7364a92
chore: temporary modification
ZGaopeng Mar 24, 2026
5eefd1b
chore: align Dart 3 ffi support and expand compatibility CI
ZGaopeng Apr 9, 2026
f64f8c6
chore: compatibility detection
ZGaopeng Apr 9, 2026
03b461b
fix(web): use dart:ui_web for platform view registry
ZGaopeng Apr 10, 2026
d4c5c12
chore: raise minimum Flutter support to 3.16 and refresh generated tests
ZGaopeng Apr 10, 2026
2e03ba3
fix: sync publishing connections and pass RtcConnection to texture re…
ZGaopeng Apr 10, 2026
c4e3894
chore: Increase Java heap space
ZGaopeng Apr 13, 2026
c4d86eb
chore: change uid
ZGaopeng Mar 12, 2026
b05ba22
chore: increase rendering test gradle heap
ZGaopeng Apr 13, 2026
5b91fcc
fix: add missing AgoraUtils header bridge for macOS
ZGaopeng Apr 15, 2026
f2570a3
ci: move release consumer smoke builds to post-release workflow
ZGaopeng Apr 15, 2026
ef07628
chore: Using the iris_comatod_channel project version
ZGaopeng Apr 16, 2026
246c8df
ci: add scheduled weekly run_test workflow for latest stable Flutter
ZGaopeng Apr 16, 2026
862f844
ci: run mobile integration tests file-by-file
ZGaopeng Apr 13, 2026
d23bf20
ci: resolve weekly stable Flutter version and raise Android Gradle heap
ZGaopeng Apr 13, 2026
48233c6
fix: add missing AgoraUtils header bridge for macOS (#2590)
ZGaopeng Apr 14, 2026
016ee96
refactor(web): migrate JS bindings to dart:js_interop and drop js pac…
ZGaopeng Apr 16, 2026
59c0c11
fix(web): derive CallApiResult from callIrisApi; ci: defer pub dry-ru…
ZGaopeng Apr 16, 2026
bbb6f5d
chore(web): refactor JS bindings for improved type handling
ZGaopeng Apr 16, 2026
484102e
feat(web): add web_call_api_result_parser for improved API result han…
ZGaopeng Apr 16, 2026
8949369
refactor(web): streamline PWA integration and enhance JS interop hand…
ZGaopeng Apr 16, 2026
08447e1
refactor(web): simplify JS interop and enhance buffer handling in API…
ZGaopeng Apr 16, 2026
7b90315
feat(web): integrate PWA service worker and update JS interop for imp…
ZGaopeng Apr 16, 2026
7d89f21
fix(workflows): increase threshold for Pub Score failure from 10 to 20
ZGaopeng Apr 16, 2026
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
6 changes: 3 additions & 3 deletions .github/workflows/on_pr_closed.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ jobs:
release_version: ${{steps.release.outputs.version}}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
with:
ref: main
fetch-depth: 0
Expand Down Expand Up @@ -67,7 +67,7 @@ jobs:
runs-on: ubuntu-latest
needs: release_if_merged
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- uses: subosito/flutter-action@v2
with:
channel: 'stable'
Expand Down Expand Up @@ -100,7 +100,7 @@ jobs:
contains(github.event.pull_request.labels.*.name, 'ci:ready_release_special') }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.base.ref }}
fetch-depth: 0
Expand Down
60 changes: 55 additions & 5 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,11 @@ on:
required: false
type: boolean
default: true
force-publish-to-pub:
description: 'Force publish to pub.dev regardless of version format'
required: false
type: boolean
default: false

# Callable workflow - can be called by other workflows
workflow_call:
Expand All @@ -26,6 +31,11 @@ on:
required: false
type: boolean
default: true
force-publish-to-pub:
description: 'Force publish to pub.dev regardless of version format'
required: false
type: boolean
default: false
outputs:
increment:
description: 'The version that was released'
Expand Down Expand Up @@ -82,13 +92,17 @@ jobs:
# Get dry-run mode
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
DRY_RUN="${{ github.event.inputs.dry-run }}"
FORCE_PUBLISH="${{ github.event.inputs.force-publish-to-pub }}"
elif [ "${{ github.event_name }}" = "workflow_call" ]; then
DRY_RUN="${{ inputs.dry-run }}"
FORCE_PUBLISH="${{ inputs.force-publish-to-pub }}"
else
DRY_RUN="false" # PR triggers are always production mode
FORCE_PUBLISH="false"
fi

echo "Dry-run mode: $DRY_RUN"
echo "Force publish mode: $FORCE_PUBLISH"
echo "dry-run=$DRY_RUN" >> $GITHUB_OUTPUT

# Get version from inputs (for workflow_dispatch and workflow_call) or pubspec.yaml (for PR)
Expand All @@ -115,7 +129,17 @@ jobs:
# Auto-detect release type based on version format for manual/callable triggers
# Only clean semantic versions (MAJOR.MINOR.PATCH) are considered standard
# Any version with suffix (pre-release, build metadata, etc.) is special
if [[ $RELEASE_VERSION =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
if [ "$FORCE_PUBLISH" = "true" ]; then
# Forced to publish: treat as standard
RELEASE_TYPE="standard"
# Still detect if it's a prerelease format for other informational purposes
if [[ $RELEASE_VERSION =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
IS_PRERELEASE="false"
else
IS_PRERELEASE="true"
fi
echo "✅ Forced standard release: $RELEASE_VERSION"
elif [[ $RELEASE_VERSION =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
# Clean semantic version: 6.5.0 (no suffix)
RELEASE_TYPE="standard"
IS_PRERELEASE="false"
Expand Down Expand Up @@ -318,12 +342,36 @@ jobs:
tag: ${{ steps.doc_version.outputs.version }}
overwrite: true

upload_release_metadata:
name: 'Upload Release Metadata'
runs-on: ubuntu-latest
needs: release
if: ${{ needs.release.result == 'success' }}
steps:
- name: Write release metadata
run: |
cat > release-metadata.env <<EOF
RELEASE_VERSION=${{ needs.release.outputs.increment }}
RELEASE_TYPE=${{ needs.release.outputs.release_type }}
IS_PRERELEASE=${{ needs.release.outputs.is_prerelease }}
DRY_RUN=${{ needs.release.outputs.dry-run }}
GIT_URL=${{ github.server_url }}/${{ github.repository }}.git
REPOSITORY=${{ github.repository }}
EOF

- name: Upload release metadata
uses: actions/upload-artifact@v4
with:
name: release-metadata
path: release-metadata.env
retention-days: 7

# Post-release verification
verify_release:
name: 'Verify Release'
runs-on: ubuntu-latest
needs: [release, attach_documentation]
if: always() && (needs.release.result == 'success' || needs.attach_documentation.result == 'success')
needs: [release, attach_documentation, upload_release_metadata]
if: always() && (needs.release.result == 'success' || needs.attach_documentation.result == 'success' || needs.upload_release_metadata.result == 'success')
steps:
- name: Checkout repository 🛎️
uses: actions/checkout@v4
Expand Down Expand Up @@ -356,18 +404,20 @@ jobs:
echo " • GitHub Release: ✅ Created"
echo " • Pub.dev: ✅ Published"
echo " • Documentation: ✅ Generated and attached"
echo " • Consumer Smoke: handled by release_consumer_smoke workflow"
else
echo " • Status: Special version (internal use only)"
echo " • GitHub Release: ❌ Not created (internal version)"
echo " • Pub.dev: ❌ Not published (internal version)"
echo " • Documentation: ❌ Not generated (internal version)"
echo " • Consumer Smoke: handled by release_consumer_smoke workflow"
fi

echo ""
echo "🎉 Release workflow completed successfully!"

- name: Notify on failure
if: needs.release.result == 'failure'
if: ${{ needs.release.result == 'failure' }}
run: |
echo "❌ Release failed!"
echo "Please check the logs and try again."
Expand All @@ -387,4 +437,4 @@ jobs:
echo "[publish info] git:"
echo "[publish info] url: https://github.com/AgoraIO-Extensions/Agora-Flutter-SDK.git"
echo "[publish info] ref: $RELEASE_VERSION"
fi
fi
144 changes: 144 additions & 0 deletions .github/workflows/release_consumer_smoke.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,144 @@
name: 'Release Consumer Smoke'

on:
workflow_run:
workflows: ['Release to pub.dev and GitHub']
types:
- completed

jobs:
prepare:
name: 'Prepare Release Consumer Smoke'
runs-on: ubuntu-latest
outputs:
should_run: ${{ steps.metadata.outputs.should_run }}
release_version: ${{ steps.metadata.outputs.release_version }}
release_type: ${{ steps.metadata.outputs.release_type }}
git_url: ${{ steps.metadata.outputs.git_url }}
run_pub: ${{ steps.metadata.outputs.run_pub }}
steps:
- name: Download release metadata
id: metadata
env:
GH_TOKEN: ${{ github.token }}
REPOSITORY: ${{ github.repository }}
run: |
set -euo pipefail

RUN_ID="${{ github.event.workflow_run.id }}"
mkdir -p metadata

gh run download "$RUN_ID" \
--repo "${REPOSITORY}" \
-n release-metadata \
-D metadata

source metadata/release-metadata.env

if [[ "${DRY_RUN}" == "true" ]]; then
echo "Release workflow was dry-run, skipping consumer smoke."
echo "should_run=false" >> "$GITHUB_OUTPUT"
echo "run_pub=false" >> "$GITHUB_OUTPUT"
exit 0
fi

echo "should_run=true" >> "$GITHUB_OUTPUT"
echo "release_version=${RELEASE_VERSION}" >> "$GITHUB_OUTPUT"
echo "release_type=${RELEASE_TYPE}" >> "$GITHUB_OUTPUT"
echo "git_url=${GIT_URL}" >> "$GITHUB_OUTPUT"

if [[ "${RELEASE_TYPE}" == "standard" ]]; then
echo "run_pub=true" >> "$GITHUB_OUTPUT"
else
echo "run_pub=false" >> "$GITHUB_OUTPUT"
fi

consumer_smoke_git:
name: 'Consumer Smoke Test (git, ${{ matrix.platform }})'
runs-on: ${{ matrix.os }}
needs: prepare
if: ${{ needs.prepare.outputs.should_run == 'true' }}
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-latest
platform: android
- os: ubuntu-latest
platform: web
- os: macos-latest
platform: ios
- os: macos-latest
platform: macos
- os: windows-latest
platform: windows
steps:
- name: Checkout repository 🛎️
uses: actions/checkout@v4

- name: Setup JDK for Android
if: ${{ matrix.platform == 'android' }}
uses: actions/setup-java@v4
with:
distribution: 'zulu'
java-version: '17'

- name: Setup Flutter
uses: subosito/flutter-action@v2
with:
channel: 'stable'
cache: true

- name: Run consumer smoke test against git tag
shell: bash
env:
CONSUMER_PLATFORM: ${{ matrix.platform }}
PACKAGE_SOURCE: git
RELEASE_VERSION: ${{ needs.prepare.outputs.release_version }}
GIT_REF: ${{ needs.prepare.outputs.release_version }}
GIT_URL: ${{ needs.prepare.outputs.git_url }}
run: bash ci/run_flutter_release_consumer_smoke_test.sh

consumer_smoke_pub:
name: 'Consumer Smoke Test (pub, ${{ matrix.platform }})'
runs-on: ${{ matrix.os }}
needs: prepare
if: ${{ needs.prepare.outputs.should_run == 'true' && needs.prepare.outputs.run_pub == 'true' }}
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-latest
platform: android
- os: ubuntu-latest
platform: web
- os: macos-latest
platform: ios
- os: macos-latest
platform: macos
- os: windows-latest
platform: windows
steps:
- name: Checkout repository 🛎️
uses: actions/checkout@v4

- name: Setup JDK for Android
if: ${{ matrix.platform == 'android' }}
uses: actions/setup-java@v4
with:
distribution: 'zulu'
java-version: '17'

- name: Setup Flutter
uses: subosito/flutter-action@v2
with:
channel: 'stable'
cache: true

- name: Run consumer smoke test against pub.dev release
shell: bash
env:
CONSUMER_PLATFORM: ${{ matrix.platform }}
PACKAGE_SOURCE: pub
RELEASE_VERSION: ${{ needs.prepare.outputs.release_version }}
run: bash ci/run_flutter_release_consumer_smoke_test.sh
45 changes: 38 additions & 7 deletions .github/workflows/run_build_example.yml
Original file line number Diff line number Diff line change
Expand Up @@ -263,6 +263,22 @@ jobs:

# prepare build command, android: apk, ios: ipa, macos: macos, windows: (empty), web: web
build_command=""

if [ "$platform" == "web" ]; then
filtered_extra_build_arguments="${extra_build_arguments//--debug/}"
filtered_extra_build_arguments="${filtered_extra_build_arguments//--profile/}"
filtered_extra_build_arguments="${filtered_extra_build_arguments//--release/}"
filtered_extra_build_arguments=$(echo "$filtered_extra_build_arguments" | sed 's/ */ /g' | sed 's/^ *//;s/ *$//')
elif [ "$platform" == "ios" ]; then
if [[ "$extra_build_arguments" == *"--debug"* ]]; then
filtered_extra_build_arguments="${extra_build_arguments//--debug/--Profile}"
else
filtered_extra_build_arguments="$extra_build_arguments"
fi
else
filtered_extra_build_arguments="$extra_build_arguments"
fi

if [ "$platform" == "android" ]; then
build_command="flutter build apk"
elif [ "$platform" == "ios" ]; then
Expand Down Expand Up @@ -291,15 +307,20 @@ jobs:
build_arguments="--dart-define=TEST_APP_ID=$DEFAULT_BUILD_APP_ID --dart-define=TEST_TOKEN="" --dart-define=TEST_CHANNEL_ID="testapi" --dart-define=INTERNAL_TESTING=true"

# append extra build arguments
if [ -n "$extra_build_arguments" ]; then
build_arguments="$build_arguments $extra_build_arguments"
if [ -n "$filtered_extra_build_arguments" ]; then
build_arguments="$build_arguments $filtered_extra_build_arguments"
fi

# append build arguments for ios
if [ "$platform" == "ios" ]; then
build_arguments="--export-options-plist ios/export.plist $build_arguments"
fi

echo "========================================="
echo "🔨 Building for platform: $platform"
echo "🚀 Command: $build_command $build_options $build_arguments"
echo "========================================="

# run build command
$build_command $build_options $build_arguments

Expand All @@ -313,14 +334,17 @@ jobs:
# copy files in build/app/outputs/flutter-apk directory to ../output directory
cp build/app/outputs/flutter-apk/* ../output

# copy whole symbol directory to ../output directory
cp -r build/app/outputs/native-debug-symbols ../output
# copy whole symbol directory to ../output directory if it exists
if [ -d "build/app/outputs/native-debug-symbols" ]; then
cp -r build/app/outputs/native-debug-symbols ../output
fi
elif [ "$platform" == "ios" ]; then
# copy build/ios/ipa/agora_rtc_engine_example.ipa to ../output directory
cp build/ios/ipa/agora_rtc_engine_example.ipa ../output

# copy dSYMs in build/ios/archive/Runner.xcarchive/dSYMs directory to ../output directory
cp -RP build/ios/archive/Runner.xcarchive/dSYMs ../output
if [ -d "build/ios/archive/Runner.xcarchive/dSYMs" ]; then
cp -RP build/ios/archive/Runner.xcarchive/dSYMs ../output
fi
elif [ "$platform" == "macos" ]; then
# cp example/build/macos/Build/Products/*/agora_rtc_engine_example.app to ../output directory
cp -RP build/macos/Build/Products/*/agora_rtc_engine_example.app ../output
Expand Down Expand Up @@ -350,6 +374,13 @@ jobs:
# copy all pdb files in build/windows/x64/plugins/**/Debug/ to ../output/Debug
cp -r build/windows/x64/plugins/**/Debug/*.pdb ../output/Debug
fi

if [ -d "build/windows/x64/runner/Profile" ]; then
cp -r build/windows/x64/runner/Profile ../output

# copy all pdb files in build/windows/x64/plugins/**/Profile/ to ../output/Profile
cp -r build/windows/x64/plugins/**/Profile/*.pdb ../output/Profile
fi
elif [ "$platform" == "web" ]; then
# copy all files and files in subdirectories to ../output directory
cp -r build/web/* ../output
Expand Down Expand Up @@ -389,7 +420,7 @@ jobs:
if: ${{ inputs.issue_number != null && !cancelled() }}
needs: [build]
steps:
- uses: peter-evans/create-or-update-comment@v2
- uses: peter-evans/create-or-update-comment@v3
with:
token: ${{ secrets.GITHUB_TOKEN }}
issue-number: ${{ inputs.issue_number }}
Expand Down
Loading
Loading