Blame


1 9d3839a0 2023-05-23 izzyb #!/usr/bin/perl
2 9d3839a0 2023-05-23 izzyb use strict;
3 9d3839a0 2023-05-23 izzyb use warnings;
4 9d3839a0 2023-05-23 izzyb my $config={
5 9d3839a0 2023-05-23 izzyb remoteHost=>'got.ircnow.org',
6 9d3839a0 2023-05-23 izzyb remoteUser=>'gitgot',
7 9d3839a0 2023-05-23 izzyb remoteStage=>'/var/gitgot',
8 9d3839a0 2023-05-23 izzyb repoDir=>'public/gitgot',
9 9d3839a0 2023-05-23 izzyb createRepoDir=>1,
10 9d3839a0 2023-05-23 izzyb stageDir=>'/var/gitgot',
11 9d3839a0 2023-05-23 izzyb gitgotUser=>'gitgot',
12 9d3839a0 2023-05-23 izzyb key_path=>'/home/gitgot/.ssh/id_ed25519',
13 9d3839a0 2023-05-23 izzyb rsync_cmd=>'openrsync',
14 9d3839a0 2023-05-23 izzyb };
15 9d3839a0 2023-05-23 izzyb # verify we have a local staging area
16 9d3839a0 2023-05-23 izzyb if (not -d $config->{stageDir}) {
17 9d3839a0 2023-05-23 izzyb my (undef,undef,$uid,$gid) = getpwnam($config->{gitgotUser})
18 9d3839a0 2023-05-23 izzyb or die "User " . $config->{gitgotUser} . " doesn't exist";
19 9d3839a0 2023-05-23 izzyb mkdir $config->{stageDir}, 0750;
20 9d3839a0 2023-05-23 izzyb chown $uid,$gid,$config->{stageDir};
21 9d3839a0 2023-05-23 izzyb }
22 9d3839a0 2023-05-23 izzyb opendir (my $DH, '/home/') || die "Can't opendir /home : $!";
23 9d3839a0 2023-05-23 izzyb while (my $user = readdir($DH)) {
24 9d3839a0 2023-05-23 izzyb if (-d "/home/$user/" . $config->{repoDir}) {
25 9d3839a0 2023-05-23 izzyb # Skip if no repos
26 9d3839a0 2023-05-23 izzyb opendir (my $RDH, "/home/$user/" . $config->{repoDir})
27 9d3839a0 2023-05-23 izzyb or die "Can't opendir /home/$user/ : $!";
28 9d3839a0 2023-05-23 izzyb my @repos = readdir($RDH);
29 9d3839a0 2023-05-23 izzyb next unless (scalar @repos > 2);
30 9d3839a0 2023-05-23 izzyb
31 9d3839a0 2023-05-23 izzyb # Make sure user has a staging directory
32 9d3839a0 2023-05-23 izzyb if(not -d $config->{stageDir} . "/$user") {
33 9d3839a0 2023-05-23 izzyb mkdir ($config->{stageDir} . "/$user");
34 9d3839a0 2023-05-23 izzyb }
35 9d3839a0 2023-05-23 izzyb # rsync files to local staging area
36 9d3839a0 2023-05-23 izzyb my $src=qq(/home/$user/$config->{repoDir}/*);
37 9d3839a0 2023-05-23 izzyb my $dst=qq($config->{stageDir}/$user/);
38 9d3839a0 2023-05-23 izzyb my $rv=system(qq{
39 9d3839a0 2023-05-23 izzyb openrsync --rsync-path=openrsync -a --delete $src $dst
40 9d3839a0 2023-05-23 izzyb });
41 9d3839a0 2023-05-23 izzyb warn "rsync failed $user\n$!\n" if ($rv != 0);
42 9d3839a0 2023-05-23 izzyb } elsif ($config->{createRepoDir}) { # create missing repo dirs
43 9d3839a0 2023-05-23 izzyb # skip dirs without users.
44 9d3839a0 2023-05-23 izzyb my (undef,undef,$uid,$gid) = getpwnam($user) or next;
45 9d3839a0 2023-05-23 izzyb my $repoPath="/home/$user";
46 9d3839a0 2023-05-23 izzyb for my $dir (split('/', $config->{repoDir})) {
47 9d3839a0 2023-05-23 izzyb $repoPath.="/$dir";
48 9d3839a0 2023-05-23 izzyb unless (-e $repoPath) {
49 9d3839a0 2023-05-23 izzyb mkdir $repoPath, 0755;
50 9d3839a0 2023-05-23 izzyb chown $uid,$gid,$repoPath;
51 9d3839a0 2023-05-23 izzyb }
52 9d3839a0 2023-05-23 izzyb }
53 9d3839a0 2023-05-23 izzyb }
54 9d3839a0 2023-05-23 izzyb }
55 9d3839a0 2023-05-23 izzyb
56 9d3839a0 2023-05-23 izzyb # rsync to remote staging area if we have a remote host
57 9d3839a0 2023-05-23 izzyb if (defined $config->{remoteHost}) {
58 9d3839a0 2023-05-23 izzyb # Only sync if we have repos to deploy
59 9d3839a0 2023-05-23 izzyb opendir (my $SDH, $config->{stageDir})
60 9d3839a0 2023-05-23 izzyb or die "Can't opendir ". $config->{stageDir} . " : $!";
61 9d3839a0 2023-05-23 izzyb my @repos = readdir($SDH);
62 9d3839a0 2023-05-23 izzyb
63 9d3839a0 2023-05-23 izzyb if(scalar @repos > 2) {
64 9d3839a0 2023-05-23 izzyb my $src=$config->{stageDir} . "/*";
65 9d3839a0 2023-05-23 izzyb my $dst=$config->{gitgotUser}. "@" . $config->{remoteHost}
66 9d3839a0 2023-05-23 izzyb . ":" . $config->{remoteStage} . "/";
67 9d3839a0 2023-05-23 izzyb my $rv=system("openrsync --rsync-path=openrsync -ae "
68 9d3839a0 2023-05-23 izzyb . '"ssh -i ' . $config->{key_path}. '" --delete'
69 9d3839a0 2023-05-23 izzyb . " $src $dst "
70 9d3839a0 2023-05-23 izzyb );
71 9d3839a0 2023-05-23 izzyb }
72 9d3839a0 2023-05-23 izzyb }
73 9d3839a0 2023-05-23 izzyb