Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
68 commits
Select commit Hold shift + click to select a range
fbf167c
Merge pull request #636 from mindbox-cloud/master
itmindbox Jan 16, 2026
f0c2c5f
Feature/mobilewebview 3 spi web view facade (#637)
Vailence Jan 20, 2026
4d88612
WMSDK-608: Support app distribution from all branches (#638)
justSmK Jan 26, 2026
2536780
Update dependency fastlane to v2.231.1 (#642)
renovate[bot] Jan 31, 2026
3bed382
Lock file maintenance (#643)
renovate[bot] Jan 31, 2026
6cf2edf
Feature/mobilewebview 23 web view bridge (#641)
Vailence Feb 3, 2026
b7bbfef
Merge branch 'develop' into mission/webView-inApp
justSmK Feb 3, 2026
a2e1b07
MOBILEWEBVIEW-23: Fix crashes from uncalled WebKit completion handler…
justSmK Feb 5, 2026
bb81dff
MOBILEWEBVIEW-23: Fix duplicate ready responses with incorrect payloa…
justSmK Feb 6, 2026
83f2fac
MOBILEWEBVIEW-23: Add detailed logging for WebView Bridge traffic
justSmK Feb 6, 2026
0079efb
Merge pull request #645 from mindbox-cloud/feature/MOBILEWEBVIEW-23
justSmK Feb 6, 2026
586e16a
MOBILEWEBVIEW-25: Fix WebView memory leak by breaking retain cycle in…
justSmK Feb 9, 2026
1106fd4
MOBILEWEBVIEW-25: Add operation data to WebView Bridge initialization
justSmK Feb 9, 2026
7f86c2f
MOBILEWEBVIEW-25: Add `userVisitCount` to WebView Bridge initialization
justSmK Feb 9, 2026
f51e195
MOBILEWEBVIEW-25: Debug pretty print for JS Bridge
justSmK Feb 9, 2026
415a8bf
MOBILEWEBVIEW-25: Add OS version and architecture to WebView User-Agent
justSmK Feb 9, 2026
92690ba
MOBILEWEBVIEW-25: Store last `track-visit` in `SessionTemporaryStorag…
justSmK Feb 9, 2026
5b51c02
MOBILEWEBVIEW-25: Add device and system info to WebView initialization
justSmK Feb 9, 2026
7246fdf
MOBILEWEBVIEW-25: Fix SwiftLint warnings
justSmK Feb 10, 2026
cb17ab1
MOBILEWEBVIEW-25: Fix `InAppFormData.init`
justSmK Feb 10, 2026
16cb709
MOBILEWEBVIEW-0: Enable `inline` media playback in `WebView`
justSmK Feb 10, 2026
3a094e4
MOBILEWEBVIEW-0: Enable autoplay for media in WebView
justSmK Feb 10, 2026
1b293b3
Merge pull request #646 from mindbox-cloud/feature/MOBILEWEBVIEW-25
justSmK Feb 12, 2026
d2c30ae
WMSDK-0000: Update Gemfile.lock (#648)
justSmK Feb 12, 2026
de136eb
MOBILEWEBVIEW-25: Update permission API usage and handle limited phot…
justSmK Feb 13, 2026
ee787fe
MOBILEWEBVIEW-22: Refactor webview InApp to layer-based parsing (#649)
justSmK Feb 17, 2026
cbb8424
MOBILEWEBVIEW-22: Unit tests (#650)
justSmK Feb 17, 2026
8e1c055
Feature/mobilewebview 51-Feature Toggles (#651)
Vailence Feb 18, 2026
51d209e
MOBILEWEBVIEW-47: Add WebView click handling, sync/async operations a…
justSmK Feb 18, 2026
0912719
MOBILEWEBVIEW-47: Unify InApp tap action callback for Modal, Snackbar…
justSmK Feb 18, 2026
43d1872
MOBILEWEBVIEW-47: Route WebView click through UseCase chain via handl…
justSmK Feb 18, 2026
a470f8a
MOBILEWEBVIEW-54: Fix JS bridge for new WebView InApp API
justSmK Feb 19, 2026
69cd237
MOBILEWEBVIEW-47: Add WebView click handling, sync/async operations a…
justSmK Feb 19, 2026
2276009
MOBILEWEBVIEW-47 (2): Unify InApp tap action callback for Modal, Snac…
justSmK Feb 19, 2026
e13e6de
Merge branch 'mission/webView-inApp' into semko/MOBILEWEBVIEW-54
enotniy Feb 19, 2026
73f84bb
Merge pull request #655 from mindbox-cloud/semko/MOBILEWEBVIEW-54
enotniy Feb 19, 2026
97dc104
MOBILEWEBVIEW-54: Resolve merge conflict markers in BridgeMessage.swift
justSmK Feb 19, 2026
f6cc9b3
MOBILEWEBVIEW-47: Fix `Inapp.Click` not sent when `redirectUrl` and `…
justSmK Feb 24, 2026
54eadf9
Update dependency fastlane to v2.232.2 (#664)
renovate[bot] Feb 28, 2026
ecb19f0
Lock file maintenance (#665)
renovate[bot] Feb 28, 2026
c36bdeb
MOBILEWEBVIEW-55: Add `openUrl` bridge action and URL navigation from…
justSmK Mar 2, 2026
292b81a
WMSDK-622: Fix snackbar window intercepting touches after dismiss (#666)
justSmK Mar 2, 2026
89634b8
[MOBILEWEBVIEW-27]: Add InApp show failure manager and geo 5xx handli…
Vailence Mar 3, 2026
f68c4fe
[MOBILEWEBVIEW-27]: Restrict addFailure to filtered inapps only (#668)
Vailence Mar 4, 2026
51a6136
[MOBILEWEBVIEW-63]: Add tags and trigger-to-display metric for InApp …
Vailence Mar 6, 2026
32a4eac
Bump SDK version from 2.14.5 to 2.15.0-rc
Mar 10, 2026
62ab463
Merge pull request #670 from mindbox-cloud/release/2.15.0-rc
AndreyEmtsov Mar 10, 2026
ae2e2ab
MOBILEWEBVIEW-95: Add localState bridge for WebView persistent storag…
justSmK Mar 12, 2026
3c9877a
[MOBILEWEBVIEW-96]: Add firstInitializationDateTime support and migra…
Vailence Mar 13, 2026
8add65f
[MOBILEWEBVIEW-101]: Add permission handlers for WebView bridge (#673)
Vailence Mar 17, 2026
9b2e178
MOBILEWEBVIEW-99: Add haptic feedback support for WebView in-app mess…
justSmK Mar 18, 2026
0ec908b
MOBILEWEBVIEW-132: Keep only pushNotifications permission, add PushPe…
Vailence Mar 20, 2026
c79ac11
MOBILEWEBVIEW-90: Prevent duplicate `direct` `track-visit` when `push…
justSmK Mar 23, 2026
e623dc1
MOBILEWEBVIEW-90: Call `checkInappSession` on skipped `direct` to set…
justSmK Mar 23, 2026
f2e9b27
[MOBILE-41]: Add settings.open bridge action for WebView inApp (#679)
Vailence Mar 24, 2026
efd7a00
[MOBILE-70]: Pause/resume WebView timeout timer on app background/for…
Vailence Mar 26, 2026
304aae0
MOBILE-41: Send settings.open bridge response after iOS callback for …
Vailence Mar 27, 2026
7d9091c
MOBILE-70: Exclude background time from timeToDisplay metric (#685)
Vailence Mar 27, 2026
b69aa0c
MOBILE-42: Add motion gestures (`shake` & `flip`) for `WebView` in-ap…
justSmK Mar 27, 2026
b13f0ca
Merge branch 'develop' into mission/webView-inApp
justSmK Mar 27, 2026
836eee7
MOBILE-42: Add `MotionServiceBehaviorTests` for monitoring lifecycle
justSmK Mar 28, 2026
433ccf4
MOBILE-0000: Remove orphaned `PBXBuildFile` entries from project
justSmK Mar 28, 2026
b7fb035
Merge pull request #686 from mindbox-cloud/mission/webView-inApp
justSmK Mar 30, 2026
0f150a0
MOBILE-0000: Update `Gemfile.lock` (#687)
justSmK Mar 30, 2026
675fd01
Lock file maintenance (#690)
renovate[bot] Mar 31, 2026
cb3e612
Update nick-fields/retry action to v4 (#689)
renovate[bot] Mar 31, 2026
c3fc96e
Code maintance before release (#688)
justSmK Apr 1, 2026
8aa69ec
Bump SDK version from 2.15.0-rc to 2.15.0
Apr 1, 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
29 changes: 29 additions & 0 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
Ticket: https://tracker.yandex.ru/MOBILE-

## Summary

<!-- Brief description of changes (1-3 sentences) -->

## Type of Change

- [ ] Feature
- [ ] Bug fix
- [ ] Refactor
- [ ] Tests
- [ ] CI/CD
- [ ] Dependencies
- [ ] Other: ___

## Changes

<!-- What was changed and why -->

-
-

## Testing

<!-- Describe how the changes were tested -->

- [ ] Unit tests added/updated
- [ ] Manual testing performed
8 changes: 7 additions & 1 deletion .github/workflows/distribute-manual.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,16 @@ name: Distribute PushOk (manual)

on:
workflow_dispatch:
inputs:
app_ref:
description: "GitLab App branch (Optional)"
required: false
default: ""

jobs:
call-reusable:
uses: ./.github/workflows/distribute-reusable.yml
with:
branch: ${{ github.ref_name }}
branch: ${{ github.ref_name }} # SDK branch = current branch
app_ref: ${{ inputs.app_ref }} # optional override for GitLab ref
secrets: inherit
213 changes: 190 additions & 23 deletions .github/workflows/distribute-reusable.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,46 +6,213 @@ on:
branch:
required: true
type: string
app_ref:
required: false
type: string
default: ""
secrets:
GITLAB_TRIGGER_TOKEN:
required: true

jobs:
distribution:
runs-on: macos-26
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v6
with:
ref: ${{ inputs.branch }}
fetch-depth: 0
fetch-depth: 3

- name: Get last 3 commit messages
shell: bash
run: |
commits=$(git log -3 --pretty=format:"%s")
echo "commits<<EOF" >> $GITHUB_ENV
echo "$commits" >> $GITHUB_ENV
echo "EOF" >> $GITHUB_ENV
set -euo pipefail
commits="$(git log -3 --pretty=format:"%s")"
echo "commits<<EOF" >> "$GITHUB_ENV"
echo "$commits" >> "$GITHUB_ENV"
echo "EOF" >> "$GITHUB_ENV"

- name: Get Mindbox SDK Version
shell: bash
run: |
sdkVersion=$(grep 'static let sdkVersion' SDKVersionProvider/SDKVersionProvider.swift | awk -F '"' '{print $2}')
echo "sdkVersion=$sdkVersion" >> $GITHUB_ENV
set -euo pipefail
sdkVersion="$(grep 'static let sdkVersion' SDKVersionProvider/SDKVersionProvider.swift | awk -F '"' '{print $2}')"
echo "sdkVersion=$sdkVersion" >> "$GITHUB_ENV"

- name: Print environment variables for debugging
- name: Debug payload that will be sent to GitLab
shell: bash
env:
SOURCE_BRANCH: ${{ inputs.branch }}
APP_REF_OVERRIDE: ${{ inputs.app_ref }}
DEFAULT_APP_REF: develop
INPUT_COMMITS: ${{ env.commits }}
INPUT_SDK_VERSION: ${{ env.sdkVersion }}
run: |
echo "Debugging variables:"
echo "github.event_name: ${{ github.event_name }}"
echo "github.ref: ${{ github.ref }}"
echo "github.head_ref: ${{ github.head_ref }}"
echo "commits: ${{ env.commits }}"
echo "sdkVersion: ${{ env.sdkVersion }}"

- name: Trigger build workflow in ios-app repo
set -euo pipefail

APP_REF_OVERRIDE="$(printf '%s' "${APP_REF_OVERRIDE:-}" | xargs)"

echo "---- DEBUG (GitHub -> GitLab trigger payload) ----"
echo "SDK branch (INPUT_BRANCH): $SOURCE_BRANCH"
echo "Manual App ref override: ${APP_REF_OVERRIDE:-<empty>}"
echo "Default App ref: $DEFAULT_APP_REF"
echo "SDK version (INPUT_SDK_VERSION): ${INPUT_SDK_VERSION:-<empty>}"
echo ""
echo "RAW INPUT_COMMITS (cat -A):"
printf '%s' "${INPUT_COMMITS:-}" | cat -A
echo ""
echo "RAW INPUT_COMMITS (printf %q):"
printf '%q\n' "${INPUT_COMMITS:-}"
echo "--------------------------------------------------"

- name: Trigger build workflow in ios-app repo (override strict; else same->develop)
shell: bash
env:
GITLAB_HOST: mindbox.gitlab.yandexcloud.net
APP_PROJECT_ID: "1021"
DEFAULT_APP_REF: develop

# SDK branch (passed to GitLab as INPUT_BRANCH)
SOURCE_BRANCH: ${{ inputs.branch }}

# Optional App ref override (manual)
APP_REF_OVERRIDE: ${{ inputs.app_ref }}

GITLAB_TRIGGER_TOKEN: ${{ secrets.GITLAB_TRIGGER_TOKEN }}

INPUT_COMMITS: ${{ env.commits }}
INPUT_SDK_VERSION: ${{ env.sdkVersion }}
run: |
curl --location 'https://mindbox.gitlab.yandexcloud.net/api/v4/projects/1021/trigger/pipeline' \
--form 'token="${{ secrets.GITLAB_TRIGGER_TOKEN }}"' \
--form 'ref="develop"' \
--form "variables[INPUT_BRANCH]=\"${{ inputs.branch }}\"" \
--form "variables[INPUT_COMMITS]=\"${{ env.commits }}\"" \
--form "variables[INPUT_SDK_VERSION]=\"${{ env.sdkVersion }}\""
set -euo pipefail

# Trim override so " " becomes empty
APP_REF_OVERRIDE="$(printf '%s' "${APP_REF_OVERRIDE:-}" | xargs)"

# Normalize commits:
# - CRLF -> LF
# - expand literal "\n" into real newlines
normalize_commits() {
local raw="${1:-}"
raw="$(printf '%s' "$raw" | tr -d '\r')"
if [[ "$raw" == *"\\n"* ]]; then
raw="$(printf '%b' "$raw")"
fi
printf '%s' "$raw"
}

COMMITS_TO_SEND="$(normalize_commits "${INPUT_COMMITS:-}")"

echo "SDK branch (INPUT_BRANCH): $SOURCE_BRANCH"
echo "Manual App ref override: ${APP_REF_OVERRIDE:-<empty>}"
echo "Default App ref: $DEFAULT_APP_REF"
echo "SDK version (INPUT_SDK_VERSION): ${INPUT_SDK_VERSION:-<empty>}"
echo ""
echo "COMMITS_TO_SEND preview (cat -A):"
printf '%s' "$COMMITS_TO_SEND" | cat -A
echo ""

trigger_pipeline() {
local ref="$1"
local tmp_body
tmp_body="$(mktemp)"

local code
code="$(curl -sS -o "$tmp_body" -w '%{http_code}' --location \
--retry 3 --retry-all-errors --retry-delay 2 \
"https://${GITLAB_HOST}/api/v4/projects/${APP_PROJECT_ID}/trigger/pipeline" \
--form "token=${GITLAB_TRIGGER_TOKEN}" \
--form "ref=${ref}" \
--form "variables[INPUT_BRANCH]=${SOURCE_BRANCH}" \
--form "variables[INPUT_COMMITS]=${COMMITS_TO_SEND}" \
--form "variables[INPUT_SDK_VERSION]=${INPUT_SDK_VERSION}")"

local body
body="$(cat "$tmp_body" 2>/dev/null || true)"
rm -f "$tmp_body"

echo "Trigger HTTP: $code (ref=$ref)"
echo "Response body:"
echo "$body"

if [[ "$code" == "200" || "$code" == "201" ]]; then
local web_url
web_url="$(
printf '%s\n' "$body" |
grep -o '"web_url":"[^"]*"' |
head -n 1 |
cut -d'"' -f4
)"
if [[ -n "${web_url:-}" ]]; then
echo "Pipeline URL: $web_url"
fi
return 0
fi

if [[ "$code" == "401" || "$code" == "403" ]]; then
echo "Auth error (HTTP $code). Check that GITLAB_TRIGGER_TOKEN is valid and has access to project ${APP_PROJECT_ID}."
return 1
fi

# Missing ref: GitLab returns 400 + "Reference not found"
if [[ "$code" == "400" || "$code" == "404" ]]; then
if [[ "$body" == *"Reference not found"* ]]; then
return 2
fi
echo "Got HTTP $code but it's NOT 'Reference not found'."
echo "This can happen if pipelines are blocked for triggers by workflow:rules or job rules when CI_PIPELINE_SOURCE == 'trigger'."
echo "Check the target repo .gitlab-ci.yml rules/workflow:rules."
return 1
fi

if [[ "$code" =~ ^5[0-9][0-9]$ ]]; then
echo "Server error (HTTP $code). GitLab/proxy might be temporarily unavailable."
return 1
fi

echo "Unexpected HTTP status: $code"
return 1
}

# If override is provided: try ONLY override; if missing ref -> fail
if [[ -n "$APP_REF_OVERRIDE" ]]; then
echo "Override provided -> trying ONLY App ref: $APP_REF_OVERRIDE"
trigger_pipeline "$APP_REF_OVERRIDE" || rc=$?
rc="${rc:-0}"

if [[ "$rc" == "0" ]]; then
echo "Triggered on override ref."
exit 0
fi

if [[ "$rc" == "2" ]]; then
echo "ERROR: App ref not found: $APP_REF_OVERRIDE (GitLab returned 'Reference not found')"
exit 1
fi

echo "ERROR: Trigger failed for reasons other than missing ref."
exit 1
fi

# No override: same branch -> fallback develop
desired_ref="$SOURCE_BRANCH"
fallback_ref="$DEFAULT_APP_REF"

echo "No override -> trying App ref: $desired_ref"
trigger_pipeline "$desired_ref" || rc=$?
rc="${rc:-0}"

if [[ "$rc" == "0" ]]; then
echo "Triggered on same branch."
exit 0
fi

if [[ "$rc" == "2" ]]; then
echo "Same branch not found. Falling back to: $fallback_ref"
trigger_pipeline "$fallback_ref"
echo "Triggered on fallback ref."
exit 0
fi

echo "Trigger failed for reasons other than missing ref."
exit 1
2 changes: 1 addition & 1 deletion .github/workflows/publish-reusable.yml
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ jobs:
run: gem install bundler
- name: Install bundler dependencies
run: bundle install
- uses: nick-fields/retry@v3
- uses: nick-fields/retry@v4
with:
timeout_minutes: 10
max_attempts: 20
Expand Down
Loading