brizental pushed to branch main at The Tor Project / Applications / tor-browser-build
Commits:
- 
df7c4ade
by Beatriz Rizental at 2025-06-12T09:12:15+02:00
 
13 changed files:
- projects/android-toolchain/config
 - projects/application-services/a-s-noop.diff
 - โ projects/application-services/bug40485-nimbus-fml-reproducibility.diff
 - projects/application-services/build
 - projects/application-services/config
 - projects/application-services/glean-noop.diff
 - projects/application-services/gradle-dependencies-list.txt
 - projects/application-services/list_toolchain_updates_checks
 - projects/application-services/local-repository.diff
 - โ projects/application-services/ohttp-no-git.diff
 - projects/glean/config
 - projects/gradle/config
 - projects/uniffi-rs/config
 
Changes:
| 1 | 1 |  # vim: filetype=yaml sw=2
 | 
| 2 | 2 |  # FIXME: Rework this whole mess
 | 
| 3 | 3 |  filename: '[% project %]-[% c("version") %]-[% c("var/build_id") %].tar.[% c("compress_tar") %]'
 | 
| 4 | -version: '34.0.0'
 | 
|
| 4 | +version: 36.0.0
 | 
|
| 5 | 5 |  var:
 | 
| 6 | 6 |    setup: |
 | 
| 7 | 7 |      mkdir -p /var/tmp/dist
 | 
| ... | ... | @@ -29,39 +29,39 @@ var: | 
| 29 | 29 |        export PATH=$PATH:$GRADLE_HOME/bin
 | 
| 30 | 30 |      [% END -%]
 | 
| 31 | 31 |    google_repo: https://dl.google.com/android/repository
 | 
| 32 | -  android_api_level: 34
 | 
|
| 33 | -  android_release_dir: android-14
 | 
|
| 34 | -  android_platform_revision: '03'
 | 
|
| 35 | -  android_ndk_version: 26
 | 
|
| 36 | -  android_ndk_revision: c
 | 
|
| 37 | -  android_ndk_version_build: 26.2.11394342
 | 
|
| 32 | +  android_api_level: 36
 | 
|
| 33 | +  android_release_dir: android-16
 | 
|
| 34 | +  android_platform_revision: '01'
 | 
|
| 35 | +  android_ndk_version: 28
 | 
|
| 36 | +  android_ndk_revision: b
 | 
|
| 37 | +  android_ndk_version_build: 28.1.13356709
 | 
|
| 38 | 38 |    # We need the following two variables for get_build_tools, used by signing
 | 
| 39 | 39 |    # scripts.
 | 
| 40 | -  build_tools_version: 34
 | 
|
| 41 | -  build_tools_filename: 'build-tools_r[% c("var/build_tools_version") %]-linux.zip'
 | 
|
| 42 | -  build_tools_sha512sum: c28dd52f8eca82996726905617f3cb4b0f0aee1334417b450d296991d7112cab1288f5fd42c48a079ba6788218079f81caa3e3e9108e4a6f27163a1eb7f32bd7
 | 
|
| 43 | -  commandlinetools_version: 11076708
 | 
|
| 44 | -  commandlinetools_version_string: 12.0
 | 
|
| 40 | +  build_tools_version: 36
 | 
|
| 41 | +  build_tools_filename: 'build-tools_r[% c("var/build_tools_version") %]_linux.zip'
 | 
|
| 42 | +  build_tools_sha512sum: 277c08c2dcced3c1cc46ce0349e18adc6d6d4b8739868eab5d469f9fb4e9c6b79aa9d2a6592cfc5db0ccb8690fcc75a44db4b18b03dcf349efd0eb54025ef5ca
 | 
|
| 43 | +  commandlinetools_version: 13114758
 | 
|
| 44 | +  commandlinetools_version_string: 19.0
 | 
|
| 45 | 45 |  input_files:
 | 
| 46 | 46 |    # Hashes can be compared with https://gitlab.com/fdroid/android-sdk-transparency-log/-/blob/master/checksums.json
 | 
| 47 | 47 |    - URL: '[% c("var/google_repo") %]/commandlinetools-linux-[% c("var/commandlinetools_version") %]_latest.zip'
 | 
| 48 | 48 |      name: android_commandlinetools
 | 
| 49 | -    sha256sum: 2d2d50857e4eb553af5a6dc3ad507a17adf43d115264b1afc116f95c92e5e258
 | 
|
| 49 | +    sha256sum: 7ec965280a073311c339e571cd5de778b9975026cfcbe79f2b1cdcb1e15317ee
 | 
|
| 50 | 50 |    - URL: '[% c("var/google_repo") %]/android-ndk-r[% c("var/android_ndk_version") %][% c("var/android_ndk_revision") %]-linux.zip'
 | 
| 51 | 51 |      name: android_ndk_compiler
 | 
| 52 | -    sha256sum: 6d6e659834d28bb24ba7ae66148ad05115ebbad7dabed1af9b3265674774fcf6
 | 
|
| 52 | +    sha256sum: e9f2759862cecfd48c20bbb7d8cfedbb020f4d91b5f78d9a2fc106f7db3c27ed
 | 
|
| 53 | 53 |    - URL: '[% c("var/google_repo") %]/[% c("var/build_tools_filename") %]'
 | 
| 54 | 54 |      name: build_tools
 | 
| 55 | 55 |      sha512sum: '[% c("var/build_tools_sha512sum") %]'
 | 
| 56 | -  - URL: '[% c("var/google_repo") %]/platform-[% c("var/android_api_level") %]-ext7_r[% c("var/android_platform_revision") %].zip'
 | 
|
| 56 | +  - URL: '[% c("var/google_repo") %]/platform-[% c("var/android_api_level") %]_r[% c("var/android_platform_revision") %].zip'
 | 
|
| 57 | 57 |      name: platform
 | 
| 58 | -    sha256sum: 16fdb74c55e59ae3ef52def135aec713508467bd56d7dabcd8c9be31fa8b20f3
 | 
|
| 58 | +    sha256sum: a5273f7d68de0a6a58032b26c24965634bc14ed3839e70a3a9759369f3f6c02a
 | 
|
| 59 | 59 |    # ./mach bootstrap is fetching the latest version, so it does not seem to
 | 
| 60 | 60 |    # matter which particular version we are using. Pin to the one fitting best to
 | 
| 61 | 61 |    # SDK version/build-tools version.
 | 
