Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Project and VCS repository #11

Merged
merged 3 commits into from
Nov 16, 2020
Merged

Conversation

svengreb
Copy link
Owner

Resolves #10

In GH-9 [1] the store and configuration for applications has been
implemented. In "wand" applications are not standalone but part of a
project which in turn is stored in a repository of a VCS like Git [2].
In case of "wand" this can also be a monorepo [3] to manage multiple
applications, but there is always only a single project which all these
applications are part of.
To store project and VCS repository information, some of the newly
implemented packages provide the following types:

- <T> "pkg/project.Metadata" - A "struct" type that stores information
  and metadata of a project.
- <T> "pkg/project.GoModuleID" - A "struct" type that stores partial
  information to identify a Go module [4].
- <T> "pkg/vcs.Kind" - A "struct" type that defines the kind of a
  "pkg/vcs.Repository".
- <I> "pkg/vcs.Repository" - A "interface" type to represents a VCS
  repository that provides methods to receive repository information:
  - "Kind() Kind" - returns the repository "pkg/vcs.Kind".
  - "DeriveVersion() error" - derives the repository version based on
    the "pkg/vcs.Kind".
  - "Version() interface{}" - returns the repository version.
- <T> "pkg/vcs/git.Git" - A "struct" type that implements
  "pkg/vcs.Repository" to represent a Git [5] repository.
- <T> "pkg/vcs/git.Version" - A "struct" type that stores version
  information and metadata derived from a Git [5] repository.
- <T> "pkg/vcs/none.None" - A "struct" type that implements
  "pkg/vcs.Repository" to represent a nonexistent repository.

[1]: #9
[2]: https://git-scm.com/book/en/v2/Getting-Started-About-Version-Control
[3]: https://trunkbaseddevelopment.com/monorepos
[4]: https://golang.org/ref/mod
[5]: https://git-scm.com

GH-10
Instead of surrounding the "switch/case" block, that checkt the
repository version based on the underlying VCS, with a "if" block to
handle the case where no repository type is set, it no simply includes
the "none" VCS kind as a noop case.

Also the returned error now simply creates a new error instead of
formatting the error message as new error.

GH-10
Wrapped all error returned from external package to prevent errors
become part of the public API.

Also the maximum search amount of suitable Git tag candidates in all
commits of the current has been extracte into a constant.

GH-10
@svengreb svengreb merged commit 3e8add2 into main Nov 16, 2020
@svengreb svengreb deleted the feature/gh-10-project-and-vcs-repo branch November 16, 2020 14:25
@svengreb svengreb removed their assignment Nov 16, 2020
@svengreb svengreb mentioned this pull request Nov 17, 2020
svengreb added a commit that referenced this pull request Nov 17, 2020
In GH-15 [1] some parts of the "wand" API have been implemented in form
of spell "incantations", "kinds" and "casters", inspired by the fantasy
novel "Harry Potter" [2] as an abstract view to define interfaces.
In GH-9 [3] and GH-11 [4] the API implementations for an application
configuration store as well as project and VCS repository metadata were
introduced.
These implementations are now usable in a combined form via the basic
"wand" API that consists of the following types:

- <I> `wand.Wand` - A `interface` type that manages a project and its
  applications and stores their metadata. Applications are registered
  using a unique name and the stored metadata can be received based on
  this name:
  - `GetAppConfig(appName string) (app.Config, error)` - returns an
    application configuration.
  - `GetProjectMetadata() project.Metadata` - returns the project
    metadata.
  - `RegisterApp(name, displayName, pathRel string) error` - registers a
    new application.
- <T> `wand.ctxKey` - A `struct` type that serves as context key used to
  wrap a `wand.Wand`.
- <F> `wand.GetCtxKey() interface{}` - A `func` type that returns the
  key used to wrap a `wand.Wand`.
- <F> `wand.WrapCtx(context.Context,Wand) context.Context` - A `func`
  type that wraps the given `wand.Wand` into the parent context.
  Use `wand.GetCtxKey() interface{}` to receive the key used to wrap
  the `wand.Wand`.

[1]: #15
[2]: https://en.wikipedia.org/wiki/Harry_Potter
[3]: #9
[4]: #11

GH-16
svengreb added a commit that referenced this pull request Nov 17, 2020
In GH-15 [1] some parts of the "wand" API have been implemented in form
of spell "incantations", "kinds" and "casters", inspired by the fantasy
novel "Harry Potter" [2] as an abstract view to define interfaces.
In GH-9 [3] and GH-11 [4] the API implementations for an application
configuration store as well as project and VCS repository metadata were
introduced.
These implementations are now usable in a combined form via the basic
"wand" API that consists of the following types:

- <I> `wand.Wand` - A `interface` type that manages a project and its
  applications and stores their metadata. Applications are registered
  using a unique name and the stored metadata can be received based on
  this name:
  - `GetAppConfig(appName string) (app.Config, error)` - returns an
    application configuration.
  - `GetProjectMetadata() project.Metadata` - returns the project
    metadata.
  - `RegisterApp(name, displayName, pathRel string) error` - registers a
    new application.
- <T> `wand.ctxKey` - A `struct` type that serves as context key used to
  wrap a `wand.Wand`.
- <F> `wand.GetCtxKey() interface{}` - A `func` type that returns the
  key used to wrap a `wand.Wand`.
- <F> `wand.WrapCtx(context.Context,Wand) context.Context` - A `func`
  type that wraps the given `wand.Wand` into the parent context.
  Use `wand.GetCtxKey() interface{}` to receive the key used to wrap
  the `wand.Wand`.

[1]: #15
[2]: https://en.wikipedia.org/wiki/Harry_Potter
[3]: #9
[4]: #11

GH-16
svengreb added a commit that referenced this pull request Nov 17, 2020
In GH-15 [1] some parts of the "wand" API have been implemented in form
of spell "incantations", "kinds" and "casters", inspired by the fantasy
novel "Harry Potter" [2] as an abstract view to define interfaces.
In GH-9 [3] and GH-11 [4] the API implementations for an application
configuration store as well as project and VCS repository metadata were
introduced.
These implementations are now usable in a combined form via the basic
"wand" API that consists of the following types:

- <I> `wand.Wand` - A `interface` type that manages a project and its
  applications and stores their metadata. Applications are registered
  using a unique name and the stored metadata can be received based on
  this name:
  - `GetAppConfig(appName string) (app.Config, error)` - returns an
    application configuration.
  - `GetProjectMetadata() project.Metadata` - returns the project
    metadata.
  - `RegisterApp(name, displayName, pathRel string) error` - registers a
    new application.
- <T> `wand.ctxKey` - A `struct` type that serves as context key used to
  wrap a `wand.Wand`.
- <F> `wand.GetCtxKey() interface{}` - A `func` type that returns the
  key used to wrap a `wand.Wand`.
- <F> `wand.WrapCtx(context.Context,Wand) context.Context` - A `func`
  type that wraps the given `wand.Wand` into the parent context.
  Use `wand.GetCtxKey() interface{}` to receive the key used to wrap
  the `wand.Wand`.

[1]: #15
[2]: https://en.wikipedia.org/wiki/Harry_Potter
[3]: #9
[4]: #11

Closes GH-16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Project and VCS repository
1 participant