| File: | load-env.pl |
| Coverage: | 93.1% |
| line | stmt | bran | cond | sub | time | code |
|---|---|---|---|---|---|---|
| 1 | #!/usr/bin/env perl | |||||
| 2 | 2 2 | 2242 3 | use 5.022; | |||
| 3 | 2 2 2 | 4 4 111 | use feature 'unicode_strings'; | |||
| 4 | 2 2 2 | 431 8935 79 | use Encode qw/decode_utf8 encode_utf8 FB_DEFAULT/; | |||
| 5 | 2 2 2 | 632 12892 1719 | use JSON::PP; | |||
| 6 | 2 | 70416 | my $input = $ENV{INPUTS}; | |||
| 7 | 2 | 2 | my %inputs; | |||
| 8 | 2 | 3 | if ($input) { | |||
| 9 | 2 2 | 0 8 | %inputs = %{decode_json(Encode::encode_utf8($input))}; | |||
| 10 | } | |||||
| 11 | ||||||
| 12 | 2 | 2252 | for my $key (keys %inputs) { | |||
| 13 | 18 | 14 | next unless $key; | |||
| 14 | 17 | 11 | my $val = $inputs{$key}; | |||
| 15 | 17 | 16 | next unless $val ne ''; | |||
| 16 | 16 | 9 | my $var = $key; | |||
| 17 | 16 | 13 | if ($val =~ /^github_pat_/) { | |||
| 18 | 1 | 3 | print STDERR "Censoring `$var` (unexpected-input-value)\n"; | |||
| 19 | 1 | 1 | next; | |||
| 20 | } | |||||
| 21 | 15 | 22 | next if $var =~ /\s/; | |||
| 22 | 14 | 15 | next if $var =~ /[-_](?:key|token)$/; | |||
| 23 | 13 | 24 | if ($var =~ /-/ && $inputs{$var} ne '') { | |||
| 24 | 2 | 2 | my $var_pattern = $var; | |||
| 25 | 2 | 3 | $var_pattern =~ s/-/[-_]/g; | |||
| 26 | 2 18 | 3 62 | my @vars = grep { /^${var_pattern}$/ && ($var ne $_) && $inputs{$_} ne '' && $inputs{$var} ne $inputs{$_} } keys %inputs; | |||
| 27 | 2 1 | 5 36 | print STDERR 'Found conflicting inputs for '.$var." ($inputs{$var}): ".join(', ', map { "$_ ($inputs{$_})" } @vars)." (migrate-underscores-to-dashes)\n" if (@vars); | |||
| 28 | 2 | 3 | $var =~ s/-/_/g; | |||
| 29 | } | |||||
| 30 | 13 | 7 | $val =~ s/([\$])/\\$1/g; | |||
| 31 | 13 | 8 | $val =~ s/'/'"'"'/g; | |||
| 32 | 13 | 7 | $var = uc $var; | |||
| 33 | 13 | 16 | print qq<export INPUT_$var='$val';\n>; | |||
| 34 | } | |||||
| 35 | ||||||
| 36 | 2 | 2 | my $action_json_path = $ENV{action_yml_json}; | |||
| 37 | 2 | 17 | exit unless defined $action_json_path && -f $action_json_path; | |||
| 38 | 2 | 1 | my $action_json; | |||
| 39 | 2 | 25 | open my $action_json_file, '<', $action_json_path; | |||
| 40 | { | |||||
| 41 | 2 2 | 1 3 | local $/ = undef; | |||
| 42 | 2 | 64 | $action_json = <$action_json_file>; | |||
| 43 | 2 | 9 | close $action_json_file; | |||
| 44 | } | |||||
| 45 | 2 2 | 2 3 | my %action = %{decode_json $action_json}; | |||
| 46 | 2 2 | 136238 50 | my %action_inputs = %{$action{inputs}}; | |||
| 47 | 2 | 34 | for my $key (sort keys %action_inputs) { | |||
| 48 | 132 132 | 61 146 | my %ref = %{$action_inputs{$key}}; | |||
| 49 | 132 | 93 | next unless defined $ref{default}; | |||
| 50 | 118 | 78 | next if defined $inputs{$key}; | |||
| 51 | 109 | 47 | my $var = $key; | |||
| 52 | 109 | 87 | next if $var =~ /[-_](?:key|token)$/i; | |||
| 53 | 103 | 71 | if ($var =~ s/-/_/g) { | |||
| 54 | 24 | 21 | next if defined $inputs{$var}; | |||
| 55 | } | |||||
| 56 | 103 | 63 | my $val = $ref{default}; | |||
| 57 | 103 | 102 | next if $val eq ''; | |||
| 58 | 52 | 38 | $val =~ s/([\$])/\\$1/g; | |||
| 59 | 52 | 31 | $val =~ s/'/'"'"'/g; | |||
| 60 | 52 | 37 | $var = 'INPUT_'.(uc $var); | |||
| 61 | 52 | 42 | next if defined $ENV{$var}; | |||
| 62 | 52 | 48 | print qq<export $var='$val';\n>; | |||
| 63 | } | |||||