126 lines
3.4 KiB
Perl
126 lines
3.4 KiB
Perl
#!/usr/bin/perl
|
|
|
|
# Update gitea based on version provided
|
|
# Author: Tracey Clark
|
|
# Created: 2019-03-04
|
|
# You must have a mail transport agent installed to run this script
|
|
|
|
# Note: Daily backups are also being run from cron
|
|
# /home/gitea/gitea_backup.sh
|
|
|
|
use strict;
|
|
use warnings;
|
|
#use LWP::Simple;
|
|
use LWP::UserAgent;
|
|
use IO::Compress::Bzip2 qw(bzip2 $Bzip2Error) ;
|
|
# use Compress::Bzip2 qw(:all :constant :utilities :gzip); # cant get output
|
|
use Data::Dumper;
|
|
use JSON;
|
|
|
|
##########################################
|
|
### The user must set these variables ###
|
|
# SET email address
|
|
my $email='tclark77@tlcnet.info';
|
|
my $filetype='-linux-amd64.xz';
|
|
|
|
# gitea is hosted on github
|
|
# GET /repos/go-gitea/gitea/releases/latest
|
|
# https://api.github.com/repos/go-gitea/gitea/releases/latest
|
|
|
|
=json
|
|
$VAR1 = {
|
|
'upload_url' => 'https://uploads.github.com/repos/go-gitea/gitea/releases/15817548/assets{?name,label}',
|
|
'assets_url' => 'https://api.github.com/repos/go-gitea/gitea/releases/15817548/assets',
|
|
'tag_name' => 'v1.7.3',
|
|
'author' => {
|
|
'gravatar_id' => '',
|
|
etc
|
|
},
|
|
|
|
=cut
|
|
|
|
my $gitea_bin = '/home/gitea/bin/gitea';
|
|
my $gitea_current_version_string = `$gitea_bin --version`;
|
|
my $gitea_current_version;
|
|
if ( $gitea_current_version_string =~ m/ion\ (\w+)\ b/ ) {
|
|
$gitea_current_version = $1;
|
|
}
|
|
printf("The version of gitea that is running is \"$gitea_current_version\"\n");
|
|
|
|
# Backup the current binary
|
|
my $gitea_bin_backup = '/home/gitea/bin/gitea.' . $gitea_current_version . '.bz2';
|
|
printf("Gitea bin backup will be $gitea_bin_backup\n");
|
|
printf("!! Input is $gitea_bin\n and output is $gitea_bin_backup\n");
|
|
|
|
=example
|
|
# IO::File mode
|
|
print($z $string);
|
|
printf($z $format, $string);
|
|
close($z);
|
|
=cut
|
|
|
|
my $input = $gitea_bin;
|
|
my $temp_out = '/home/gitea/tempout.bz';
|
|
my $bz = new IO::Compress::Bzip2 $temp_out
|
|
or die "bzip2 failed: $Bzip2Error\n";
|
|
# bzip2 $input => "$gitea_bin_backup"
|
|
# or die "bzip2 failed: $Bzip2Error\n"; # This works, but writes garbage to end of filename
|
|
# need to do in OO way
|
|
# https://metacpan.org/pod/IO::Compress::Bzip2
|
|
|
|
print $bz $gitea_bin; # This writes the filename as string to the bz
|
|
$bz->close();
|
|
|
|
my $baseURL = q{https://github.com/go-gitea/gitea/};
|
|
my $latestURL = q{https://api.github.com/repos/go-gitea/gitea/releases/latest};
|
|
|
|
# https://hubpages.com/technology/Use-Perl-to-access-REST-API
|
|
# Spin up the browser object (via LWP::UserAgent)
|
|
my $ua = LWP::UserAgent->new(
|
|
#ssl_opts => { verify_hostname => 0 }, # not worried about SSL certs
|
|
cookie_jar => {}, # keep cookies in RAM but not persistent between sessions
|
|
);
|
|
|
|
my $resp = $ua->get($latestURL);
|
|
my $latest_release_hash = decode_json($resp->content);
|
|
|
|
# printf("!! Print the json response if we have one:\n");
|
|
# printf Dumper $latest_release_hash;
|
|
|
|
# In case we need to deref later
|
|
#my %latest_release_data = %$latest_release_hash;
|
|
|
|
my $tag = $latest_release_hash->{tag_name};
|
|
printf("The latest gitea version is $tag\n");
|
|
|
|
if ( $tag gt $gitea_current_version ) {
|
|
printf("Proceeding with update\n");
|
|
my $dl_filename='gitea-' . $tag . $filetype;
|
|
printf("Downloaded filename will be $dl_filename\n");
|
|
}
|
|
|
|
# Get the download_url from the array
|
|
|
|
# Download version specified
|
|
|
|
# Stop service
|
|
|
|
# Backup current gitea mv
|
|
# $gitea_bin
|
|
|
|
|
|
|
|
|
|
|
|
# wget
|
|
|
|
# Unzip downloaded gitea
|
|
# unxz $GITEA_XZ
|
|
|
|
# Change perms unless we run this as user gitea
|
|
|
|
# Restart gitea
|
|
|
|
# Test
|
|
|
|
# Email
|