Git Product home page Git Product logo

git-pr-release's Introduction

git-pr-release Gem Version

Creates a "release pull request", whose body consists of features list or pull requests that are to be released into production. It's especially useful for QA and pre-release checks. git-pr-release automatically collect pull requests merged into master branch and generates the content of the release pull request.

Screenshot

Suitable for branching strategy like below (similar to git-flow):

  • Feature branches are first merged into "staging" (or release, development) branch.
  • Then the staging branch is merged into "production" branch, which is for production release.

Usage

git-pr-release: default

git-pr-release --squashed: include PRs containing squashed commits.

git-pr-release --overwrite-description: generate a fresh PR description.

git-pr-release -n | git-pr-release --dry-run: perform a dry run; does not update PR.

git-pr-release --no-fetch: Do not fetch from remote repo before determining target PRs (CI friendly).

git-pr-release --json: Show data of target PRs in JSON format.

Configuration

All configuration are taken using git config. You can write these variables in file .git-pr-release (instead of .git/config or ~/.gitconfig) to share project-wise configuration to other collaborators.

pr-release.token

Token for GitHub API.

If not set, you will be asked to input username/password for one time only, and this configuration variable will be stored.

You can specify this value by GIT_PR_RELEASE_TOKEN environment variable.

pr-release.branch.production

The branch name that is deployed in production environment.

You can specify this value by GIT_PR_RELEASE_BRANCH_PRODUCTION environment variable.

Default value: master.

pr-release.branch.staging

The branch name that the feature branches are merged into and is going to be merged into the "production" branch.

You can specify this value by GIT_PR_RELEASE_BRANCH_STAGING environment variable.

Default value: staging.

pr-release.template

The template file path (relative to the workidir top) for pull requests created. Its first line is used for the PR title, the rest for the body. This is an ERB template.

You can specify this value by GIT_PR_RELEASE_TEMPLATE environment variable.

If not specified, the content below is used as the template (embedded in the code):

Release <%= Time.now %>
<% pull_requests.each do |pr| -%>
<%=  pr.to_checklist_item %>
<% end -%>

pr-release.labels

The labels list for adding to pull requests created. This value should be comma-separated strings.

You can specify this value by GIT_PR_RELEASE_LABELS environment variable.

If not specified, any labels will not be added for PRs.

pr-release.mention

The name that is listed next to each PR title. Accepted values: author

You can specify this value by GIT_PR_RELEASE_MENTION environment variable.

If not specified, the mention will be the PR assignee

pr-release.ssl-no-verify

Whether to verify SSL certificate or not. Accepted values: true | false

This option might be useful when self-hosted GitHub enterprise server is using self-signed certificate.

You can specify this value by GIT_PR_RELEASE_SSL_NO_VERIFY to 1.

If not specified, verify SSL certificate always.

Errors and exit statuses

No pull requests to be released

exit status is 1.

Author

motemen [email protected], original in-house version written by @hitode909.

git-pr-release's People

Contributors

aereal avatar banyan avatar dabutvin avatar giginet avatar hakobe avatar ikesyo avatar kachick avatar kitsuyui avatar kyanny avatar motemen avatar mpon avatar mtgto avatar nhosoya avatar ninjinkun avatar nisshiee avatar ohbarye avatar onk avatar petercorrea avatar sasasin avatar shibayu36 avatar songmu avatar toshimaru avatar w1mvy avatar ypresto avatar ytkg avatar yuki-inoue avatar yutailang0119 avatar yuuan avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

git-pr-release's Issues

Merging PR body seems to be buggy when old_body is modified

This issue is partially related to #20

Step to reproduce

  1. Do git-pr-release, then the release PR body is
- [ ] #1 Init new func @test_user
- [ ] #2 Add new func @test_user2
  1. Edit PR body like
- [ ] #1 Init new func @test_user
- [ ] #2 Add new func @test_user2

In this PR, we've done blah blah blah ...

When we release, we should do blah blah blah ...
  1. Merge new some PRs into staging branch

  2. Do git-pr-release again

Result

The release PR body is

- [ ] #1 Init new func @test_user
- [ ] #2 Add new func @test_user

- [ ] #3 Fix bugs @test_user
In this PR, we've done blah blah blah ...
- [ ] #4 Add more func @test_user

- [ ] #5 Refactor a bit @test_user
When we release, we should do blah blah blah ...
- [ ] #6 hogehoge @test_user"

Expected results

- [ ] #1 Init new func @test_user
- [ ] #2 Add new func @test_user
- [ ] #3 Fix bugs @test_user
- [ ] #4 Add more func @test_user
- [ ] #5 Refactor a bit @test_user
- [ ] #6 hogehoge @test_user"

