blob: 645507bb06687e601106b4d4849fe2d2530cfee5 [file] [log] [blame]
Akron88ddd4a2022-11-08 10:41:35 +01001#!/usr/bin/env perl
2use strict;
3use warnings;
4use Mojo::File 'tempfile';
Akronc7aeafd2026-04-29 12:05:49 +02005use Mojo::JSON qw'decode_json encode_json';
6use Mojo::ByteStream 'b';
Akron88ddd4a2022-11-08 10:41:35 +01007use Mojo::UserAgent;
Akron88ddd4a2022-11-08 10:41:35 +01008
Akronc7aeafd2026-04-29 12:05:49 +02009$ENV{MOJO_NO_JSON_XS} = 0;
10
Akron88ddd4a2022-11-08 10:41:35 +010011our @ARGV;
12
Akron081c5d52024-01-11 13:10:22 +010013my $JAVA8_HOME = '/usr/lib/jvm/java-1.8.0-openjdk-amd64';
14my $JAVA11_HOME = '/usr/lib/jvm/java-1.11.0-openjdk-amd64';
15my $JAVA17_HOME = '/usr/lib/jvm/java-1.17.0-openjdk-amd64';
Akronc0638a22025-11-17 10:18:48 +010016my $JAVA21_HOME = '/usr/lib/jvm/java-1.21.0-openjdk-amd64';
Akron081c5d52024-01-11 13:10:22 +010017
Akron57625182024-01-24 13:45:27 +010018unless (-d $JAVA17_HOME) {
Akron081c5d52024-01-11 13:10:22 +010019 $JAVA17_HOME = '/opt/java/jdk-17.0.2';
20};
21
Akronc0638a22025-11-17 10:18:48 +010022unless (-d $JAVA21_HOME) {
23 $JAVA21_HOME = '/opt/java/jdk-21.0.0';
24};
25
26
Akron88ddd4a2022-11-08 10:41:35 +010027my $url = $ARGV[0];
28
29sub _check {
30 my $cmd = shift;
Akron53d18212022-11-15 15:25:17 +010031 CHECK:
Akron88ddd4a2022-11-08 10:41:35 +010032 print "\n\n" . 'Do "' . $cmd . '"? (y/n)', "\n";
33
34 my $x = <STDIN>;
35 chomp($x);
36 if ($x eq 'y' || $x eq 'Y') {
37 system $cmd;
Akron53d18212022-11-15 15:25:17 +010038 } elsif ($x eq 'n' || $x eq 'N') {
Akron88ddd4a2022-11-08 10:41:35 +010039 exit;
Akron53d18212022-11-15 15:25:17 +010040 } else {
41 print "Please answer with 'y' or 'n'.\n";
42 goto CHECK;
Akron88ddd4a2022-11-08 10:41:35 +010043 };
44};
45
Akron74994cf2022-11-15 14:28:00 +010046unless ($url) {
Helge4d96c362023-06-21 17:06:32 +020047 print 'git_gerrit_pull https://github.com/KorAP/.../pull/..' . "\n";
Akron88ddd4a2022-11-08 10:41:35 +010048 exit;
49};
50
51_check('git checkout master');
52
53_check('git pull origin master');
54
Akron74994cf2022-11-15 14:28:00 +010055$url =~ m!KorAP/([^/]+?)/pull/(\d+?)$!;
Akron88ddd4a2022-11-08 10:41:35 +010056
57my $ua = Mojo::UserAgent->new;
58
59print "Fetch $url...\n";
60
Akron74994cf2022-11-15 14:28:00 +010061my $project = $1;
62my $pr = $2;
Akronc7aeafd2026-04-29 12:05:49 +020063my $pr_html = $ua->get($url)->res->dom;
64my $branch = $pr_html->at('.commit-ref.head-ref');
65
66# Legacy path
67if ($branch) {
68 $branch = $branch->all_text;
69}
70
71# JSON path
72elsif (my $json = $pr_html->at('script[data-target=react-app.embeddedData]')) {
73
74 $json = decode_json(b($json->all_text)->encode->to_string);
75
76 $branch = $json
77 ->{payload}
78 ->{pullRequestsLayoutRoute}
79 ->{pullRequest}
80 ->{headBranch};
81
82};
83
84unless ($branch) {
85 warn 'Unable to retrieve branch name';
86 exit;
87};
Akron88ddd4a2022-11-08 10:41:35 +010088
89_check('git fetch github pull/' . $pr . '/head:' . $branch);
90_check('git checkout ' . $branch);
91_check('git rebase master');
92
93
Akron88ddd4a2022-11-08 10:41:35 +010094# Kustvakt
Akron74994cf2022-11-15 14:28:00 +010095if ($project =~ m!^Kustvakt$!i) {
Akron01ea9212024-01-24 13:42:01 +010096 _check('JAVA_HOME="'.$JAVA17_HOME.'" mvn clean test');
Akron88ddd4a2022-11-08 10:41:35 +010097}
98
99# KalamarExport-Plugin
Akron74994cf2022-11-15 14:28:00 +0100100elsif ($project =~ m!^Kalamar-Plugin-Export$!i) {
Helge7cd2a612024-07-17 12:23:51 +0200101 _check('JAVA_HOME="'.$JAVA17_HOME.'" mvn clean test');
Akron88ddd4a2022-11-08 10:41:35 +0100102}
103
Akron39dae912022-11-23 09:41:53 +0100104# Koral
105elsif ($project =~ m!^Koral$!i) {
Akron9f85a202026-01-13 22:18:26 +0100106 _check('JAVA_HOME="'.$JAVA21_HOME.'" mvn clean test');
Akron39dae912022-11-23 09:41:53 +0100107}
108
Akron36ae3642024-01-24 13:42:56 +0100109# Krill
110elsif ($project =~ m!^Krill$!i) {
Akronc0638a22025-11-17 10:18:48 +0100111 _check('JAVA_HOME="'.$JAVA21_HOME.'" mvn clean test');
Akron36ae3642024-01-24 13:42:56 +0100112}
113
Akron579efe02023-02-28 09:52:26 +0100114# Kalamar-Plugin-ExternalResources
115elsif ($project =~ m!^Kalamar-Plugin-ExternalResources$!i) {
116 _check('go test ./...');
117}
118
Akron88ddd4a2022-11-08 10:41:35 +0100119# KorapSRU
Akron74994cf2022-11-15 14:28:00 +0100120elsif ($project =~ m!^KorapSRU$!i) {
Akron081c5d52024-01-11 13:10:22 +0100121 _check('JAVA_HOME="'.$JAVA8_HOME.'" mvn clean test');
Akron88ddd4a2022-11-08 10:41:35 +0100122}
123
Akron081c5d52024-01-11 13:10:22 +0100124# Korap-Tokenizer
125elsif ($project =~ m!^KorAP-Tokenizer$!i) {
126 _check('JAVA_HOME="'.$JAVA8_HOME.'" mvn clean test');
127}
128
129# Datok
Akron579efe02023-02-28 09:52:26 +0100130elsif ($project =~ m!^Datok$!i) {
131 _check('make test');
132}
133
Akron74994cf2022-11-15 14:28:00 +0100134# Unknown Project
Akron88ddd4a2022-11-08 10:41:35 +0100135else {
Akron74994cf2022-11-15 14:28:00 +0100136 print "Unknown project $project!\n\n";
Akron88ddd4a2022-11-08 10:41:35 +0100137 exit(1);
138};
139
140
141
142_check('git commit --amend --no-edit');
143
144{
145 my $ret = `git log -1 --pretty=%B`;
146 my $newret = '';
147 my $change_id = '';
148 my $first = 1;
149 foreach my $line (split "\n", $ret) {
150 if ($first) {
151 chomp $line;
152 $line .= " (closes #$pr)\n";
153 $first = 0;
154 }
155 elsif ($line =~ /^Change-Id: /) {
156 $change_id = $line;
157 next;
158 };
159 $newret .= $line . "\n";
160 };
161
162 if ($change_id) {
163 $newret .= "\n" . $change_id."\n\n";
164 };
165
166 my $msg_file = tempfile();
167 $msg_file->spurt($newret);
168
169 print "===================================\n";
170 print $newret;
171 print "===================================\n";
172
173 _check('git commit -F ' . $msg_file . ' --amend');
174};
175
Akron0e9e5f52022-11-23 09:47:47 +0100176_check('git push origin HEAD:refs/for/master');
Akron88ddd4a2022-11-08 10:41:35 +0100177
178_check('git checkout master');
179_check('git branch -D ' . $branch);
180
181print "\n\nEverything done - thank you!\n\n"
182
183__END__
184
185=pod
186
187This script is an alternative to C<import_github_pull_requests>
188that ignores CI results on github and just requires the
189URL of a specific GH pull request to send it through Gerrit.
Helge4d96c362023-06-21 17:06:32 +0200190
191Prerequisites:
192Remote repository "github"
193For Kustvakt and Koral Java 11 at /usr/lib/jvm/java-1.11.0-openjdk-amd6
Helge7cd2a612024-07-17 12:23:51 +0200194For KorapSRU Java 8 at /usr/lib/jvm/java-1.8.0-openjdk-amd6
195For KalamarExport-Plugin Java 17 at /usr/lib/jvm/java-17-openjdk-amd64