morgan pushed to branch main at The Tor Project / Applications / tor-browser-build
Commits: 8b3ef788 by Nicolas Vigier at 2025-02-19T04:18:14+01:00 Bug 41363: Split update_responses files per platform
To make reverting update for a single platform easier, we split update response files, using a separate directory for each platform.
- - - - - 38dcaae7 by Nicolas Vigier at 2025-02-19T04:19:25+01:00 Bug 41363: Make separate update_responses commit for each platform
- - - - - 7504979e by Nicolas Vigier at 2025-02-19T04:19:29+01:00 Bug 41363: Fix error message about $update_responses_repository_dir being undefined
- - - - -
4 changed files:
- projects/release/create_update_responses_tar - tools/signing/functions - tools/signing/upload-update_responses-to-staticiforme - tools/update-responses/update_responses
Changes:
===================================== projects/release/create_update_responses_tar ===================================== @@ -1,9 +1,10 @@ #!/bin/bash [% c("var/set_default_env") -%] [% SET channel = c('var/channel') -%] +rm -Rf [% shell_quote(c("basedir")) %]/tools/update-responses/htdocs/[% channel %] [% shell_quote(c("basedir")) %]/tools/update-responses/update_responses [% channel %] mkdir -p [% shell_quote(path(dest_dir)) %]/update-responses mv [% shell_quote(c("basedir")) %]/tools/update-responses/htdocs/[% channel %] [% channel %] -chmod 775 [% channel %] -chmod 664 [% channel %]/.htaccess [% channel %]/* +find [% channel %] -type d -exec chmod 775 {} ; +find [% channel %] -type f -exec chmod 664 {} ; tar cf [% shell_quote(path(dest_dir)) %]/update-responses/update-responses-[% channel %]-[% c("version") %].tar [% channel %]
===================================== tools/signing/functions ===================================== @@ -23,7 +23,7 @@ function check_update_responses_repository_dir { if test -z "$update_responses_repository_dir" || ! test -d "$update_responses_repository_dir" then cat << 'EOF' > /dev/stderr -$aus1_repository_dir is not defined, or the directory does not exist +$update_responses_repository_dir is not defined, or the directory does not exist You should clone git@gitlab.torproject.org:tpo/applications/tor-browser-update-responses.git and set $update_responses_repository_dir in set-config.update-responses EOF
===================================== tools/signing/upload-update_responses-to-staticiforme ===================================== @@ -39,8 +39,32 @@ do mv "$file" "$tbb_version_type/$fname" done
+# Keep directory from previous release if they are not in the new release. +# This happens when a release does not include some platforms. +for file in $(ls -1 "$old_ur/$tbb_version_type") +do + test -d "$old_ur/$tbb_version_type/$file" || continue + test -d "$tbb_version_type/$file" && continue + mv -f "$old_ur/$tbb_version_type/$file" "$tbb_version_type/$file" +done + +# Commit each sub-directory separately +for file in $(ls -1 "$tbb_version_type") +do + test -d "$tbb_version_type/$file" || continue + git add "$tbb_version_type/$file" + git add "$tbb_version_type/download-$file.json" + git diff --quiet --cached --exit-code || \ + git commit -m "$tbb_version_type: new version, $tbb_version ($file)" +done + +git add "$tbb_version_type"/download-android-*.json +git diff --quiet --cached --exit-code || \ + git commit -m "$tbb_version_type: new version, $tbb_version (android)" + git add "$tbb_version_type" -git commit -m "$tbb_version_type: new version, $tbb_version" +git diff --quiet --cached --exit-code || \ + git commit -m "$tbb_version_type: new version, $tbb_version" git push
# we just need to push mullvadbrowser's update responses to git, not deploy to staticiforme
===================================== tools/update-responses/update_responses ===================================== @@ -29,7 +29,6 @@ setlocale(LC_ALL, "C");
my $htdocsdir = "$FindBin::Bin/htdocs"; my $config = LoadFile("$FindBin::Bin/config.yml"); -my %htdocsfiles; my $releases_dir = $config->{releases_dir}; $releases_dir = "$FindBin::Bin/$releases_dir" unless $releases_dir =~ m/^//; my @check_errors; @@ -51,12 +50,6 @@ sub get_tmpdir { : ()); }
-sub build_targets_by_os { - exit_error "Unknown build target for OS $_[0]" unless $config->{build_targets}{$_[0]}; - my $r = $config->{build_targets}{$_[0]}; - return ref $r eq 'ARRAY' ? @$r : ($r); -} - sub get_nbprocs { return $ENV{NUM_PROCS} if defined $ENV{NUM_PROCS}; if (-f '/proc/cpuinfo') { @@ -80,19 +73,11 @@ sub setup_martools { }
sub write_htdocs { - my ($channel, $file, $content) = @_; + my ($channel, $dir, $file, $content) = @_; mkdir $htdocsdir unless -d $htdocsdir; mkdir "$htdocsdir/$channel" unless -d "$htdocsdir/$channel"; - write_file("$htdocsdir/$channel/$file", $content); - $htdocsfiles{$channel}->{$file} = 1; -} - -sub clean_htdocs { - my ($channel) = @_; - opendir(my $d, "$htdocsdir/$channel"); - my @files = grep { ! $htdocsfiles{$channel}->{$_} } readdir $d; - closedir $d; - unlink map { "$htdocsdir/$channel/$_" } @files; + mkdir "$htdocsdir/$channel/$dir" unless -d "$htdocsdir/$channel/$dir"; + write_file("$htdocsdir/$channel/$dir/$file", $content); }
sub get_sha512_hex_of_file { @@ -418,24 +403,31 @@ sub write_responses { my $versions_str = join('+', @$versions); foreach my $os (keys %oses) { my $resp = get_response($config, $versions, $os); - write_htdocs($channel, "$versions_str-$os.xml", $resp); + write_htdocs($channel, $os, "$versions_str-$os.xml", $resp); foreach my $from_version (keys %from_versions) { $resp = get_response($config, $versions, $os, $from_version); - write_htdocs($channel, "$from_version-$versions_str-$os.xml", $resp); + write_htdocs($channel, $os, "$from_version-$versions_str-$os.xml", $resp); } + write_htdocs($channel, $os, 'no-update.xml', + '<?xml version="1.0" encoding="UTF-8"?>' + . "\n<updates></updates>\n"); } - write_htdocs($channel, 'no-update.xml', - '<?xml version="1.0" encoding="UTF-8"?>' - . "\n<updates></updates>\n"); }
sub write_htaccess { my ($config, $channel) = @_; - my $flags = "[last]"; - my $htaccess = "RewriteEngine On\n"; - $htaccess .= $config->{htaccess_rewrite_rules}{$channel} // ''; + + my $htaccess_main = "RewriteEngine On\n"; + $htaccess_main .= $config->{htaccess_rewrite_rules}{$channel} // ''; my $versions = as_array($config->{channels}{$channel}); my $versions_str = join('+', @$versions); + foreach my $os (sort keys %{$config->{build_targets}}) { + foreach my $bt (@{ as_array($config->{build_targets}{$os}) }) { + $htaccess_main .= "RewriteRule ^$bt/(.*) $os/$1 [last]\n"; + } + } + write_htdocs($channel, '.', '.htaccess', $htaccess_main); + my (%oses, %from_versions); foreach my $version (@$versions) { my $files = $config->{versions}{$version}{files}; @@ -445,20 +437,20 @@ sub write_htaccess { $from_versions{$from_version} = 1; } } - $htaccess .= "RewriteRule ^[^/]+/$version/ no-update.xml $flags\n"; } - foreach my $os (sort keys %oses) { - foreach my $bt (build_targets_by_os($os)) { + foreach my $version (@$versions) { + my $files = $config->{versions}{$version}{files}; + foreach my $os (sort keys %oses) { + my $htaccess_os = "RewriteEngine On\n"; + $htaccess_os .= "RewriteRule ^$version/ no-update.xml [last]\n"; foreach my $from_version (sort keys %from_versions) { - $htaccess .= "RewriteRule ^$bt/$from_version/ALL " - . "$from_version-$versions_str-$os.xml $flags\n"; + $htaccess_os .= "RewriteRule ^$from_version/ " + . "$from_version-$versions_str-$os.xml [last]\n"; } - $htaccess .= "RewriteRule ^$bt/[^/]+/ALL " - . "$versions_str-$os.xml $flags\n"; - $htaccess .= "RewriteRule ^$bt/ $versions_str-$os.xml $flags\n"; + $htaccess_os .= "RewriteRule ^[^/]+/ $versions_str-$os.xml [last]\n"; + write_htdocs($channel, $os, '.htaccess', $htaccess_os); } } - write_htdocs($channel, '.htaccess', $htaccess); }
sub write_downloads_json { @@ -472,11 +464,11 @@ sub write_downloads_json { tag => "$tag", downloads => get_version_downloads($config, $version), }; - write_htdocs($channel, 'downloads.json', + write_htdocs($channel, '.', 'downloads.json', JSON->new->utf8->canonical->encode($data)); my $pp_downloads = get_perplatform_downloads($config, $version, $tag); foreach my $os (keys %{$pp_downloads}) { - write_htdocs($channel, "download-$os.json", + write_htdocs($channel, '.', "download-$os.json", JSON->new->utf8->canonical->encode($pp_downloads->{$os})); } } @@ -636,11 +628,9 @@ my %actions = ( exit_error "Wrong arguments" unless @ARGV == 1; my $channel = $ARGV[0]; exit_error "Unknown channel $channel" unless $config->{channels}{$channel}; - $htdocsfiles{$channel} = { '.' => 1, '..' => 1 }; write_responses($config, $channel); write_htaccess($config, $channel); write_downloads_json($config, $channel); - clean_htdocs($channel); }, gen_incrementals => sub { my ($config) = @_;
View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/compare/0...
tor-commits@lists.torproject.org