-
Notifications
You must be signed in to change notification settings - Fork 0
/
docker.pm
84 lines (67 loc) · 2.33 KB
/
docker.pm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#!/usr/bin/env perl
require "$root/Daemon.pm";
require "$root/Memento/Command.pm";
package Memento::Tool::docker;
use feature 'say';
our @ISA = qw(Memento::Command);
use strict; use warnings;
use Encode qw(decode);
use Cwd;
use Getopt::Long;
use Switch;
use Text::Trim;
use Data::Dumper;
our ($cwd);
$cwd = getcwd();
$cwd =~ s/^\s+|\s+$//g; # trim string
$cwd .= '/'; # add trailing slash
sub cmd {
my $class = shift;
my @arguments = @_;
my $dockerProjectRoot = _retrieve_docker_project_root();
my $dockerProjectScript = '.bmeme/build/bin/app';
my $dockerProjectSubPath = substr($cwd, length($dockerProjectRoot));
if ( $dockerProjectRoot ) {
my $dockerProjectScriptFull = "${dockerProjectRoot}${dockerProjectScript}";
my $fullCmd = $dockerProjectSubPath ne "" ? "$dockerProjectScriptFull cd \"${dockerProjectSubPath}\" \\; @arguments" : "$dockerProjectScriptFull @arguments";
# say Daemon::printColor("Command to run: $fullCmd");
Daemon::system($fullCmd);
} else {
say Daemon::printColor("Unable to run 'cmd' command, docker project root not found!");
}
}
sub configure {
my $class = shift;
my @arguments = @_;
my $dockerProjectRoot = _retrieve_docker_project_root();
if ( $dockerProjectRoot ) {
my $fullCmd = "cd $dockerProjectRoot > /dev/null && .bmeme/build/configure @arguments";
# say Daemon::printColor("Command to run: $fullCmd");
Daemon::system($fullCmd);
} else {
say Daemon::printColor("Unable to run 'configure' command, docker project root not found!");
}
}
# OVERRIDDEN METHODS ###########################################################
# PRIVATE METHODS ##############################################################
sub _retrieve_docker_project_root {
my $dockerProjectScript = '.bmeme/build/configure';
my $dockerProjectRoot = $cwd;
my $dockerProjectRootFound = 0;
# Search until project dir is found or we reach root directory '/'
while ($dockerProjectRootFound eq 0 && $dockerProjectRoot ne '' && $dockerProjectRoot ne '/') {
if ( -e "${dockerProjectRoot}${dockerProjectScript}") {
$dockerProjectRootFound = 1;
last;
}
# Move to parent directory
$dockerProjectRoot =~ s/[^\/]+\/?$//;
}
if ( $dockerProjectRootFound ) {
return $dockerProjectRoot;
} else {
say Daemon::printColor("Docker project root not found!");
return;
}
}
1;