| 62 | 62 |    - URL: '[% c("var/google_repo") %]/platform-tools_r[% c("version") %]-linux.zip'
 | 
| 63 | 63 |      name: platform_tools
 | 
| 64 | -    sha256sum: 8137c2834dea05cb64c1a8bc041ea00fcd43e3a8a29429ad4f25b8ee51efebf6
 | 
|
| 64 | +    sha256sum: 0ead642c943ffe79701fccca8f5f1c69c4ce4f43df2eefee553f6ccb27cbfbe8
 | 
|
| 65 | 65 |  steps:
 | 
| 66 | 66 |    # The get_build_tools step is used by tools/signing/android-signing
 | 
| 67 | 67 |    get_build_tools:
 | 
| 1 | +diff --git a/build-scripts/component-common.gradle b/build-scripts/component-common.gradle
 | 
|
| 2 | +index a126341b0..3b3579290 100644
 | 
|
| 3 | +--- a/build-scripts/component-common.gradle
 | 
|
| 4 | ++++ b/build-scripts/component-common.gradle
 | 
|
| 5 | +@@ -111,16 +111,30 @@ ext.configureUniFFIBindgen = { crateName ->
 | 
|
| 6 | +                     commandLine "${mozconfig.topobjdir}/dist/host/bin/embedded-uniffi-bindgen", 'generate', '--library', libraryPath, "--crate", crateName, '--language', 'kotlin', '--out-dir', uniffiOutDir.get(), '--no-format'
 | 
|
| 7 | +                 }
 | 
|
| 8 | +             } else {
 | 
|
| 9 | +-                def libraryPath = megazordNative.asFileTree.matching {
 | 
|
| 10 | +-                    include "${nativeRustTarget}/libmegazord.*"
 | 
|
| 11 | +-                }.singleFile
 | 
|
| 12 | +-
 | 
|
| 13 | +-                if (libraryPath == null) {
 | 
|
| 14 | +-                    throw new GradleException("libmegazord dynamic library path not found")
 | 
|
| 15 | +-                }
 | 
|
| 16 | +-                exec {
 | 
|
| 17 | +-                    workingDir project.rootDir
 | 
|
| 18 | +-                    commandLine '/usr/bin/env', 'cargo', 'uniffi-bindgen', 'generate', '--library', libraryPath, "--crate", crateName, '--language', 'kotlin', '--out-dir', uniffiOutDir.get(), '--no-format'
 | 
|
| 19 | ++                if (crateName.toString().contains("places")) {
 | 
|
| 20 | ++                     def libraryPath = megazordNative.asFileTree.matching {
 | 
|
| 21 | ++                        include "${nativeRustTarget}/libmegazord.*"
 | 
|
| 22 | ++                    }.singleFile
 | 
|
| 23 | ++
 | 
|
| 24 | ++                    if (libraryPath == null) {
 | 
|
| 25 | ++                        throw new GradleException("libmegazord dynamic library path not found")
 | 
|
| 26 | ++                    }
 | 
|
| 27 | ++                    exec {
 | 
|
| 28 | ++                        workingDir project.rootDir
 | 
|
| 29 | ++                        commandLine '/usr/bin/env', 'cargo', 'uniffi-bindgen', 'generate', '--library', libraryPath, "--crate", crateName, '--language', 'kotlin', '--out-dir', uniffiOutDir.get(), '--no-format'
 | 
|
| 30 | ++                    }
 | 
|
| 31 | ++                } else {
 | 
|
| 32 | ++                    def libraryPath = "${project.rootDir}/megazords/full/target/debug/libmegazord.so"
 | 
|
| 33 | ++                    exec {
 | 
|
| 34 | ++                        workingDir project.rootDir
 | 
|
| 35 | ++                        def command = ["${rootProject.projectDir}/uniffi-rs/uniffi-bindgen", 'generate', '--library', libraryPath, "--crate", crateName, '--language', 'kotlin', '--out-dir', uniffiOutDir.get(), '--no-format']
 | 
|
| 36 | ++                        println "Executing command: ${command.join(' ')}"
 | 
|
| 37 | ++                        commandLine command
 | 
|
| 38 | ++
 | 
|
| 39 | ++                        // Print both stdout and stderr to Gradle's console
 | 
|
| 40 | ++                        standardOutput = System.out
 | 
|
| 41 | ++                        errorOutput = System.err
 | 
|
| 42 | ++                    }
 | 
|
| 43 | +                 }
 | 
|
| 44 | +             }
 | 
|
| 45 | +         }
 | 
|
| 1 | 46 |  diff --git a/components/fxa-client/android/src/main/java/mozilla/appservices/fxaclient/Config.kt b/components/fxa-client/android/src/main/java/mozilla/appservices/fxaclient/Config.kt
 | 
| 2 | 47 |  index 78c16dd0a..d2615fa74 100644
 | 
| 3 | 48 |  --- a/components/fxa-client/android/src/main/java/mozilla/appservices/fxaclient/Config.kt
 | 
| ... | ... | @@ -9,10 +54,10 @@ index 78c16dd0a..d2615fa74 100644 | 
| 9 | 54 |  +    is FxaServer.__NOOP -> ""
 | 
| 10 | 55 |   }
 | 
| 11 | 56 |  diff --git a/components/nimbus/android/src/main/java/org/mozilla/experiments/nimbus/Nimbus.kt b/components/nimbus/android/src/main/java/org/mozilla/experiments/nimbus/Nimbus.kt
 | 
| 12 | -index 8c05be9cf..6bf2ec15d 100644
 | 
|
| 57 | +index 376ef90d9..d80eea50f 100644
 | 
|
| 13 | 58 |  --- a/components/nimbus/android/src/main/java/org/mozilla/experiments/nimbus/Nimbus.kt
 | 
| 14 | 59 |  +++ b/components/nimbus/android/src/main/java/org/mozilla/experiments/nimbus/Nimbus.kt
 | 
| 15 | -@@ -532,6 +532,8 @@ open class Nimbus(
 | 
|
| 60 | +@@ -535,6 +535,8 @@ open class Nimbus(
 | 
|
| 16 | 61 |                           ),
 | 
| 17 | 62 |                       )
 | 
| 18 | 63 |                   }
 | 
| ... | ... | @@ -22,10 +67,10 @@ index 8c05be9cf..6bf2ec15d 100644 | 
| 22 | 67 |           }
 | 
| 23 | 68 |       }
 | 
