Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

npm versionのように簡単にgitのタグを使ってセマンティックにバージョンアップをするワンライナー

More than 1 year has passed since last update.

OSSや多人数でのプロジェクト開発をしているときに必要になってくるのは、プロジェクト自体のセマンティックなバージョン管理かと思います。
特にインストール型のプロジェクトでは、現在のユーザのバージョンと比較して、インストールさせるべきか、させる場合はどういうメッセージを出すかなどを判断するのに、メジャーバージョンやマイナーバージョン、パッチバージョンなどのバージョンを比較しているかと思います。

npmであれば、npm versionを使うと、Node.jsをもちいたパッケージのバージョンアップを簡単にできる様になっているかと思います。
ただ、そういった機能が備わっていない言語の管理やパッケージ管理ツールを使っていないプロジェクトなどでは独自にセマンティックバージョンを管理する必要があり、それを毎回最新のタグをみて更新するのは面倒かと思うので、ワンライナーで簡単に管理できるようにしました。

導入方法

まず、下記のシェルスクリプトをどこかに配置します。
著者はzshを使っているので、~/.zsh/version_up.shに設定しています。

#!/bin/sh
version=`awk '{print $1}' < /dev/stdin`
command=$1
major=`echo $version | awk -F '.' '{print $1}'`
minor=`echo $version | awk -F '.' '{print $2}'`
bugfix=`echo $version | awk -F '.' '{print $3}'`
build=`echo $version | awk -F '.' '{print $4}'`

if [ -z "$version" ]; then
  echo "USAGE: echo 1.0.0 | version_up.sh [major|minor|bugfix|build]"
  exit 1
fi

if [ "$command" = '' ]; then
  if [ -n "$build" ]; then
    build=`expr $build + 1`
  elif [ -n "$bugfix" ]; then
    bugfix=`expr $bugfix + 1`
  fi
elif [ "$command" = 'major' ]; then
  major=`expr $major + 1`
  minor=0
  bugfix=0
  build=0
elif [ "$command" = 'minor' ]; then
  minor=`expr $minor + 1`
  bugfix=0
  build=0
elif [ "$command" = 'bugfix' ]; then
  bugfix=`expr $bugfix + 1`
  build=0
elif [ "$command" = 'build' ]; then
  build=`expr $build + 1`
fi

if [ "$command" = "major" -o "$command" = 'minor' -o "$command" = 'bugfix' ]; then
  if [ -n "$build" ]; then
    build=0
  fi
fi

if [ -n "$build" ]; then
  echo ${major}.${minor}.${bugfix}.${build}
else
  echo ${major}.${minor}.${bugfix}
fi

次に~/.zshrc内部に下記スクリプトを記載します。

alias vup="git tag -l | tail -n 1 | sed 's/[^0-9\.]//g' | ~/.zsh/version_up.sh" # version up string

最後に下記のコマンドで実行するだけです。

$ git tag -l
v1.6.1
$ vup major
2.0.0.0
$ vup minor
1.7.0.0
$ vup bugfix
1.6.2.0

あとはこの出力されたバージョンを使ってタグを生成してもいいし、何かしらのファイルに出力するのでもいいと思います。

kotamat
roxx
人材紹介業むけプラットフォーム「agent bank」、リファレンスチェックサービス「back check」を運営。
https://roxx.co.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away