diff --git a/Dockerfile b/Dockerfile index 18ad7a3ad..b849af2ed 100644 --- a/Dockerfile +++ b/Dockerfile @@ -19,7 +19,7 @@ RUN cpanm Digest::SHA Module::Signature # reinstall cpanm itself, for good measure RUN cpanm App::cpanminus -RUN cpanm Mojolicious@5.80 +RUN cpanm Mojolicious@8.35 RUN cpanm EV RUN cpanm IO::Socket::IP diff --git a/push.pl b/push.pl index d70ef152c..0586df291 100755 --- a/push.pl +++ b/push.pl @@ -7,8 +7,9 @@ use open ':encoding(utf8)'; use File::Basename qw(basename fileparse); use File::Temp; use Getopt::Long; +use Mojo::File; use Mojo::UserAgent; -use Mojo::Util qw(b64_encode decode encode slurp spurt trim); +use Mojo::Util qw(b64_encode decode encode trim); use Term::UI; use Term::ReadLine; @@ -43,7 +44,7 @@ unless (defined $password) { } my $login = $ua->post('https://hub.docker.com/v2/users/login/' => {} => json => { username => $username, password => $password }); -die 'login failed' unless $login->success; +die 'login failed' unless $login->res->is_success; my $token = $login->res->json->{token}; @@ -57,7 +58,7 @@ for my $cookie (@{ $login->res->cookies }) { die 'missing CSRF token' unless defined $csrf; my $attemptLogin = $ua->post('https://hub.docker.com/attempt-login/' => {} => json => { jwt => $token }); -die 'attempt-login failed' unless $attemptLogin->success; +die 'attempt-login failed' unless $attemptLogin->res->is_success; my $authorizationHeader = { Authorization => "JWT $token", @@ -65,7 +66,7 @@ my $authorizationHeader = { }; my $userData = $ua->get('https://hub.docker.com/v2/user/' => $authorizationHeader); -die 'user failed' unless $userData->success; +die 'user failed' unless $userData->res->is_success; $userData = $userData->res->json; sub prompt_for_edit { @@ -73,7 +74,7 @@ sub prompt_for_edit { my $proposedFile = shift; my $lengthLimit = shift // 0; - my $proposedText = slurp $proposedFile or warn 'missing ' . $proposedFile; + my $proposedText = Mojo::File->new($proposedFile)->slurp or warn 'missing ' . $proposedFile; $proposedText = trim(decode('UTF-8', $proposedText)); # remove our warning about generated files (Hub doesn't support HTML comments in Markdown) @@ -104,11 +105,11 @@ sub prompt_for_edit { my @proposedFileBits = fileparse($proposedFile, qr!\.[^.]*!); my $file = File::Temp->new(SUFFIX => '-' . basename($proposedFileBits[1]) . '-current' . $proposedFileBits[2]); my $filename = $file->filename; - spurt encode('UTF-8', $currentText . "\n"), $filename; + Mojo::File->new($filename)->spurt(encode('UTF-8', $currentText . "\n")); my $tempProposedFile = File::Temp->new(SUFFIX => '-' . basename($proposedFileBits[1]) . '-proposed' . $proposedFileBits[2]); my $tempProposedFilename = $tempProposedFile->filename; - spurt encode('UTF-8', $proposedText . "\n"), $tempProposedFilename; + Mojo::File->new($tempProposedFilename)->spurt(encode('UTF-8', $proposedText . "\n")); system(qw(git --no-pager diff --no-index), $filename, $tempProposedFilename); @@ -135,7 +136,7 @@ sub prompt_for_edit { if ($reply eq 'vimdiff') { system('vimdiff', $tempProposedFilename, $filename) == 0 or die "vimdiff on $filename and $proposedFile failed"; - return trim(decode('UTF-8', slurp($filename))); + return trim(decode('UTF-8', Mojo::File->new($filename)->slurp)); } return $currentText; @@ -173,9 +174,9 @@ while (my $repo = shift) { # 'library/hylang', 'tianon/perl', etc } } if (-f $repoLogo120) { - my $proposedLogo = slurp($repoLogo120); + my $proposedLogo = Mojo::File->new($repoLogo120)->slurp; my $currentLogo = $ua->get('https://d1q6f0aelx0por.cloudfront.net/product-logos/' . join('-', split(m{/}, $repo)) . '-logo.png', { 'Cache-Control' => 'no-cache' }); - $currentLogo = ($currentLogo->success ? $currentLogo->res->body : undef); + $currentLogo = ($currentLogo->res->is_success ? $currentLogo->res->body : undef); if ($currentLogo && $currentLogo eq $proposedLogo) { say 'no change to ' . $repoName . ' logo; skipping'; @@ -188,13 +189,13 @@ while (my $repo = shift) { # 'library/hylang', 'tianon/perl', etc 'content_type' => 'image/png', 'file_ext' => 'png', }); - warn 'warning: put to ' . $logoUrl . ' failed: ' . $logoPut->res->text unless $logoPut->success; + warn 'warning: put to ' . $logoUrl . ' failed: ' . $logoPut->res->text unless $logoPut->res->is_success; } } } my $repoTx = $ua->get($repoUrl => $authorizationHeader); - warn 'warning: failed to get: ' . $repoUrl . ' (skipping)' and next unless $repoTx->success; + warn 'warning: failed to get: ' . $repoUrl . ' (skipping)' and next unless $repoTx->res->is_success; my $repoDetails = $repoTx->res->json; $repoDetails->{description} //= ''; @@ -202,7 +203,7 @@ while (my $repo = shift) { # 'library/hylang', 'tianon/perl', etc my $hubShort = prompt_for_edit($repoDetails->{description}, $repoName . '/README-short.txt'); my $hubLong = prompt_for_edit($repoDetails->{full_description}, $repoName . '/README.md', $hubLengthLimit); - + say 'no change to ' . $repoName . '; skipping' and next if $repoDetails->{description} eq $hubShort and $repoDetails->{full_description} eq $hubLong; say 'updating ' . $repoName; @@ -211,5 +212,5 @@ while (my $repo = shift) { # 'library/hylang', 'tianon/perl', etc description => $hubShort, full_description => $hubLong, }); - warn 'patch to ' . $repoUrl . ' failed: ' . $repoPatch->res->text and next unless $repoPatch->success; + warn 'patch to ' . $repoUrl . ' failed: ' . $repoPatch->res->text and next unless $repoPatch->res->is_success; }