| 24 | 69 |  diff --git a/megazords/full/Cargo.toml b/megazords/full/Cargo.toml
 | 
| 25 | -index 75f44a812..a51c0643b 100644
 | 
|
| 70 | +index c5e9eea19..ce899aac1 100644
 | 
|
| 26 | 71 |  --- a/megazords/full/Cargo.toml
 | 
| 27 | 72 |  +++ b/megazords/full/Cargo.toml
 | 
| 28 | -@@ -9,21 +9,21 @@ license = "MPL-2.0"9345a6ea
 | 
|
| 73 | +@@ -9,24 +9,24 @@ license = "MPL-2.0"
 | 
|
| 29 | 74 |   crate-type = ["cdylib"]
 | 
| 30 | 75 | |
| 31 | 76 |   [dependencies]
 | 
| ... | ... | @@ -49,6 +94,8 @@ index 75f44a812..a51c0643b 100644 | 
| 49 | 94 |  -crashtest = { path = "../../components/crashtest" }
 | 
| 50 | 95 |  -error-support = { path = "../../components/support/error" }
 | 
| 51 | 96 |  -suggest = { path = "../../components/suggest" }
 | 
| 97 | +-search = { path = "../../components/search" }
 | 
|
| 98 | +-tracing-support = { path = "../../components/support/tracing" }
 | 
|
| 52 | 99 |  +# push = { path = "../../components/push" }
 | 
| 53 | 100 |  +# remote_settings = { path = "../../components/remote_settings" }
 | 
| 54 | 101 |  +# rust-log-forwarder = { path = "../../components/support/rust-log-forwarder" }
 | 
| ... | ... | @@ -58,13 +105,16 @@ index 75f44a812..a51c0643b 100644 | 
| 58 | 105 |  +# crashtest = { path = "../../components/crashtest" }
 | 
| 59 | 106 |  +# error-support = { path = "../../components/support/error" }
 | 
| 60 | 107 |  +# suggest = { path = "../../components/suggest" }
 | 
| 108 | ++# search = { path = "../../components/search" }
 | 
|
| 109 | ++# tracing-support = { path = "../../components/support/tracing" }
 | 
|
| 61 | 110 | |
| 62 | 111 |   lazy_static = "1.4"
 | 
| 112 | + init_rust_components = { path = "../../components/init_rust_components" }
 | 
|
| 63 | 113 |  diff --git a/megazords/full/src/lib.rs b/megazords/full/src/lib.rs
 | 
| 64 | -index 01d1be98b..a68eb647f 100644
 | 
|
| 114 | +index 4b6ba4499..e4fde58ae 100644
 | 
|
| 65 | 115 |  --- a/megazords/full/src/lib.rs
 | 
| 66 | 116 |  +++ b/megazords/full/src/lib.rs
 | 
| 67 | -@@ -8,20 +8,20 @@
 | 
|
| 117 | +@@ -8,24 +8,24 @@
 | 
|
| 68 | 118 |   use std::ffi::CString;
 | 
| 69 | 119 |   use std::os::raw::c_char;
 | 
| 70 | 120 | |
| ... | ... | @@ -72,46 +122,37 @@ index 01d1be98b..a68eb647f 100644 | 
| 72 | 122 |  -pub use crashtest;
 | 
| 73 | 123 |  -pub use error_support;
 | 
| 74 | 124 |  -pub use fxa_client;
 | 
| 125 | +-pub use init_rust_components;
 | 
|
| 75 | 126 |  -pub use logins;
 | 
| 127 | +-pub use merino;
 | 
|
| 76 | 128 |  -pub use nimbus;
 | 
| 77 | 129 |  +// pub use autofill;
 | 
| 78 | 130 |  +// pub use crashtest;
 | 
| 79 | 131 |  +// pub use error_support;
 | 
| 80 | 132 |  +// pub use fxa_client;
 | 
| 133 | ++// pub use init_rust_components;
 | 
|
| 81 | 134 |  +// pub use logins;
 | 
| 135 | ++// pub use merino;
 | 
|
| 82 | 136 |  +// pub use nimbus;
 | 
| 83 | 137 |   pub use places;
 | 
| 84 | 138 |  -pub use push;
 | 
| 85 | 139 |  -pub use remote_settings;
 | 
| 86 | 140 |  -pub use rust_log_forwarder;
 | 
| 141 | +-pub use search;
 | 
|
| 87 | 142 |  -pub use suggest;
 | 
| 88 | 143 |  -pub use sync_manager;
 | 
| 89 | 144 |  -pub use tabs;
 | 
| 145 | +-pub use tracing_support;
 | 
|
| 90 | 146 |  -pub use viaduct;
 | 
| 91 | 147 |  +// pub use push;
 | 
| 92 | 148 |  +// pub use remote_settings;
 | 
| 93 | 149 |  +// pub use rust_log_forwarder;
 | 
| 150 | ++// pub use search;
 | 
|
| 94 | 151 |  +// pub use suggest;
 | 
| 95 | 152 |  +// pub use sync_manager;
 | 
| 96 | 153 |  +// pub use tabs;
 | 
| 154 | ++// pub use tracing_support;
 | 
|
| 97 | 155 |  +// pub use viaduct;
 | 
| 98 | 156 |   // TODO: Uncomment this code when webext-storage component is integrated in android
 | 
| 99 | 157 |   // pub use webext_storage;
 | 
| 100 | 158 | |
| 101 | -diff --git a/publish.gradle b/publish.gradle
 | 
|
| 102 | -index 71f5d55b9..659e26489 100644
 | 
|
| 103 | ---- a/publish.gradle
 | 
|
| 104 | -+++ b/publish.gradle
 | 
