Three recipes use f-string syntax that is only valid on Python 3.12+
(PEP 701): reusing the same quote character inside an f-string
expression, and using a backslash inside one.
recipes/amnezia-xray-bindings/conanfile.py:115
recipes/tun2socks/conanfile.py:118
recipes/hev-socks5-tunnel/conanfile.py:63-65
On older interpreters Conan fails to load the recipe with a SyntaxError
before resolving a single dependency, so the build cannot start:
SyntaxError: unexpected character after line continuation character
This is not platform specific. It is invisible in CI only because
ubuntu-latest ships Python 3.12+. Debian 12 (bookworm), current stable
and the base for Raspberry Pi OS, ships Python 3.11.
Hoist the expressions out of the f-strings, and use single quotes for
the nested string literals. Behaviour is unchanged on every version.
Verified with python3 -m py_compile on Python 3.11.2 (aarch64,
Debian 12): all three fail before this change and pass after.
* basic tests adaptation
* fix: ui servers model and controller test awg config
* fix: platforms test builds
* build dirs inspection
* fix: changed paths for tests and tests artifacts
* fix: 'deploy' parent dir
* windows ctest configuration and macos dependencies inspection
* windows check executable and macos copy openssl libs
* windows test executables check and macos copy openssl
* changed some path on windows
* android apk list
* fix: updated android apk path
* Verify Android test files
* fix: build tests only with AMNEZIA_BUILD_TESTS
* fix: copy openssl runtime next to test_openssl_library
* fix: awg2 test config and inverted description checks
* chore: move run_android_tests.sh to client/tests and drop personal paths
* chore: gate tests by option, scope secrets and drop global concurrency in ci
* chore: serialized vps test job, scoped secrets, backup secret guard, test data lookup
---------
Co-authored-by: MrMirDan <8mirdan8@gmail.com>
* Add Google Play Billing Library
* Disable Qt debugger sleep
* Add billing module, provide a separate build for Google Play
* Add a method to detect Google Play build
* Add method to get the list of offers
* Add methods to verify and purchase subscriptions
* refactor: modify response json
* feat: add purchase to UI
* feat: add test purchase android
* fix: merge with new structure, fix payment flow
* fix: build flow for new conan structure
* fix: add build android via Win
* fix: fix multi-ABI filter
* fix: split payment to detect payment type
* fix: add artifact apk
* fix: add check purchase on restore
* fix: release keystore
* fix: copy apk to right path
* fix: separate oss/play build
* fix: simply build AAB
* fix: add custom target for Play billing
* fix: add logs billing
* fix: add support market types, add logs
* fix: revert market field, up android GP version, fix subscription plan parser
* fix: add support getSubscriptionInfo and subscriptions/restore
* fix: update api endpoint and pay logic
* fix: add logs and rename restore func
* fix: add ios logs
* fix: rename restore function, fix icon resource error
* fix: double purchase android
* fix: update Google Play Billing Library to 8.0.0
* fix: prefer free trial subscription offer on Android purchase
Bump APP version to 2137.
* fix: up kotlin version compiler
* fix: sync price for PlayMarket from GP
* fix: add logs for Google Play price merge
* fix: show App Store intro offer discount price in catalog
* feat: add trial support for multi platform, redesign PageSetupWizardApiPremiumInfo
* feat: add logs android
* fix: tighten spacing Change plan and test period tag
* fix: UI text changes
* fix: upgrade existing android subscription and add renew logic
* feat: add support upgrade CP plan without call subscription
* fix: add billing logs for plan
* fix: show upgrade success as notification
* fix: call getSubscriptionInfo/importServiceFromMarket on upgrade instead of skipping
* fix: restore ios prod var
* fix: remove noisy debug logs
* chore: up version code
* fix: getSubscriptionInfo used removed GatewayRequestData after rebase
* fix: aab in sep tasks
* fix: warn before subscription upgrade/downgrade purchase
* chore: add acknowledgePlayPurchase
* refactor: add store purchase controller
* feat: use same acknowledge method as appstore
* fix: IOS add upgrade
* fix: change QML warn message
* refactor: dedupe Play purchase validation and startup billing query
* chore: log purchaseToken through the Android purchase flow
* fix: resolve Android active plan by base plan id
* fix: remove comment
* fix: subscribe to Transaction.updates before Transaction.unfinished
* fix: update days values
* fix: genuine restore failure when another transaction was a duplicate
* fix: remove debug lines and comment
* chore: cleanup logs
---------
Co-authored-by: albexk <albexk@proton.me>
Co-authored-by: vkamn <vk@amnezia.org>
* feat: move amnezia hardcode from sources to cmake
* feat: move amnezia hardcode from sources to cmake
* refactor: remove prem v1 migration
* chore: move more branding
* fix: use host-matching architecture for iOS simulator builds
x86_64 was hardcoded; Apple Silicon Macs run arm64 simulators and Xcode 26
has no Rosetta simulator destinations, so simulators showed as unsupported.
* fix: mark the branded media assets catalog as a bundle resource
MACOSX_PACKAGE_LOCATION was set on the upstream Media.xcassets path while
target_sources uses CLIENT_IOS_MEDIA_ASSETS_PATH, so a branded catalog was
never compiled by actool and the app got a blank icon.
* fix: parametrize the Swift app-group identifier used by Log.swift
Log.swift hardcoded Amnezia's own app-group instead of the branded one,
since Swift -D flags can't carry the string value like the ObjC++ side
does. Generate a small Swift constants file instead, same pattern as
version.h.in, wired into all four targets that compile Log.swift.
* fix: use APPLICATION_NAME instead of hardcoded Amnezia in log line format
Every log line printed "Amnezia" regardless of branding; the log file name
two lines above this already used APPLICATION_NAME correctly.
* fix: restore branding fixes dropped by rebase, rename swiftInterop to swiftBridge
* fix: move more branding variables to cmake
* feat: move macOS branding from sources to cmake
- macos/app/Info.plist.in: app group, camera usage text, UTI ids and
descriptions now come from CLIENT_APPLICATION_NAME / BUILD_* variables,
mirroring ios/app/Info.plist.in
- macos/networkextension/Info.plist.in: bundle names and app group ids are
templated; the plist is configured by CMake into the binary dir because
Xcode only expands its own $(...) settings
- new knobs: CLIENT_MACOS_MEDIA_ASSETS_PATH, CLIENT_MACOS_APP_ICNS_PATH,
CLIENT_MACOS_PROVISIONING_PROFILE_SPECIFIER(_DEBUG),
CLIENT_MACOS_NE_PROVISIONING_PROFILE_SPECIFIER(_DEBUG)
* fix: resolve macOS pf template paths relative to the client source dir
CMAKE_SOURCE_DIR points at the wrapper project when the client is built as a
subproject, so the pf template lookup failed there.
* chore: separate brandings defaults
---------
Co-authored-by: vkamn <vk@amnezia.org>
* feat: add awg3.1 support
* fix: add warning for big native awg qr codes
* fix: show default subnet address if not exist in server config
* fix: use range keep alive only with awg3 params
* chore: update awg go versions in conan
* chore: update awg-go version