In this PR, we've done blah blah blah ...

When we release, we should do blah blah blah ...

Or

- [ ] #1 Init new func @test_user
- [ ] #2 Add new func @test_user

In this PR, we've done blah blah blah ...

When we release, we should do blah blah blah ...

- [ ] #3 Fix bugs @test_user
- [ ] #4 Add more func @test_user
- [ ] #5 Refactor a bit @test_user
- [ ] #6 hogehoge @test_user"

Now I'm trying to fix merge_pr_body method to return my expected result.

'merge_pr_body': undefined method 'split' for nil:NilClass

When I try to create a new PR using git-pr-release, I get an error and the PR is no longer rewritten correctly.

/opt/hostedtoolcache/Ruby/2.7.4/x64/lib/ruby/gems/2.7.0/gems/git-pr-release-1.8.0/lib/git/pr/release/util.rb:119:in `merge_pr_body': undefined method `split' for nil:NilClass (NoMethodError)
	from /opt/hostedtoolcache/Ruby/2.7.4/x64/lib/ruby/gems/2.7.0/gems/git-pr-release-1.8.0/lib/git/pr/release/cli.rb:182:in `build_and_merge_pr_title_and_body'
	from /opt/hostedtoolcache/Ruby/2.7.4/x64/lib/ruby/gems/2.7.0/gems/git-pr-release-1.8.0/lib/git/pr/release/cli.rb:149:in `create_release_pr'
	from /opt/hostedtoolcache/Ruby/2.7.4/x64/lib/ruby/gems/2.7.0/gems/git-pr-release-1.8.0/lib/git/pr/release/cli.rb:50:in `start'
	from /opt/hostedtoolcache/Ruby/2.7.4/x64/lib/ruby/gems/2.7.0/gems/git-pr-release-1.8.0/lib/git/pr/release/cli.rb:12:in `start'
	from /opt/hostedtoolcache/Ruby/2.7.4/x64/lib/ruby/gems/2.7.0/gems/git-pr-release-1.8.0/exe/git-pr-release:5:in `<top (required)>'
	from /opt/hostedtoolcache/Ruby/2.7.4/x64/bin/git-pr-release:23:in `load'
	from /opt/hostedtoolcache/Ruby/2.7.4/x64/bin/git-pr-release:23:in `<main>'

I don't know what the cause is directly, as it has been working fine so far, but I think it is possible to fix it in the code.

If we have release_pr but no release_pr.body, we can put an empty string in old_body.

old_body = release_pr ? release_pr.body : ""
pr_title, new_body = build_pr_title_and_body(release_pr, merged_prs, changed_files, template_path)
[pr_title, merge_pr_body(old_body, new_body)]

v2.1.0 displays error message "error: invalid key: pr-release.ssl_no_verify"

❯ git-pr-release -n
error: invalid key: pr-release.ssl_no_verify
WARNING: `Faraday::Connection#authorization` is deprecated; it will be removed in version 2.0.
While initializing your connection, use `#request(:authorization, ...)` instead.
See https://lostisland.github.io/faraday/middleware/authentication for more usage info.
(ry

#77 might have bug. I'll fix.

undefined local variable or method `host_and_repository_and_scheme'

TL;DR: When using this gem, an error occurs.
Environment: CircleCI(image: circleci/ruby)

GIT_PR_RELEASE_BRANCH_PRODUCTION=master \
GIT_PR_RELEASE_BRANCH_STAGING=develop \
git-pr-release
NOTE: Inheriting Faraday::Error::ClientError is deprecated; use Faraday::ClientError instead. It will be removed in or after version 1.0
Faraday::Error::ClientError.inherited called from /usr/local/bundle/gems/octokit-4.14.0/lib/octokit/middleware/follow_redirects.rb:14.
Traceback (most recent call last):
	3: from /usr/local/bundle/bin/git-pr-release:23:in `<main>'
	2: from /usr/local/bundle/bin/git-pr-release:23:in `load'
	1: from /usr/local/bundle/gems/git-pr-release-1.0.0/exe/git-pr-release:5:in `<top (required)>'
/usr/local/bundle/gems/git-pr-release-1.0.0/lib/git/pr/release/cli.rb:10:in `start': undefined local variable or method `host_and_repository_and_scheme' for Git::Pr::Release::CLI:Class (NameError)
make: *** [Makefile:121: git-pr-release] Error 1

Exited with code exit status 2

[Proposal] Sort merged_pull_request_numbers numerically by default

Currently if PR number's digit is increased (e.g. PRs are from 998 to 1001) the PRs are listed as follows:

  • 1000
  • 1001
  • 998
  • 999

due to the output order of git ls-remote origin refs/pull/*/head. How about sorting the numbers numerically? Or sorting at template is recommended?

merged_pull_request_numbers = git('ls-remote', 'origin', 'refs/pull/*/head').map do |line|
sha1, ref = line.chomp.split /\s+/
if merged_feature_head_sha1s.include? sha1
if %r<^refs/pull/(\d+)/head$>.match ref
pr_number = $1.to_i
if git('merge-base', sha1, "origin/#{production_branch}").first.chomp == sha1
say "##{pr_number} (#{sha1}) is already merged into #{production_branch}", :debug
else
pr_number
end
else
say "Bad pull request head ref format: #{ref}", :warn
nil
end
end
end.compact

git-pr-release finish without execute anything

I installed git-pr-release from rubygems and run it. But it did not do anything.

How to reproduce

$ docker run -i -t ruby:2.5.4-alpine3.9 sh -c "gem install git-pr-release --version=0.7.0 && git-pr-release --help"
Fetching multipart-post-2.0.0.gem
Fetching faraday-0.15.4.gem
Fetching addressable-2.5.2.gem
Fetching sawyer-0.8.1.gem
Fetching public_suffix-3.0.3.gem
Fetching highline-2.0.1.gem
Fetching octokit-4.13.0.gem
Fetching colorize-0.8.1.gem
Fetching git-pr-release-0.7.0.gem
Fetching diff-lcs-1.3.gem
Successfully installed multipart-post-2.0.0
Successfully installed faraday-0.15.4
Successfully installed public_suffix-3.0.3
Successfully installed addressable-2.5.2
Successfully installed sawyer-0.8.1
Successfully installed octokit-4.13.0
Successfully installed highline-2.0.1
Successfully installed colorize-0.8.1
Successfully installed diff-lcs-1.3
Successfully installed git-pr-release-0.7.0
10 gems installed
<<< SHOULD SHOW SOMETHING.

seems main function is not called from
https://github.com/motemen/git-pr-release/blob/master/bin/git-pr-release#L412

#25 could be related.

Tests fails on Ruby 3.1.0

Problem

As the title says, some tests fail on Ruby 3.1.0.

https://github.com/x-motemen/git-pr-release/runs/4501404152?check_suite_focus=true

  1) Git::Pr::Release::CLI#fetch_merged_prs is expected to receive git("merge-base", "42bd43b80c973c8f348df3521745201be05bf194", "origin/master") 1 time
     Failure/Error: @pr_3 = Sawyer::Resource.new(agent, YAML.load_file(file_fixture("pr_3.yml")))

     Psych::DisallowedClass:
       Tried to load unspecified class: Time
     # ./spec/git/pr/release/cli_spec.rb:222:in `block (3 levels) in <top (required)>'
     # ./spec/spec_helper.rb:25:in `block (2 levels) in <top (required)>'
     # ./vendor/bundle/ruby/3.1.0/gems/webmock-3.14.0/lib/webmock/rspec.rb:37:in `block (2 levels) in <top (required)>'

