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