| 160 | } |
| 161 | |
| 162 | func (t *Tagger) Tag() (requestedVersion *semver.Version, previousVersion *semver.Version, err error) { |
| 163 | repo, err := git.PlainOpen(".") |
| 164 | if err != nil { |
| 165 | return nil, nil, errors.New(err) |
| 166 | } |
| 167 | |
| 168 | requestedVersion, err = semver.NewVersion(t.Version) |
| 169 | if err != nil { |
| 170 | logger.Err(err).Str("requested-version", string(t.Version)).Msg("error when constructing semver from version config") |
| 171 | return requestedVersion, nil, errors.New(err) |
| 172 | } |
| 173 | |
| 174 | previousVersion, err = t.largestTagSemver(repo, requestedVersion.Major()) |
| 175 | if err != nil { |
| 176 | return requestedVersion, previousVersion, err |
| 177 | } |
| 178 | logger := logger.With(). |
| 179 | Stringer("previous-version", previousVersion).Logger() |
| 180 | |
| 181 | logger.Info().Msg("found largest semver tag") |
| 182 | |
| 183 | logger = logger.With(). |
| 184 | Stringer("requested-version", requestedVersion). |
| 185 | Logger() |
| 186 | if !requestedVersion.GreaterThan(previousVersion) { |
| 187 | logger.Info(). |
| 188 | Msg("VERSION is not greater than latest git tag, nothing to do.") |
| 189 | return requestedVersion, previousVersion, ErrNoNewVersion |
| 190 | } |
| 191 | |
| 192 | worktree, err := repo.Worktree() |
| 193 | if err != nil { |
| 194 | return requestedVersion, previousVersion, errors.New(err) |
| 195 | } |
| 196 | |
| 197 | status, err := worktree.Status() |
| 198 | if err != nil { |
| 199 | return requestedVersion, previousVersion, errors.New(err) |
| 200 | } |
| 201 | if !status.IsClean() { |
| 202 | logger.Error().Msg("git is in a dirty state, can't tag.") |
| 203 | fmt.Println(status.String()) |
| 204 | return requestedVersion, previousVersion, errors.New("dirty git state") |
| 205 | } |
| 206 | |
| 207 | if err := t.createTag(repo, fmt.Sprintf("v%s", requestedVersion.String())); err != nil { |
| 208 | return requestedVersion, previousVersion, err |
| 209 | } |
| 210 | logger.Info().Msg("created new tag. Push to origin still required.") |
| 211 | |
| 212 | return requestedVersion, previousVersion, nil |
| 213 | } |