SashimiTanpopo 🍣 🌼
Change files and create patches
Example
# recipe.rb
update_file ".ruby-version" do |content|
content.gsub!(/^[\d.]+$/, params[:ruby_version])
end
update_file "Dockerfile" do |content|
content.gsub!(/^FROM ruby:([\d.]+)$/, %Q{FROM ruby:#{params[:ruby_version]}})
end
@ruby_minor_version = params[:ruby_version].to_f
update_file ".rubocop.yml" do |content|
content.gsub!(/TargetRubyVersion: ([\d.]+)/, "TargetRubyVersion: #{@ruby_minor_version}")
end
update_file ".github/workflows/*.yml" do |content|
content.gsub!(/ruby-version: "(.+)"/, %Q{ruby-version: "#{params[:ruby_version]}"})
end
# Update local app files using recipe.rb
$ sashimi_tanpopo local --target-dir=/path/to/app --params=ruby_version:3.4.5 /path/to/recipe.rb
# Update local app files using recipe.rb and create Pull Request
$ sashimi_tanpopo github --target-dir=/path/to/app --params=ruby_version:3.4.5 \
--message="Upgrade to Ruby 3.4.5" --github-repository=yourname/yourrepo --pr-title="Upgrade to Ruby 3.4.5" \
--pr-source-branch=ruby_3.4.5 --pr-target-branch=main --pr-draft /path/to/recipe.rb
Installation
Use gem directly
gem install sashimi_tanpopo
Use via docker
e.g.
docker run -v /path/to/recipe_dir:/recipes:ro -v $(pwd):/work --rm ghcr.io/sue445/sashimi_tanpopo <local|github|gitlab> <arguments> /recipes/recipe.rb
Usage
sashimi_tanpopo local
Change local files using recipe files
$ sashimi_tanpopo help local
Usage:
sashimi_tanpopo local RECIPE [RECIPE...]
Options:
-d, [--target-dir=TARGET_DIR] # Target directory. Default: current directory
-p, [--params=key:value] # Params passed to recipe file
[--dry-run], [--no-dry-run], [--skip-dry-run] # Whether to run dry run
# Default: false
[--color], [--no-color], [--skip-color] # Whether to colorize output
# Default: true
sashimi_tanpopo github
Change local files using recipe files and create Pull Request
$ sashimi_tanpopo help github
Usage:
sashimi_tanpopo github RECIPE [RECIPE...] --pr-source-branch=pr_branch --pr-title=PR_TITLE -m, --message=COMMIT_MESSAGE
Options:
-d, [--target-dir=TARGET_DIR] # Target directory. Default: current directory
-p, [--params=key:value] # Params passed to recipe file
[--dry-run], [--no-dry-run], [--skip-dry-run] # Whether to run dry run
# Default: false
[--color], [--no-color], [--skip-color] # Whether to colorize output
# Default: true
[--git-user-name=GIT_USER_NAME] # user name for git commit. Default: username of user authenticated with token
[--git-email=GIT_EMAIL] # email for git commit. Default: <git_user_name>@users.noreply.<github_host>
-m, --message=COMMIT_MESSAGE # commit message
[--github-repository=user/repo] # GitHub repository for Pull Request. One of --github--repository or $GITHUB_REPOSITORY is required [$GITHUB_REPOSITORY]
[--github-api-url=GITHUB_API_URL] # GitHub API endpoint. One of --github-api-url or $GITHUB_API_URL is required [$GITHUB_API_URL]
# Default: https://api.github.com
[--github-token=GITHUB_TOKEN] # GitHub access token. One of --github-token or $GITHUB_TOKEN is required [$GITHUB_TOKEN]
--pr-title=PR_TITLE # Pull Request title
[--pr-body=PR_BODY] # Pull Request body
--pr-source-branch=pr_branch # Pull Request source branch (a.k.a. head branch)
[--pr-target-branch=main] # Pull Request target branch (a.k.a. base branch). One of --pr-target-branch or $GITHUB_REF_NAME is required [$GITHUB_REF_NAME]
[--pr-assignees=one two three] # Pull Request assignees
[--pr-reviewers=one two three] # Pull Request reviewers
[--pr-labels=one two three] # Pull Request labels
[--pr-draft], [--no-pr-draft], [--skip-pr-draft] # Whether to create draft Pull Request
# Default: false
--github-token
requires followings repository permissions
- Contents: Read and Write
- Pull requests: Read and Write
- Metadata: Read-only
- Workflows: Read and Write
- Only if you want to change
.github/workflows/*.yml
- Only if you want to change
sashimi_tanpopo gitlab
Change local files using recipe files and create Merge Request
$ sashimi_tanpopo help gitlab
Usage:
sashimi_tanpopo gitlab RECIPE [RECIPE...] --mr-source-branch=mr_branch --mr-title=MR_TITLE -m, --message=COMMIT_MESSAGE
Options:
-d, [--target-dir=TARGET_DIR] # Target directory. Default: current directory
-p, [--params=key:value] # Params passed to recipe file
[--dry-run], [--no-dry-run], [--skip-dry-run] # Whether to run dry run
# Default: false
[--color], [--no-color], [--skip-color] # Whether to colorize output
# Default: true
[--git-user-name=GIT_USER_NAME] # user name for git commit. Default: username of user authenticated with token
[--git-email=GIT_EMAIL] # email for git commit. Default: <git_user_name>@noreply.<gitlab_host>
-m, --message=COMMIT_MESSAGE # commit message
[--gitlab-project=user/repo] # GitLab project for Merge Request. One of --gitlab-project, $GITLAB_PROJECT or $CI_PROJECT_PATH is required [$GITLAB_PROJECT, $CI_PROJECT_PATH]
[--gitlab-api-url=GITLAB_API_URL] # GitLab API endpoint. One of --gitlab-api-url, $GITLAB_API_URL or $CI_API_V4_URL is required [$GITLAB_API_URL, $CI_API_V4_URL]
# Default: https://gitlab.com/api/v4
[--gitlab-token=GITLAB_TOKEN] # GitLab access token. One of --gitlab-token or $GITLAB_TOKEN is required [$GITLAB_TOKEN]
--mr-title=MR_TITLE # Merge Request title
[--mr-body=MR_BODY] # Merge Request body
--mr-source-branch=mr_branch # Merge Request source branch
[--mr-target-branch=main] # Merge Request target branch). One of --mr-target-branch, $MR_TARGET_BRANCH or $CI_DEFAULT_BRANCH is required [$MR_TARGET_BRANCH, $CI_DEFAULT_BRANCH]
[--mr-assignees=one two three] # Merge Request assignees
[--mr-reviewers=one two three] # Merge Request reviewers
[--mr-labels=one two three] # Merge Request labels
[--mr-draft], [--no-mr-draft], [--skip-mr-draft] # Whether to create draft Merge Request
# Default: false
[--mr-auto-merge], [--no-mr-auto-merge], [--skip-mr-auto-merge] # Whether to set auto-merge to Merge Request
# Default: false
--gitlab-token
requires followings permissions
- Role: Developer
- Scopes:
api
Recipe file specification
See docs/RECIPE.md
Use on CI services
GitHub Actions
https://github.com/marketplace/actions/sashimi_tanpopo_action
Development
After checking out the repo, run bin/setup
to install dependencies. Then, run rake spec
to run the tests. You can also run bin/console
for an interactive prompt that will allow you to experiment.
To install this gem onto your local machine, run bundle exec rake install
. To release a new version, update the version number in version.rb
, and then run bundle exec rake release
, which will create a git tag for the version, push git commits and the created tag, and push the .gem
file to rubygems.org.
Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/sue445/sashimi_tanpopo.
License
The gem is available as open source under the terms of the MIT License.