git.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. package tools
  2. import (
  3. "github.com/go-git/go-git/v6"
  4. "github.com/go-git/go-git/v6/plumbing"
  5. "github.com/go-git/go-git/v6/plumbing/object"
  6. "github.com/go-git/go-git/v6/plumbing/transport/http"
  7. )
  8. func Git() *g {
  9. return &g{}
  10. }
  11. type (
  12. g struct {
  13. user string
  14. email string
  15. token string
  16. }
  17. )
  18. func (t *g) User(user string) *g {
  19. t.user = user
  20. return t
  21. }
  22. func (t *g) Email(email string) *g {
  23. t.email = email
  24. return t
  25. }
  26. func (t *g) Token(token string) *g {
  27. t.token = token
  28. return t
  29. }
  30. func (t *g) Clone(repo, ref, path string) error {
  31. _, err := git.PlainClone(
  32. path,
  33. &git.CloneOptions{
  34. URL: repo,
  35. ReferenceName: plumbing.ReferenceName(ref),
  36. Auth: &http.BasicAuth{
  37. Username: t.user,
  38. Password: t.token,
  39. },
  40. })
  41. return err
  42. }
  43. func (t *g) Add(repo, file string) error {
  44. r, err := git.PlainOpen(repo)
  45. if err != nil {
  46. return err
  47. }
  48. w, err := r.Worktree()
  49. if err != nil {
  50. return err
  51. }
  52. _, err = w.Add(file)
  53. if err != nil {
  54. return err
  55. }
  56. return err
  57. }
  58. func (t *g) Commit(repo, message string) error {
  59. r, err := git.PlainOpen(repo)
  60. if err != nil {
  61. return err
  62. }
  63. w, err := r.Worktree()
  64. if err != nil {
  65. return err
  66. }
  67. _, err = w.Commit(message, &git.CommitOptions{
  68. Author: &object.Signature{
  69. Name: t.user,
  70. Email: t.email,
  71. },
  72. })
  73. if err != nil {
  74. return err
  75. }
  76. return err
  77. }
  78. func (t *g) Push(repo string) error {
  79. r, err := git.PlainOpen(repo)
  80. if err != nil {
  81. return err
  82. }
  83. err = r.Push(&git.PushOptions{
  84. Auth: &http.BasicAuth{
  85. Username: t.user,
  86. Password: t.token,
  87. },
  88. })
  89. if err != nil {
  90. return err
  91. }
  92. return err
  93. }