The used authorization API has been deprecated

This does not affect those who provide their PAT when running git-pr-release.

I've got the email below after generating a PAT through CLI.

ss 2020-09-14 at 12 35 10

GitHub has deprecated password authentication/authorization APIs and it will be removed on November 13, 2020 at 16:00 UTC. ref: https://developer.github.com/changes/2020-02-14-deprecating-oauth-auth-endpoint/

git-pr-release is not an OAuth app so I guess git-pr-release should stop supporting a flow to generate a PAT.

GIT_PR_RELEASE_BRANCH_PRODUCTION should accept empty string

I usually use git-pr-release and like it!
However, git-pr-release requests consistent base branch(e.g. master or main). This behavior is not suitable for our use-case.

Problem

We use git-pr-release in our project to create topic PR. Topic PR is directed to a "release" branch(not equal to main branch). Release branch is created every two weeks so GIT_PR_RELEASE_BRANCH_PRODUCTION cannot be consistent.

For more example, this step will show a problem to you.

  1. Setup git-pr-release on a repository
  2. Create release PR with git-pr-release
  3. Change the base branch from main to another branch
  4. Merge a PR to release PR
  5. New release PR is created by git-pr-release instead of updating existing release PR

Could you make GIT_PR_RELEASE_BRANCH_PRODUCTION accept empty?

Solution

To stop passing a base parameter when GIT_PR_RELEASE_BRANCH_PRODUCTION is empty will solve this problem.

client.pull_requests(repository, head: "#{user}:#{staging_branch}", base: production_branch).first

git-pr-release installed with rbenv does nothing

