Jonas Franz
6 years ago
3 changed files with 241 additions and 0 deletions
@ -0,0 +1,107 @@ |
|||||||
|
|
||||||
|
# Created by https://www.gitignore.io/api/go,intellij |
||||||
|
# Edit at https://www.gitignore.io/?templates=go,intellij |
||||||
|
|
||||||
|
### Go ### |
||||||
|
# Binaries for programs and plugins |
||||||
|
*.exe |
||||||
|
*.exe~ |
||||||
|
*.dll |
||||||
|
*.so |
||||||
|
*.dylib |
||||||
|
|
||||||
|
# Test binary, built with `go test -c` |
||||||
|
*.test |
||||||
|
|
||||||
|
# Output of the go coverage tool, specifically when used with LiteIDE |
||||||
|
*.out |
||||||
|
|
||||||
|
### Go Patch ### |
||||||
|
/vendor/ |
||||||
|
/Godeps/ |
||||||
|
|
||||||
|
### Intellij ### |
||||||
|
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm |
||||||
|
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 |
||||||
|
|
||||||
|
# User-specific stuff |
||||||
|
.idea/**/workspace.xml |
||||||
|
.idea/**/tasks.xml |
||||||
|
.idea/**/usage.statistics.xml |
||||||
|
.idea/**/dictionaries |
||||||
|
.idea/**/shelf |
||||||
|
|
||||||
|
# Generated files |
||||||
|
.idea/**/contentModel.xml |
||||||
|
|
||||||
|
# Sensitive or high-churn files |
||||||
|
.idea/**/dataSources/ |
||||||
|
.idea/**/dataSources.ids |
||||||
|
.idea/**/dataSources.local.xml |
||||||
|
.idea/**/sqlDataSources.xml |
||||||
|
.idea/**/dynamic.xml |
||||||
|
.idea/**/uiDesigner.xml |
||||||
|
.idea/**/dbnavigator.xml |
||||||
|
|
||||||
|
# Gradle |
||||||
|
.idea/**/gradle.xml |
||||||
|
.idea/**/libraries |
||||||
|
|
||||||
|
# Gradle and Maven with auto-import |
||||||
|
# When using Gradle or Maven with auto-import, you should exclude module files, |
||||||
|
# since they will be recreated, and may cause churn. Uncomment if using |
||||||
|
# auto-import. |
||||||
|
# .idea/modules.xml |
||||||
|
# .idea/*.iml |
||||||
|
# .idea/modules |
||||||
|
|
||||||
|
# CMake |
||||||
|
cmake-build-*/ |
||||||
|
|
||||||
|
# Mongo Explorer plugin |
||||||
|
.idea/**/mongoSettings.xml |
||||||
|
|
||||||
|
# File-based project format |
||||||
|
*.iws |
||||||
|
|
||||||
|
# IntelliJ |
||||||
|
out/ |
||||||
|
|
||||||
|
# mpeltonen/sbt-idea plugin |
||||||
|
.idea_modules/ |
||||||
|
|
||||||
|
# JIRA plugin |
||||||
|
atlassian-ide-plugin.xml |
||||||
|
|
||||||
|
# Cursive Clojure plugin |
||||||
|
.idea/replstate.xml |
||||||
|
|
||||||
|
# Crashlytics plugin (for Android Studio and IntelliJ) |
||||||
|
com_crashlytics_export_strings.xml |
||||||
|
crashlytics.properties |
||||||
|
crashlytics-build.properties |
||||||
|
fabric.properties |
||||||
|
|
||||||
|
# Editor-based Rest Client |
||||||
|
.idea/httpRequests |
||||||
|
|
||||||
|
# Android studio 3.1+ serialized cache file |
||||||
|
.idea/caches/build_file_checksums.ser |
||||||
|
|
||||||
|
# JetBrains templates |
||||||
|
**___jb_tmp___ |
||||||
|
|
||||||
|
### Intellij Patch ### |
||||||
|
# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721 |
||||||
|
|
||||||
|
# *.iml |
||||||
|
# modules.xml |
||||||
|
# .idea/misc.xml |
||||||
|
# *.ipr |
||||||
|
|
||||||
|
# Sonarlint plugin |
||||||
|
.idea/sonarlint |
||||||
|
|
||||||
|
# End of https://www.gitignore.io/api/go,intellij |
||||||
|
|
||||||
|
config.yml |
@ -0,0 +1,37 @@ |
|||||||
|
// staletea |
||||||
|
// Copyright (C) 2019 Jonas Franz |
||||||
|
// |
||||||
|
// This program is free software: you can redistribute it and/or modify |
||||||
|
// it under the terms of the GNU General Public License as published by |
||||||
|
// the Free Software Foundation, either version 3 of the License, or |
||||||
|
// (at your option) any later version. |
||||||
|
// |
||||||
|
// This program is distributed in the hope that it will be useful, |
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||||
|
// GNU General Public License for more details. |
||||||
|
|
||||||
|
// You should have received a copy of the GNU General Public License |
||||||
|
// along with this program. If not, see <http://www.gnu.org/licenses/>. |
||||||
|
|
||||||
|
package cmd |
||||||
|
|
||||||
|
import ( |
||||||
|
"gitea.com/jonasfranz/staletea/web" |
||||||
|
"github.com/urfave/cli" |
||||||
|
) |
||||||
|
|
||||||
|
var CmdRun = cli.Command{ |
||||||
|
Action: run, |
||||||
|
Name: "run", |
||||||
|
Flags: []cli.Flag{ |
||||||
|
cli.StringFlag{ |
||||||
|
Name: "address", |
||||||
|
Value: ":3030", |
||||||
|
}, |
||||||
|
}, |
||||||
|
} |
||||||
|
|
||||||
|
func run(ctx *cli.Context) error { |
||||||
|
return web.StartServer(ctx.String("address")) |
||||||
|
} |
@ -0,0 +1,97 @@ |
|||||||
|
// staletea |
||||||
|
// Copyright (C) 2019 Jonas Franz |
||||||
|
// |
||||||
|
// This program is free software: you can redistribute it and/or modify |
||||||
|
// it under the terms of the GNU General Public License as published by |
||||||
|
// the Free Software Foundation, either version 3 of the License, or |
||||||
|
// (at your option) any later version. |
||||||
|
// |
||||||
|
// This program is distributed in the hope that it will be useful, |
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||||
|
// GNU General Public License for more details. |
||||||
|
|
||||||
|
// You should have received a copy of the GNU General Public License |
||||||
|
// along with this program. If not, see <http://www.gnu.org/licenses/>. |
||||||
|
|
||||||
|
package config |
||||||
|
|
||||||
|
import ( |
||||||
|
"gitea.com/jonasfranz/staletea/utils" |
||||||
|
"github.com/spf13/viper" |
||||||
|
"os" |
||||||
|
) |
||||||
|
|
||||||
|
// Key represents a config key |
||||||
|
type Key string |
||||||
|
|
||||||
|
// Get the value of the key from config |
||||||
|
func (k Key) Get() interface{} { |
||||||
|
return viper.Get(string(k)) |
||||||
|
} |
||||||
|
|
||||||
|
// Set the value of the key to config |
||||||
|
func (k Key) Set(value interface{}) { |
||||||
|
viper.Set(string(k), value) |
||||||
|
} |
||||||
|
|
||||||
|
func (k Key) setDefault(defaultValue interface{}) { |
||||||
|
viper.SetDefault(string(k), defaultValue) |
||||||
|
} |
||||||
|
|
||||||
|
const ( |
||||||
|
DaysUntilStale Key = "daysUntilStale" |
||||||
|
DaysUntilClose Key = "daysUntilClose" |
||||||
|
LabelBlacklist Key = "onlyLabels" |
||||||
|
LabelWhitelist Key = "exemptLabels" |
||||||
|
StaleLabel Key = "staleLabel" |
||||||
|
|
||||||
|
MarkComment Key = "markComment" |
||||||
|
UnmarkComment Key = "unmarkComment" |
||||||
|
CloseComment Key = "closeComment" |
||||||
|
|
||||||
|
TypeBlacklist Key = "only" |
||||||
|
|
||||||
|
BaseURL Key = "host" |
||||||
|
|
||||||
|
GiteaURL Key = "gitea.url" |
||||||
|
GiteaClientID Key = "gitea.client_id" |
||||||
|
GiteaClientSecret Key = "gitea.client_secret" |
||||||
|
|
||||||
|
SessionSecret Key = "session_secret" |
||||||
|
) |
||||||
|
|
||||||
|
func SetupConfig() error { |
||||||
|
DaysUntilStale.setDefault(60) |
||||||
|
DaysUntilClose.setDefault(7) |
||||||
|
LabelBlacklist.setDefault([]string{}) |
||||||
|
LabelWhitelist.setDefault([]string{}) |
||||||
|
StaleLabel.setDefault("wontfix") |
||||||
|
|
||||||
|
MarkComment.setDefault(`This issue has been automatically marked as stale because it has not had |
||||||
|
recent activity. It will be closed in %d days if no further activity occurs. Thank you |
||||||
|
for your contributions.`) |
||||||
|
UnmarkComment.setDefault("") |
||||||
|
CloseComment.setDefault("This issue was closed automatically since it was marked as stale and had no recent activity.") |
||||||
|
TypeBlacklist.setDefault([]string{}) |
||||||
|
BaseURL.setDefault("http://localhost") |
||||||
|
GiteaURL.setDefault("https://gitea.com") |
||||||
|
GiteaClientID.setDefault("") |
||||||
|
GiteaClientSecret.setDefault("") |
||||||
|
|
||||||
|
secret, err := utils.NewSecret(32) |
||||||
|
if err != nil { |
||||||
|
return err |
||||||
|
} |
||||||
|
SessionSecret.setDefault(secret) |
||||||
|
|
||||||
|
viper.SetConfigName("config") |
||||||
|
viper.SetConfigType("yml") |
||||||
|
viper.AddConfigPath(".") |
||||||
|
if err := viper.SafeWriteConfigAs("config.yml"); err != nil { |
||||||
|
if os.IsNotExist(err) { |
||||||
|
err = viper.WriteConfigAs("config.yml") |
||||||
|
} |
||||||
|
} |
||||||
|
return viper.ReadInConfig() |
||||||
|
} |
Loading…
Reference in new issue