| File: | load-env.pl |
| Coverage: | 93.1% |
| line | stmt | bran | cond | sub | time | code |
|---|---|---|---|---|---|---|
| 1 | #!/usr/bin/env perl | |||||
| 2 | 2 2 | 1984 3 | use 5.022; | |||
| 3 | 2 2 2 | 2 3 107 | use feature 'unicode_strings'; | |||
| 4 | 2 2 2 | 340 7725 90 | use Encode qw/decode_utf8 encode_utf8 FB_DEFAULT/; | |||
| 5 | 2 2 2 | 527 11555 1503 | use JSON::PP; | |||
| 6 | 2 | 63184 | my $input = $ENV{INPUTS}; | |||
| 7 | 2 | 3 | my %inputs; | |||
| 8 | 2 | 3 | if ($input) { | |||
| 9 | 2 2 | 1 6 | %inputs = %{decode_json(Encode::encode_utf8($input))}; | |||
| 10 | } | |||||
| 11 | ||||||
| 12 | 2 | 2175 | for my $key (keys %inputs) { | |||
| 13 | 18 | 18 | next unless $key; | |||
| 14 | 17 | 7 | my $val = $inputs{$key}; | |||
| 15 | 17 | 15 | next unless $val ne ''; | |||
| 16 | 16 | 4 | my $var = $key; | |||
| 17 | 16 | 20 | if ($val =~ /^github_pat_/) { | |||
| 18 | 1 | 27 | print STDERR "Censoring `$var` (unexpected-input-value)\n"; | |||
| 19 | 1 | 1 | next; | |||
| 20 | } | |||||
| 21 | 15 | 9 | next if $var =~ /\s/; | |||
| 22 | 14 | 14 | next if $var =~ /[-_](?:key|token)$/; | |||
| 23 | 13 | 22 | if ($var =~ /-/ && $inputs{$var} ne '') { | |||
| 24 | 2 | 1 | my $var_pattern = $var; | |||
| 25 | 2 | 3 | $var_pattern =~ s/-/[-_]/g; | |||
| 26 | 2 18 | 3 59 | my @vars = grep { /^${var_pattern}$/ && ($var ne $_) && $inputs{$_} ne '' && $inputs{$var} ne $inputs{$_} } keys %inputs; | |||
| 27 | 2 1 | 7 4 | 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 | 6 | $val =~ s/([\$])/\\$1/g; | |||
| 31 | 13 | 10 | $val =~ s/'/'"'"'/g; | |||
| 32 | 13 | 7 | $var = uc $var; | |||
| 33 | 13 | 14 | print qq<export INPUT_$var='$val';\n>; | |||
| 34 | } | |||||
| 35 | ||||||
| 36 | 2 | 2 | my $action_json_path = $ENV{action_yml_json}; | |||
| 37 | 2 | 13 | exit unless defined $action_json_path && -f $action_json_path; | |||
| 38 | 2 | 2 | my $action_json; | |||
| 39 | 2 | 20 | open my $action_json_file, '<', $action_json_path; | |||
| 40 | { | |||||
| 41 | 2 2 | 0 5 | local $/ = undef; | |||
| 42 | 2 | 49 | $action_json = <$action_json_file>; | |||
| 43 | 2 | 6 | close $action_json_file; | |||
| 44 | } | |||||
| 45 | 2 2 | 2 3 | my %action = %{decode_json $action_json}; | |||
| 46 | 2 2 | 133213 33 | my %action_inputs = %{$action{inputs}}; | |||
| 47 | 2 | 36 | for my $key (sort keys %action_inputs) { | |||
| 48 | 132 132 | 72 123 | my %ref = %{$action_inputs{$key}}; | |||
| 49 | 132 | 94 | next unless defined $ref{default}; | |||
| 50 | 118 | 69 | next if defined $inputs{$key}; | |||
| 51 | 109 | 47 | my $var = $key; | |||
| 52 | 109 | 88 | next if $var =~ /[-_](?:key|token)$/i; | |||
| 53 | 103 | 77 | if ($var =~ s/-/_/g) { | |||
| 54 | 24 | 14 | next if defined $inputs{$var}; | |||
| 55 | } | |||||
| 56 | 103 | 56 | my $val = $ref{default}; | |||
| 57 | 103 | 98 | next if $val eq ''; | |||
| 58 | 52 | 38 | $val =~ s/([\$])/\\$1/g; | |||
| 59 | 52 | 30 | $val =~ s/'/'"'"'/g; | |||
| 60 | 52 | 34 | $var = 'INPUT_'.(uc $var); | |||
| 61 | 52 | 38 | next if defined $ENV{$var}; | |||
| 62 | 52 | 40 | print qq<export $var='$val';\n>; | |||
| 63 | } | |||||