Releasing with bumpversion, govvv and dronesteemCreated with Sketch.

in golang •  7 years ago  (edited)

One of pleasures about coding is using good tools. Recently I use bumpversion, govvv and drone for version releasing.

bumpversion

bumpversion is automation for semantic versioning. Most of my projects have simple config file like below. (.bumpversion.cfg)

[bumpversion]
commit = True
tag = True
current_version = 0.8.4
parse = (?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+)
serialize =
    {major}.{minor}.{patch}
[bumpversion:file:VERSION]

Before release,I just run like below:

bumpversion minor # or major or patch

This update minor version number in VERSION file. (In this case, 0.8,4 -> 0.9.0)
And I configure commit=True and tag=True in .bumpversion.cfg,The bumpversion makes a commit and tag.

commit 243ccf6932d97a3d100de5a2a7b102e1b2dc8cb2 (tag: v0.0.2)
Author: anarcher
Date:   Tue Dec 5 21:09:21 2017 +0900

    Bump version: 0.0.1 → 0.0.2

commit 9e8ff3f08a1039cc10d93749aa805e939cf28f73 (tag: v0.0.1)
Author: anarcher
Date:   Tue Dec 5 21:08:17 2017 +0900

    Bump version: 0.0.0 → 0.0.1

govvv

govvv is go binary versioning tool that wraps the go build command. Go provides access to setting variables by compile time linker flags. govvv provides easy versioning for go versioning even I don't know that --ldflag of go build.

govvv install -pkg github.com/pkg/version github.com/cmd/

I just created version/version.go

package version

var (
    Version, GitCommit, GitState, BuildDate string
)

Because I make new VERSION file with bumpversion, govvv adds a Version variable from VERSION file to my version package.
I like to seperate version variable with main.go. version variable can be used in another ways. (e.g. metric labels, api version call..)

$cmd -v
Cmd version 0.8.4 git=2639d4e build=2017-12-05T15:57:13Z

drone

drone is an open source continuous delivery tool. Interesting features of drone are that all tasks in drone is docker containers and drone's yaml configure file is a superset of docker-compose configure file.

clone:
    git:
        image: plugins/git
        network_mode: host
        depth: 1
pipeline:
    test:
        image: golang:1.7.1
        commands:
            - make deps
            - make test
            - make test-ci
    docker:
        image: plugins/docker
        dockerfile: Dockerfile
        repo: app
        force_tag: true
        tags: ${DRONE_TAG}
        when:
            event: tag
    slack:
        image: plugins/slack
        webhook: https://hooks.slack.com/
        when:
            status: [ success, failure ]

If repository tag hooks is enable in drone settings (default disable),git commit tag will sync up with docker tag.
This is simply how to use the tools for releasing and versioning.

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

Congratulations @anarcher! You have completed some achievement on Steemit and have been rewarded with new badge(s) :

You published your First Post
You made your First Vote
You got your First payout
You got a First Vote

Click on any badge to view your own Board of Honor on SteemitBoard.
For more information about SteemitBoard, click here

If you no longer want to receive notifications, reply to this comment with the word STOP

By upvoting this notification, you can help all Steemit users. Learn how here!

Congratulations @anarcher! You have completed some achievement on Steemit and have been rewarded with new badge(s) :

Award for the number of upvotes

Click on any badge to view your own Board of Honor on SteemitBoard.
For more information about SteemitBoard, click here

If you no longer want to receive notifications, reply to this comment with the word STOP

By upvoting this notification, you can help all Steemit users. Learn how here!