gitwerk is a CLI tool for supporting Git(Hub) operations on CI.
It is available to download native binaries for Linux and macOS from the latest release.
gitwerk has several default functions.
clonelogtagcontextual-semver
The definitions of these functions can be printed by prelude function.
$ gitwerk prelude
(defn clone [repository]
(git/clone repository))
(defn log
([]
(log "."))
([repodir]
(-> (git/repo repodir)
(git/logs))))
(defn tag
([]
(tag "."))
([repodir]
(-> (git/repo repodir)
(git/tags))))
(defn repl []
(println "not implemented yet"))
(defn contextual-semver
([]
(contextual-semver "."))
([repodir]
(let [repo (git/repo repodir)
message (-> repo
(git/latest-log)
:full-message)
tag (or (-> repo
(git/tags)
(semver/latest-tag))
(semver/default-version-str))
new-tag (semver/contextual-semver message tag)]
(if (not (= tag new-tag))
(do
(git/tag repo new-tag)
{:status :updated
:old-version tag
:new-version new-tag})
{:status :not-updated}))))increments version by git log message contexts.
semver workflow of this repository is an example of this subcommand.
## when the latest tag is v0.0.1
$ git commit -m "[patch] increment patch version"
## the commit comment contains "[patch]"
$ gitwerk contextual-semver
{:status :updated :old-version v0.0.1 :new-version v0.0.2}
## increments tag to v0.0.2
###...
$ git commit -m "[tag.suffix=-alpha] [minor] increment minor version and add suffix"
## the commit comment contains "[minor]" and "[tag.suffix=-alpha]"
$ gitwerk contextual-semver
{:status :updated :old-version v0.0.2 :new-version v0.1.0-alpha}
## increments tag to v0.1.0-alpha
###...
$ git commit -m "[tag.prefix=] [tag.suffix=] [major] increment major version and remove prefix and suffix"
## the commit comment contains "[major]", "[tag.prefix=]" and "[tag.suffix=]"
$ gitwerk contextual-semver
{:status :updated :old-version v0.1.0-alpha :new-version 1.0.0}
## increments tag to 1.0.0
###...
$ git commit -m "[tag.prefix=v] just adding prefix"
## the commit comment contains "[tag.prefix=v]"
$ gitwerk contextual-semver
{:status :updated :old-version 1.0.0 :new-version v1.0.0}
## increments tag to v1.0.0You can define your own functions and load them by using --file option or --stdin option.
$ gitwerk --stdin myfunc
(defn myfunc []
(print "this is my first func"))Available functions are non-side-effecting functions enabled in sci and the exported functions in gitwerk.internal and gitwerk.prelude namespaces.
Copyright © 2019-2020 rinx
This program and the accompanying materials are made available under the terms of the Eclipse Public License 2.0 which is available at http://www.eclipse.org/legal/epl-2.0.
This Source Code may also be made available under the following Secondary Licenses when the conditions for such availability set forth in the Eclipse Public License, v. 2.0 are satisfied: GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version, with the GNU Classpath Exception which is available at https://www.gnu.org/software/classpath/license.html.