blob: ae1e7b114988b9e16f8feaa84aec7813c62c3b39 [file] [log] [blame]
Akron88ddd4a2022-11-08 10:41:35 +01001#!/usr/bin/env perl
2use strict;
3use warnings;
4use Mojo::File 'tempfile';
5use Mojo::UserAgent;
Akron88ddd4a2022-11-08 10:41:35 +01006
7our @ARGV;
8
Akron081c5d52024-01-11 13:10:22 +01009my $JAVA8_HOME = '/usr/lib/jvm/java-1.8.0-openjdk-amd64';
10my $JAVA11_HOME = '/usr/lib/jvm/java-1.11.0-openjdk-amd64';
11my $JAVA17_HOME = '/usr/lib/jvm/java-1.17.0-openjdk-amd64';
Akronc0638a22025-11-17 10:18:48 +010012my $JAVA21_HOME = '/usr/lib/jvm/java-1.21.0-openjdk-amd64';
Akron081c5d52024-01-11 13:10:22 +010013
Akron57625182024-01-24 13:45:27 +010014unless (-d $JAVA17_HOME) {
Akron081c5d52024-01-11 13:10:22 +010015 $JAVA17_HOME = '/opt/java/jdk-17.0.2';
16};
17
Akronc0638a22025-11-17 10:18:48 +010018unless (-d $JAVA21_HOME) {
19 $JAVA21_HOME = '/opt/java/jdk-21.0.0';
20};
21
22
Akron88ddd4a2022-11-08 10:41:35 +010023my $url = $ARGV[0];
24
25sub _check {
26 my $cmd = shift;
Akron53d18212022-11-15 15:25:17 +010027 CHECK:
Akron88ddd4a2022-11-08 10:41:35 +010028 print "\n\n" . 'Do "' . $cmd . '"? (y/n)', "\n";
29
30 my $x = <STDIN>;
31 chomp($x);
32 if ($x eq 'y' || $x eq 'Y') {
33 system $cmd;
Akron53d18212022-11-15 15:25:17 +010034 } elsif ($x eq 'n' || $x eq 'N') {
Akron88ddd4a2022-11-08 10:41:35 +010035 exit;
Akron53d18212022-11-15 15:25:17 +010036 } else {
37 print "Please answer with 'y' or 'n'.\n";
38 goto CHECK;
Akron88ddd4a2022-11-08 10:41:35 +010039 };
40};
41
Akron74994cf2022-11-15 14:28:00 +010042unless ($url) {
Helge4d96c362023-06-21 17:06:32 +020043 print 'git_gerrit_pull https://github.com/KorAP/.../pull/..' . "\n";
Akron88ddd4a2022-11-08 10:41:35 +010044 exit;
45};
46
47_check('git checkout master');
48
49_check('git pull origin master');
50
Akron74994cf2022-11-15 14:28:00 +010051$url =~ m!KorAP/([^/]+?)/pull/(\d+?)$!;
Akron88ddd4a2022-11-08 10:41:35 +010052
53my $ua = Mojo::UserAgent->new;
54
55print "Fetch $url...\n";
56
Akron74994cf2022-11-15 14:28:00 +010057my $project = $1;
58my $pr = $2;
Akron88ddd4a2022-11-08 10:41:35 +010059my $branch = $ua->get($url)->res->dom->at('.commit-ref.head-ref')->all_text;
60
61_check('git fetch github pull/' . $pr . '/head:' . $branch);
62_check('git checkout ' . $branch);
63_check('git rebase master');
64
65
Akron88ddd4a2022-11-08 10:41:35 +010066# Kustvakt
Akron74994cf2022-11-15 14:28:00 +010067if ($project =~ m!^Kustvakt$!i) {
Akron01ea9212024-01-24 13:42:01 +010068 _check('JAVA_HOME="'.$JAVA17_HOME.'" mvn clean test');
Akron88ddd4a2022-11-08 10:41:35 +010069}
70
71# KalamarExport-Plugin
Akron74994cf2022-11-15 14:28:00 +010072elsif ($project =~ m!^Kalamar-Plugin-Export$!i) {
Helge7cd2a612024-07-17 12:23:51 +020073 _check('JAVA_HOME="'.$JAVA17_HOME.'" mvn clean test');
Akron88ddd4a2022-11-08 10:41:35 +010074}
75
Akron39dae912022-11-23 09:41:53 +010076# Koral
77elsif ($project =~ m!^Koral$!i) {
Akron56ba1a92024-01-24 13:42:32 +010078 _check('JAVA_HOME="'.$JAVA17_HOME.'" mvn clean test');
Akron39dae912022-11-23 09:41:53 +010079}
80
Akron36ae3642024-01-24 13:42:56 +010081# Krill
82elsif ($project =~ m!^Krill$!i) {
Akronc0638a22025-11-17 10:18:48 +010083 _check('JAVA_HOME="'.$JAVA21_HOME.'" mvn clean test');
Akron36ae3642024-01-24 13:42:56 +010084}
85
Akron579efe02023-02-28 09:52:26 +010086# Kalamar-Plugin-ExternalResources
87elsif ($project =~ m!^Kalamar-Plugin-ExternalResources$!i) {
88 _check('go test ./...');
89}
90
Akron88ddd4a2022-11-08 10:41:35 +010091# KorapSRU
Akron74994cf2022-11-15 14:28:00 +010092elsif ($project =~ m!^KorapSRU$!i) {
Akron081c5d52024-01-11 13:10:22 +010093 _check('JAVA_HOME="'.$JAVA8_HOME.'" mvn clean test');
Akron88ddd4a2022-11-08 10:41:35 +010094}
95
Akron081c5d52024-01-11 13:10:22 +010096# Korap-Tokenizer
97elsif ($project =~ m!^KorAP-Tokenizer$!i) {
98 _check('JAVA_HOME="'.$JAVA8_HOME.'" mvn clean test');
99}
100
101# Datok
Akron579efe02023-02-28 09:52:26 +0100102elsif ($project =~ m!^Datok$!i) {
103 _check('make test');
104}
105
Akron74994cf2022-11-15 14:28:00 +0100106# Unknown Project
Akron88ddd4a2022-11-08 10:41:35 +0100107else {
Akron74994cf2022-11-15 14:28:00 +0100108 print "Unknown project $project!\n\n";
Akron88ddd4a2022-11-08 10:41:35 +0100109 exit(1);
110};
111
112
113
114_check('git commit --amend --no-edit');
115
116{
117 my $ret = `git log -1 --pretty=%B`;
118 my $newret = '';
119 my $change_id = '';
120 my $first = 1;
121 foreach my $line (split "\n", $ret) {
122 if ($first) {
123 chomp $line;
124 $line .= " (closes #$pr)\n";
125 $first = 0;
126 }
127 elsif ($line =~ /^Change-Id: /) {
128 $change_id = $line;
129 next;
130 };
131 $newret .= $line . "\n";
132 };
133
134 if ($change_id) {
135 $newret .= "\n" . $change_id."\n\n";
136 };
137
138 my $msg_file = tempfile();
139 $msg_file->spurt($newret);
140
141 print "===================================\n";
142 print $newret;
143 print "===================================\n";
144
145 _check('git commit -F ' . $msg_file . ' --amend');
146};
147
Akron0e9e5f52022-11-23 09:47:47 +0100148_check('git push origin HEAD:refs/for/master');
Akron88ddd4a2022-11-08 10:41:35 +0100149
150_check('git checkout master');
151_check('git branch -D ' . $branch);
152
153print "\n\nEverything done - thank you!\n\n"
154
155__END__
156
157=pod
158
159This script is an alternative to C<import_github_pull_requests>
160that ignores CI results on github and just requires the
161URL of a specific GH pull request to send it through Gerrit.
Helge4d96c362023-06-21 17:06:32 +0200162
163Prerequisites:
164Remote repository "github"
165For Kustvakt and Koral Java 11 at /usr/lib/jvm/java-1.11.0-openjdk-amd6
Helge7cd2a612024-07-17 12:23:51 +0200166For KorapSRU Java 8 at /usr/lib/jvm/java-1.8.0-openjdk-amd6
167For KalamarExport-Plugin Java 17 at /usr/lib/jvm/java-17-openjdk-amd64