|
2 | 2 |
|
3 | 3 | describe Fastlane::Actions::BuildkiteUploadPipelineAction do |
4 | 4 | let(:pipeline_file) { 'path/to/pipeline.yml' } |
5 | | - let(:branch) { 'feature-branch' } |
6 | | - let(:commit) { 'abc123' } |
7 | | - let(:commit_default) { Fastlane::Actions::BuildkiteUploadPipelineAction::DEFAULT_COMMIT } |
8 | 5 | let(:env_file) { 'path/to/env_file' } |
9 | 6 | let(:env_file_default) { Fastlane::Actions::BuildkiteUploadPipelineAction::DEFAULT_ENV_FILE } |
| 7 | + let(:environment) { { 'AKEY' => 'AVALUE' } } |
| 8 | + let(:environment_default) { {} } |
10 | 9 |
|
11 | 10 | before do |
12 | 11 | allow(File).to receive(:exist?).with(anything) |
|
17 | 16 | describe 'parameter validation' do |
18 | 17 | it 'raises an error when pipeline_file is not provided' do |
19 | 18 | expect do |
20 | | - run_described_fastlane_action(branch: branch) |
| 19 | + run_described_fastlane_action( |
| 20 | + environment: environment |
| 21 | + ) |
21 | 22 | end.to raise_error(FastlaneCore::Interface::FastlaneError, /pipeline_file/) |
22 | 23 | end |
23 | 24 |
|
24 | 25 | it 'raises an error when pipeline_file does not exist' do |
25 | 26 | allow(File).to receive(:exist?).with(pipeline_file).and_return(false) |
26 | 27 | expect do |
27 | | - run_described_fastlane_action( |
28 | | - pipeline_file: pipeline_file, |
29 | | - branch: branch |
30 | | - ) |
| 28 | + run_described_fastlane_action(pipeline_file: pipeline_file) |
31 | 29 | end.to raise_error(FastlaneCore::Interface::FastlaneError, /Pipeline file not found/) |
32 | 30 | end |
33 | 31 |
|
34 | | - it 'raises an error when both branch and commit are provided' do |
| 32 | + it 'raises an error when not running on Buildkite' do |
35 | 33 | allow(File).to receive(:exist?).with(pipeline_file).and_return(true) |
| 34 | + allow(ENV).to receive(:[]).with('BUILDKITE').and_return(nil) |
| 35 | + |
36 | 36 | expect do |
37 | | - run_described_fastlane_action( |
38 | | - pipeline_file: pipeline_file, |
39 | | - branch: branch, |
40 | | - commit: commit |
41 | | - ) |
42 | | - end.to raise_error(FastlaneCore::Interface::FastlaneError, /You should not provide both `branch` and `commit`/) |
| 37 | + run_described_fastlane_action(pipeline_file: pipeline_file) |
| 38 | + end.to raise_error(FastlaneCore::Interface::FastlaneError, /This action can only be called from a Buildkite CI build/) |
43 | 39 | end |
44 | 40 |
|
45 | | - it 'uses the default value for commit when not provided' do |
| 41 | + it 'passes the environment hash to the shell command' do |
46 | 42 | allow(File).to receive(:exist?).with(pipeline_file).and_return(true) |
47 | 43 | expect(Fastlane::Action).to receive(:sh).with( |
48 | | - { 'BUILDKITE_BRANCH' => branch, 'BUILDKITE_COMMIT' => commit_default }, |
| 44 | + environment, |
49 | 45 | 'buildkite-agent', 'pipeline', 'upload', pipeline_file |
50 | 46 | ) |
51 | 47 | expect_upload_pipeline_message |
52 | 48 |
|
53 | 49 | run_described_fastlane_action( |
54 | 50 | pipeline_file: pipeline_file, |
55 | | - branch: branch |
| 51 | + environment: environment |
56 | 52 | ) |
57 | 53 | end |
58 | 54 |
|
59 | | - it 'uses the provided value for the commit' do |
| 55 | + it 'passes the environment hash to the shell command also with an env_file' do |
60 | 56 | allow(File).to receive(:exist?).with(pipeline_file).and_return(true) |
| 57 | + allow(File).to receive(:exist?).with(env_file).and_return(true) |
61 | 58 | expect(Fastlane::Action).to receive(:sh).with( |
62 | | - { 'BUILDKITE_COMMIT' => commit }, |
63 | | - 'buildkite-agent', 'pipeline', 'upload', pipeline_file |
| 59 | + environment, |
| 60 | + "source #{env_file.shellescape} && buildkite-agent pipeline upload #{pipeline_file.shellescape}" |
64 | 61 | ) |
65 | | - expect_upload_pipeline_message(expected_branch: nil, expected_commit: commit) |
| 62 | + expect_upload_pipeline_message |
| 63 | + expect_sourcing_env_file_message(env_file) |
66 | 64 |
|
67 | 65 | run_described_fastlane_action( |
68 | 66 | pipeline_file: pipeline_file, |
69 | | - commit: commit |
| 67 | + environment: environment, |
| 68 | + env_file: env_file |
70 | 69 | ) |
71 | 70 | end |
72 | | - |
73 | | - it 'raises an error when not running on Buildkite' do |
74 | | - allow(File).to receive(:exist?).with(pipeline_file).and_return(true) |
75 | | - allow(ENV).to receive(:[]).with('BUILDKITE').and_return(nil) |
76 | | - |
77 | | - expect do |
78 | | - run_described_fastlane_action( |
79 | | - pipeline_file: pipeline_file, |
80 | | - branch: branch |
81 | | - ) |
82 | | - end.to raise_error(FastlaneCore::Interface::FastlaneError, /This action can only be called from a Buildkite CI build/) |
83 | | - end |
84 | 71 | end |
85 | 72 |
|
86 | 73 | describe 'pipeline upload' do |
|
90 | 77 |
|
91 | 78 | it 'calls the right command to upload the pipeline without env_file' do |
92 | 79 | expect(Fastlane::Action).to receive(:sh).with( |
93 | | - { 'BUILDKITE_BRANCH' => branch, 'BUILDKITE_COMMIT' => commit_default }, |
| 80 | + environment_default, |
94 | 81 | 'buildkite-agent', 'pipeline', 'upload', pipeline_file |
95 | 82 | ) |
96 | 83 | expect_upload_pipeline_message |
97 | 84 |
|
98 | | - run_described_fastlane_action( |
99 | | - pipeline_file: pipeline_file, |
100 | | - branch: branch |
101 | | - ) |
| 85 | + run_described_fastlane_action(pipeline_file: pipeline_file) |
102 | 86 | end |
103 | 87 |
|
104 | 88 | it 'calls the right command to upload the pipeline with env_file' do |
105 | 89 | allow(File).to receive(:exist?).with(env_file).and_return(true) |
106 | 90 | expect(Fastlane::Action).to receive(:sh).with( |
107 | | - { 'BUILDKITE_BRANCH' => branch, 'BUILDKITE_COMMIT' => commit_default }, |
| 91 | + environment_default, |
108 | 92 | "source #{env_file.shellescape} && buildkite-agent pipeline upload #{pipeline_file.shellescape}" |
109 | 93 | ) |
110 | 94 | expect_upload_pipeline_message |
111 | | - expect(Fastlane::UI).to receive(:message).with(/Sourcing environment file beforehand: #{env_file}/) |
| 95 | + expect_sourcing_env_file_message(env_file) |
112 | 96 |
|
113 | 97 | run_described_fastlane_action( |
114 | 98 | pipeline_file: pipeline_file, |
115 | | - env_file: env_file, |
116 | | - branch: branch |
| 99 | + env_file: env_file |
117 | 100 | ) |
118 | 101 | end |
119 | 102 |
|
120 | 103 | it 'skips sourcing env_file when it does not exist' do |
121 | 104 | non_existent_env_file = 'path/to/non_existent_env_file' |
122 | 105 | allow(File).to receive(:exist?).with(non_existent_env_file).and_return(false) |
123 | 106 | expect(Fastlane::Action).to receive(:sh).with( |
124 | | - { 'BUILDKITE_BRANCH' => branch, 'BUILDKITE_COMMIT' => commit_default }, |
| 107 | + environment_default, |
125 | 108 | 'buildkite-agent', 'pipeline', 'upload', pipeline_file |
126 | 109 | ) |
127 | 110 | expect(Fastlane::UI).not_to receive(:message).with(/Sourcing environment file/) |
128 | 111 |
|
129 | 112 | run_described_fastlane_action( |
130 | 113 | pipeline_file: pipeline_file, |
131 | | - env_file: non_existent_env_file, |
132 | | - branch: branch |
| 114 | + env_file: non_existent_env_file |
133 | 115 | ) |
134 | 116 | end |
135 | 117 |
|
136 | 118 | it 'uses a default env_file when no env_file is provided' do |
137 | 119 | allow(File).to receive(:exist?).with(env_file_default).and_return(true) |
138 | 120 | expect(Fastlane::Action).to receive(:sh).with( |
139 | | - { 'BUILDKITE_BRANCH' => branch, 'BUILDKITE_COMMIT' => commit_default }, |
| 121 | + environment_default, |
140 | 122 | "source #{env_file_default} && buildkite-agent pipeline upload #{pipeline_file.shellescape}" |
141 | 123 | ) |
142 | 124 | expect_upload_pipeline_message |
143 | | - expect(Fastlane::UI).to receive(:message).with(/Sourcing environment file beforehand: #{env_file_default}/) |
| 125 | + expect_sourcing_env_file_message(env_file_default) |
144 | 126 |
|
145 | 127 | run_described_fastlane_action( |
146 | | - pipeline_file: pipeline_file, |
147 | | - branch: branch |
| 128 | + pipeline_file: pipeline_file |
148 | 129 | ) |
149 | 130 | end |
150 | 131 | end |
|
156 | 137 |
|
157 | 138 | expect do |
158 | 139 | run_described_fastlane_action( |
159 | | - pipeline_file: pipeline_file, |
160 | | - branch: branch |
| 140 | + pipeline_file: pipeline_file |
161 | 141 | ) |
162 | 142 | end.to raise_error(StandardError, 'Upload failed') |
163 | 143 | end |
164 | 144 | end |
165 | 145 |
|
166 | | - def expect_upload_pipeline_message(expected_branch: branch, expected_commit: commit_default) |
| 146 | + def expect_upload_pipeline_message |
| 147 | + expect(Fastlane::UI).to receive(:message).with( |
| 148 | + "Adding steps from `#{pipeline_file}` to the current build" |
| 149 | + ) |
| 150 | + end |
| 151 | + |
| 152 | + def expect_sourcing_env_file_message(env_file) |
167 | 153 | expect(Fastlane::UI).to receive(:message).with( |
168 | | - "Adding steps from `#{pipeline_file}` to the current build (#{expected_branch ? "branch: `#{expected_branch}`, " : ''}commit: `#{expected_commit}`)" |
| 154 | + /Sourcing environment file beforehand: #{env_file}/ |
169 | 155 | ) |
170 | 156 | end |
171 | 157 | end |
0 commit comments