|
424 | 424 | expect(results.first.stdout).to include("already published") |
425 | 425 | end |
426 | 426 |
|
427 | | - it "fails published-version skips when local HEAD is newer than the release tag" do |
| 427 | + it "skips already published versions when local HEAD is newer than the release tag" do |
428 | 428 | write_release_config(publish_command: [RbConfig.ruby, "-e", "abort 'should not run'"]) |
429 | 429 | config = Kettle::Family::Config.load(root: @tmpdir) |
430 | 430 | member = ready_member("alpha") |
|
434 | 434 | allow(workflow).to receive(:git_work_tree?).with(member.root).and_return(true) |
435 | 435 | allow(workflow).to receive(:git_rev_parse).with(member.root, "refs/tags/v1.0.0^{}").and_return("tag-sha") |
436 | 436 | allow(workflow).to receive(:git_rev_parse).with(member.root, "HEAD").and_return("head-sha") |
437 | | - allow(workflow).to receive(:release_pending?).with(member).and_return(true) |
438 | 437 |
|
439 | 438 | results = workflow.results |
440 | 439 |
|
441 | 440 | expect(results.map(&:phase)).to eq(["release_skip"]) |
442 | | - expect(results.first).not_to be_ok |
443 | | - expect(results.first.stdout).to include("current HEAD is not v1.0.0") |
444 | | - expect(results.first.stdout).to include("bump-version patch --execute --only alpha") |
| 441 | + expect(results.first).to be_ok |
| 442 | + expect(results.first.skipped).to be(true) |
| 443 | + expect(results.first.reason).to eq("already released; current HEAD is newer than release tag") |
| 444 | + expect(results.first.stdout).to include("current HEAD is newer than v1.0.0") |
| 445 | + expect(results.first.stdout).not_to include("bump-version") |
445 | 446 | end |
446 | 447 |
|
447 | | - it "skips already published versions when release state reports no pending release" do |
448 | | - write_release_config(publish_command: [RbConfig.ruby, "-e", "abort 'should not run'"]) |
| 448 | + it "continues release after skipping an already published version whose HEAD moved past the tag" do |
| 449 | + write_release_config(publish_command: [RbConfig.ruby, "-e", "puts 'publish'"]) |
449 | 450 | config = Kettle::Family::Config.load(root: @tmpdir) |
450 | | - member = ready_member("alpha") |
451 | | - workflow = described_class.new(command: "release", config: config, members: [member], execute: true, publish: true) |
| 451 | + alpha = ready_member("alpha") |
| 452 | + beta = ready_member("beta") |
| 453 | + workflow = described_class.new(command: "release", config: config, members: [alpha, beta], execute: true, publish: true) |
452 | 454 | allow(workflow).to receive(:prompt_for_gem_signing_password) |
453 | 455 | allow(workflow).to receive(:released_version?).with("alpha", "1.0.0").and_return(true) |
454 | | - allow(workflow).to receive(:git_work_tree?).with(member.root).and_return(true) |
455 | | - allow(workflow).to receive(:git_rev_parse).with(member.root, "refs/tags/v1.0.0^{}").and_return("tag-sha") |
456 | | - allow(workflow).to receive(:git_rev_parse).with(member.root, "HEAD").and_return("head-sha") |
457 | | - allow(workflow).to receive(:release_pending?).with(member).and_return(false) |
| 456 | + allow(workflow).to receive(:released_version?).with("beta", "1.0.0").and_return(false) |
| 457 | + allow(workflow).to receive(:git_work_tree?).with(alpha.root).and_return(true) |
| 458 | + allow(workflow).to receive(:git_rev_parse).with(alpha.root, "refs/tags/v1.0.0^{}").and_return("tag-sha") |
| 459 | + allow(workflow).to receive(:git_rev_parse).with(alpha.root, "HEAD").and_return("head-sha") |
458 | 460 |
|
459 | 461 | results = workflow.results |
460 | 462 |
|
461 | | - expect(results.map(&:phase)).to eq(["release_skip"]) |
462 | | - expect(results.first).to be_ok |
463 | | - expect(results.first.skipped).to be(true) |
464 | | - expect(results.first.reason).to eq("already released; no pending release") |
465 | | - expect(results.first.stdout).to include("no pending release") |
| 463 | + expect(results.map(&:phase)).to include("release_skip", "check", "release_publish") |
| 464 | + alpha_skip = results.find { |result| result.member_name == "alpha" && result.phase == "release_skip" } |
| 465 | + expect(alpha_skip).to be_ok |
| 466 | + expect(alpha_skip.skipped).to be(true) |
| 467 | + expect(results.find { |result| result.member_name == "beta" && result.phase == "release_publish" }).to be_ok |
466 | 468 | end |
467 | 469 |
|
468 | 470 | it "rediscovers member metadata after each target branch checkout" do |
|
0 commit comments