File Coverage

File:load-env.pl
Coverage:93.1%

linestmtbrancondsubtimecode
1#!/usr/bin/env perl
2
3
3
3654
3
use 5.022;
3
3
3
3
9
2
185
use feature 'unicode_strings';
4
3
3
3
652
14223
119
use Encode qw/decode_utf8 encode_utf8 FB_DEFAULT/;
5
3
3
3
1024
20358
2697
use JSON::PP;
6
3
109903
my $input = $ENV{INPUTS};
7
3
2
my %inputs;
8
3
5
if ($input) {
9
3
3
2
9
    %inputs = %{decode_json(Encode::encode_utf8($input))};
10}
11
12
3
3940
for my $key (keys %inputs) {
13
32
19
    next unless $key;
14
30
21
    my $val = $inputs{$key};
15
30
23
    next unless $val ne '';
16
28
24
    my $var = $key;
17
28
33
    if ($val =~ /^github_pat_/) {
18
2
31
        print STDERR "Censoring `$var` (unexpected-input-value)\n";
19
2
3
        next;
20    }
21
26
21
    next if $var =~ /\s/;
22
24
22
    next if $var =~ /[-_](?:key|token)$/;
23
22
26
    if ($var =~ /-/ && $inputs{$var} ne '') {
24
3
3
        my $var_pattern = $var;
25
3
9
        $var_pattern =~ s/-/[-_]/g;
26
3
32
8
102
        my @vars = grep { /^${var_pattern}$/ && ($var ne $_) && $inputs{$_} ne '' && $inputs{$var} ne $inputs{$_} } keys %inputs;
27
3
2
8
38
        print STDERR 'Found conflicting inputs for '.$var." ($inputs{$var}): ".join(', ', map { "$_ ($inputs{$_})" } @vars)." (migrate-underscores-to-dashes)\n" if (@vars);
28
3
5
        $var =~ s/-/_/g;
29    }
30
22
15
    $val =~ s/([\$])/\\$1/g;
31
22
11
    $val =~ s/'/'"'"'/g;
32
22
19
    $var = uc $var;
33
22
37
    print qq<export INPUT_$var='$val';\n>;
34}
35
36
3
4
my $action_json_path = $ENV{action_yml_json};
37
3
22
exit unless defined $action_json_path && -f $action_json_path;
38
3
2
my $action_json;
39
3
42
open my $action_json_file, '<', $action_json_path;
40{
41
3
3
4
6
    local $/ = undef;
42
3
94
    $action_json = <$action_json_file>;
43
3
16
    close $action_json_file;
44}
45
3
3
2
7
my %action = %{decode_json $action_json};
46
3
3
202677
81
my %action_inputs = %{$action{inputs}};
47
3
49
for my $key (sort keys %action_inputs) {
48
198
198
87
232
    my %ref = %{$action_inputs{$key}};
49
198
136
    next unless defined $ref{default};
50
177
109
    next if defined $inputs{$key};
51
162
82
    my $var = $key;
52
162
122
    next if $var =~ /[-_](?:key|token)$/i;
53
153
118
    if ($var =~ s/-/_/g) {
54
36
28
        next if defined $inputs{$var};
55    }
56
153
89
    my $val = $ref{default};
57
153
158
    next if $val eq '';
58
77
88
    $val =~ s/([\$])/\\$1/g;
59
77
47
    $val =~ s/'/'"'"'/g;
60
77
51
    $var = 'INPUT_'.(uc $var);
61
77
107
    next if defined $ENV{$var};
62
77
78
    print qq<export $var='$val';\n>;
63}