shell-scripts/update-gitea.pl

153 lines
3.7 KiB
Perl
Executable file

#!/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 Data::Dumper;
use JSON;
##########################################
### The user must set these variables ###
# SET email address
my $email='tclark77@tlcnet.info';
my $filetype='-linux-amd64.xz';
# https://api.github.com/repos/go-gitea/gitea/releases/latest
my $gitea_bin = '/home/gitea/bin/gitea';
my $gitea_current_version_string = `$gitea_bin --version`;
unless ( defined $gitea_current_version_string ) {
die "ERROR: Unable to get the version of the gitea binary: $!";
}
my $gitea_current_version;
if ( $gitea_current_version_string =~ m/ion\ (\d+\.\d+\.\d*)\s/ ) {
$gitea_current_version = $1;
printf("Current version of gitea that is installed is $1\n");
}
elsif ( $gitea_current_version_string =~ m/ion\ (\d+\d+\w*)\s/ ) {
$gitea_current_version = $1;
printf("Current version of gitea that is installed is $1\n");
}
my %binary_file = (
input => $gitea_bin,
version => $gitea_current_version,
);
unless ( defined $gitea_current_version ) {
die "ERROR: Unable to get the current gitea version! Value is $gitea_current_version"
}
# Backup the current binary
backup_bin( \%binary_file );
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(
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");
my $assetsURL = $latest_release_hash->{tag_name};
if ( $tag gt $gitea_current_version ) {
printf("Proceeding with update\n");
download_bin($tag);
}
# If install_bin good then cleanup()
#notification( $email );
##### Subroutines #####
sub backup_bin {
my ( %opts ) = %{shift()};
my $input = $opts{input};
my $version = $opts{version};
printf("Backing up the current binary\n");
printf("Input in backup_bin sub is $input\n and version is $version\n");
my $gitea_bin_backup = '/home/gitea/bin/gitea.' . $gitea_current_version . '.bz2';
printf("Gitea bin backup will be $gitea_bin_backup\n");
=devel
my $status = bzip2 $input => $gitea_bin_backup
or die "bzip2 failed: $Bzip2Error\n";
printf("!! Status of backup operation is $status\n");
#$bz->close();
=cut
return;
}
sub download_bin {
my $dl_tag = shift;
my $dl_filename='gitea-' . $dl_tag . $filetype;
printf("Downloaded filename will be $dl_filename\n");
# Get the download_url from the array
# Download version specified\
# $gitea_bin
# wget
# unxz $GITEA_XZ
return;
}
sub install_bin{
# Stop service
# Copy the downloaded binary to gitea and chmod it 750
# Change owner unless we run this as user gitea
# Start service
# verify systemctld status is good
# return the status
return;
}
sub cleanup {
# remove downloaded binary and old backup set install_status=success ELSE remove "gitea" and restore from backup and set install_status=fail
return;
}
sub notification {
my $to = shift;
return;
}