parse github configuration

This commit is contained in:
Dennis Jekubczyk
2021-05-24 13:30:19 +02:00
parent ce3d54030d
commit ef1469a31a
5 changed files with 332 additions and 17 deletions

View File

@@ -2,6 +2,7 @@ package config
import (
"errors"
"fmt"
"os"
)
@@ -11,6 +12,7 @@ const MirrorModePrivateAndPublic = "PRIVATE_AND_PUBLIC"
type Config struct {
MirrorMode string
Gitea GiteaConfig
Github GithubConfig
}
type GiteaConfig struct {
@@ -18,6 +20,11 @@ type GiteaConfig struct {
GiteaToken string
}
type GithubConfig struct {
Username string
Token *string
}
func Read() (*Config, error) {
mirrorMode, err := readMirrorMode()
if err != nil {
@@ -29,21 +36,27 @@ func Read() (*Config, error) {
return nil, err
}
github, err := readGithubConfig()
if err != nil {
return nil, err
}
return &Config{
MirrorMode: mirrorMode,
Gitea: gitea,
Github: github,
}, nil
}
func readGiteaConfig() (GiteaConfig, error) {
url, a := os.LookupEnv("GITEA_URL")
if !a {
return GiteaConfig{}, errors.New("")
return GiteaConfig{}, errors.New("missing mandatory parameter GITEA_URL, please specify your target gitea instance")
}
token, a := os.LookupEnv("GITEA_TOKEN")
if !a {
return GiteaConfig{}, errors.New("")
return GiteaConfig{}, errors.New("missing mandatory parameter GITEA_TOKEN, please specify your gitea application token")
}
return GiteaConfig{
@@ -53,6 +66,24 @@ func readGiteaConfig() (GiteaConfig, error) {
}
func readGithubConfig() (GithubConfig, error) {
username, present := os.LookupEnv("GITHUB_USERNAME")
if !present {
return GithubConfig{}, errors.New("")
}
var token *string = nil
if val, hasToken := os.LookupEnv("GITHUB_TOKEN"); hasToken {
token = &val
}
return GithubConfig{
Username: username,
Token: token,
}, nil
}
func readMirrorMode() (string, error) {
input, present := os.LookupEnv("MIRROR_MODE")
@@ -64,7 +95,7 @@ func readMirrorMode() (string, error) {
case MirrorModePublic, MirrorModePrivateAndPublic:
return input, nil
default:
return "", errors.New("")
return "", fmt.Errorf("unknown mirror mode %s, please specify a valid mirror mode: PUBLIC, PRIVATE_AND_PUBLIC", input)
}
}

View File

@@ -1,8 +1,10 @@
package config_test
import (
"fmt"
"github.com/jaedle/mirror-to-gitea/internal/config"
. "github.com/onsi/ginkgo"
. "github.com/onsi/ginkgo/extensions/table"
. "github.com/onsi/gomega"
"os"
)
@@ -10,11 +12,16 @@ import (
const mirrorMode = "MIRROR_MODE"
const giteaUrl = "GITEA_URL"
const giteaToken = "GITEA_TOKEN"
const githubUsername = "GITHUB_USERNAME"
const githubToken = "GITHUB_TOKEN"
const publicMirrorMode = "PUBLIC"
const privateAndPublicMirrorMode = "PRIVATE_AND_PUBLIC"
const unknownMirrorMode = "UNKNOWN"
const aGithubUsername = "a-github-user"
const aGithubToken = "a-github-token"
var _ = Describe("Read", func() {
BeforeEach(func() {
os.Clearenv()
@@ -28,6 +35,43 @@ var _ = Describe("Read", func() {
Expect(c).ToNot(BeNil())
})
Context("github", func() {
It("parses configuration", func() {
aValidEnv()
setEnv(githubUsername, aGithubUsername)
unsetEnv(githubToken)
c, err := config.Read()
Expect(err).NotTo(HaveOccurred())
Expect(c.Github.Username).To(Equal(aGithubUsername))
Expect(c.Github.Token).To(BeNil())
})
It("parses configuration with token", func() {
aValidEnv()
setEnv(githubUsername, aGithubUsername)
setEnv(githubToken, aGithubToken)
c, err := config.Read()
Expect(err).NotTo(HaveOccurred())
Expect(c.Github.Username).To(Equal(aGithubUsername))
Expect(*c.Github.Token).To(Equal(aGithubToken))
})
It("fails on missing username", func() {
aValidEnv()
unsetEnv(githubUsername)
c, err := config.Read()
Expect(err).To(HaveOccurred())
Expect(c).To(BeNil())
})
})
Context("Gitea", func() {
It("parses configuration", func() {
aValidEnv()
@@ -49,6 +93,7 @@ var _ = Describe("Read", func() {
Expect(err).To(HaveOccurred())
Expect(c).To(BeNil())
Expect(err.Error()).To(Equal("missing mandatory parameter GITEA_URL, please specify your target gitea instance"))
})
It("fails on missing gitea token", func() {
@@ -59,6 +104,8 @@ var _ = Describe("Read", func() {
Expect(err).To(HaveOccurred())
Expect(c).To(BeNil())
Expect(err.Error()).To(Equal("missing mandatory parameter GITEA_TOKEN, please specify your gitea application token"))
})
})
@@ -73,25 +120,18 @@ var _ = Describe("Read", func() {
Expect(c.MirrorMode).To(Equal(config.MirrorModePublic))
})
It("allows public mirror mode PUBLIC", func() {
DescribeTable("parses mirror mode: ", func(in string, exp string) {
aValidEnv()
setEnv(mirrorMode, publicMirrorMode)
setEnv(mirrorMode, in)
c, err := config.Read()
Expect(err).NotTo(HaveOccurred())
Expect(c.MirrorMode).To(Equal(config.MirrorModePublic))
})
It("allows mirror mode PRIVATE_AND_PUBLIC", func() {
aValidEnv()
setEnv(mirrorMode, privateAndPublicMirrorMode)
c, err := config.Read()
Expect(err).NotTo(HaveOccurred())
Expect(c.MirrorMode).To(Equal(config.MirrorModePrivateAndPublic))
})
Expect(c.MirrorMode).To(Equal(exp))
},
Entry("public mirror mode", publicMirrorMode, config.MirrorModePublic),
Entry("private mirror mode", privateAndPublicMirrorMode, config.MirrorModePrivateAndPublic),
)
It("fails on unknown mirror mode", func() {
aValidEnv()
@@ -101,6 +141,9 @@ var _ = Describe("Read", func() {
Expect(err).To(HaveOccurred())
Expect(c).To(BeNil())
expected := "unknown mirror mode %s, please specify a valid mirror mode: PUBLIC, PRIVATE_AND_PUBLIC"
Expect(err.Error()).To(Equal(fmt.Sprintf(expected, unknownMirrorMode)))
})
})
@@ -120,4 +163,5 @@ func aValidEnv() {
setEnv(mirrorMode, "PUBLIC")
setEnv(giteaUrl, "https://gitea.url")
setEnv(giteaToken, "valid")
setEnv(githubUsername, "a-github-username")
}