From 0a01e3e14110e527cb9836aadade99954e371062 Mon Sep 17 00:00:00 2001 From: Ethan Dennis Date: Mon, 15 May 2023 10:58:01 -0700 Subject: [PATCH] Write to random env variables --- lib/concerns/environment_writer.rb | 21 +++++++++++++++++++ lib/concerns/output_writer.rb | 11 ---------- lib/models/arguments.rb | 18 ++++++++++++---- lib/models/command.rb | 4 ++-- lib/models/provider.rb | 2 +- ...ter_spec.rb => environment_writer_spec.rb} | 20 ++++++++++++++++-- spec/models/arguments_spec.rb | 3 ++- spec/spec_helper.rb | 1 + 8 files changed, 59 insertions(+), 21 deletions(-) create mode 100644 lib/concerns/environment_writer.rb delete mode 100644 lib/concerns/output_writer.rb rename spec/concerns/{output_writer_spec.rb => environment_writer_spec.rb} (51%) diff --git a/lib/concerns/environment_writer.rb b/lib/concerns/environment_writer.rb new file mode 100644 index 0000000..1bacce3 --- /dev/null +++ b/lib/concerns/environment_writer.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true + +module EnvironmentWriter + def set_output(name, value) + modify_env("GITHUB_OUTPUT", name, value) + end + + def set_environment(name, value) + modify_env("GITHUB_ENV", name, value) + end + + private + + def modify_env(file, name, value) + return if value.nil? + + File.open(ENV[file], "a") do |f| + f.puts "#{name}=#{value}" + end + end +end diff --git a/lib/concerns/output_writer.rb b/lib/concerns/output_writer.rb deleted file mode 100644 index a602d95..0000000 --- a/lib/concerns/output_writer.rb +++ /dev/null @@ -1,11 +0,0 @@ -# frozen_string_literal: true - -module OutputWriter - def set_output(name, value) - return if value.nil? - - File.open(ENV["GITHUB_OUTPUT"], "a") do |f| - f.puts "#{name}=#{value}" - end - end -end diff --git a/lib/models/arguments.rb b/lib/models/arguments.rb index f67c7b5..7ae5adb 100644 --- a/lib/models/arguments.rb +++ b/lib/models/arguments.rb @@ -1,9 +1,9 @@ # frozen_string_literal: true -require_relative "../concerns/output_writer" +require_relative "../concerns/environment_writer" class Arguments - include OutputWriter + include EnvironmentWriter def initialize(provider, command, issue_content) @args = argument_class(provider, command, issue_content) @@ -24,12 +24,22 @@ class Arguments arguments.concat(["--custom-transformers", *@custom_transformers]) if @custom_transformers.length.positive? + # rng = ENV["CI"] ? Random.new(0) : Random.new + rng = Random.new(0) + set_output( "args", arguments.map do |a| - next a unless a.include?(" ") + value = a.include?(" ") ? a.inspect : a + + unless value.start_with?("--") + name = "variable_#{rng.rand(0..1000)}" + set_environment(name, value) + + value = "$#{name}" + end - a.inspect + value end.join(" ") ) end diff --git a/lib/models/command.rb b/lib/models/command.rb index 3911c8c..3b4fb75 100644 --- a/lib/models/command.rb +++ b/lib/models/command.rb @@ -1,10 +1,10 @@ # frozen_string_literal: true require "active_support/core_ext/string" -require_relative "../concerns/output_writer" +require_relative "../concerns/environment_writer" class Command - include OutputWriter + include EnvironmentWriter VALID_COMMANDS = %w[audit migrate dry-run].freeze diff --git a/lib/models/provider.rb b/lib/models/provider.rb index 0802dba..0d8258e 100644 --- a/lib/models/provider.rb +++ b/lib/models/provider.rb @@ -7,7 +7,7 @@ require_rel "./jenkins/**/*.rb" require_rel "./travis_ci/**/*.rb" class Provider - include OutputWriter + include EnvironmentWriter PROVIDER_MAP = { "azure-devops" => ::AzureDevops, diff --git a/spec/concerns/output_writer_spec.rb b/spec/concerns/environment_writer_spec.rb similarity index 51% rename from spec/concerns/output_writer_spec.rb rename to spec/concerns/environment_writer_spec.rb index 129cf7e..1f0bc5a 100644 --- a/spec/concerns/output_writer_spec.rb +++ b/spec/concerns/environment_writer_spec.rb @@ -1,9 +1,9 @@ # frozen_string_literal: true -RSpec.describe OutputWriter do +RSpec.describe EnvironmentWriter do let(:test_class) do class TestClass - include OutputWriter + include EnvironmentWriter end TestClass.new @@ -24,4 +24,20 @@ RSpec.describe OutputWriter do it { expect { subject }.not_to change { File.read(ENV["GITHUB_OUTPUT"], chomp: true).last } } end end + + describe "#set_environment" do + let(:name) { "env_var_name" } + let(:value) { "env_var_value" } + let(:output) { "#{name}=#{value}" } + + subject { test_class.set_environment(name, value) } + + it { expect { subject }.to change { File.readlines(ENV["GITHUB_ENV"], chomp: true).last }.to(/#{output}/) } + + context "when value is nil" do + let(:value) { nil } + + it { expect { subject }.not_to change { File.read(ENV["GITHUB_ENV"], chomp: true).last } } + end + end end diff --git a/spec/models/arguments_spec.rb b/spec/models/arguments_spec.rb index 28ff873..350ff45 100644 --- a/spec/models/arguments_spec.rb +++ b/spec/models/arguments_spec.rb @@ -54,7 +54,8 @@ RSpec.describe Arguments do let(:output) { ["--option", "value"] } it "writes an output variable" do - expect(arguments).to receive(:set_output).with("args", "--option value") + expect(arguments).to receive(:set_output).with("args", "--option $variable_1") + expect(arguments).to receive(:set_environment).with("variable_684", "value") subject end end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 555e5f7..bb54771 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -29,6 +29,7 @@ RSpec.configure do |config| Dir.mkdir("tmp") unless Dir.exist?("tmp") FileUtils.touch "tmp/test.txt" ENV["GITHUB_OUTPUT"] = "tmp/test.txt" + ENV["GITHUB_ENV"] = "tmp/test.txt" end config.after(:suite) do