SubwayTooter-Android-App/makeVersionTag.pl

63 lines
1.5 KiB
Perl

#!/usr/bin/perl --
use strict;
use warnings;
sub cmd($){
print "+ ",$_[0],"\n";
my $rv=system $_[0];
if ($? == -1) {
die "failed to execute: $!\n";
}elsif ($? & 127) {
die sprintf "child died with signal %d\n", ($? & 127);
}elsif($?){
$rv = $? >> 8;
die "child exited with value $rv\n";
}
}
# ワーキングツリーに変更がないことを確認
open(my $fh,"-|","git status --porcelain --branch")
or die "can't check git status. $!";
my @untrackedFiles;
while(<$fh>){
chomp;
if(/^\?\?\s*(\S+)/){
my $path =$1;
next if $path =~ /\.idea|_Emoji|makeVersionTag.pl/;
push @untrackedFiles,$path
}elsif( /^##\s*(\S+?)(?:\.\.|$)/ ){
my $branch=$1;
print "# branch=$branch\n";
$branch eq 'main'
or die "current branch is not main.\n";
}else{
warn "working tree is not clean.\n";
cmd "git status";
exit 1;
}
}
close($fh)
or die "can't check git status. $!";
@untrackedFiles and die "forgot git add?\n",map{ "- $_\n"} @untrackedFiles;
# 現在のバージョン番号を取得
my $buildFile = 'app/build.gradle.kts';
`cat $buildFile` =~ /versionName\s*=\s*["']([\d\.]+)["']/
or die "missing versionName in $buildFile\n";
my($tag)="v$1";
print "# version=$tag\n";
# すでにタグがあるなら何もしない
if( `git tag -l $tag` =~ /$tag/ ){
print "# tag $tag is already exists.\n";
}else{
cmd "git tag -a $tag -m $tag";
}
cmd "git push";
cmd "git push --tags";