
brizental pushed to branch main at The Tor Project / Applications / tor-browser-build Commits: 83acc092 by Beatriz Rizental at 2025-06-18T18:36:17+02:00 Bug 41444: Fix android artifact generation - - - - - dde97fb2 by Beatriz Rizental at 2025-06-18T18:36:19+02:00 Bug 41444: Fix macos and windows artifact generation There were multiple issues. For MacOS there were missing tools, namely hfsplus and libdmg, the location of some bundle files were different than expected and teh generated artifacts were not the same as the ones in Linux, so we were copying the wrong things. Finally, we were not taking into account universal builds when copying artifacts. For Windows we were just not copying the right artifacts. - - - - - d5e2db25 by Beatriz Rizental at 2025-06-19T14:16:37+02:00 Bug 41444: Put geckoview build artifacts in separate folders Otherwise different architecture artifacts override each other. Also stop compressing the final folder. It's not worth it, the size difference is minimal. - - - - - 27 changed files: - projects/browser/build - projects/browser/build.android - projects/browser/config - projects/browser/Bundle-Data/BaseBrowser.dmg/.VolumeIcon.icns → projects/common/dmg-root/BaseBrowser.dmg/.VolumeIcon.icns - projects/browser/Bundle-Data/BaseBrowser.dmg/.background/background.tiff → projects/common/dmg-root/BaseBrowser.dmg/.background/background.tiff - projects/browser/Bundle-Data/BaseBrowser.dmg/alpha.DS_Store → projects/common/dmg-root/BaseBrowser.dmg/alpha.DS_Store - projects/browser/Bundle-Data/BaseBrowser.dmg/nightly.DS_Store → projects/common/dmg-root/BaseBrowser.dmg/nightly.DS_Store - projects/browser/Bundle-Data/BaseBrowser.dmg/release.DS_Store → projects/common/dmg-root/BaseBrowser.dmg/release.DS_Store - projects/browser/Bundle-Data/MullvadBrowser.dmg/.VolumeIcon.icns → projects/common/dmg-root/MullvadBrowser.dmg/.VolumeIcon.icns - projects/browser/Bundle-Data/MullvadBrowser.dmg/.background/background.png → projects/common/dmg-root/MullvadBrowser.dmg/.background/background.png - projects/browser/Bundle-Data/MullvadBrowser.dmg/alpha.DS_Store → projects/common/dmg-root/MullvadBrowser.dmg/alpha.DS_Store - projects/browser/Bundle-Data/MullvadBrowser.dmg/nightly.DS_Store → projects/common/dmg-root/MullvadBrowser.dmg/nightly.DS_Store - projects/browser/Bundle-Data/MullvadBrowser.dmg/release.DS_Store → projects/common/dmg-root/MullvadBrowser.dmg/release.DS_Store - projects/browser/Bundle-Data/TorBrowser.dmg/.VolumeIcon.icns → projects/common/dmg-root/TorBrowser.dmg/.VolumeIcon.icns - projects/browser/Bundle-Data/TorBrowser.dmg/.background/dmg-window_2x.png → projects/common/dmg-root/TorBrowser.dmg/.background/dmg-window_2x.png - projects/browser/Bundle-Data/TorBrowser.dmg/alpha.DS_Store → projects/common/dmg-root/TorBrowser.dmg/alpha.DS_Store - projects/browser/Bundle-Data/TorBrowser.dmg/nightly.DS_Store → projects/common/dmg-root/TorBrowser.dmg/nightly.DS_Store - projects/browser/Bundle-Data/TorBrowser.dmg/release.DS_Store → projects/common/dmg-root/TorBrowser.dmg/release.DS_Store - projects/firefox/build - projects/firefox/config - projects/firefox/mozconfig - projects/geckoview/build - projects/geckoview/build_ac_fenix - projects/geckoview/build_apk - projects/geckoview/build_common - projects/geckoview/config - tools/signing/gatekeeper-bundling.sh Changes: ===================================== projects/browser/build ===================================== @@ -217,7 +217,7 @@ tar -C "${TB_STAGE_DIR}" -xf [% c('input_files_by_name/firefox') %]/browser.tar. END; %] [% IF c("var/macos") %] - tar -C "Bundle-Data/[% c('var/ProjectName') %].dmg" -c . | tar -C "$TB_STAGE_DIR" -x + tar -C "$rootdir/dmg-root/[% c('var/ProjectName') %].dmg" -c . | tar -C "$TB_STAGE_DIR" -x pushd "$TB_STAGE_DIR" cp [% c('var/channel') %].DS_Store .DS_Store rm *.DS_Store @@ -429,7 +429,14 @@ cd $distdir popd [% END %] -[% IF c("var/nightly") && c("var/linux") -%] - mkdir -p "$OUTDIR"/artifacts - cp -r $rootdir/[% c('input_files_by_name/firefox') %]/artifacts "$OUTDIR" +[% IF c("var/nightly") -%] + [% IF c("var/macos_universal") -%] + mkdir -p "$OUTDIR"/artifacts/aarch64 + cp -a $rootdir/[% c('input_files_by_name/firefox-aarch64') %]/artifacts/. "$OUTDIR/artifacts/aarch64" + mkdir -p "$OUTDIR"/artifacts/x86_64 + cp -a $rootdir/[% c('input_files_by_name/firefox') %]/artifacts/. "$OUTDIR/artifacts/x86_64" + [% ELSE -%] + mkdir -p "$OUTDIR"/artifacts + cp -a $rootdir/[% c('input_files_by_name/firefox') %]/artifacts "$OUTDIR" + [% END -%] [% END %] ===================================== projects/browser/build.android ===================================== @@ -2,8 +2,6 @@ [% c("var/set_default_env") -%] [% pc(c('var/compiler'), 'var/setup', { compiler_tarfile => c('input_files_by_name/' _ c('var/compiler')) }) %] -tar -xf $rootdir/[% c('input_files_by_name/fenix') %] - # Bundle our extension(s). # # NoScript will be copied over to the profile folder @@ -97,20 +95,22 @@ function generate_apk { rm $aligned_apk } +geckoviewdir="$rootdir/[% c('input_files_by_name/fenix') %]/geckoview" + # Generate the QA APK and unsign patch. qa_apk=[% dest_dir %]/[% c('filename') %]/[% c("var/project-name") %]-qa-[% c("var/osname") %]-[% c("version") %].apk qa_unsign_patch="[% dest_dir %]/[% c('filename') %]/[% c('var/project-name') %]-qa-unsign-[% c('var/osname') %]-[% c('version') %].bspatch" -apk=$rootdir/geckoview/*-[% c("var/abi") %]-*.apk +apk=$geckoviewdir/*-[% c("var/abi") %]-*.apk generate_apk $qa_apk $apk $qa_unsign_patch # Generate the non-optimized APK used for testing and its unsign patch. noopt_apk=[% dest_dir %]/[% c('filename') %]/[% c("var/project-name") %]-noopt-[% c("var/osname") %]-[% c("version") %].apk -noopt_final_apk=$rootdir/geckoview/tests/*-[% c("var/abi") %]-*.apk +noopt_final_apk=$geckoviewdir/tests/*-[% c("var/abi") %]-*.apk generate_apk $noopt_apk $noopt_final_apk # Copy and sign the Android test APK. test_apk=[% dest_dir %]/[% c('filename') %]/[% c("var/project-name") %]-[% c("version") %]-androidTest.apk -cp $rootdir/geckoview/tests/*-androidTest.apk $test_apk +cp $geckoviewdir/tests/*-androidTest.apk $test_apk apksigner sign --verbose --min-sdk-version [% c("var/android_min_api") %] --ks $rootdir/android-qa.keystore --out $test_apk --in $test_apk --ks-key-alias androidqakey --key-pass pass:android --ks-pass pass:android [%IF c("var/tor-browser") -%] @@ -122,5 +122,5 @@ apksigner sign --verbose --min-sdk-version [% c("var/android_min_api") %] --ks $ [% IF c("var/nightly") -%] mkdir -p "[% dest_dir %]/[% c('filename') %]/artifacts" - cp -r $rootdir/geckoview/artifacts [% dest_dir %]/[% c('filename') %] + cp -r $rootdir/[% c('input_files_by_name/fenix') %]/artifacts [% dest_dir %]/[% c('filename') %] [% END %] ===================================== projects/browser/config ===================================== @@ -111,6 +111,8 @@ input_files: enable: '[% ! c("var/android") %]' - filename: Bundle-Data enable: '[% ! c("var/android") %]' + - filename: dmg-root + enable: '[% ! c("var/android") %]' - URL: https://addons.mozilla.org/firefox/downloads/file/4411102/noscript-12.1.1.xp... name: noscript sha256sum: f9639e63ffcfc352036de00e4ff6694bb0ca65a0bb8fbd103bd08f32dc1ff31a ===================================== projects/browser/Bundle-Data/BaseBrowser.dmg/.VolumeIcon.icns → projects/common/dmg-root/BaseBrowser.dmg/.VolumeIcon.icns ===================================== ===================================== projects/browser/Bundle-Data/BaseBrowser.dmg/.background/background.tiff → projects/common/dmg-root/BaseBrowser.dmg/.background/background.tiff ===================================== ===================================== projects/browser/Bundle-Data/BaseBrowser.dmg/alpha.DS_Store → projects/common/dmg-root/BaseBrowser.dmg/alpha.DS_Store ===================================== ===================================== projects/browser/Bundle-Data/BaseBrowser.dmg/nightly.DS_Store → projects/common/dmg-root/BaseBrowser.dmg/nightly.DS_Store ===================================== ===================================== projects/browser/Bundle-Data/BaseBrowser.dmg/release.DS_Store → projects/common/dmg-root/BaseBrowser.dmg/release.DS_Store ===================================== ===================================== projects/browser/Bundle-Data/MullvadBrowser.dmg/.VolumeIcon.icns → projects/common/dmg-root/MullvadBrowser.dmg/.VolumeIcon.icns ===================================== ===================================== projects/browser/Bundle-Data/MullvadBrowser.dmg/.background/background.png → projects/common/dmg-root/MullvadBrowser.dmg/.background/background.png ===================================== ===================================== projects/browser/Bundle-Data/MullvadBrowser.dmg/alpha.DS_Store → projects/common/dmg-root/MullvadBrowser.dmg/alpha.DS_Store ===================================== ===================================== projects/browser/Bundle-Data/MullvadBrowser.dmg/nightly.DS_Store → projects/common/dmg-root/MullvadBrowser.dmg/nightly.DS_Store ===================================== ===================================== projects/browser/Bundle-Data/MullvadBrowser.dmg/release.DS_Store → projects/common/dmg-root/MullvadBrowser.dmg/release.DS_Store ===================================== ===================================== projects/browser/Bundle-Data/TorBrowser.dmg/.VolumeIcon.icns → projects/common/dmg-root/TorBrowser.dmg/.VolumeIcon.icns ===================================== ===================================== projects/browser/Bundle-Data/TorBrowser.dmg/.background/dmg-window_2x.png → projects/common/dmg-root/TorBrowser.dmg/.background/dmg-window_2x.png ===================================== ===================================== projects/browser/Bundle-Data/TorBrowser.dmg/alpha.DS_Store → projects/common/dmg-root/TorBrowser.dmg/alpha.DS_Store ===================================== ===================================== projects/browser/Bundle-Data/TorBrowser.dmg/nightly.DS_Store → projects/common/dmg-root/TorBrowser.dmg/nightly.DS_Store ===================================== ===================================== projects/browser/Bundle-Data/TorBrowser.dmg/release.DS_Store → projects/common/dmg-root/TorBrowser.dmg/release.DS_Store ===================================== ===================================== projects/firefox/build ===================================== @@ -49,6 +49,11 @@ export PATH="/var/tmp/dist/rust/bin:/var/tmp/dist/cbindgen:/var/tmp/dist/node/bi [% END -%] [% END -%] +[% IF c("var/macos") && c("var/nightly") %] + tar -C /var/tmp/dist -xf $rootdir/[% c('input_files_by_name/hfsplus-tools') %] + tar -C /var/tmp/dist -xf $rootdir/[% c('input_files_by_name/libdmg') %] +[% END %] + [% IF c("var/rlbox") -%] tar -C /var/tmp/dist -xf [% c('input_files_by_name/wasi-sysroot') %] export WASI_SYSROOT=/var/tmp/dist/wasi-sysroot @@ -128,16 +133,36 @@ echo "Starting ./mach build $(date)" ./mach build stage-package [% END -%] -[% IF c("var/nightly") && c("var/linux") -%] +[% IF c("var/nightly") -%] echo "Building development artifacts" + + [% IF c("var/macos") -%] + export MOZ_PKG_MAC_BACKGROUND=$rootdir/dmg-root/[% c('var/ProjectName') %].dmg/.background/background.tiff + export MOZ_PKG_MAC_DSSTORE=$rootdir/dmg-root/[% c('var/ProjectName') %].dmg/nightly.DS_Store + export MOZ_PKG_MAC_ICON=$rootdir/dmg-root/[% c('var/ProjectName') %].dmg/.VolumeIcon.icns + [% END -%] ./mach package artifactsdir=[% out_dir %]/artifacts mkdir $artifactsdir + # Copy the artifacts to the target directory # Naming convention is the same as Mozilla uses for their artifacts - cp -a obj-*/dist/*.tar.xz $artifactsdir/target.tar.xz - cp -a obj-*/dist/*.zip $artifactsdir/target.xpt_artifacts.zip + mv obj-*/dist/*.xpt_artifacts.zip $artifactsdir/target.xpt_artifacts.zip + + [% IF c("var/macos") -%] + mv obj-*/dist/*.dmg $artifactsdir/target.dmg + mv obj-*/dist/*.update_framework_artifacts.zip $artifactsdir/target.update_framework_artifacts.zip + [% END -%] + + [% IF c("var/linux") -%] + mv obj-*/dist/*.tar.xz $artifactsdir/target.tar.xz + [% END -%] + + [% IF c("var/windows") -%] + mv obj-*/dist/*.zip $artifactsdir/target.zip + [% END -%] + ./mach python -m mozbuild.action.test_archive common $artifactsdir/target.common.tests.tar.gz [% END %] ===================================== projects/firefox/config ===================================== @@ -249,3 +249,11 @@ input_files: # TorButton patch authored by Arthur Edelstein, from https://github.com/arthuredelstein/torbutton/ branch 2.1.10-namecoin - filename: namecoin-etld.patch enable: '[% c("var/namecoin") %]' + - filename: dmg-root + enable: '[% c("var/macos") && c("var/nightly") %]' + - project: hfsplus-tools + name: hfsplus-tools + enable: '[% c("var/macos") && c("var/nightly") %]' + - project: libdmg-hfsplus + name: libdmg + enable: '[% c("var/macos") && c("var/nightly") %]' ===================================== projects/firefox/mozconfig ===================================== @@ -56,6 +56,12 @@ export TOOLCHAIN_PREFIX=$CROSS_CCTOOLS_PATH/bin/[% c('var/build_target') %]- export DSYMUTIL="$TOOLCHAIN_DIR/clang/bin/dsymutil" + [% IF c("var/nightly") -%] + export MKFSHFS=/var/tmp/dist/hfsplus-tools/newfs_hfs + export DMG_TOOL=/var/tmp/dist/libdmg-hfsplus/dmg + export HFS_TOOL=/var/tmp/dist/libdmg-hfsplus/hfsplus + [% END -%] + export HOST_CFLAGS="-g" export HOST_CXXFLAGS="-g" export HOST_LDFLAGS="-g" ===================================== projects/geckoview/build ===================================== @@ -38,7 +38,7 @@ echo "Starting ./mach build $(date)" echo "Building development artifacts" ./mach package - artifactsdir=[% dest_dir %]/artifacts + artifactsdir=$outdir/artifacts mkdir -p $artifactsdir # Copy the artifacts to the target directory # Naming convention is the same as Mozilla uses for their artifacts @@ -50,16 +50,9 @@ echo "Starting ./mach build $(date)" echo "Build finished, copying the AAR to the to the destination directory $(date)" [% IF !c("var/android_single_arch") -%] - mkdir "$distdir/[% project %]" + mkdir -p "$outdir/[% project %]" # We don't want the debug or "exoplayer" .aars, but the .aar that has `omni` in its name. - find obj-* -type f -name geckoview*omni*.aar -exec cp {} $distdir/[% project %] \; + find obj-* -type f -name geckoview*omni*.aar -exec mv {} $outdir/[% project %] \; [% ELSE -%] [% INCLUDE 'build_ac_fenix' %] [% END -%] - -echo "Starting to package artifacts $(date)" -cd $distdir -[% c('tar', { - tar_src => [ project ], - tar_args => '-caf ' _ dest_dir _ '/' _ c('filename'), - }) %] ===================================== projects/geckoview/build_ac_fenix ===================================== @@ -27,7 +27,7 @@ echo autoPublish.android-components.dir=../android-components > local.properties # Add our localized strings supported_locales="[% tmpl(c('var/locales_mobile').join(' ')) %]" for lang in $supported_locales; do - cp "/var/tmp/dist/translation-fenix/$lang/torbrowser_strings.xml" "app/src/main/res/values-$lang/" + cp "$distdir/translation-fenix/$lang/torbrowser_strings.xml" "app/src/main/res/values-$lang/" done [% END -%] @@ -41,8 +41,8 @@ echo "Building $variant Fenix APK" gradle $GRADLE_FLAGS -PversionName="$version_name" "assemble$variant" echo "Build finished, copying the APK(s) to the destination directory $(date)" -mkdir $distdir/[% project %] -cp $objdir/gradle/build/mobile/android/fenix/app/outputs/apk/fenix/$variant/*.apk $distdir/[% project %] +mkdir -p $outdir/[% project %] +mv $objdir/gradle/build/mobile/android/fenix/app/outputs/apk/fenix/$variant/*.apk $outdir/[% project %] echo "Building non optimized $variant Fenix APK for testing" gradle $GRADLE_FLAGS -PversionName="$version_name" -PdisableOptimization "assemble$variant" @@ -52,9 +52,8 @@ gradle $GRADLE_FLAGS -PversionName="$version_name" -PtestBuildType="$variant" -P echo "Test build finished, copying the APKs to the destination directory $(date)" -mkdir $distdir/[% project %]/tests -cp $objdir/gradle/build/mobile/android/fenix/app/outputs/apk/fenix/$variant/*.apk $distdir/[% project %]/tests -cp $objdir/gradle/build/mobile/android/fenix/app/outputs/apk/androidTest/fenix/$variant/*.apk $distdir/[% project %]/tests +mkdir -p $outdir/[% project %]/tests +mv $objdir/gradle/build/mobile/android/fenix/app/outputs/apk/fenix/$variant/*.apk $outdir/[% project %]/tests +mv $objdir/gradle/build/mobile/android/fenix/app/outputs/apk/androidTest/fenix/$variant/*.apk $outdir/[% project %]/tests popd - ===================================== projects/geckoview/build_apk ===================================== @@ -38,9 +38,3 @@ echo "ac_add_options --with-branding=$branding_dir" >> mozconfig-android-all ./mach build --verbose [% INCLUDE 'build_ac_fenix' %] - -cd $distdir/ -[% c('tar', { - tar_src => [ project ], - tar_args => '-caf ' _ dest_dir _ '/' _ c('filename'), - }) %] ===================================== projects/geckoview/build_common ===================================== @@ -5,7 +5,8 @@ }) %] distdir=/var/tmp/dist builddir=/var/tmp/build -mkdir -p $builddir $distdir +outdir="[% dest_dir _ '/' _ c('filename') -%]" +mkdir -p $builddir $distdir $outdir tar -C $distdir -xf [% c('input_files_by_name/node') %] export PATH="/var/tmp/dist/node/bin:$PATH" ===================================== projects/geckoview/config ===================================== @@ -1,6 +1,6 @@ # vim: filetype=yaml sw=2 version: '[% c("abbrev") %]' -filename: 'geckoview-[% c("version") %]-[% c("var/osname") %]-[% c("var/build_id") %].tar.[% c("compress_tar") %]' +filename: 'geckoview-[% c("version") %]-[% c("var/osname") %]-[% c("var/build_id") %]' git_hash: 'tor-browser-[% c("var/geckoview_version") %]-[% c("var/browser_branch") %]-build[% c("var/browser_build") %]' tag_gpg_id: 1 git_url: https://gitlab.torproject.org/tpo/applications/tor-browser.git @@ -59,7 +59,7 @@ targets: steps: build_apk: - filename: 'geckoview-[% c("version") %]-apks-[% c("var/build_id") %].tar.[% c("compress_tar") %]' + filename: 'geckoview-[% c("version") %]-apks-[% c("var/build_id") %]' version: '[% c("abbrev") %]' build_apk: '[% INCLUDE build_apk %]' input_files: ===================================== tools/signing/gatekeeper-bundling.sh ===================================== @@ -64,7 +64,7 @@ test -d "$macos_signed_dir" || mkdir "$macos_signed_dir" tmpdir="$macos_stapled_dir/tmp" rm -Rf "$tmpdir" mkdir "$tmpdir" -cp -rT "$script_dir/../../projects/browser/Bundle-Data/$ProjName.dmg" "$tmpdir/dmg" +cp -rT "$script_dir/../../projects/common/dmg-root/$ProjName.dmg" "$tmpdir/dmg" tar -C "$tmpdir" -xf "$libdmg_file" tar -C "$tmpdir" -xf "$hfstools_file" View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/compare/8... -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/compare/8... You're receiving this email because of your account on gitlab.torproject.org.