Skip to content

Commit

Permalink
run setup_keychain on macOS environments only (#16733)
Browse files Browse the repository at this point in the history
* run setup_keychain on macOS environments only

* updated test to assert results based on OS

* Swap order of checks in setup_keychain

* refactor setup_keychain tests to run consistently on all test platforms

* updated is_supported? for travis and circle_ci

* added missing test setup condition.  reorganized nesting of describes
  • Loading branch information
seanreinhardtapps committed Jul 7, 2020
1 parent f892133 commit 3f134ee
Show file tree
Hide file tree
Showing 6 changed files with 138 additions and 49 deletions.
5 changes: 5 additions & 0 deletions fastlane/lib/fastlane/actions/setup_ci.rb
Expand Up @@ -24,6 +24,11 @@ def self.detect_provider(params)
end

def self.setup_keychain
unless Helper.mac?
UI.message("Skipping Keychain setup on non-macOS CI Agent")
return
end

unless ENV["MATCH_KEYCHAIN_NAME"].nil?
UI.message("Skipping Keychain setup as a keychain was already specified")
return
Expand Down
2 changes: 1 addition & 1 deletion fastlane/lib/fastlane/actions/setup_circle_ci.rb
Expand Up @@ -41,7 +41,7 @@ def self.authors
end

def self.is_supported?(platform)
[:ios, :mac].include?(platform)
true
end

def self.example_code
Expand Down
2 changes: 1 addition & 1 deletion fastlane/lib/fastlane/actions/setup_travis.rb
Expand Up @@ -40,7 +40,7 @@ def self.authors
end

def self.is_supported?(platform)
[:ios, :mac].include?(platform)
true
end

def self.example_code
Expand Down
59 changes: 48 additions & 11 deletions fastlane/spec/actions_specs/setup_ci_spec.rb
Expand Up @@ -7,20 +7,45 @@
allow(Fastlane::Actions::CreateKeychainAction).to receive(:run).and_return(nil)
end

it "calls setup_keychain after setup_output_paths if :provider is set to circleci" do
# Message is asserted in reverse order, hence output of setup_output_paths is expected last
expect(Fastlane::UI).to receive(:message).with("Enabling match readonly mode.")
expect(Fastlane::UI).to receive(:message).with("Creating temporary keychain: \"fastlane_tmp_keychain\".")
expect(Fastlane::UI).to receive(:message).with("Skipping Log Path setup as FL_OUTPUT_DIR is unset")
describe "calls setup_keychain after setup_output_paths if :provider is set to circleci on Mac Agents" do
it "runs on Mac" do
allow(FastlaneCore::Helper).to receive(:mac?).and_return(true)

described_class.run(provider: "circleci")
# Message is asserted in reverse order, hence output of setup_output_paths is expected last
expect(Fastlane::UI).to receive(:message).with("Enabling match readonly mode.")
expect(Fastlane::UI).to receive(:message).with("Creating temporary keychain: \"fastlane_tmp_keychain\".")
expect(Fastlane::UI).to receive(:message).with("Skipping Log Path setup as FL_OUTPUT_DIR is unset")

described_class.run(provider: "circleci")
end

it "skips on linux" do
allow(FastlaneCore::Helper).to receive(:mac?).and_return(false)

expect(Fastlane::UI).to receive(:message).with("Skipping Log Path setup as FL_OUTPUT_DIR is unset")
expect(Fastlane::UI).to receive(:message).with("Skipping Keychain setup on non-macOS CI Agent")

described_class.run(provider: "circleci")
end
end

it "calls setup_keychain if no provider is be detected" do
expect(Fastlane::UI).to receive(:message).with("Enabling match readonly mode.")
expect(Fastlane::UI).to receive(:message).with("Creating temporary keychain: \"fastlane_tmp_keychain\".")
describe "calls setup_keychain if no provider is be detected on Mac Agents" do
it "runs on Mac" do
allow(FastlaneCore::Helper).to receive(:mac?).and_return(true)

expect(Fastlane::UI).to receive(:message).with("Enabling match readonly mode.")
expect(Fastlane::UI).to receive(:message).with("Creating temporary keychain: \"fastlane_tmp_keychain\".")

described_class.run(force: true)
end

it "skips on linux" do
allow(FastlaneCore::Helper).to receive(:mac?).and_return(false)

expect(Fastlane::UI).to receive(:message).with("Skipping Keychain setup on non-macOS CI Agent")

described_class.run(force: true)
described_class.run(force: true)
end
end
end
end
Expand Down Expand Up @@ -90,15 +115,17 @@
context "when MATCH_KEYCHAIN_NAME is set" do
it "skips the setup process" do
stub_const("ENV", { "MATCH_KEYCHAIN_NAME" => "anything" })
allow(FastlaneCore::Helper).to receive(:mac?).and_return(true)
expect(Fastlane::UI).to receive(:message).with("Skipping Keychain setup as a keychain was already specified")
described_class.setup_keychain
end
end

describe "Setting up the environment" do
context "when operating system is macOS" do
before do
stub_const("ENV", {})
allow(Fastlane::Actions::CreateKeychainAction).to receive(:run).and_return(nil)
allow(FastlaneCore::Helper).to receive(:mac?).and_return(true)
end

it "sets the MATCH_KEYCHAIN_NAME env var" do
Expand All @@ -116,6 +143,16 @@
expect(ENV["MATCH_READONLY"]).to eql("true")
end
end

context "when operating system is not macOS" do
it "skips the setup process" do
stub_const("ENV", {})
allow(Fastlane::Actions::CreateKeychainAction).to receive(:run).and_return(nil)
allow(FastlaneCore::Helper).to receive(:mac?).and_return(false)
expect(Fastlane::UI).to receive(:message).with("Skipping Keychain setup on non-macOS CI Agent")
described_class.setup_keychain
end
end
end

describe "#setup_output_paths" do
Expand Down
60 changes: 42 additions & 18 deletions fastlane/spec/actions_specs/setup_circle_ci_spec.rb
Expand Up @@ -2,7 +2,21 @@
describe Fastlane::Actions::SetupCircleCiAction do
describe "Setup CircleCi Integration" do
let(:tmp_keychain_name) { "fastlane_tmp_keychain" }

def check_keychain_nil
expect(ENV["MATCH_KEYCHAIN_NAME"]).to be_nil
expect(ENV["MATCH_KEYCHAIN_PASSWORD"]).to be_nil
expect(ENV["MATCH_READONLY"]).to be_nil
end

def check_keychain_created
expect(ENV["MATCH_KEYCHAIN_NAME"]).to eq(tmp_keychain_name)
expect(ENV["MATCH_KEYCHAIN_PASSWORD"]).to eq("")
expect(ENV["MATCH_READONLY"]).to eq("true")
end

it "doesn't work outside CI" do
allow(FastlaneCore::Helper).to receive(:mac?).and_return(true)
stub_const("ENV", {})

expect(UI).to receive(:message).with("Not running on CI, skipping CI setup")
Expand All @@ -11,12 +25,25 @@
setup_circle_ci
end").runner.execute(:test)

expect(ENV["MATCH_KEYCHAIN_NAME"]).to be_nil
expect(ENV["MATCH_KEYCHAIN_PASSWORD"]).to be_nil
expect(ENV["MATCH_READONLY"]).to be_nil
check_keychain_nil
end

it "works when forced" do
it "skips outside macOS CI agent" do
allow(FastlaneCore::Helper).to receive(:mac?).and_return(false)
stub_const("ENV", { "FL_SETUP_CIRCLECI_FORCE" => "true" })

expect(UI).to receive(:message).with("Skipping Log Path setup as FL_OUTPUT_DIR is unset")
expect(UI).to receive(:message).with("Skipping Keychain setup on non-macOS CI Agent")

Fastlane::FastFile.new.parse("lane :test do
setup_circle_ci
end").runner.execute(:test)

check_keychain_nil
end

it "works on MacOS Environment when forced" do
allow(FastlaneCore::Helper).to receive(:mac?).and_return(true)
stub_const("ENV", {})

Fastlane::FastFile.new.parse("lane :test do
Expand All @@ -25,21 +52,20 @@
)
end").runner.execute(:test)

expect(ENV["MATCH_KEYCHAIN_NAME"]).to eq(tmp_keychain_name)
expect(ENV["MATCH_KEYCHAIN_PASSWORD"]).to eq("")
expect(ENV["MATCH_READONLY"]).to eq("true")
check_keychain_created
end

it "works inside CI" do
it "works on MacOS Environment inside CI" do
allow(FastlaneCore::Helper).to receive(:mac?).and_return(true)
expect(Fastlane::Actions::CreateKeychainAction).to receive(:run).with(
{
name: tmp_keychain_name,
default_keychain: true,
unlock: true,
timeout: 3600,
lock_when_sleeps: true,
password: "",
add_to_search_list: true
name: tmp_keychain_name,
default_keychain: true,
unlock: true,
timeout: 3600,
lock_when_sleeps: true,
password: "",
add_to_search_list: true
}
)

Expand All @@ -49,9 +75,7 @@
setup_circle_ci
end").runner.execute(:test)

expect(ENV["MATCH_KEYCHAIN_NAME"]).to eq(tmp_keychain_name)
expect(ENV["MATCH_KEYCHAIN_PASSWORD"]).to eq("")
expect(ENV["MATCH_READONLY"]).to eq("true")
check_keychain_created
end
end
end
Expand Down
59 changes: 41 additions & 18 deletions fastlane/spec/actions_specs/setup_travis_spec.rb
Expand Up @@ -2,7 +2,21 @@
describe Fastlane::FastFile do
describe "Setup Travis Integration" do
let(:tmp_keychain_name) { "fastlane_tmp_keychain" }

def check_keychain_nil
expect(ENV["MATCH_KEYCHAIN_NAME"]).to be_nil
expect(ENV["MATCH_KEYCHAIN_PASSWORD"]).to be_nil
expect(ENV["MATCH_READONLY"]).to be_nil
end

def check_keychain_created
expect(ENV["MATCH_KEYCHAIN_NAME"]).to eq(tmp_keychain_name)
expect(ENV["MATCH_KEYCHAIN_PASSWORD"]).to eq("")
expect(ENV["MATCH_READONLY"]).to eq("true")
end

it "doesn't work outside CI" do
allow(FastlaneCore::Helper).to receive(:mac?).and_return(true)
stub_const("ENV", {})

expect(UI).to receive(:message).with("Not running on CI, skipping CI setup")
Expand All @@ -11,12 +25,24 @@
setup_travis
end").runner.execute(:test)

expect(ENV["MATCH_KEYCHAIN_NAME"]).to be_nil
expect(ENV["MATCH_KEYCHAIN_PASSWORD"]).to be_nil
expect(ENV["MATCH_READONLY"]).to be_nil
check_keychain_nil
end

it "works when forced" do
it "skips outside macOS CI agent" do
allow(FastlaneCore::Helper).to receive(:mac?).and_return(false)
stub_const("ENV", { "TRAVIS" => "true" })

expect(UI).to receive(:message).with("Skipping Keychain setup on non-macOS CI Agent")

Fastlane::FastFile.new.parse("lane :test do
setup_travis
end").runner.execute(:test)

check_keychain_nil
end

it "works on MacOS Environment when forced" do
allow(FastlaneCore::Helper).to receive(:mac?).and_return(true)
stub_const("ENV", {})

Fastlane::FastFile.new.parse("lane :test do
Expand All @@ -25,21 +51,20 @@
)
end").runner.execute(:test)

expect(ENV["MATCH_KEYCHAIN_NAME"]).to eq(tmp_keychain_name)
expect(ENV["MATCH_KEYCHAIN_PASSWORD"]).to eq("")
expect(ENV["MATCH_READONLY"]).to eq("true")
check_keychain_created
end

it "works inside CI" do
it "works on MacOS Environment inside CI" do
allow(FastlaneCore::Helper).to receive(:mac?).and_return(true)
expect(Fastlane::Actions::CreateKeychainAction).to receive(:run).with(
{
name: tmp_keychain_name,
default_keychain: true,
unlock: true,
timeout: 3600,
lock_when_sleeps: true,
password: "",
add_to_search_list: true
name: tmp_keychain_name,
default_keychain: true,
unlock: true,
timeout: 3600,
lock_when_sleeps: true,
password: "",
add_to_search_list: true
}
)

Expand All @@ -49,9 +74,7 @@
setup_travis
end").runner.execute(:test)

expect(ENV["MATCH_KEYCHAIN_NAME"]).to eq(tmp_keychain_name)
expect(ENV["MATCH_KEYCHAIN_PASSWORD"]).to eq("")
expect(ENV["MATCH_READONLY"]).to eq("true")
check_keychain_created
end
end
end
Expand Down

0 comments on commit 3f134ee

Please sign in to comment.