Environment

  • git-pr-release 0.8.0
  • rbenv 1.1.2
  • ruby 2.3.7
  • macOS 10.13.6

Description

When I install git-pr-release >= 0.7.0 with rbenv, It seems running git-pr-release does nothing.

$ which ruby
/Users/hiroshi/.rbenv/shims/ruby
$ which gem
/Users/hiroshi/.rbenv/shims/gem
$ gem install git-pr-release
Fetching: git-pr-release-0.8.0.gem (100%)
Successfully installed git-pr-release-0.8.0
Parsing documentation for git-pr-release-0.8.0
Installing ri documentation for git-pr-release-0.8.0
Done installing documentation for git-pr-release after 0 seconds
1 gem installed
$ DEBUG=true git-pr-release
$

Steps to reproduce

  1. Install rbenv
  2. Install ruby with rbenv install 2.3.7
  3. Install git-pr-release with gem install git-pr-release
  4. Run git-pr-release

Result

At step 4, nothing is displayed and the command finishes silently

Expected result

At step 4, something like below output is shown:

$ DEBUG=true git-pr-release
Executing `git config remote.origin.url`
Executing `git config -f .git-pr-release pr-release.branch.production`
Executing `git config -f .git-pr-release pr-release.branch.staging`
Repository:        hkurokawa/dummy-repo
Production branch: release
Staging branch:    master
Executing `git config -f .git-pr-release pr-release.token`
Executing `git config pr-release.token`
Executing `git remote update origin`
Executing `git log --merges --pretty=format:%P origin/production..origin/master`
Executing `git ls-remote origin refs/pull/*/head`
No pull requests to be released

Remarks

I believe this issue was introduced by d1e5052 and this issue is related to #27

I don't know whether adding if statement to make sure the script is not executed when it is just loaded is the idiomatic way. But it seems ~/.rbenv/versions/2.3.7/bin/git-pr-release does load the script as below. So I am wondering if there might be no way to tell apart script loading from script execution (as rbenv loads the script to run).

load Gem.bin_path('git-pr-release', 'git-pr-release', version)

If you need further information or have a question, feel free to ask me.

Thanks.

execution failed using faraday-0.16.1

TL;DR: When using faraday-0.16.1, execution failed.
Environment: CircleCI(image: circleci/ruby)

Simply installing with gem install git-pr-release will now install faraday-0.16.1, but it will stop working.

Therefore, I think that it is necessary to specify the package version in git-pr-release's Gemfile, what do you think?

e.g. gem "faraday", "x.y.z"

log

#!/bin/bash -eo pipefail
gem install -N git-pr-release
Fetching faraday-0.16.1.gem
Fetching public_suffix-4.0.1.gem
Fetching multipart-post-2.1.1.gem
Fetching highline-2.0.2.gem
Fetching colorize-0.8.1.gem
Fetching addressable-2.7.0.gem
Fetching octokit-4.14.0.gem
Fetching sawyer-0.8.2.gem
Fetching git-pr-release-0.8.0.gem
Fetching diff-lcs-1.3.gem
Successfully installed multipart-post-2.1.1
Successfully installed faraday-0.16.1
Successfully installed public_suffix-4.0.1
Successfully installed addressable-2.7.0
Successfully installed sawyer-0.8.2
Successfully installed octokit-4.14.0
Successfully installed highline-2.0.2
Successfully installed colorize-0.8.1
Successfully installed diff-lcs-1.3
Successfully installed git-pr-release-0.8.0
10 gems installed
#!/bin/bash -eo pipefail
git-pr-release --no-fetch
Traceback (most recent call last):
	13: from /usr/local/bundle/bin/git-pr-release:23:in `<main>'
	12: from /usr/local/bundle/bin/git-pr-release:23:in `load'
	11: from /usr/local/bundle/gems/git-pr-release-0.8.0/bin/git-pr-release:11:in `<top (required)>'
	10: from /usr/local/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
	 9: from /usr/local/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
	 8: from /usr/local/bundle/gems/octokit-4.14.0/lib/octokit.rb:4:in `<top (required)>'
	 7: from /usr/local/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
	 6: from /usr/local/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
	 5: from /usr/local/bundle/gems/octokit-4.14.0/lib/octokit/default.rb:1:in `<top (required)>'
	 4: from /usr/local/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
	 3: from /usr/local/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
	 2: from /usr/local/bundle/gems/octokit-4.14.0/lib/octokit/middleware/follow_redirects.rb:9:in `<top (required)>'
	 1: from /usr/local/bundle/gems/octokit-4.14.0/lib/octokit/middleware/follow_redirects.rb:11:in `<module:Octokit>'
/usr/local/bundle/gems/octokit-4.14.0/lib/octokit/middleware/follow_redirects.rb:14:in `<module:Middleware>': superclass must be a Class (Faraday::DeprecatedConstant given) (TypeError)
Exited with code 1