|
| 105 | -@@ -194,7 +194,11 @@ ext.configureUniFFIBindgen = { udlFilePath ->
 | 
|
| 106 | -         def uniffiGeneratedPath = "generated/source/uniffi/${variant.name}/java"
 | 
|
| 107 | -         def t = tasks.register("generate${variant.name.capitalize()}UniFFIBindings", Exec) {
 | 
|
| 108 | -             workingDir project.rootDir
 | 
|
| 109 | --            commandLine '/usr/bin/env', 'cargo', 'uniffi-bindgen', 'generate', "${project.projectDir}/${udlFilePath}", '--language', 'kotlin', '--out-dir', "${buildDir}/${uniffiGeneratedPath}"
 | 
|
| 110 | -+            if (udlFilePath.contains("places")) {
 | 
|
| 111 | -+                commandLine '/usr/bin/env', 'cargo', 'uniffi-bindgen', 'generate', "${project.projectDir}/${udlFilePath}", '--language', 'kotlin', '--out-dir', "${buildDir}/${uniffiGeneratedPath}"
 | 
|
| 112 | -+            } else {
 | 
|
| 113 | -+                commandLine '/usr/bin/env', "${rootProject.projectDir}/uniffi-rs/uniffi-bindgen", 'generate', "${project.projectDir}/${udlFilePath}", '--language', 'kotlin', '--out-dir', "${buildDir}/${uniffiGeneratedPath}"
 | 
|
| 114 | -+            }
 | 
|
| 115 | -             outputs.dir "${buildDir}/${uniffiGeneratedPath}"
 | 
|
| 116 | -             // Re-generate if the interface definition changes.
 | 
|
| 117 | -             inputs.file "${project.projectDir}/${udlFilePath}" | 
| 1 | -diff --git a/components/support/nimbus-fml/src/intermediate_representation.rs b/components/support/nimbus-fml/src/intermediate_representation.rs
 | 
|
| 2 | -index 97d545672..249406a0c 100644
 | 
|
| 3 | ---- a/components/support/nimbus-fml/src/intermediate_representation.rs
 | 
|
| 4 | -+++ b/components/support/nimbus-fml/src/intermediate_representation.rs
 | 
|
| 5 | -@@ -237,10 +237,10 @@ pub struct FeatureManifest {
 | 
|
| 6 | -     pub(crate) about: AboutBlock,
 | 
|
| 7 | -  | 
|
| 8 | -     #[serde(default)]
 | 
|
| 9 | --    pub(crate) imported_features: HashMap<ModuleId, BTreeSet<String>>,
 | 
|
| 10 | -+    pub(crate) imported_features: BTreeMap<ModuleId, BTreeSet<String>>,
 | 
|
| 11 | -  | 
|
| 12 | -     #[serde(default)]
 | 
|
| 13 | --    pub(crate) all_imports: HashMap<ModuleId, FeatureManifest>,
 | 
|
| 14 | -+    pub(crate) all_imports: BTreeMap<ModuleId, FeatureManifest>,
 | 
|
| 15 | - }
 | 
|
| 16 | -  | 
|
| 17 | - impl TypeFinder for FeatureManifest {
 | 
|
| 18 | -diff --git a/components/support/nimbus-fml/src/parser.rs b/components/support/nimbus-fml/src/parser.rs
 | 
|
| 19 | -index 49cace525..cdf692b86 100644
 | 
|
| 20 | ---- a/components/support/nimbus-fml/src/parser.rs
 | 
|
| 21 | -+++ b/components/support/nimbus-fml/src/parser.rs
 | 
|
| 22 | -@@ -223,7 +223,7 @@ impl Parser {
 | 
|
| 23 | -         &self,
 | 
|
| 24 | -         current: &FilePath,
 | 
|
| 25 | -         channel: Option<&str>,
 | 
|
| 26 | --        imports: &mut HashMap<ModuleId, FeatureManifest>,
 | 
|
| 27 | -+        imports: &mut BTreeMap<ModuleId, FeatureManifest>,
 | 
|
| 28 | -         // includes: &mut HashSet<ModuleId>,
 | 
|
| 29 | -     ) -> Result<ModuleId> {
 | 
|
| 30 | -         let id = current.try_into()?;
 | 
|
| 31 | -@@ -253,7 +253,7 @@ impl Parser {
 | 
|
| 32 | -         // This loop does the work of merging the default blocks back into the imported manifests.
 | 
|
| 33 | -         // We'll then attach all the manifests to the root (i.e. the one we're generating code for today), in `imports`.
 | 
|
| 34 | -         // We associate only the feature ids with the manifest we're loading in this method.
 | 
|
| 35 | --        let mut imported_feature_id_map = HashMap::new();
 | 
|
| 36 | -+        let mut imported_feature_id_map = BTreeMap::new();
 | 
|
| 37 | -  | 
|
| 38 | -         for block in &frontend.imports {
 | 
|
| 39 | -             // 1. Load the imported manifests in to the hash map.
 | 
|
| 40 | -@@ -328,7 +328,7 @@ impl Parser {
 | 
|
| 41 | -         &self,
 | 
|
| 42 | -         channel: Option<&str>,
 | 
|
| 43 | -     ) -> Result<FeatureManifest, FMLError> {
 | 
|
| 44 | --        let mut manifests = HashMap::new();
 | 
|
| 45 | -+        let mut manifests = BTreeMap::new();
 | 
|
| 46 | -         let id = self.load_imports(&self.source, channel, &mut manifests)?;
 | 
|
| 47 | -         let mut fm = manifests
 | 
|
| 48 | -             .remove(&id) | 
| ... | ... | @@ -6,8 +6,8 @@ | 
| 6 | 6 |      gradle_tarfile => c("input_files_by_name/gradle"),
 | 
| 7 | 7 |    }) %]
 | 
| 8 | 8 |  pushd /var/tmp/dist/android-toolchain/android-sdk-linux/build-tools/
 | 
| 9 | -unzip $rootdir/'[% c("input_files_by_name/build_tools_30") %]'
 | 
|
| 10 | -mv android-11 30.0.3
 | 
|
| 9 | +unzip $rootdir/'[% c("input_files_by_name/build_tools_35") %]'
 | 
|
| 10 | +mv android-15 35.0
 | 
|
| 11 | 11 |  popd
 | 
| 12 | 12 | |
| 13 | 13 |  distdir=/var/tmp/dist/[% project %]
 | 
| ... | ... | @@ -73,6 +73,19 @@ tar -xf $rootdir/[% c('input_files_by_name/uniffi-rs') %] | 
| 73 | 73 |  # latest versions of dependencies sometimes.
 | 
| 74 | 74 |  sed -i '$ s/$/-TORBROWSER/' version.txt
 | 
| 75 | 75 | |
| 76 | +pushd libs
 | 
|
| 77 | +ln -s $rootdir/[% c("input_files_by_name/nss") %] ./
 | 
|
| 78 | +ln -s $rootdir/bug_13028.patch
 | 
|
| 79 | +patch -p2 < $rootdir/apply-bug-13028.diff
 | 
|
| 80 | +patch -p2 < $rootdir/no-ndk-lookup.diff
 | 
|
| 81 | +./build-all.sh desktop
 | 
|
| 82 | +./build-all.sh android
 | 
|
| 83 | +popd
 | 
|
| 84 | +  | 
|
| 85 | +pushd megazords/full
 | 
|
| 86 | +NSS_DIR=$(pwd)/../../libs/desktop/linux-x86-64/nss cargo build --target-dir=$(pwd)/target
 | 
|
| 87 | +popd
 | 
|
| 88 | +  | 
|
| 76 | 89 |  cp $rootdir/cargo-no-build.sh megazords/full/android/
 | 
| 77 | 90 |  chmod +x megazords/full/android/cargo-no-build.sh
 | 
| 78 | 91 |  patch -p1 < $rootdir/a-s-noop.diff
 | 
| ... | ... | @@ -83,15 +96,6 @@ cp $builddir/uniffi-rs/uniffi-bindgen glean-core/android-native/ | 
| 83 | 96 |  patch -p1 < $rootdir/glean-noop.diff
 | 
| 84 | 97 |  popd
 | 
| 85 | 98 | |
| 86 | -pushd libs
 | 
|
| 87 | -ln -s $rootdir/[% c("input_files_by_name/nss") %] ./
 | 
|
| 88 | -ln -s $rootdir/bug_13028.patch
 | 
|
| 89 | -patch -p2 < $rootdir/apply-bug-13028.diff
 | 
|
| 90 | -patch -p2 < $rootdir/no-ndk-lookup.diff
 | 
|
| 91 | -./build-all.sh desktop
 | 
|
| 92 | -./build-all.sh android
 | 
|
| 93 | -popd
 | 
|
| 94 | -  | 
|
| 95 | 99 |  [% IF c('var/fetch_gradle_dependencies') %]
 | 
| 96 | 100 |    # XXX: `assemble` is still not enough to see all fetched dependencies via
 | 
| 97 | 101 |    # Gradle's --debug. See: tor-browser-build#40056.
 | 
| ... | ... | @@ -104,8 +108,6 @@ popd | 
| 104 | 108 |    export LC_ALL=C.UTF-8
 | 
| 105 | 109 |    export LANG=C.UTF-8
 | 
| 106 | 110 |    patch -p1 < $rootdir/local-repository.diff
 | 
| 107 | -  patch -p1 < $rootdir/ohttp-no-git.diff
 | 
|
| 108 | -  patch -p1 < $rootdir/bug40485-nimbus-fml-reproducibility.diff
 | 
|
| 109 | 111 |    patch -p1 < $rootdir/offline-nimbus-fml.diff
 | 
| 110 | 112 |    patch -p1 < $rootdir/41422-disable-viaduct.diff
 | 
| 111 | 113 |    gradle_flags="--offline --no-daemon"
 | 
| 1 | 1 |  # vim: filetype=yaml sw=2
 | 
| 2 | -version: 128.0.1
 | 
|
| 3 | -git_hash: 0e4777f4133a98f44bca164fcf0406e8f706dbe4
 | 
|
| 2 | +version: 140.0
 | 
|
| 3 | +git_hash: 8ee6cb6a23f96ff8e2161926441aea72d6f09249
 | 
|
| 4 | 4 |  git_url: https://github.com/mozilla/application-services
 | 
| 5 | 5 |  git_submodule: 1
 | 
| 6 | 6 |  container:
 | 
| ... | ... | @@ -8,11 +8,11 @@ container: | 
| 8 | 8 | |
| 9 | 9 |  var:
 | 
| 10 | 10 |    # This should be updated when the list of gradle dependencies is changed.
 | 
| 11 | -  gradle_dependencies_version: 11
 | 
|
| 12 | -  gradle_version: 8.8
 | 
|
| 13 | -  glean_parser: 14.0.1
 | 
|
| 14 | -  nss_version: '3.101'
 | 
|
| 15 | -  nspr_version: '4.35'
 | 
|
| 11 | +  gradle_dependencies_version: 12
 | 
|
| 12 | +  gradle_version: 8.13
 | 
|
| 13 | +  glean_parser: 17.1.0
 | 
|
| 14 | +  nss_version: '3.110'
 | 
|
| 15 | +  nspr_version: '4.36'
 | 
|
| 16 | 16 | |
| 17 | 17 |  steps:
 | 
| 18 | 18 |    build:
 | 
| ... | ... | @@ -21,7 +21,7 @@ steps: | 
| 21 | 21 |        # Due to some issue in application-service causing non matching
 | 
| 22 | 22 |        # builds when build time differ a lot, we need to do periodic rebuilds:
 | 
| 23 | 23 |        # https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/merge_requests/937#note_3009480
 | 
| 24 | -      rebuild_date: '2024-09-12'
 | 
|
| 24 | +      rebuild_date: '2025-06-12'
 | 
|
| 25 | 25 |        arch_deps:
 | 
| 26 | 26 |          # Needed to build NSS
 | 
| 27 | 27 |          - gyp
 | 
| ... | ... | @@ -43,16 +43,16 @@ steps: | 
| 43 | 43 |        - project: uniffi-rs
 | 
| 44 | 44 |          name: uniffi-rs
 | 
| 45 | 45 |          pkg_type: build
 | 
| 46 | -      # Only Application Services currently requires build tools 30.0.3.
 | 
|
| 46 | +      # Only Application Services currently requires build tools 35.
 | 
|
| 47 | 47 |        # So, download them only here, rather than adding them to the shared
 | 
| 48 | 48 |        # toolchain.
 | 
| 49 | -      - URL: 'https://dl.google.com/android/repository/build-tools_r30.0.3-linux.zip'
 | 
|
| 50 | -        name: build_tools_30
 | 
|
| 51 | -        sha256sum: 24593500aa95d2f99fb4f10658aae7e65cb519be6cd33fa164f15f27f3c4a2d6
 | 
|
| 49 | +      - URL: 'https://dl.google.com/android/repository/build-tools_r35_linux.zip'
 | 
|
| 50 | +        name: build_tools_35
 | 
|
| 51 | +        sha256sum: bd3a4966912eb8b30ed0d00b0cda6b6543b949d5ffe00bea54c04c81e1561d88
 | 
|
| 52 | 52 |        # NSS version ans sha256 are in libs/build-all.sh.
 | 
| 53 | 53 |        - URL: 'https://ftp.mozilla.org/pub/security/nss/releases/NSS_[% c("var/nss_version") | replace("\\.", "_") %]_RTM/src/nss-[% c("var/nss_version") %]-with-nspr-[% c("var/nspr_version") %].tar.gz'
 | 
| 54 | 54 |          name: nss
 | 
| 55 | -        sha256sum: 566faa9283ff3d9a7d6c44272df6e4330e3e06ca4e841a68840d31b27c9161c4
 | 
|
| 55 | +        sha256sum: 96114bef9e9692dda6e7793da26fedef0dc0449c3644ebe1122464e599a39dc0
 | 
|
| 56 | 56 |        - filename: 'gradle-dependencies-[% c("var/gradle_dependencies_version") %]'
 | 
| 57 | 57 |          name: gradle-dependencies
 | 
| 58 | 58 |          exec: '[% INCLUDE "fetch-gradle-dependencies" %]'
 | 
| ... | ... | @@ -65,19 +65,14 @@ steps: | 
| 65 | 65 |          project: application-services
 | 
| 66 | 66 |          pkg_type: cargo_vendor
 | 
| 67 | 67 |          norec:
 | 
| 68 | -          sha256sum: 92ce1131b35bf78d86362670ba7e4930ecdd1117694996d7cce850e4860f90b6
 | 
|
| 68 | +          sha256sum: 4cf0235b525b5ce1d8bcc40e9763a13fd0e79c773749b900b4d7420551cf5114
 | 
|
| 69 | 69 |        - filename: local-repository.diff
 | 
| 70 | 70 |          enable: '[% !c("var/fetch_gradle_dependencies") %]'
 | 
| 71 | 71 |        - filename: gen_gradle_deps_file.sh
 | 
| 72 | 72 |          enable: '[% c("var/fetch_gradle_dependencies") %]'
 | 
| 73 | 73 |        - filename: bug_13028.patch
 | 
| 74 | 74 |        - filename: apply-bug-13028.diff
 | 
| 75 | -      # Delete when this patch is included upstream
 | 
|
| 76 | -      - filename: bug40485-nimbus-fml-reproducibility.diff
 | 
|
| 77 | 75 |        - filename: no-ndk-lookup.diff
 | 
| 78 | -      # as-ohttp-client lists both the version for ohttp and a git repo + rev,
 | 
|
| 79 | -      # but this breaks the vendoring for offline builds.
 | 
|
| 80 | -      - filename: ohttp-no-git.diff
 | 
|
| 81 | 76 |        - filename: offline-nimbus-fml.diff
 | 
| 82 | 77 |        - filename: glean-noop.diff
 | 
| 83 | 78 |        - filename: a-s-noop.diff
 | 
| 1 | 1 |  diff --git a/glean-core/android-native/build.gradle b/glean-core/android-native/build.gradle
 | 
| 2 | -index 48769651..ade00ec3 100644
 | 
|
| 2 | +index 53716d523..d38af8320 100644
 | 
|
| 3 | 3 |  --- a/glean-core/android-native/build.gradle
 | 
| 4 | 4 |  +++ b/glean-core/android-native/build.gradle
 | 
| 5 | -@@ -57,6 +57,8 @@ android {
 | 
|
| 5 | +@@ -48,6 +48,8 @@ android {
 | 
|
| 6 | 6 |   }
 | 
| 7 | 7 | |
| 8 | 8 |   cargo {
 | 
| ... | ... | @@ -12,15 +12,15 @@ index 48769651..ade00ec3 100644 | 
| 12 | 12 |       module = '../bundle-android'
 | 
| 13 | 13 | |
| 14 | 14 |  diff --git a/glean-core/android/build.gradle b/glean-core/android/build.gradle
 | 
| 15 | -index 3568e40b..05f28296 100644
 | 
|
| 15 | +index 7748378b4..5af06b1c3 100644
 | 
|
| 16 | 16 |  --- a/glean-core/android/build.gradle
 | 
| 17 | 17 |  +++ b/glean-core/android/build.gradle
 | 
| 18 | -@@ -221,7 +221,7 @@ android.libraryVariants.all { variant ->
 | 
|
| 19 | -     def udlFilePath = "../src/glean.udl"
 | 
|
| 20 | -     def t = tasks.register("generate${variant.name.capitalize()}UniFFIBindings", Exec) {
 | 
|
| 21 | -         workingDir project.rootDir
 | 
|
| 22 | --        commandLine 'cargo', 'uniffi-bindgen', 'generate', '--no-format', "${project.projectDir}/${udlFilePath}", '--language', 'kotlin', '--out-dir', "${buildDir}/${uniffiGeneratedPath}"
 | 
|
| 23 | -+        commandLine '${rootDir}/glean-core/android-native/uniffi-bindgen', 'generate', '--no-format', "${project.projectDir}/${udlFilePath}", '--language', 'kotlin', '--out-dir', "${buildDir}/${uniffiGeneratedPath}"
 | 
|
| 24 | -         outputs.dir "${buildDir}/${uniffiGeneratedPath}"
 | 
|
| 25 | -         // Re-generate if the interface definition changes.
 | 
|
| 26 | -         inputs.file "${project.projectDir}/../src/glean.udl" | 
|
| 18 | +@@ -197,7 +197,7 @@ def generateUniffiBindings = tasks.register("generateUniffiBindings") {
 | 
|
| 19 | +     doFirst {
 | 
|
| 20 | +         exec {
 | 
|
| 21 | +             workingDir project.rootDir
 | 
|
| 22 | +-            commandLine 'cargo', 'uniffi-bindgen', 'generate', '--no-format', "${project.projectDir}/${udlFilePath}", '--language', 'kotlin', '--out-dir', UNIFFI_OUT_DIR.get()
 | 
|
| 23 | ++            commandLine '${rootDir}/glean-core/android-native/uniffi-bindgen', 'generate', '--no-format', "${project.projectDir}/${udlFilePath}", '--language', 'kotlin', '--out-dir', UNIFFI_OUT_DIR.get()
 | 
|
| 24 | +         }
 | 
|
| 25 | +     }
 | 
|
| 26 | +     outputs.dir UNIFFI_OUT_DIR | 
| ... | ... | @@ -8,7 +8,7 @@ if (m/^\\s*compileSdkVersion:\\s([^"]*),/) { | 
| 8 | 8 |  }
 | 
| 9 | 9 |  EOF
 | 
| 10 | 10 |  needed=$(cat build.gradle | perl -ne "$p")
 | 
| 11 | -current=34
 | 
|
| 11 | +current='[% pc("android-toolchain", "version") %]'
 | 
|
| 12 | 12 |  check_update_needed compileSdkVersion "$needed" "$current"
 | 
| 13 | 13 | |
| 14 | 14 | |
| ... | ... | @@ -48,12 +48,12 @@ current='[% c("var/nss_version") %]-with-nspr-[% c("var/nspr_version") %]' | 
| 48 | 48 |  check_update_needed nss-nspr "$needed" "$current"
 | 
| 49 | 49 | |
| 50 | 50 |  # uniffi
 | 
| 51 | -read -d '' p << 'EOF' || true
 | 
|
| 52 | -if (m/^\\s*uniffi\\s*=\\s*"([^"]*)"/) {
 | 
|
| 53 | -  print $1;
 | 
|
| 54 | -  exit;
 | 
|
| 55 | -}
 | 
|
| 56 | -EOF
 | 
|
| 57 | -needed=$(cat Cargo.toml | perl -ne "$p")
 | 
|
| 51 | +p='while (<>) {
 | 
|
| 52 | +  if (m/^\s*uniffi\s*=\s*\{[^}]*version\s*=\s*"([^"]*)"/) {
 | 
|
| 53 | +    print $1;
 | 
|
| 54 | +    exit;
 | 
|
| 55 | +  }
 | 
|
| 56 | +}'
 | 
|
| 57 | +needed=$(cat components/autofill/Cargo.toml | perl -ne "$p")
 | 
|
| 58 | 58 |  current='[% pc("uniffi-rs", "version") %]'
 | 
| 59 | 59 |  check_update_needed uniffi "$needed" "$current" | 
| 1 | 1 |  diff --git a/build.gradle b/build.gradle
 | 
| 2 | -index b22a0737..d335aa5b 100644
 | 
|
| 2 | +index bd516e58c..b30d552c9 100644
 | 
|
| 3 | 3 |  --- a/build.gradle
 | 
| 4 | 4 |  +++ b/build.gradle
 | 
| 5 | -@@ -39,6 +39,13 @@ buildscript {
 | 
|
| 6 | -     ]
 | 
|
| 7 | - 
 | 
|
| 5 | +@@ -14,6 +14,14 @@ buildscript {
 | 
|
| 6 | +     }
 | 
|
| 7 | +  | 
|
| 8 | 8 |       repositories {
 | 
| 9 | 9 |  +        maven {
 | 
| 10 | 10 |  +            url "file:///var/tmp/dist/gradle-dependencies"
 | 
| ... | ... | @@ -13,11 +13,12 @@ index b22a0737..d335aa5b 100644 | 
| 13 | 13 |  +                mavenPom()
 | 
| 14 | 14 |  +            }
 | 
| 15 | 15 |  +        }
 | 
| 16 | ++
 | 
|
| 16 | 17 |           mavenCentral()
 | 
| 17 | 18 |           google()
 | 
| 18 | -         jcenter()
 | 
|
| 19 | -@@ -88,6 +95,13 @@ apply plugin: 'de.undercouch.download'
 | 
|
| 20 | - 
 | 
|
| 19 | +         maven {
 | 
|
| 20 | +@@ -59,6 +67,14 @@ plugins {
 | 
|
| 21 | +  | 
|
| 21 | 22 |   allprojects {
 | 
| 22 | 23 |       repositories {
 | 
| 23 | 24 |  +        maven {
 | 
| ... | ... | @@ -27,11 +28,12 @@ index b22a0737..d335aa5b 100644 | 
| 27 | 28 |  +                mavenPom()
 | 
| 28 | 29 |  +            }
 | 
| 29 | 30 |  +        }
 | 
| 31 | ++
 | 
|
| 30 | 32 |           google()
 | 
| 31 | -         jcenter()
 | 
|
| 33 | +         mavenCentral()
 | 
|
| 32 | 34 |           maven {
 | 
| 33 | 35 |  diff --git a/settings.gradle b/settings.gradle
 | 
| 34 | -index f652bd02..8c30a368 100644
 | 
|
| 36 | +index 4117bc0d3..f1b028dad 100644
 | 
|
| 35 | 37 |  --- a/settings.gradle
 | 
| 36 | 38 |  +++ b/settings.gradle
 | 
| 37 | 39 |  @@ -1,6 +1,19 @@
 | 
| ... | ... | @@ -52,37 +54,39 @@ index f652bd02..8c30a368 100644 | 
| 52 | 54 |  +}
 | 
| 53 | 55 |  +
 | 
| 54 | 56 |   import org.yaml.snakeyaml.Yaml
 | 
| 55 | - 
 | 
|
| 56 | - includeBuild('tools/nimbus-gradle-plugin') {
 | 
|
| 57 | -@@ -14,6 +27,13 @@ buildscript {
 | 
|
| 58 | -         classpath 'org.yaml:snakeyaml:2.0'
 | 
|
| 59 | -     }
 | 
|
| 60 | -     repositories {
 | 
|
| 61 | -+        maven {
 | 
|
| 62 | -+            url "file:///var/tmp/dist/gradle-dependencies"
 | 
|
| 63 | -+            metadataSources {
 | 
|
| 64 | -+                gradleMetadata()
 | 
|
| 65 | -+                mavenPom()
 | 
|
| 57 | +  | 
|
| 58 | + // We prefer `appServicesRootDir` over `rootDir` to help us on the path to the monorepo.
 | 
|
| 59 | +@@ -23,6 +36,14 @@ buildscript {
 | 
|
| 60 | +     if (!gradle.root.hasProperty("mozconfig")) {
 | 
|
| 61 | +         // in app-services
 | 
|
| 62 | +         repositories {
 | 
|
| 63 | ++            maven {
 | 
|
| 64 | ++                url "file:///var/tmp/dist/gradle-dependencies"
 | 
|
| 65 | ++                metadataSources {
 | 
|
| 66 | ++                    gradleMetadata()
 | 
|
| 67 | ++                    mavenPom()
 | 
|
| 68 | ++                }
 | 
|
| 66 | 69 |  +            }
 | 
| 67 | -+        }
 | 
|
| 68 | -         jcenter()
 | 
|
| 69 | -     }
 | 
|
| 70 | - }
 | 
|
| 70 | ++
 | 
|
| 71 | +             mavenCentral()
 | 
|
| 72 | +         }
 | 
|
| 73 | +     } else {
 | 
|
| 71 | 74 |  diff --git a/tools/nimbus-gradle-plugin/settings.gradle b/tools/nimbus-gradle-plugin/settings.gradle
 | 
| 72 | -index 7db19be0..1f36b991 100644
 | 
|
| 75 | +index 7d907f057..c0d213503 100644
 | 
|
| 73 | 76 |  --- a/tools/nimbus-gradle-plugin/settings.gradle
 | 
| 74 | 77 |  +++ b/tools/nimbus-gradle-plugin/settings.gradle
 | 
| 75 | -@@ -8,6 +8,13 @@ buildscript {
 | 
|
| 76 | -         classpath 'org.yaml:snakeyaml:2.0'
 | 
|
| 77 | -     }
 | 
|
| 78 | -     repositories {
 | 
|
| 79 | -+        maven {
 | 
|
| 80 | -+            url "file:///var/tmp/dist/gradle-dependencies"
 | 
|
| 81 | -+            metadataSources {
 | 
|
| 82 | -+                gradleMetadata()
 | 
|
| 83 | -+                mavenPom()
 | 
|
| 78 | +@@ -14,6 +14,14 @@ buildscript {
 | 
|
| 79 | +     if (!gradle.root.hasProperty("mozconfig")) {
 | 
|
| 80 | +         // in app-services
 | 
|
| 81 | +         repositories {
 | 
|
| 82 | ++            maven {
 | 
|
| 83 | ++                url "file:///var/tmp/dist/gradle-dependencies"
 | 
|
| 84 | ++                metadataSources {
 | 
|
| 85 | ++                    gradleMetadata()
 | 
|
| 86 | ++                    mavenPom()
 | 
|
| 87 | ++                }
 | 
|
| 84 | 88 |  +            }
 | 
| 85 | -+        }
 | 
|
| 86 | -         jcenter()
 | 
|
| 87 | -     }
 | 
|
| 88 | - } | 
|
| 89 | ++
 | 
|
| 90 | +             mavenCentral()
 | 
|
| 91 | +         }
 | 
|
| 92 | +     } else { | 
| 1 | -diff --git a/components/as-ohttp-client/Cargo.toml b/components/as-ohttp-client/Cargo.toml
 | 
|
| 2 | -index fd45a058b..b7070fc15 100644
 | 
|
| 3 | ---- a/components/as-ohttp-client/Cargo.toml
 | 
|
| 4 | -+++ b/components/as-ohttp-client/Cargo.toml
 | 
|
| 5 | -@@ -19,8 +19,8 @@ rusqlite = { workspace = true, features = ["bundled"] }
 | 
|
| 6 | - [dependencies.ohttp]
 | 
|
| 7 | - version = "0.4"
 | 
|
| 8 | - default-features = false
 | 
|
| 9 | --git = "https://github.com/martinthomson/ohttp.git"
 | 
|
| 10 | --rev = "fc3f4c787d1f6a6a87bf5194f7152cc906b02973"
 | 
|
| 11 | -+# git = "https://github.com/martinthomson/ohttp.git"
 | 
|
| 12 | -+# rev = "fc3f4c787d1f6a6a87bf5194f7152cc906b02973"
 | 
|
| 13 | - features = ["client", "server", "app-svc", "external-sqlite"]
 | 
|
| 14 | - 
 | 
|
| 15 | - [build-dependencies] | 
| ... | ... | @@ -19,13 +19,15 @@ var: | 
| 19 | 19 |      - torsocks
 | 
| 20 | 20 |    glean_wheels_sha256sum:
 | 
| 21 | 21 |      14.0.1: 95f01d0e158ae7968680029b7d9c2908895e1d1ec1ba4e6a044648a05af4ee0c
 | 
| 22 | +    17.1.0: d96ef1995676fc3b838efb84283294befd5060ca64eea94fb67ae1f41d422664
 | 
|
| 22 | 23 |    glean_wheels_url:
 | 
| 23 | 24 |      14.0.1: https://build-sources.tbb.torproject.org/glean-wheels-14.0.1.tar.xz
 | 
| 25 | +    17.1.0: https://build-sources.tbb.torproject.org/glean-wheels-17.1.0.tar.xz
 | 
|
| 24 | 26 | |
| 25 | 27 |  steps:
 | 
| 26 | 28 |    create_glean_deps_tarball:
 | 
| 27 | 29 |      git_url: ''
 | 
| 28 | -    version: 14.0.1
 | 
|
| 30 | +    version: 17.1.0
 | 
|
| 29 | 31 |      filename: 'glean-wheels-[% c("version") %].tar.xz'
 | 
| 30 | 32 |      build_log: '-'
 | 
| 31 | 33 |      container:
 | 
| ... | ... | @@ -7,6 +7,7 @@ container: | 
| 7 | 7 |  var:
 | 
| 8 | 8 |    gradle_sha256sum:
 | 
| 9 | 9 |      8.8: a4b4158601f8636cdeeab09bd76afb640030bb5b144aafe261a5e8af027dc612
 | 
| 10 | +    8.13: 20f1b1176237254a6fc204d8434196fa11a4cfb387567519c61556e8710aed78
 | 
|
| 10 | 11 | |
| 11 | 12 |  input_files:
 | 
| 12 | 13 |    - project: container-image
 | 
| 1 | 1 |  # vim: filetype=yaml sw=2
 | 
| 2 | -version: 0.27.1
 | 
|
| 3 | -git_hash: bfb52effb0292f16d4c030d622887781639cbd1f
 | 
|
| 4 | -git_url: https://gitlab.torproject.org/tpo/applications/uniffi-rs.git
 | 
|
| 2 | +version: 0.29.0
 | 
|
| 3 | +git_hash: c69eba9eb08b16a66aab7b25df6c55d0b60541db
 | 
|
| 4 | +git_url: https://gitlab.torproject.org/tpo/applications/uniffi-rs
 | 
|
| 5 | 5 |  container:
 | 
| 6 | 6 |    use_container: 1
 | 
| 7 | 7 | |
| ... | ... | @@ -17,4 +17,4 @@ steps: | 
| 17 | 17 |          project: uniffi-rs
 | 
| 18 | 18 |          pkg_type: cargo_vendor
 | 
| 19 | 19 |          norec:
 | 
| 20 | -          sha256sum: 12a61a3dbe65a3946ed58fff3d849d11c9ade5818e2ef5771d2a2a531e25f553 | 
|
| 20 | +          sha256sum: 23c79da9169064f42c34b9dadfee9dcf5ed251f9843615ca3e9a0e59a49f581d |