From a8fad624b3225d4a37bda46a93065135d3ac23f6 Mon Sep 17 00:00:00 2001 From: Bastien Orivel Date: Fri, 14 Feb 2025 15:13:13 +0100 Subject: [PATCH 1/9] WIP: Add release promotion + mozilla_version dependency this is mostly copied from firefox-android and fixed to work with firefox-ios --- taskcluster/config.yml | 9 + taskcluster/ffios_taskgraph/__init__.py | 2 +- .../ffios_taskgraph/release_promotion.py | 201 ++++++++++++++++++ taskcluster/requirements.in | 1 + taskcluster/requirements.txt | 8 + 5 files changed, 220 insertions(+), 1 deletion(-) create mode 100644 taskcluster/ffios_taskgraph/release_promotion.py diff --git a/taskcluster/config.yml b/taskcluster/config.yml index 73a48ad8ebc4f..34a905b17e3bb 100644 --- a/taskcluster/config.yml +++ b/taskcluster/config.yml @@ -35,3 +35,12 @@ workers: scriptworker: scope-prefix: project:mobile:firefox-ios:releng + +release-promotion: + flavors: + promote: + target-tasks-method: promote + push: + target-tasks-method: push + ship: + target-tasks-method: ship diff --git a/taskcluster/ffios_taskgraph/__init__.py b/taskcluster/ffios_taskgraph/__init__.py index 1e65050907fad..3236d0eab249b 100644 --- a/taskcluster/ffios_taskgraph/__init__.py +++ b/taskcluster/ffios_taskgraph/__init__.py @@ -22,7 +22,7 @@ def register(graph_config): # Setup mozilla-taskgraph register_mozilla_taskgraph(graph_config) - _import_modules(["job", "parameters", "routes", "target_tasks"]) + _import_modules(["job", "parameters", "routes", "target_tasks", "release_promotion"]) def _import_modules(modules): diff --git a/taskcluster/ffios_taskgraph/release_promotion.py b/taskcluster/ffios_taskgraph/release_promotion.py new file mode 100644 index 0000000000000..8a3d4b30e342b --- /dev/null +++ b/taskcluster/ffios_taskgraph/release_promotion.py @@ -0,0 +1,201 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +import os + +from mozilla_version.mobile import MobileVersion +from taskgraph.actions.registry import register_callback_action +from taskgraph.decision import taskgraph_decision +from taskgraph.parameters import Parameters +from taskgraph.taskgraph import TaskGraph +from taskgraph.util.taskcluster import get_artifact +from taskgraph.util.taskgraph import ( + find_decision_task, + find_existing_tasks_from_previous_kinds, +) + +RELEASE_PROMOTION_PROJECTS = ( + "https://github.com/mozilla-mobile/firefox-ios", + "https://github.com/mozilla-mobile/staging-firefox-ios", +) + + +def is_release_promotion_available(parameters): + return parameters["head_repository"] in RELEASE_PROMOTION_PROJECTS + + +@register_callback_action( + name="release-promotion", + title="Release Promotion", + symbol="${input.release_promotion_flavor}", + description="Release Promotion", + permission="release-promotion", + order=500, + context=[], + available=is_release_promotion_available, + schema=lambda graph_config: { + "type": "object", + "properties": { + "build_number": { + "type": "integer", + "default": 1, + "minimum": 1, + "title": "The release build number", + "description": ( + "The release build number. Starts at 1 per " + "release version, and increments on rebuild." + ), + }, + "do_not_optimize": { + "type": "array", + "description": ( + "Optional: a list of labels to avoid optimizing out " + "of the graph (to force a rerun of, say, " + "funsize docker-image tasks)." + ), + "items": { + "type": "string", + }, + }, + "revision": { + "type": "string", + "title": "Optional: revision to ship", + "description": ("Optional: the revision to ship."), + }, + "release_promotion_flavor": { + "type": "string", + "description": "The flavor of release promotion to perform.", + "default": "build", + "enum": sorted(graph_config["release-promotion"]["flavors"].keys()), + }, + "rebuild_kinds": { + "type": "array", + "description": ( + "Optional: an array of kinds to ignore from the previous " + "graph(s)." + ), + "default": graph_config["release-promotion"].get("rebuild-kinds", []), + "items": { + "type": "string", + }, + }, + "previous_graph_ids": { + "type": "array", + "description": ( + "Optional: an array of taskIds of decision or action " + "tasks from the previous graph(s) to use to populate " + "our `previous_graph_kinds`." + ), + "items": { + "type": "string", + }, + }, + "version": { + "type": "string", + "description": ( + "Optional: override the version for release promotion. " + "Occasionally we'll land a taskgraph fix in a later " + "commit, but want to act on a build from a previous " + "commit. If a version bump has landed in the meantime, " + "relying on the in-tree version will break things." + ), + "default": "", + }, + "next_version": { + "type": "string", + "description": "Next version.", + "default": "", + }, + }, + "required": [ + "release_promotion_flavor", + "version", + "build_number", + "next_version", + ], + }, +) +def release_promotion_action(parameters, graph_config, input, task_group_id, task_id): + release_promotion_flavor = input["release_promotion_flavor"] + promotion_config = graph_config["release-promotion"]["flavors"][ + release_promotion_flavor + ] + + target_tasks_method = promotion_config["target-tasks-method"].format( + project=parameters["project"] + ) + rebuild_kinds = input.get( + "rebuild_kinds", promotion_config.get("rebuild-kinds", []) + ) + do_not_optimize = input.get( + "do_not_optimize", promotion_config.get("do-not-optimize", []) + ) + + # make parameters read-write + parameters = dict(parameters) + # Build previous_graph_ids from ``previous_graph_ids`` or ``revision``. + previous_graph_ids = input.get("previous_graph_ids") + if not previous_graph_ids: + previous_graph_ids = [find_decision_task(parameters, graph_config)] + + # Download parameters from the first decision task + parameters = get_artifact(previous_graph_ids[0], "public/parameters.yml") + # Download and combine full task graphs from each of the previous_graph_ids. + # Sometimes previous relpro action tasks will add tasks, like partials, + # that didn't exist in the first full_task_graph, so combining them is + # important. The rightmost graph should take precedence in the case of + # conflicts. + combined_full_task_graph = {} + for graph_id in previous_graph_ids: + full_task_graph = get_artifact(graph_id, "public/full-task-graph.json") + combined_full_task_graph.update(full_task_graph) + _, combined_full_task_graph = TaskGraph.from_json(combined_full_task_graph) + parameters["existing_tasks"] = find_existing_tasks_from_previous_kinds( + combined_full_task_graph, previous_graph_ids, rebuild_kinds + ) + parameters["do_not_optimize"] = do_not_optimize + parameters["target_tasks_method"] = target_tasks_method + parameters["build_number"] = int(input["build_number"]) + # When doing staging releases on try, we still want to re-use tasks from + # previous graphs. + parameters["optimize_target_tasks"] = True + parameters["shipping_phase"] = input["release_promotion_flavor"] + + version_in_file = read_version_file() + version_string = input.get("version", None) + + # shipit uses the version in version.txt to determine next version number; check that its passed in + # in the payload + if not version_string: + version_string = version_in_file + elif version_string != version_in_file: + raise ValueError( + "Version given in tag ({}) does not match the one in version.txt ({})".format( + version_string, version_in_file + ) + ) + + parameters["version"] = version_string + parameters["head_tag"] = "v{}".format(version_string) + parameters["next_version"] = input["next_version"] + + release_type = "release" + version = MobileVersion.parse(version_string) + if version.is_beta: + release_type = "beta" + + parameters["release_type"] = release_type + parameters["tasks_for"] = "action" + parameters["pull_request_number"] = None + + # make parameters read-only + parameters = Parameters(**parameters) + + taskgraph_decision({"root": graph_config.root_dir}, parameters=parameters) + + +def read_version_file(): + with open(os.path.join(os.path.dirname(__file__), "..", "..", "version.txt")) as f: + return f.read().strip() diff --git a/taskcluster/requirements.in b/taskcluster/requirements.in index 4fd7c81e8e8e3..5e2c1a77f311f 100644 --- a/taskcluster/requirements.in +++ b/taskcluster/requirements.in @@ -2,4 +2,5 @@ # https://taskcluster-taskgraph.readthedocs.io/en/latest/howto/bootstrap-taskgraph.html mozilla-taskgraph>=3.0.3 +mozilla-version>=3.1.0 taskcluster-taskgraph>=13.1.0 diff --git a/taskcluster/requirements.txt b/taskcluster/requirements.txt index 6dde4f2b3335c..db1e2cc860dfe 100644 --- a/taskcluster/requirements.txt +++ b/taskcluster/requirements.txt @@ -8,6 +8,10 @@ arrow==1.3.0 \ --hash=sha256:c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80 \ --hash=sha256:d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85 # via cookiecutter +attrs==25.1.0 \ + --hash=sha256:1c97078a80c814273a76b2a298a932eb681c87415c11dee0a6921de7f1b02c3e \ + --hash=sha256:c75a69e28a550a7e93789579c22aa26b0f5b83b75dc4e08fe092980051e1090a + # via mozilla-version binaryornot==0.4.4 \ --hash=sha256:359501dfc9d40632edc9fac890e19542db1a287bbcfa58175b66658392018061 \ --hash=sha256:b8b71173c917bddcd2c16070412e369c3ed7f0528926f70cac18a6c97fd563e4 @@ -214,6 +218,10 @@ mozilla-taskgraph==3.0.3 \ --hash=sha256:0a9a4ad20163fb85f56584ce05c5c9fdd4948e2ddfe1a568446b7e63e5da95fd \ --hash=sha256:65d0dcadae2960d7a45ffeb07479dcf9f4d9c5478555e5b6f3ba2098c5af3f06 # via -r requirements.in +mozilla-version==3.1.0 \ + --hash=sha256:3a9463ebcf2249dc8bcf504e246b6b5977c902dfa819de31602e10bce032ed93 \ + --hash=sha256:f798e716da9063608a0b49ca1ec0a51b73ac810c3cc8a4bcc2c461df902b147c + # via -r requirements.in pygments==2.18.0 \ --hash=sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199 \ --hash=sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a From 74c06d93052233135349cd85f28583a170862995 Mon Sep 17 00:00:00 2001 From: Bastien Orivel Date: Thu, 27 Feb 2025 18:12:56 +0100 Subject: [PATCH 2/9] Add promote/push/ship targets --- taskcluster/ffios_taskgraph/target_tasks.py | 54 +++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/taskcluster/ffios_taskgraph/target_tasks.py b/taskcluster/ffios_taskgraph/target_tasks.py index ada3a17c9a3db..50dd5b97d9b49 100644 --- a/taskcluster/ffios_taskgraph/target_tasks.py +++ b/taskcluster/ffios_taskgraph/target_tasks.py @@ -32,3 +32,57 @@ def filter(task, parameters): return task.kind == "firebase-performance" return [l for l, t in full_task_graph.tasks.items() if filter(t, parameters)] + +@register_target_task("promote") +def target_tasks_promote(full_task_graph, parameters, graph_config): + return _filter_release_promotion( + full_task_graph, + parameters, + filtered_for_candidates=[], + shipping_phase="promote", + ) + +@register_target_task("push") +def target_tasks_push(full_task_graph, parameters, graph_config): + filtered_for_candidates = target_tasks_promote( + full_task_graph, + parameters, + graph_config, + ) + return _filter_release_promotion( + full_task_graph, parameters, filtered_for_candidates, shipping_phase="push" + ) + +@register_target_task("ship") +def target_tasks_ship(full_task_graph, parameters, graph_config): + filtered_for_candidates = target_tasks_push( + full_task_graph, + parameters, + graph_config, + ) + return _filter_release_promotion( + full_task_graph, parameters, filtered_for_candidates, shipping_phase="ship" + ) + +def does_task_match_release_type(task, release_type): + return ( + # TODO: only use a single attribute to compare to `release_type` + task.attributes.get("build-type") == release_type + or task.attributes.get("release-type") == release_type + ) + +def _filter_release_promotion( + full_task_graph, parameters, filtered_for_candidates, shipping_phase +): + def filter(task, parameters): + # Include promotion tasks; these will be optimized out + if task.label in filtered_for_candidates: + return True + + return task.attributes.get( + "shipping_phase" + ) == shipping_phase and does_task_match_release_type( + task, parameters["release_type"] + ) + + return [l for l, t in full_task_graph.tasks.items() if filter(t, parameters)] From ed7fa6bf31873061f433c9f671cc588f389867be Mon Sep 17 00:00:00 2001 From: Bastien Orivel Date: Fri, 28 Feb 2025 14:36:40 +0100 Subject: [PATCH 3/9] Add a simple promote task --- taskcluster/kinds/build/kind.yml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/taskcluster/kinds/build/kind.yml b/taskcluster/kinds/build/kind.yml index b5fd335ae05bd..58f24843865fb 100644 --- a/taskcluster/kinds/build/kind.yml +++ b/taskcluster/kinds/build/kind.yml @@ -27,3 +27,19 @@ tasks: - L10nBuild index: type: l10n-screenshots + test: + description: Test a build for promotion + run-on-tasks-for: [] + treeherder: + symbol: B + kind: build + tier: 1 + platform: ios/opt + worker-type: bitrise + shipping-phase: promote + attributes: + release-type: release + bitrise: + artifact_prefix: public + workflows: + - pipeline_build_and_test From 264597b72d2391a483a045a75a30b01ce774fce4 Mon Sep 17 00:00:00 2001 From: Bastien Orivel Date: Fri, 28 Feb 2025 14:44:59 +0100 Subject: [PATCH 4/9] Add relpro parameters to tests --- taskcluster/test/params/release-promote.yml | 36 +++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 taskcluster/test/params/release-promote.yml diff --git a/taskcluster/test/params/release-promote.yml b/taskcluster/test/params/release-promote.yml new file mode 100644 index 0000000000000..2f246a54cc438 --- /dev/null +++ b/taskcluster/test/params/release-promote.yml @@ -0,0 +1,36 @@ +base_ref: origin/main +base_repository: https://github.com/mozilla-mobile/staging-firefox-ios +base_rev: 2a56c4b0e6e7737816147da950196f99895ff3d3 +build_date: 1740597206 +build_number: 3 +commit_message: 'test' +do_not_optimize: [] +enable_always_target: true +existing_tasks: + docker-image-alpine: GpLk29sRR6SXETKedu08Ow + docker-image-screenshots: c5_5iKmoQ929DgVROD3FMw + test-taskgraph-definition: IbHNWG25ShO_oXg1MR6ipw +files_changed: [] +filters: +- target_tasks_method +head_ref: refs/heads/main +head_repository: https://github.com/mozilla-mobile/staging-firefox-ios +head_rev: 2a56c4b0e6e7737816147da950196f99895ff3d3 +head_tag: v137.0 +level: '1' +moz_build_date: '20250226191326' +next_version: 137.0.1 +optimize_strategies: null +optimize_target_tasks: true +owner: nobody@mozilla.com +project: staging-firefox-ios +pull_request_number: null +pushdate: 0 +pushlog_id: '0' +release_type: release +repository_type: git +shipping_phase: promote +target_tasks_method: promote +tasks_for: action +version: '137.0' + From ed33308ba707dc74aabb01967e16019fee76c732 Mon Sep 17 00:00:00 2001 From: Bastien Orivel Date: Tue, 11 Mar 2025 12:37:00 +0100 Subject: [PATCH 5/9] Start splitting out the release workflow --- bitrise.yml | 81 ++++++++++++++++++++++++++++++++ taskcluster/kinds/build/kind.yml | 6 +-- 2 files changed, 84 insertions(+), 3 deletions(-) diff --git a/bitrise.yml b/bitrise.yml index 90b7e661cc08b..5c0cf3e9e2e77 100644 --- a/bitrise.yml +++ b/bitrise.yml @@ -2168,6 +2168,87 @@ workflows: focus-ios/focus-ios-tests/tools/sentry-cli --auth-token "$SENTRY_AUTH_TOKEN" upload-dif \ --org mozilla --project klar-ios "$BITRISE_DSYM_DIR_PATH" +# RelPro workflows + release_promote_firefox: + steps: + - activate-ssh-key@4.1: + run_if: '{{getenv "SSH_RSA_PRIVATE_KEY" | ne ""}}' + - git-clone@6.2: {} + - certificate-and-profile-installer@1: {} + - script@1.2.1: + inputs: + - content: |- + #!/usr/bin/env bash + set -e + set -x + + cd firefox-ios/Client.xcodeproj + sed -i '' 's/CODE_SIGN_IDENTITY = "iPhone Developer"/CODE_SIGN_IDENTITY = "iPhone Distribution"/' project.pbxproj + cd - + title: Set xcodeproj code_sign_identity + - script@1.2.1: + title: NPM, ContentBlockerGen + inputs: + - content: |- + #!/usr/bin/env bash + # fail if any commands fails + set -e + # debug log + set -x + + ./bootstrap.sh + - set-xcode-build-number@1: + inputs: + - build_short_version_string: "$BITRISE_RELEASE_VERSION" + - plist_path: firefox-ios/Client/Info.plist + - set-xcode-build-number@1: + inputs: + - build_short_version_string: "$BITRISE_RELEASE_VERSION" + - plist_path: firefox-ios/Extensions/NotificationService/Info.plist + - set-xcode-build-number@1: + inputs: + - build_short_version_string: "$BITRISE_RELEASE_VERSION" + - plist_path: firefox-ios/Extensions/ShareTo/Info.plist + - set-xcode-build-number@1: + inputs: + - build_short_version_string: "$BITRISE_RELEASE_VERSION" + - plist_path: firefox-ios/WidgetKit/Info.plist + - set-xcode-build-number@1: + inputs: + - build_short_version_string: "$BITRISE_RELEASE_VERSION" + - plist_path: firefox-ios/CredentialProvider/Info.plist + - script@1.2.1: + inputs: + - content: |- + #!/usr/bin/env bash + # fail if any commands fails + set -e + # debug log + set -x + + # write your script here + + echo "Setting Nimbus variables" + /usr/libexec/PlistBuddy -c "Set NimbusURL $NIMBUS_URL" "firefox-ios/Client/Info.plist" + title: Nimbus Variable Setup + - xcode-archive@4.0: + inputs: + - project_path: firefox-ios/Client.xcodeproj + - compile_bitcode: 'no' + - upload_bitcode: 'no' + - team_id: 43AQ936H96 + - export_method: app-store + - output_tool: xcodebuild + - distribution_method: app-store + - export_development_team: 43AQ936H96 + - configuration: "$BITRISE_SCHEME" + - deploy-to-bitrise-io@2.9.2: {} + envs: + - opts: + is_expand: false + BITRISE_SCHEME: Firefox + description: This step is used during release promotion to build a firefox release + app: envs: - opts: diff --git a/taskcluster/kinds/build/kind.yml b/taskcluster/kinds/build/kind.yml index 58f24843865fb..21786ae9f6529 100644 --- a/taskcluster/kinds/build/kind.yml +++ b/taskcluster/kinds/build/kind.yml @@ -27,8 +27,8 @@ tasks: - L10nBuild index: type: l10n-screenshots - test: - description: Test a build for promotion + release: + description: Start a release build run-on-tasks-for: [] treeherder: symbol: B @@ -42,4 +42,4 @@ tasks: bitrise: artifact_prefix: public workflows: - - pipeline_build_and_test + - release_promote_firefox From 283a4adee6f68dcd3549db265fceb5700e3ebfae Mon Sep 17 00:00:00 2001 From: Bastien Orivel Date: Tue, 25 Mar 2025 16:20:46 +0100 Subject: [PATCH 6/9] WIP: Change the relpro scheme --- bitrise.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/bitrise.yml b/bitrise.yml index 5c0cf3e9e2e77..d4576dd7a138e 100644 --- a/bitrise.yml +++ b/bitrise.yml @@ -2183,9 +2183,9 @@ workflows: set -x cd firefox-ios/Client.xcodeproj - sed -i '' 's/CODE_SIGN_IDENTITY = "iPhone Developer"/CODE_SIGN_IDENTITY = "iPhone Distribution"/' project.pbxproj + #sed -i '' 's/CODE_SIGN_IDENTITY = "iPhone Developer"/CODE_SIGN_IDENTITY = "iPhone Distribution"/' project.pbxproj cd - - title: Set xcodeproj code_sign_identity + title: Set xcodeproj code_sign_identity # TODO: Figure out how to not run this for staging - script@1.2.1: title: NPM, ContentBlockerGen inputs: @@ -2239,14 +2239,14 @@ workflows: - team_id: 43AQ936H96 - export_method: app-store - output_tool: xcodebuild - - distribution_method: app-store + - distribution_method: development # TODO: app-store on prod - export_development_team: 43AQ936H96 - configuration: "$BITRISE_SCHEME" - deploy-to-bitrise-io@2.9.2: {} envs: - opts: is_expand: false - BITRISE_SCHEME: Firefox + BITRISE_SCHEME: FirefoxStaging # TODO: Figure out how to change this based on repo description: This step is used during release promotion to build a firefox release app: From b74742542765678e5e80d3b034c5a4cd0f506e89 Mon Sep 17 00:00:00 2001 From: Bastien Orivel Date: Wed, 26 Mar 2025 14:17:03 +0100 Subject: [PATCH 7/9] Apply Orla's patch for the staging config --- firefox-ios/Client.xcodeproj/project.pbxproj | 63 ++++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/firefox-ios/Client.xcodeproj/project.pbxproj b/firefox-ios/Client.xcodeproj/project.pbxproj index 48aa1668e2133..a456fefa44d0b 100644 --- a/firefox-ios/Client.xcodeproj/project.pbxproj +++ b/firefox-ios/Client.xcodeproj/project.pbxproj @@ -25951,15 +25951,62 @@ isa = XCBuildConfiguration; baseConfigurationReference = 5A9F8FCD2D91C37C0019C311 /* FirefoxStaging.xcconfig */; buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ALWAYS_USE_SEPARATE_HEADERMAPS = NO; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_MODULES_AUTOLINK = NO; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COMPRESS_PNG_FILES = YES; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = 43AQ936H96; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; EAGER_LINKING = YES; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; FUSE_BUILD_SCRIPT_PHASES = YES; GCC_TREAT_WARNINGS_AS_ERRORS = YES; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, + "$(SRCROOT)", + "$(SDKROOT)/usr/include/libxml2", + ); + INCLUDE_SETTINGS_BUNDLE = NO; + INFOPLIST_OUTPUT_FORMAT = binary; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../../Frameworks", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACOSX_DEPLOYMENT_TARGET = ""; + MOZ_PUBLIC_URL_SCHEME = firefox; + MOZ_TODAY_WIDGET_SEARCH_DISPLAY_NAME = "Firefox - Search"; OTHER_LDFLAGS = ( + "-ObjC", "$(inherited)", "-Xlinker", "-no_application_extension", ); + OTHER_SWIFT_FLAGS_common = "-DMOZ_TARGET_CLIENT"; + PLIST_FILE_OUTPUT_FORMAT = binary; + PRODUCT_BUNDLE_IDENTIFIER = "org.mozilla.ios.$(PRODUCT_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + STRINGS_FILE_OUTPUT_ENCODING = binary; + STRIP_PNG_TEXT = YES; + SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; SWIFT_TREAT_WARNINGS_AS_ERRORS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "iPhone, iPad"; + TEST_TARGET_NAME = Client; + VALIDATE_PRODUCT = YES; VALIDATE_WORKSPACE = YES; }; name = FirefoxStaging; @@ -25976,6 +26023,7 @@ EXCLUDED_SOURCE_FILE_NAMES = "Client/Nimbus/TestData/*"; GCC_TREAT_WARNINGS_AS_ERRORS = NO; INFOPLIST_FILE = Client/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -25991,6 +26039,7 @@ PROVISIONING_PROFILE_SPECIFIER = "BR STG org.mozilla.ios.FirefoxBeta"; SKIP_INSTALL = NO; SWIFT_OBJC_BRIDGING_HEADER = "$(PROJECT_DIR)/Client/Client-Bridging-Header.h"; + TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_WORKSPACE = YES; }; name = FirefoxStaging; @@ -25998,17 +26047,24 @@ 5A9F8FD02D91C3A60019C311 /* FirefoxStaging */ = { isa = XCBuildConfiguration; buildSettings = { + ALWAYS_USE_SEPARATE_HEADERMAPS = NO; CODE_SIGN_ENTITLEMENTS = "$(inherit)Extensions/Entitlements/FirefoxBeta.entitlements"; CODE_SIGN_IDENTITY = "iPhone Developer"; CODE_SIGN_STYLE = Manual; DEVELOPMENT_TEAM = 43AQ936H96; GCC_TREAT_WARNINGS_AS_ERRORS = NO; + INCLUDE_SETTINGS_BUNDLE = NO; INFOPLIST_FILE = Extensions/NotificationService/Info.plist; + MOZ_PUBLIC_URL_SCHEME = firefox; + MOZ_TODAY_WIDGET_SEARCH_DISPLAY_NAME = "Firefox - Search"; OTHER_SWIFT_FLAGS = "-DMOZ_CHANNEL_release -DMOZ_TARGET_NOTIFICATIONSERVICE"; + OTHER_SWIFT_FLAGS_common = "-DMOZ_TARGET_CLIENT"; PRODUCT_BUNDLE_IDENTIFIER = "$(MOZ_BUNDLE_ID).$(PRODUCT_NAME)2"; PRODUCT_NAME = NotificationService; PROVISIONING_PROFILE_SPECIFIER = "BR STG org.mozilla.ios.FirefoxBeta.NotificationSer"; SKIP_INSTALL = NO; + SWIFT_VERSION = 5.0; + TEST_TARGET_NAME = Client; }; name = FirefoxStaging; }; @@ -26437,6 +26493,7 @@ COPY_PHASE_STRIP = NO; DEVELOPMENT_TEAM = 43AQ936H96; GCC_TREAT_WARNINGS_AS_ERRORS = NO; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -27204,6 +27261,7 @@ EXCLUDED_SOURCE_FILE_NAMES = "Client/Nimbus/TestData/*"; GCC_TREAT_WARNINGS_AS_ERRORS = NO; INFOPLIST_FILE = Client/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -27461,6 +27519,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = E6DCC1ED1DCBB6AA00CEC4B7 /* Fennec.enterprise.xcconfig */; buildSettings = { + "CODE_SIGN_IDENTITY[sdk=*]" = "iPhone Developer"; EAGER_LINKING = YES; FUSE_BUILD_SCRIPT_PHASES = YES; GCC_TREAT_WARNINGS_AS_ERRORS = YES; @@ -27492,6 +27551,7 @@ ); GCC_TREAT_WARNINGS_AS_ERRORS = NO; INFOPLIST_FILE = Client/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -27750,6 +27810,7 @@ EAGER_LINKING = YES; FUSE_BUILD_SCRIPT_PHASES = YES; GCC_TREAT_WARNINGS_AS_ERRORS = YES; + MACOSX_DEPLOYMENT_TARGET = ""; OTHER_LDFLAGS = ( "$(inherited)", "-Xlinker", @@ -27772,6 +27833,7 @@ EXCLUDED_SOURCE_FILE_NAMES = "Client/Nimbus/TestData/*"; GCC_TREAT_WARNINGS_AS_ERRORS = NO; INFOPLIST_FILE = Client/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -28278,6 +28340,7 @@ COPY_PHASE_STRIP = NO; DEVELOPMENT_TEAM = 43AQ936H96; GCC_TREAT_WARNINGS_AS_ERRORS = NO; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", From 3158e798f051fcd5a32215294b37d31f2cdb3553 Mon Sep 17 00:00:00 2001 From: Bastien Orivel Date: Wed, 26 Mar 2025 14:42:02 +0100 Subject: [PATCH 8/9] WIP --- bitrise.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bitrise.yml b/bitrise.yml index d4576dd7a138e..9541edcbe043e 100644 --- a/bitrise.yml +++ b/bitrise.yml @@ -2237,7 +2237,7 @@ workflows: - compile_bitcode: 'no' - upload_bitcode: 'no' - team_id: 43AQ936H96 - - export_method: app-store + - export_method: development # TODO: app-store on prod - output_tool: xcodebuild - distribution_method: development # TODO: app-store on prod - export_development_team: 43AQ936H96 From ccf3e120d23d67843f15fcef2878b1a8c6aec095 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 26 Mar 2025 14:10:19 +0000 Subject: [PATCH 9/9] Bump @mozilla/readability from 0.4.4 to 0.6.0 Bumps [@mozilla/readability](https://github.com/mozilla/readability) from 0.4.4 to 0.6.0. - [Changelog](https://github.com/mozilla/readability/blob/main/CHANGELOG.md) - [Commits](https://github.com/mozilla/readability/compare/0.4.4...0.6.0) --- updated-dependencies: - dependency-name: "@mozilla/readability" dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- package-lock.json | 15 ++++++++------- package.json | 2 +- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index a733c606208a6..0317aa3645541 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "version": "1.0.0", "license": "MPL-2.0", "dependencies": { - "@mozilla/readability": "^0.4.4", + "@mozilla/readability": "^0.6.0", "darkreader": "^4.9.89", "dompurify": "^3.2.4", "page-metadata-parser": "1.1.4" @@ -1743,9 +1743,10 @@ } }, "node_modules/@mozilla/readability": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/@mozilla/readability/-/readability-0.4.4.tgz", - "integrity": "sha512-MCgZyANpJ6msfvVMi6+A0UAsvZj//4OHREYUB9f2087uXHVoU+H+SWhuihvb1beKpM323bReQPRio0WNk2+V6g==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@mozilla/readability/-/readability-0.6.0.tgz", + "integrity": "sha512-juG5VWh4qAivzTAeMzvY9xs9HY5rAcr2E4I7tiSSCokRFi7XIZCAu92ZkSTsIj1OPceCifL3cpfteP3pDT9/QQ==", + "license": "Apache-2.0", "engines": { "node": ">=14.0.0" } @@ -4967,9 +4968,9 @@ } }, "@mozilla/readability": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/@mozilla/readability/-/readability-0.4.4.tgz", - "integrity": "sha512-MCgZyANpJ6msfvVMi6+A0UAsvZj//4OHREYUB9f2087uXHVoU+H+SWhuihvb1beKpM323bReQPRio0WNk2+V6g==" + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@mozilla/readability/-/readability-0.6.0.tgz", + "integrity": "sha512-juG5VWh4qAivzTAeMzvY9xs9HY5rAcr2E4I7tiSSCokRFi7XIZCAu92ZkSTsIj1OPceCifL3cpfteP3pDT9/QQ==" }, "@types/estree": { "version": "1.0.5", diff --git a/package.json b/package.json index caceea7f9e10b..4b4914ebca610 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ }, "license": "MPL-2.0", "dependencies": { - "@mozilla/readability": "^0.4.4", + "@mozilla/readability": "^0.6.0", "darkreader": "^4.9.89", "dompurify": "^3.2.4", "page-metadata-parser": "1.1.4"