Release 0.1.2

Please release latest version including 6b090f6 . My co-worker got same Ruby 1.9.x problem.

Warning about constant of OpenSSL on execute

I found following warning. Can you make it disappear?
(I think it's harmless and there's no practical problem, maybe...)

$ bundle exec git-pr-release
/Users/asato/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/git-pr-release-0.2.0/bin/git-pr-release:239: warning: already initialized constant OpenSSL::SSL::VERIFY_PEER
To be released: #78 XXXXXXXXXX
Searching for existing release pull requests...
Updated pull request: https://MY_GITHUB_ENTERPRISE/MY_ORG/MY_REPO/pull/80

[Proposal] Add functionality for creating Draft PRs

Hello @motemen, @onk, and the git-pr-release maintainers,

Currently, git-pr-release lacks the ability to create Draft PRs. This imposes the assumption that all PRs are fully prepared, which may not always reflect the actual situation.

Proposed Solution

I propose to add a setting named pr-release.draft, which should be specified as a boolean value. By default, it will be set to false. However, when users set it to true, the PRs created by git-pr-release will be marked as drafts.

Additional Information

Adding this functionality to git-pr-release would allow users to communicate more clearly to other developers that their work is still ongoing. I believe this could greatly improve the workflow and collaboration within development teams.

GitHub update causes titles to be rendered twice

A recent update to GitHub seems to have changed the way PullRequest URLs are displayed when they are in descriptions or comments.
Specifically, if the Pull Request URL is in a checklist item, the title is now automatically completed.
(Perhaps this update is related.)

This causes the title to be rendered twice in the description generated by git-pr-release using to_checklist_item.


https://github.com/x-motemen/git-pr-release/pull/1

This will be rendered as follows. (No change)

#1


- [ ] https://github.com/x-motemen/git-pr-release/pull/1

If the item in the checklist has a URL of a Pull Request, the title will be rendered automatically.

[Proposal] Aggregate labels from pull requests

Hello maintainers. @motemen @onk

If possible, I hope this gem would have a feature that determines labels to be added to a created pull request by aggregating labels on merged pull requests.

Feature

Let's say we have 3 merged pull requests as follows.

  1. a pull request with a label: ["enhancement"]
  2. a pull request with labels: ["bug", "security"]
  3. a pull request without any label: []

Then, a pull request that git-release-pr creates would have labels: ["enhancement", "bug", "security"].

Implementation design

  • Add pr-release.aggregate_labels config.
    • It accepts boolean-ish value: "true" or "false"
    • The default is "false"
    • If it is "true", git-release-pr aggregates labels from merged pull requests.
  • What if pr-release.labels is given at the same time?
    • Merge aggregated labels and pr-release.labels setting.
      • pr-release.labels=foo,bar and aggregated labels are baz, then labels would be ["foo", "bar", "baz"].

If it's acceptable for this gem, I'm willing to make a pull request for this feature.

Merging new PRs first then old ones later sometimes messes up the release PR checkboxes

Abstract

In my production, I sometimes merge the latest PR and then merge an older PR. I don't know why but sometimes it messes up the bullet list of PRs in the release PR. Some PRs to be released are missing and some are duplicated. Unfortunately, I could not reproduce the issue with a simple example so I believe it deeply depends on the content of the release PR.

Steps to reproduce

Please note the steps do not always reproduce the issue as I noted above. However, in my experience, the similar steps often lead to the issue.

  1. Open a PR A
  2. Open another PR B
  3. Merge PR B
  4. Open and merge PR C
  5. Run git-pr-release to generate the release PR
  6. Merge PR A
  7. Run git-pr-release again to refresh the release PR

Result

After step 6, I sometimes see PR A is missing or PR C is duplicated.

Expected result

After step 6, the release PR does not contain any missing PR (A, B, C are not missing) and does not contain any duplicated PRs.

Logs

Here is a log of DBUG=true git-pr-release -n with some sensitive information masked.

