Skip to content

Commit 448e959

Browse files
committed
Find draft releases when uploading assets
1 parent d1d2011 commit 448e959

2 files changed

Lines changed: 26 additions & 9 deletions

File tree

lib/fastlane/plugin/wpmreleasetoolkit/helper/github_helper.rb

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -192,16 +192,17 @@ def create_release(repository:, version:, description:, assets:, prerelease:, is
192192
release[:html_url]
193193
end
194194

195-
# Returns the GitHub release matching a given tag/version.
195+
# Returns the GitHub release matching a given tag/version, including draft releases.
196196
#
197197
# @param [String] repository The repository to fetch the GitHub release from. Typically a repo slug (<org>/<repo>).
198198
# @param [String] version The release version/tag to fetch.
199199
# @return [Sawyer::Resource] The matching GitHub Release.
200200
# @raise [Fastlane::UI::Error] UI.user_error! if the release does not exist.
201201
#
202202
def get_release(repository:, version:)
203-
client.release_for_tag(repository, version)
204-
rescue Octokit::NotFound
203+
release = client.releases(repository).find { |candidate| candidate.tag_name == version }
204+
return release unless release.nil?
205+
205206
UI.user_error!("Could not find GitHub Release for tag #{version} in #{repository}")
206207
end
207208

spec/github_helper_spec.rb

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -624,7 +624,7 @@ def create_release(is_draft:, assets: [], name: nil)
624624
let(:test_version) { '1.0.0' }
625625
let(:release_url) { 'https://api.github.com/repos/repo-test/project-test/releases/123' }
626626
let(:release_html_url) { 'https://github.com/repo-test/project-test/releases/tag/1.0.0' }
627-
let(:release) { sawyer_resource_stub(url: release_url, html_url: release_html_url) }
627+
let(:release) { sawyer_resource_stub(url: release_url, html_url: release_html_url, tag_name: test_version) }
628628
let(:existing_assets) { [] }
629629
let(:uploaded_asset) { release_asset(name: 'test-app.zip', url: 'https://api.github.com/repos/repo-test/project-test/releases/assets/999') }
630630
let(:client) do
@@ -640,13 +640,13 @@ def create_release(is_draft:, assets: [], name: nil)
640640

641641
before do
642642
allow(Octokit::Client).to receive(:new).and_return(client)
643-
allow(client).to receive(:release_for_tag).with(test_repo, test_version).and_return(release)
643+
allow(client).to receive(:releases).with(test_repo).and_return([release])
644644
allow(client).to receive(:release_assets).with(release_url).and_return(existing_assets)
645645
allow(client).to receive_messages(upload_asset: uploaded_asset, delete_release_asset: true)
646646
end
647647

648648
it 'fails clearly if the release does not exist' do
649-
allow(client).to receive(:release_for_tag).with(test_repo, test_version).and_raise(Octokit::NotFound)
649+
allow(client).to receive(:releases).with(test_repo).and_return([])
650650

651651
with_tmp_file(named: 'test-app.zip') do |file_path|
652652
expect do
@@ -656,7 +656,7 @@ def create_release(is_draft:, assets: [], name: nil)
656656
end
657657

658658
it 'fails clearly if an asset file does not exist' do
659-
expect(client).not_to receive(:release_for_tag)
659+
expect(client).not_to receive(:releases)
660660
expect(client).not_to receive(:release_assets)
661661
expect(client).not_to receive(:upload_asset)
662662

@@ -666,7 +666,7 @@ def create_release(is_draft:, assets: [], name: nil)
666666
end
667667

668668
it 'fails clearly if an asset is not a file path' do
669-
expect(client).not_to receive(:release_for_tag)
669+
expect(client).not_to receive(:releases)
670670
expect(client).not_to receive(:release_assets)
671671
expect(client).not_to receive(:upload_asset)
672672

@@ -687,7 +687,7 @@ def create_release(is_draft:, assets: [], name: nil)
687687
File.write(first_file_path, 'ios')
688688
File.write(second_file_path, 'tvos')
689689

690-
expect(client).not_to receive(:release_for_tag)
690+
expect(client).not_to receive(:releases)
691691
expect(client).not_to receive(:release_assets)
692692
expect(client).not_to receive(:delete_release_asset)
693693
expect(client).not_to receive(:upload_asset)
@@ -698,6 +698,22 @@ def create_release(is_draft:, assets: [], name: nil)
698698
end
699699
end
700700

701+
it 'uploads assets to a draft release' do
702+
draft_release = sawyer_resource_stub(url: release_url, html_url: release_html_url, tag_name: test_version, draft: true)
703+
other_release = sawyer_resource_stub(url: 'https://api.github.com/repos/repo-test/project-test/releases/456', html_url: 'https://github.com/repo-test/project-test/releases/tag/0.9.0', tag_name: '0.9.0')
704+
705+
allow(client).to receive(:releases).with(test_repo).and_return([other_release, draft_release])
706+
allow(client).to receive(:release_assets).with(release_url).and_return([])
707+
708+
with_tmp_file(named: 'test-app.zip') do |file_path|
709+
expect(client).to receive(:upload_asset).with(release_url, file_path, { content_type: 'application/octet-stream' })
710+
711+
result = upload_release_assets(assets: [file_path])
712+
713+
expect(result).to eq(release_html_url)
714+
end
715+
end
716+
701717
it 'uploads one asset to the existing release' do
702718
with_tmp_file(named: 'test-app.zip') do |file_path|
703719
expect(client).to receive(:upload_asset).with(release_url, file_path, { content_type: 'application/octet-stream' })

0 commit comments

Comments
 (0)