Documentation
¶
Overview ¶
core contains the most central elements of mvoCI, except the webserver. it contains the global config object and the database connection. could be used without the webserver to have the same backend for e.g. CLI UI
Index ¶
- Constants
- Variables
- func ConfigWrite(cfg *Config, filename string) error
- func DBConnect(cfg *Config) (*gorm.DB, error)
- func GenericJSONDecode(rd io.Reader, pl interface{}) error
- func LogClose()
- type AuthProvider
- type Build
- type BuildScript
- type Config
- type ConfigApi
- type ConfigAuth
- type ConfigAuthor
- type ConfigBuild
- type ConfigDatabase
- type ConfigDirectory
- type ConfigOauth
- type Group
- type LogWrapper
- type LoginToken
- type OauthToken
- type Repository
- type ServerLogger
- type Thread
- type ThreadCallback
- type User
- type WebHookLog
Constants ¶
const ( DEBUG = 0 // debug log level INFO = 1 // info log level WARN = 2 // warning log level FAIL = 3 // failure log level )
const ConfigFile string = "mvo.cfg"
configuration file
Variables ¶
var BuildTime string = ""
build time entered by the linker (see Makefile)
var Compiler string = ""
Compiler version entered by the linker (see Makefile)
var Console lwrapper
Console is the main logging facility in mvoCI
var GitHash string = ""
git commit hash entered by the linker (see Makefile)
var LogFileEnable bool = false
is file logging enabled?
var LogStderrEnable bool = false
is stderr loggin enabled?
var LogStdoutEnable bool = true
is stdout logging enabled?
var Version string = "development"
version entered by the linker (see Makefile), either release number or git-sha
Functions ¶
func ConfigWrite ¶
write the config to the a file
func DBConnect ¶
creates the database connection and creates the tables if they don't exist already depends on the following settings in the configuration ile:
- database_provider : sets the type of database server, i.e. postgres, sqlite3, mssql, mysql
- database_username : username for the database connection
- database_password : the password for the database connection
- database_host : if mysql, postgres or mssql - host of the database
- database_filename : only sqlite3 - file (can be :memory)
- database_port : communication port of the DB
- database_dbname : the name of the database to use
func GenericJSONDecode ¶
helper function for parsing JSON-files into an object of our choosing
Types ¶
type AuthProvider ¶
type AuthProvider struct {
ID uint `gorm:"primary_key"`
Name string // name of the auth provider
Type string // name of the auth provider module
Extra string // information of the auth provider used for verification
UserId uint // reference to the according user
User User // the user object
}
structure for an auth provider for a single user (not shared!)
type Build ¶
type Build struct {
ID uint `gorm:"primary_key"` // database ID
CreatedAt time.Time // starting time of the build
UpdatedAt time.Time // structure last updated
StartedAt time.Time // the point when a build worker started the build
FinishedAt time.Time // time of the moment the build finished
Duration string `gorm:"-"` // duration, will not be created in database, used for calculating the duration of a build
Status string // the status of the Build (started, finished, failed)
Log string // build log
CommitSha string // stores the commit reference
CommitAuthor string // author of a commit
CommitMessage string // message of a commit
CommitUrl string // url to view the commit in the CVS-interface
Event string // event string, why the build was built
Branch string // stores the branch built
Zip string // keeps the name of the zipped Build
Repository Repository // link to the Repository
RepositoryID uint
Api string // build because of which api?
ApiUrl string
BuildScript BuildScript
BuildScriptID uint
}
structure representing a Build of Repositories
type BuildScript ¶
type BuildScript struct {
ID uint `gorm:"primary_key"`
CreatedAt time.Time
UpdatedAt time.Time
EventType string // script for which event?
ShellScript string // shell script to be executed
RepositoryID uint
Repository Repository
}
structure for build scripts
type Config ¶
type Config struct {
AppTitle string // title of the application (defaults to mvoCI)
Install bool // is the application currently in installation mode
Debug bool // set it into debug mode
HttpPort int // the http port to be used
HttpHost string // the http host to be used
LogFile string // path to the log file
LogServer string // log file for the echo webserver
LogFileEnable bool // enable the file-log
LogMode string // writing logs to stdout or stderr?
LoginTokenDuration int // how long does a loginToken survive if inactive?
LoginTokenInvalidate bool // invalidate all loginTokens at start-up?
ParallelBuilds int // number of parallel workers to be spawned
CompressionMethod string // compression method to be used for the artifacts (file-ending to be used with tar command)
RepoSecretShow bool // should the repo-page show the secret or a placeholder?
Directory ConfigDirectory
Author ConfigAuthor
Database ConfigDatabase
WebHookLog bool // log events of the webhook for debugging purposes?
PublicEnable bool // have a page with the publically visible repositories?
Api ConfigApi
Build ConfigBuild
GiteaApi ConfigOauth
Auth ConfigAuth
}
global config structure
func ConfigRead ¶
reads the configuration from file to a KeyValueStore-object
type ConfigApi ¶
type ConfigApi struct {
Enable bool // is the API feature enabled?
ListingEnable bool // should a listing of the API be available
ListingNeedsAuth bool // is authentication needed for showing the listing of the API?
}
information about the API Enable the api for more elegant page refresh on ongoing builds and a search feature on repos
type ConfigAuth ¶
type ConfigAuth struct {
TOTPEnable bool // is totp enabled?
NativeEnable bool // is native password auth enabled?
}
information about the authentication providers
type ConfigAuthor ¶
type ConfigAuthor struct {
Email string // email address of the webmaster
Name string // name of the webmaster
Street string // address information
Zip string // zip code
City string // the city
Privacy string // privacy and gdpr information text
}
information about the author for the impress
type ConfigBuild ¶
type ConfigBuild struct {
RefreshPage bool // whether or not the page should be refreshed automagically at all
RefreshInterval int // interval in seconds at which the page should be refreshed automagically
}
configuration about the build page, with an ongoing build if the api is enabled, this gives the pace at which the pace at which query will be sent by javascript
type ConfigDatabase ¶
type ConfigDatabase struct {
Provider string // database provider, i.e. sqlite, mssql, mysql or postgres (supported by gorm.io)
Username string // username for auth at the database
Password string // password for auth at the database
Port int // port of the databases socket
Host string // host, as it may be on another machine
Dbname string // name of the database to use
Filename string // filename of the sqlite database if used
PostgresSSL string // whether or not postgres should use ssl/tsl encryption
}
configuration about the database connection
type ConfigDirectory ¶
type ConfigDirectory struct {
Repo string // directory for checkout of the repositories for building
Build string // directory for storing the build artifacts
}
structure for directory configurations
type ConfigOauth ¶
type ConfigOauth struct {
OauthClientId string // OAuth Client ID
OauthClientSecret string // OAuth Secret
}
information about (a single) OAuth token
type Group ¶
type Group struct {
gorm.Model
User []*User `gorm:"many2many:user_groups"` // a list of users in this group
}
group information TODO: is that used?
type LogWrapper ¶
type LogWrapper interface {
Debug(...interface{})
Debugf(string, ...interface{})
Log(...interface{})
Logf(string, ...interface{})
Warn(...interface{})
Warnf(string, ...interface{})
Fail(...interface{})
Failf(string, ...interface{})
}
structure containing callback for different log levels
type LoginToken ¶
type LoginToken struct {
ID uint `gorm:"primary_key"` // database ID
CreatedAt time.Time // date of creation
ExpiresAt time.Time // Expiration Date of the loginToken
Name string // name of that LoginToken, e.g. for API tokens
UserID uint // Link to the user holding the Token
User User
Type string // api or login-token?
Secret string // a secret string
Step string // auth step, at which this loginToken sits
StepExtra string // extra information of the authProvider of the next step, e.g. for storing seeds for the next try
}
structure for LoginTokens, used for authentification after login
type OauthToken ¶
type OauthToken struct {
ID uint `gorm:"primary_key"`
CreatedAt time.Time
UpdatedAt time.Time
State string
Name string
Api string
Url string
UserID uint
ClientId string
ClientSecret string
ClientToken string
RedirectUri string
}
OAuthToken for the gitea release-hook
type Repository ¶
type Repository struct {
ID uint `gorm:"primary_key"`
CreatedAt time.Time
UpdatedAt time.Time
Name string // name of the repository
Secret string // secret of the repository to be used with the webhook feature of gitea, gogs, etc.
CloneUrl string // the clone url is to be used when building the repository for cloning and for finding out which repo needs to be build when receiving a webhook event.
BuildCount uint // number of bulds of this repository. TODO: is that used?
DefaultBranch string // default branch to be build when nothing else is specified (master or main)
BuildScript string // TODO: remove. OBSOLETE! WILL BE REMOVED SOON
BuildScripts []BuildScript // list of buildScripts for more advanced building (release vs. debug,...)
WebHookEnable bool // enable webhook events for this repository
LocalBuildEnable bool // enable local build events from cli. TODO: do I need this feature?
KeepBuilds bool // keep build artifacts?
UserID uint
User User
Public bool // is this repository to be shown on the Public Repository page? Only successful builds are shown there. Needs cfg.PublicEnable
}
structure representing a Repository
type ServerLogger ¶
type ServerLogger struct {
// contains filtered or unexported fields
}
ServerLogger for the echo web server
func ServerLoggerNew ¶
func ServerLoggerNew(logfile string) (*ServerLogger, error)
create a new server logger by opening the logfile
type Thread ¶
type Thread uintptr
func Pthread_create ¶
func Pthread_create(cb ThreadCallback) Thread
initializes a thread using pthread_create
func (Thread) Pthread_join ¶
func (t Thread) Pthread_join()
func (Thread) Pthread_kill ¶
func (t Thread) Pthread_kill()
signals the thread in question to terminate
type ThreadCallback ¶
type ThreadCallback func()
type User ¶
type User struct {
ID uint `gorm:"primary_key"` // database ID
CreatedAt time.Time // time the record was created
UpdatedAt time.Time // time the record was last updated
Name string // the username of the user
Passhash string // a hashed password
Email string // email address of the user
Superuser bool // is the user a superuser or not?
Group []*Group `gorm:"many2many:user_groups"`
AuthProvider string // name of the main auth provider
AuthProviderExtra string // extra information for the main auth provider
AuthExtra string // extra information for the main auth provider
}
structure representing a user
type WebHookLog ¶
type WebHookLog struct {
ID uint `gorm:"primary_key"`
CreatedAt time.Time
Status string // of the webhook event, successful or not?
API string // which api endpoint was used?
Request string // the request body of the webhook request
ResponseBody string // body of the response sent by mvoCI
ResponseStatus int // status of the response (ideally 200 if successful)
Repository Repository // link to the Repository
RepositoryID uint
Build Build // link to the Build
BuildID uint
}
log entry for webhook events