% DEBUG=true git-pr-release -n
Executing `git config remote.origin.url`
Executing `git config -f .git-pr-release pr-release.branch.production`
Executing `git config pr-release.branch.production`
Executing `git config -f .git-pr-release pr-release.branch.staging`
Repository:        hkurokawa/git-pr-release
Production branch: master
Staging branch:    develop
Executing `git config -f .git-pr-release pr-release.token`
Executing `git config pr-release.token`
Executing `git remote update origin`
Executing `git log --merges --pretty=format:%P origin/master..origin/develop`
Executing `git ls-remote origin refs/pull/*/head`
Executing `git merge-base xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx origin/master`
Executing `git merge-base xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx origin/master`
Executing `git merge-base xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx origin/master`
Executing `git merge-base xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx origin/master`
Executing `git merge-base xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx origin/master`
Executing `git merge-base xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx origin/master`
Executing `git merge-base xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx origin/master`
Executing `git merge-base xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx origin/master`
Executing `git merge-base xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx origin/master`
Executing `git merge-base xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx origin/master`
Executing `git merge-base xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx origin/master`
#7180 (xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx) is already merged into master
Executing `git merge-base xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx origin/master`
Executing `git merge-base xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx origin/master`
Executing `git merge-base xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx origin/master`
Executing `git merge-base xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx origin/master`
Executing `git merge-base xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx origin/master`
Executing `git merge-base xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx origin/master`
Executing `git merge-base xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx origin/master`
Executing `git merge-base xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx origin/master`
Executing `git merge-base xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx origin/master`
Executing `git merge-base xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx origin/master`
Executing `git merge-base xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx origin/master`
Executing `git merge-base xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx origin/master`
Executing `git merge-base xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx origin/master`
Executing `git merge-base xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx origin/master`
Executing `git merge-base xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx origin/master`
Executing `git merge-base xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx origin/master`
Executing `git merge-base xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx origin/master`
Executing `git merge-base xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx origin/master`
To be released: #6939 xxxxxxxxxx
To be released: #6940 xxxxxxxxxx
To be released: #6941 xxxxxxxxxx
To be released: #7024 xxxxxxxxxx
To be released: #7043 xxxxxxxxxx
To be released: #7081 xxxxxxxxxx
To be released: #7104 xxxxxxxxxx
To be released: #7142 xxxxxxxxxx
To be released: #7164 xxxxxxxxxx
To be released: #7178 xxxxxxxxxx
To be released: #7186 xxxxxxxxxx
To be released: #7192 xxxxxxxxxx
To be released: #7193 xxxxxxxxxx
To be released: #7196 xxxxxxxxxx
To be released: #7198 xxxxxxxxxx
To be released: #7204 xxxxxxxxxx
To be released: #7206 xxxxxxxxxx
To be released: #7207 xxxxxxxxxx
To be released: #7209 xxxxxxxxxx
To be released: #7211 xxxxxxxxxx
To be released: #7212 xxxxxxxxxx
To be released: #7216 XXXXXXXXXX
To be released: #7217 xxxxxxxxxx
To be released: #7219 xxxxxxxxxx
To be released: #7222 xxxxxxxxxx
To be released: #7228 xxxxxxxxxx
To be released: #7231 xxxxxxxxxx
To be released: #7234 xxxxxxxxxx
Searching for existing release pull requests...
Executing `git config -f .git-pr-release pr-release.template`
Executing `git rev-parse --show-toplevel`
diff: ["!", [0, "- [x] #6939 xxxxxxxxxx @hkurokawa"], [0, "- [ ] #6939 xxxxxxxxxx @hkurokawa"]]
Found checklist diff; use old one: - [x] #6939 xxxxxxxxxx @hkurokawa
diff: ["!", [1, "- [x] #6940 xxxxxxxxxx @hkurokawa"], [1, "- [ ] #6940 xxxxxxxxxx @hkurokawa"]]
Found checklist diff; use old one: - [x] #6940 xxxxxxxxxx @hkurokawa
diff: ["!", [2, "- [x] #6941 xxxxxxxxxx @hkurokawa"], [2, "- [ ] #6941 xxxxxxxxxx @hkurokawa"]]
Found checklist diff; use old one: - [x] #6941 xxxxxxxxxx @hkurokawa
diff: ["!", [3, "- [x] #7024 xxxxxxxxxx @hkurokawa"], [3, "- [ ] #7024 xxxxxxxxxx @hkurokawa"]]
Found checklist diff; use old one: - [x] #7024 xxxxxxxxxx @hkurokawa
diff: ["!", [4, "- [x] #7043 xxxxxxxxxx @hkurokawa"], [4, "- [ ] #7043 xxxxxxxxxx @hkurokawa"]]
Found checklist diff; use old one: - [x] #7043 xxxxxxxxxx @hkurokawa
diff: ["!", [5, "- [x] #7081 xxxxxxxxxx @hkurokawa"], [5, "- [ ] #7081 xxxxxxxxxx @hkurokawa"]]
Found checklist diff; use old one: - [x] #7081 xxxxxxxxxx @hkurokawa
diff: ["!", [6, "- [x] #7142 xxxxxxxxxx @hkurokawa"], [6, "- [ ] #7104 xxxxxxxxxx @hkurokawa"]]
Found checklist diff; use old one: - [x] #7142 xxxxxxxxxx @hkurokawa
diff: ["!", [7, "- [x] #7164 xxxxxxxxxx @hkurokawa"], [7, "- [ ] #7142 xxxxxxxxxx @hkurokawa"]]
Found checklist diff; use old one: - [x] #7164 xxxxxxxxxx @hkurokawa
diff: ["!", [8, "- [x] #7178 xxxxxxxxxx @hkurokawa"], [8, "- [ ] #7164 xxxxxxxxxx @hkurokawa"]]
Found checklist diff; use old one: - [x] #7178 xxxxxxxxxx @hkurokawa
diff: ["!", [9, "- [x] #7186 xxxxxxxxxx @hkurokawa"], [9, "- [ ] #7178 xxxxxxxxxx @hkurokawa"]]
Found checklist diff; use old one: - [x] #7186 xxxxxxxxxx @hkurokawa
diff: ["!", [10, "- [x] #7192 xxxxxxxxxx @hkurokawa"], [10, "- [ ] #7186 xxxxxxxxxx @hkurokawa"]]
Found checklist diff; use old one: - [x] #7192 xxxxxxxxxx @hkurokawa
diff: ["!", [11, "- [x] #7193 xxxxxxxxxx @hkurokawa"], [11, "- [ ] #7192 xxxxxxxxxx @hkurokawa"]]
Found checklist diff; use old one: - [x] #7193 xxxxxxxxxx @hkurokawa
diff: ["!", [12, "- [x] #7196 xxxxxxxxxx @hkurokawa"], [12, "- [ ] #7193 xxxxxxxxxx @hkurokawa"]]
Found checklist diff; use old one: - [x] #7196 xxxxxxxxxx @hkurokawa
diff: ["!", [13, "- [x] #7198 xxxxxxxxxx @hkurokawa"], [13, "- [ ] #7196 xxxxxxxxxx @hkurokawa"]]
Found checklist diff; use old one: - [x] #7198 xxxxxxxxxx @hkurokawa
diff: ["!", [14, "- [x] #7204 xxxxxxxxxx @hkurokawa"], [14, "- [ ] #7198 xxxxxxxxxx @hkurokawa"]]
Found checklist diff; use old one: - [x] #7204 xxxxxxxxxx @hkurokawa
diff: ["!", [15, "- [x] #7206 xxxxxxxxxx @hkurokawa"], [15, "- [ ] #7204 xxxxxxxxxx @hkurokawa"]]
Found checklist diff; use old one: - [x] #7206 xxxxxxxxxx @hkurokawa
diff: ["!", [16, "- [x] #7207 xxxxxxxxxx @hkurokawa"], [16, "- [ ] #7206 xxxxxxxxxx @hkurokawa"]]
Found checklist diff; use old one: - [x] #7207 xxxxxxxxxx @hkurokawa
diff: ["!", [17, "- [x] #7209 xxxxxxxxxx @hkurokawa"], [17, "- [ ] #7207 xxxxxxxxxx @hkurokawa"]]
Found checklist diff; use old one: - [x] #7209 xxxxxxxxxx @hkurokawa
diff: ["!", [18, "- [x] #7211 xxxxxxxxxx @hkurokawa"], [18, "- [ ] #7209 xxxxxxxxxx @hkurokawa"]]
Found checklist diff; use old one: - [x] #7211 xxxxxxxxxx @hkurokawa
diff: ["!", [19, "- [x] #7212 xxxxxxxxxx @hkurokawa"], [19, "- [ ] #7211 xxxxxxxxxx @hkurokawa"]]
Found checklist diff; use old one: - [x] #7212 xxxxxxxxxx @hkurokawa
diff: ["!", [20, "- [x] #7216 xxxxxxxxxx @hkurokawa"], [20, "- [ ] #7212 xxxxxxxxxx @hkurokawa"]]
Found checklist diff; use old one: - [x] #7216 xxxxxxxxxx @hkurokawa
diff: ["!", [21, "- [x] #7217 xxxxxxxxxx @hkurokawa"], [21, "- [ ] #7216 xxxxxxxxxx @hkurokawa"]]
Found checklist diff; use old one: - [x] #7217 xxxxxxxxxx @hkurokawa
diff: ["!", [22, "- [x] #7219 xxxxxxxxxx @hkurokawa"], [22, "- [ ] #7217 xxxxxxxxxx @hkurokawa"]]
Found checklist diff; use old one: - [x] #7219 xxxxxxxxxx @hkurokawa
diff: ["!", [23, "- [x] #7222 xxxxxxxxxx @hkurokawa"], [23, "- [ ] #7219 xxxxxxxxxx @hkurokawa"]]
Found checklist diff; use old one: - [x] #7222 xxxxxxxxxx @hkurokawa
diff: ["!", [24, "- [x] #7228 xxxxxxxxxx @hkurokawa"], [24, "- [ ] #7222 xxxxxxxxxx @hkurokawa"]]
Found checklist diff; use old one: - [x] #7228 xxxxxxxxxx @hkurokawa
diff: ["+", [25, ""], [25, "- [ ] #7228 xxxxxxxxxx @hkurokawa"]]
Use line as is: - [ ] #7228 xxxxxxxxxx @hkurokawa"+", [25, ""], [26, "- [ ] #7231 xxxxxxxxxx @hkurokawa"]]
Use line as is: - [ ] #7231 xxxxxxxxxx @hkurokawa"+", [25, ""], [27, "- [ ] #7234 xxxxxxxxxx @hkurokawa"]]
Use line as is: - [ ] #7234 xxxxxxxxxx @hkurokawa
diff: ["=", [25, ""], [28, ""]]
Use line as is:
diff: ["=", [26, "## リリース作業"], [29, "## リリース作業"]]
Use line as is: ## リリース作業
diff: ["=", [27, ""], [30, ""]]
Use line as is:
diff: ["=", [28, "- [ ] apk作成(production/staging release)"], [31, "- [ ] apk作成(production/staging release)"]]
Use line as is: - [ ] apk作成(production/staging release)
Dry-run. Not updating PR
Release 2017-12-29 12:15:28 +0900
- [x] #6939 xxxxxxxxxx @hkurokawa
- [x] #6940 xxxxxxxxxx @hkurokawa
- [x] #6941 xxxxxxxxxx @hkurokawa
- [x] #7024 xxxxxxxxxx @hkurokawa
- [x] #7043 xxxxxxxxxx @hkurokawa
- [x] #7081 xxxxxxxxxx @hkurokawa
- [x] #7142 xxxxxxxxxx @hkurokawa
- [x] #7164 xxxxxxxxxx @hkurokawa
- [x] #7178 xxxxxxxxxx @hkurokawa
- [x] #7186 xxxxxxxxxx @hkurokawa
- [x] #7192 xxxxxxxxxx @hkurokawa
- [x] #7193 xxxxxxxxxx @hkurokawa
- [x] #7196 xxxxxxxxxx @hkurokawa
- [x] #7198 xxxxxxxxxx @hkurokawa
- [x] #7204 xxxxxxxxxx @hkurokawa
- [x] #7206 xxxxxxxxxx @hkurokawa
- [x] #7207 xxxxxxxxxx @hkurokawa
- [x] #7209 xxxxxxxxxx @hkurokawa
- [x] #7211 xxxxxxxxxx @hkurokawa
- [x] #7212 xxxxxxxxxx @hkurokawa
- [x] #7216 xxxxxxxxxx @hkurokawa
- [x] #7217 xxxxxxxxxx @hkurokawa
- [x] #7219 xxxxxxxxxx @hkurokawa
- [x] #7222 xxxxxxxxxx @hkurokawa
- [x] #7228 xxxxxxxxxx @hkurokawa
- [ ] #7228 xxxxxxxxxx @hkurokawa
- [ ] #7231 xxxxxxxxxx @hkurokawa
- [ ] #7234 xxxxxxxxxx @hkurokawa

リリース作業

  • apk作成(production/staging release)

As you can see, the result is missing #7104 and #7228 is duplicated.

It seems to me the diff command guessed #7142 was replaced with #7104 which is not true and omitted #7104.

diff: ["!", [6, "- [x] #7142 xxxxxxxxxx @hkurokawa"], [6, "- [ ] #7104 xxxxxxxxxx @hkurokawa"]]
Found checklist diff; use old one: - [x] #7142 xxxxxxxxxx @hkurokawa

Thus, the following diffs were all wrong and this led to the second issue, #7228 is duplicated.

diff: ["!", [24, "- [x] #7228 xxxxxxxxxx @hkurokawa"], [24, "- [ ] #7222 xxxxxxxxxx @hkurokawa"]]
Found checklist diff; use old one: - [x] #7228 xxxxxxxxxx @hkurokawa
diff: ["+", [25, ""], [25, "- [ ] #7228 xxxxxxxxxx @hkurokawa"]]
Use line as is: - [ ] #7228 xxxxxxxxxx @hkurokawa"+", [25, ""], [26, "- [ ] #7231 xxxxxxxxxx @hkurokawa"]]

If you need more information, feel free to ask me.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.