Skip to content
Snippets Groups Projects
Verified Commit 264a37c2 authored by Janne Mareike Koschinski's avatar Janne Mareike Koschinski
Browse files

Initial Commit

parents
No related branches found
No related tags found
No related merge requests found
/.idea/
/vendor/
\ No newline at end of file
FROM golang as builder
RUN curl https://glide.sh/get | sh
WORKDIR /go/src/app
COPY glide.lock glide.yaml ./
RUN glide install
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -a app .
FROM scratch
COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
COPY --from=builder /go/src/app/app /app
ENTRYPOINT ["/app"]
\ No newline at end of file
build.sh 0 → 100755
#!/bin/sh
IMAGE=k8r.eu/justjanne/quasseldroid-helper-bot
TAGS=$(git describe --always --tags HEAD)
docker build -t $IMAGE:$TAGS .
docker tag $IMAGE:$TAGS $IMAGE:latest
echo Successfully tagged $IMAGE:latest
docker push $IMAGE:$TAGS
docker push $IMAGE:latest
\ No newline at end of file
#!/bin/sh
IMAGE=k8r.eu/justjanne/quasseldroid-helper-bot
TAGS=$(git describe --always --tags HEAD)
DEPLOYMENT=quasseldroid-helper-bot
POD=quasseldroid-helper-bot
kubectl set image deployment/$DEPLOYMENT $POD=$IMAGE:$TAGS
\ No newline at end of file
hash: 5d07684a0b4bfd1931fa78901e4432aadb8182a496da1a42805789f2338e0804
updated: 2018-06-03T15:00:47.923678026+02:00
imports:
- name: github.com/lrstanley/girc
version: 102f17f86306c2152a8c6188f9bb8b0e7288de31
- name: github.com/xanzy/go-gitlab
version: e519e706ac14090a3d11d11150fe6771a1a561cc
testImports: []
package: git.kuschku.de/justjanne/quasseldroid-helper-bot
import:
- package: github.com/lrstanley/girc
- package: github.com/xanzy/go-gitlab
main.go 0 → 100644
package main
import (
"fmt"
"github.com/lrstanley/girc"
"log"
"os"
"strconv"
"time"
"strings"
"github.com/xanzy/go-gitlab"
"regexp"
)
type Config struct {
Api ApiConfig
Irc IrcConfig
}
type IrcConfig struct {
Server string
Port int
Secure bool
Nick string
Ident string
Realname string
SaslAccount string
SaslPassword string
SaslEnabled bool
Channels []string
}
type ApiConfig struct {
Url string
Key string
Project string
}
func NewConfigFromEnv() Config {
var err error
config := Config{}
config.Irc.Server = os.Getenv("IRC_SERVER")
config.Irc.Port, err = strconv.Atoi(os.Getenv("IRC_PORT"))
if err != nil {
panic(err)
}
config.Irc.Secure = os.Getenv("IRC_SECURE") == "true"
config.Irc.Nick = os.Getenv("IRC_NICK")
config.Irc.Ident = os.Getenv("IRC_IDENT")
config.Irc.Realname = os.Getenv("IRC_REALNAME")
config.Irc.SaslEnabled = os.Getenv("IRC_SASL_ENABLED") == "true"
config.Irc.SaslAccount = os.Getenv("IRC_SASL_ACCOUNT")
config.Irc.SaslPassword = os.Getenv("IRC_SASL_PASSWORD")
config.Irc.Channels = strings.Split(os.Getenv("IRC_CHANNELS"), ",")
config.Api.Url = os.Getenv("API_URL")
config.Api.Key = os.Getenv("API_KEY")
config.Api.Project = os.Getenv("API_PROJECT")
return config
}
func main() {
config := NewConfigFromEnv()
ircConfig := girc.Config{
Server: config.Irc.Server,
Port: config.Irc.Port,
SSL: config.Irc.Secure,
Nick: config.Irc.Nick,
User: config.Irc.Ident,
Name: config.Irc.Realname,
}
if config.Irc.SaslEnabled {
ircConfig.SASL = &girc.SASLPlain{
User: config.Irc.SaslAccount,
Pass: config.Irc.SaslPassword,
}
}
client := girc.New(ircConfig)
api := gitlab.NewClient(nil, config.Api.Key)
api.SetBaseURL(config.Api.Url)
client.Handlers.Add(girc.CONNECTED, func(c *girc.Client, e girc.Event) {
for _, name := range config.Irc.Channels {
fmt.Printf("Joining %s\n", name)
c.Cmd.Join(name)
}
})
issueRegex := regexp.MustCompile("#\\d+(?=\\b)")
client.Handlers.Add(girc.PRIVMSG, func(client *girc.Client, event girc.Event) {
issues := issueRegex.FindAllString(event.Trailing, -1)
for _, idString := range issues {
id, err := strconv.Atoi(idString)
if err != nil {
continue
}
issue, _, err := api.Issues.GetIssue(config.Api.Project, id)
if err != nil {
continue
}
if issue.ClosedAt != nil {
client.Cmd.Reply(event, fmt.Sprintf("#%d (closed): %s – %s", issue.ID, issue.Title, issue.WebURL))
} else {
client.Cmd.Reply(event, fmt.Sprintf("#%d: %s – %s", issue.ID, issue.Title, issue.WebURL))
}
}
})
for {
if err := client.Connect(); err != nil {
log.Printf("error: %s", err)
log.Println("reconnecting in 30 seconds...")
time.Sleep(30 * time.Second)
} else {
return
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment