{ "$schema": "https://json-schema.org/draft-07/schema#", "id": "gickup_spec.json", "type": "object", "title": "Gickup configuration spec", "description": "The Gickup configuration spec", "properties": { "cron": { "type": "string", "description": "The cron expression to run the backup, You can create and test the expression on https://crontab.guru/" }, "log": { "$ref": "#/definitions/log" }, "metrics": { "$ref": "#/definitions/metrics" }, "webui": { "type": "object", "description": "Configuration for the built-in web interface", "additionalProperties": false, "properties": { "addr": { "type": "string", "description": "Address and port to listen on, e.g. ':8282'" } } }, "source": { "type": "object", "description": "Configuration for all git hoster source endpoints", "additionalProperties": false, "properties": { "github": { "type": "array", "items": { "type": "object", "properties": { "token": { "$ref": "#/definitions/source/properties/token" }, "token_file": { "$ref": "#/definitions/source/properties/token_file" }, "user": { "$ref": "#/definitions/source/properties/user" }, "username": { "$ref": "#/definitions/source/properties/username" }, "password": { "$ref": "#/definitions/source/properties/password" }, "ssh": { "$ref": "#/definitions/source/properties/ssh" }, "sshkey": { "$ref": "#/definitions/source/properties/sshkey" }, "exclude": { "$ref": "#/definitions/source/properties/exclude" }, "include": { "$ref": "#/definitions/source/properties/include" }, "excludeorgs": { "$ref": "#/definitions/source/properties/excludeorgs" }, "includeorgs": { "$ref": "#/definitions/source/properties/includeorgs" }, "wiki": { "$ref": "#/definitions/source/properties/wiki" }, "starred": { "$ref": "#/definitions/source/properties/starred" }, "issues": { "$ref": "#/definitions/source/properties/issues" }, "gists": { "$ref": "#/definitions/source/properties/gists" }, "contributed": { "$ref": "#/definitions/source/properties/contributed" }, "app_id": { "$ref": "#/definitions/source/properties/app_id" }, "app_installation_id": { "$ref": "#/definitions/source/properties/app_installation_id" }, "app_private_key_file": { "$ref": "#/definitions/source/properties/app_private_key_file" }, "filter": { "$ref": "#/definitions/filter" } }, "additionalProperties": false } }, "gitlab": { "type": "array", "items": { "type": "object", "properties": { "token": { "$ref": "#/definitions/source/properties/token" }, "token_file": { "$ref": "#/definitions/source/properties/token_file" }, "url": { "$ref": "#/definitions/source/properties/url" }, "user": { "$ref": "#/definitions/source/properties/user" }, "username": { "$ref": "#/definitions/source/properties/username" }, "password": { "$ref": "#/definitions/source/properties/password" }, "ssh": { "$ref": "#/definitions/source/properties/ssh" }, "sshkey": { "$ref": "#/definitions/source/properties/sshkey" }, "exclude": { "$ref": "#/definitions/source/properties/exclude" }, "include": { "$ref": "#/definitions/source/properties/include" }, "excludeorgs": { "$ref": "#/definitions/source/properties/excludeorgs" }, "includeorgs": { "$ref": "#/definitions/source/properties/includeorgs" }, "wiki": { "$ref": "#/definitions/source/properties/wiki" }, "starred": { "$ref": "#/definitions/source/properties/starred" }, "issues": { "$ref": "#/definitions/source/properties/issues" }, "filter": { "$ref": "#/definitions/filter" } }, "additionalProperties": false } }, "gitea": { "type": "array", "items": { "type": "object", "properties": { "token": { "$ref": "#/definitions/source/properties/token" }, "token_file": { "$ref": "#/definitions/source/properties/token_file" }, "url": { "$ref": "#/definitions/source/properties/url" }, "user": { "$ref": "#/definitions/source/properties/user" }, "username": { "$ref": "#/definitions/source/properties/username" }, "password": { "$ref": "#/definitions/source/properties/password" }, "ssh": { "$ref": "#/definitions/source/properties/ssh" }, "sshkey": { "$ref": "#/definitions/source/properties/sshkey" }, "exclude": { "$ref": "#/definitions/source/properties/exclude" }, "include": { "$ref": "#/definitions/source/properties/include" }, "excludeorgs": { "$ref": "#/definitions/source/properties/excludeorgs" }, "includeorgs": { "$ref": "#/definitions/source/properties/includeorgs" }, "wiki": { "$ref": "#/definitions/source/properties/wiki" }, "starred": { "$ref": "#/definitions/source/properties/starred" }, "issues": { "$ref": "#/definitions/source/properties/issues" }, "filter": { "$ref": "#/definitions/filter" } }, "additionalProperties": false } }, "gogs": { "type": "array", "items": { "type": "object", "properties": { "token": { "$ref": "#/definitions/source/properties/token" }, "token_file": { "$ref": "#/definitions/source/properties/token_file" }, "url": { "$ref": "#/definitions/source/properties/url" }, "user": { "$ref": "#/definitions/source/properties/user" }, "username": { "$ref": "#/definitions/source/properties/username" }, "password": { "$ref": "#/definitions/source/properties/password" }, "ssh": { "$ref": "#/definitions/source/properties/ssh" }, "sshkey": { "$ref": "#/definitions/source/properties/sshkey" }, "exclude": { "$ref": "#/definitions/source/properties/exclude" }, "include": { "$ref": "#/definitions/source/properties/include" }, "excludeorgs": { "$ref": "#/definitions/source/properties/excludeorgs" }, "includeorgs": { "$ref": "#/definitions/source/properties/includeorgs" }, "wiki": { "$ref": "#/definitions/source/properties/wiki" }, "starred": { "$ref": "#/definitions/source/properties/starred" }, "issues": { "$ref": "#/definitions/source/properties/issues" }, "filter": { "type": "object", "properties": { "lastactivity": { "$ref": "#/definitions/filter/properties/lastactivity" }, "stars": { "$ref": "#/definitions/filter/properties/stars" }, "excludeforks": { "$ref": "#/definitions/filter/properties/excludeforks" } }, "additionalProperties": false } }, "additionalProperties": false } }, "onedev": { "type": "array", "items": { "type": "object", "properties": { "token": { "$ref": "#/definitions/source/properties/token" }, "token_file": { "$ref": "#/definitions/source/properties/token_file" }, "url": { "$ref": "#/definitions/source/properties/url" }, "user": { "$ref": "#/definitions/source/properties/user" }, "username": { "$ref": "#/definitions/source/properties/username" }, "password": { "$ref": "#/definitions/source/properties/password" }, "ssh": { "$ref": "#/definitions/source/properties/ssh" }, "sshkey": { "$ref": "#/definitions/source/properties/sshkey" }, "exclude": { "$ref": "#/definitions/source/properties/exclude" }, "include": { "$ref": "#/definitions/source/properties/include" }, "excludeorgs": { "$ref": "#/definitions/source/properties/excludeorgs" }, "includeorgs": { "$ref": "#/definitions/source/properties/includeorgs" }, "issues": { "$ref": "#/definitions/source/properties/issues" }, "filter": { "type": "object", "properties": { "lastactivity": { "$ref": "#/definitions/filter/properties/lastactivity" }, "excludeforks": { "$ref": "#/definitions/filter/properties/excludeforks" } }, "additionalProperties": false } }, "additionalProperties": false } }, "sourcehut": { "type": "array", "items": { "type": "object", "properties": { "token": { "$ref": "#/definitions/source/properties/token" }, "token_file": { "$ref": "#/definitions/source/properties/token_file" }, "url": { "$ref": "#/definitions/source/properties/url" }, "user": { "$ref": "#/definitions/source/properties/user" }, "username": { "$ref": "#/definitions/source/properties/username" }, "password": { "$ref": "#/definitions/source/properties/password" }, "ssh": { "$ref": "#/definitions/source/properties/ssh" }, "sshkey": { "$ref": "#/definitions/source/properties/sshkey" }, "exclude": { "$ref": "#/definitions/source/properties/exclude" }, "include": { "$ref": "#/definitions/source/properties/include" }, "excludeorgs": { "$ref": "#/definitions/source/properties/excludeorgs" }, "includeorgs": { "$ref": "#/definitions/source/properties/includeorgs" }, "wiki": { "$ref": "#/definitions/source/properties/wiki" }, "filter": { "type": "object", "properties": { "lastactivity": { "$ref": "#/definitions/filter/properties/lastactivity" } }, "additionalProperties": false } }, "additionalProperties": false } }, "bitbucket": { "type": "array", "items": { "type": "object", "properties": { "token": { "$ref": "#/definitions/source/properties/token" }, "token_file": { "$ref": "#/definitions/source/properties/token_file" }, "url": { "$ref": "#/definitions/source/properties/url" }, "user": { "$ref": "#/definitions/source/properties/user" }, "organization": { "$ref": "#/definitions/source/properties/organization" }, "email": { "$ref": "#/definitions/source/properties/email" }, "username": { "$ref": "#/definitions/source/properties/username" }, "password": { "$ref": "#/definitions/source/properties/password" }, "ssh": { "$ref": "#/definitions/source/properties/ssh" }, "sshkey": { "$ref": "#/definitions/source/properties/sshkey" }, "exclude": { "$ref": "#/definitions/source/properties/exclude" }, "include": { "$ref": "#/definitions/source/properties/include" }, "excludeorgs": { "$ref": "#/definitions/source/properties/excludeorgs" }, "includeorgs": { "$ref": "#/definitions/source/properties/includeorgs" }, "filter": { "type": "object", "properties": { "lastactivity": { "$ref": "#/definitions/filter/properties/lastactivity" } }, "additionalProperties": false } }, "additionalProperties": false } }, "opengist": { "type": "array", "items": { "type": "object", "properties": { "token": { "$ref": "#/definitions/source/properties/token" }, "token_file": { "$ref": "#/definitions/source/properties/token_file" }, "url": { "$ref": "#/definitions/source/properties/url" }, "user": { "$ref": "#/definitions/source/properties/user" }, "exclude": { "$ref": "#/definitions/source/properties/exclude" }, "include": { "$ref": "#/definitions/source/properties/include" } }, "additionalProperties": false }, "required": [ "url" ] }, "any": { "type": "array", "items": { "type": "object", "properties": { "token": { "$ref": "#/definitions/source/properties/token" }, "token_file": { "$ref": "#/definitions/source/properties/token_file" }, "url": { "$ref": "#/definitions/source/properties/url" }, "user": { "$ref": "#/definitions/source/properties/user" }, "username": { "$ref": "#/definitions/source/properties/username" }, "password": { "$ref": "#/definitions/source/properties/password" }, "ssh": { "$ref": "#/definitions/source/properties/ssh" }, "sshkey": { "$ref": "#/definitions/source/properties/sshkey" } }, "additionalProperties": false }, "required": [ "url" ] } } }, "destination": { "type": "object", "description": "Configuration for all git hoster destination endpoints", "additionalProperties": false, "properties": { "local": { "type": "array", "items": { "type": "object", "properties": { "path": { "type": "string", "description": "path to store your backup" }, "structured": { "type": "boolean", "description": "if set to `true`, it checks out the repos in a more structured way, like `hoster/user|organization/repository`" }, "zip": { "type": "boolean", "description": "zips the repository" }, "keep": { "type": "integer", "description": "keeps x latest backups" }, "bare": { "type": "boolean", "description": "clone the repository as a bare repository" }, "mirror": { "type": "boolean", "description": "clone the repository as a mirror repository" }, "lfs": { "type": "boolean", "description": "uses lfs to clone repositories" } }, "required": [ "path" ], "additionalProperties": false } }, "s3": { "type": "array", "items": { "type": "object", "properties": { "endpoint": { "type": "string", "description": "The endpoint of the S3 server" }, "structured": { "type": "boolean", "description": "if set to `true`, it checks out the repos in a more structured way, like `hoster/user|organization/repository`" }, "bucket": { "type": "string", "description": "The bucket to store the backups in" }, "use_static_creds": { "type": "boolean", "description": "If true, use static credentials (accesskey/secretkey/token). If false, use IAM instance credentials (e.g. for AWS EC2/ECS). Default: false" }, "accesskey": { "type": "string", "description": "The access key to authenticate against the S3 server" }, "secretkey": { "type": "string", "description": "The secret key to authenticate against the S3 server" }, "usessl": { "type": "boolean", "description": "Use SSL to connect to the S3 server" }, "token": { "type": "string", "description": "The token to authenticate against the S3 server" }, "region": { "type": "string", "description": "The S3 region to use" }, "zip": { "type": "boolean", "description": "If true, zip the entire Git repo into a single zip file and upload that instead" }, "storageclass": { "type": "string", "description": "Storage class applied to all repos uploaded to this S3 bucket (optional)" }, "src_repo_url_tag_key": { "type": "string", "description": "If set, tag each uploaded object with this key and the source repo URL as value" }, "datecreatedir": { "type": "boolean", "description": "If true, gickup will create a directory for backup with the creation date" }, "lfs": { "type": "boolean", "description": "uses lfs to clone repositories" } }, "additionalProperties": false } }, "github": { "type": "array", "items": { "type": "object", "properties": { "token": { "$ref": "#/definitions/destination/properties/token" }, "token_file": { "$ref": "#/definitions/destination/properties/token_file" }, "organization": { "$ref": "#/definitions/destination/properties/organization" }, "force": { "$ref": "#/definitions/destination/properties/force" }, "app_id": { "$ref": "#/definitions/destination/properties/app_id" }, "app_installation_id": { "$ref": "#/definitions/destination/properties/app_installation_id" }, "app_private_key_file": { "$ref": "#/definitions/destination/properties/app_private_key_file" }, "visibility": { "type": "object", "properties": { "repositories": { "$ref": "#/definitions/visibility/properties/repositories" } }, "additionalProperties": false } }, "additionalProperties": false } }, "gitlab": { "type": "array", "items": { "type": "object", "properties": { "token": { "$ref": "#/definitions/destination/properties/token" }, "token_file": { "$ref": "#/definitions/destination/properties/token_file" }, "url": { "$ref": "#/definitions/destination/properties/url" }, "user": { "$ref": "#/definitions/destination/properties/user" }, "force": { "$ref": "#/definitions/destination/properties/force" }, "mirror": { "type": "object", "properties": { "enabled": { "$ref": "#/definitions/mirror/properties/enabled" } }, "additionalProperties": false }, "visibility": { "type": "object", "properties": { "repositories": { "$ref": "#/definitions/visibility/properties/repositories" } }, "additionalProperties": false } }, "additionalProperties": false } }, "gitea": { "type": "array", "items": { "type": "object", "properties": { "token": { "$ref": "#/definitions/destination/properties/token" }, "token_file": { "$ref": "#/definitions/destination/properties/token_file" }, "url": { "$ref": "#/definitions/destination/properties/url" }, "user": { "$ref": "#/definitions/destination/properties/user" }, "createorg": { "$ref": "#/definitions/destination/properties/createorg" }, "lfs": { "$ref": "#/definitions/destination/properties/lfs" }, "force": { "$ref": "#/definitions/destination/properties/force" }, "mirror": { "$ref": "#/definitions/mirror" }, "visibility": { "$ref": "#/definitions/visibility" } }, "additionalProperties": false } }, "gogs": { "type": "array", "items": { "type": "object", "properties": { "token": { "$ref": "#/definitions/destination/properties/token" }, "token_file": { "$ref": "#/definitions/destination/properties/token_file" }, "url": { "$ref": "#/definitions/destination/properties/url" }, "user": { "$ref": "#/definitions/destination/properties/user" }, "createorg": { "$ref": "#/definitions/destination/properties/createorg" }, "force": { "$ref": "#/definitions/destination/properties/force" }, "mirror": { "type": "object", "properties": { "enabled": { "$ref": "#/definitions/mirror/properties/enabled" } }, "additionalProperties": false }, "visibility": { "type": "object", "properties": { "repositories": { "$ref": "#/definitions/visibility/properties/repositories" } }, "additionalProperties": false } }, "additionalProperties": false } }, "onedev": { "type": "array", "items": { "type": "object", "properties": { "token": { "$ref": "#/definitions/destination/properties/token" }, "token_file": { "$ref": "#/definitions/destination/properties/token_file" }, "url": { "$ref": "#/definitions/destination/properties/url" }, "organization": { "$ref": "#/definitions/destination/properties/organization" }, "force": { "$ref": "#/definitions/destination/properties/force" } }, "additionalProperties": false } }, "sourcehut": { "type": "array", "items": { "type": "object", "properties": { "token": { "$ref": "#/definitions/destination/properties/token" }, "token_file": { "$ref": "#/definitions/destination/properties/token_file" }, "url": { "$ref": "#/definitions/destination/properties/url" }, "user": { "$ref": "#/definitions/destination/properties/user" }, "sshkey": { "$ref": "#/definitions/destination/properties/sshkey" }, "force": { "$ref": "#/definitions/destination/properties/force" }, "visibility": { "type": "object", "properties": { "repositories": { "$ref": "#/definitions/visibility/properties/repositories" } }, "additionalProperties": false } }, "additionalProperties": false } }, "azureblob": { "type": "array", "items": { "type": "object", "properties": { "url": { "type": "string", "description": "The Azure Blob Storage endpoint URL, optionally including a SAS token" }, "container": { "type": "string", "description": "The Azure Blob Storage container to store the backups in" }, "useclicredential": { "type": "boolean", "description": "If true, use Azure CLI credentials to authenticate" }, "tenantid": { "type": "string", "description": "The Azure tenant ID for client secret authentication" }, "clientid": { "type": "string", "description": "The Azure app registration client ID" }, "clientsecret": { "type": "string", "description": "The Azure app registration client secret" }, "structured": { "type": "boolean", "description": "if set to `true`, it checks out the repos in a more structured way, like `hoster/user|organization/repository`" }, "zip": { "type": "boolean", "description": "If true, zip the entire Git repo into a single zip file and upload that instead" }, "datecreatedir": { "type": "boolean", "description": "If true, gickup will create a directory for backup with the creation date" } }, "additionalProperties": false } }, "webdav": { "type": "array", "description": "Upload bare-cloned repositories to a WebDAV server using HTTP Basic auth. Stale remote files are pruned via PROPFIND/DELETE.", "items": { "type": "object", "properties": { "url": { "type": "string", "description": "The WebDAV endpoint URL to upload the backups to (e.g. a Nextcloud, Apache mod_dav or rclone serve webdav server)" }, "username": { "type": "string", "description": "HTTP Basic auth username" }, "password": { "type": "string", "description": "HTTP Basic auth password" }, "path": { "type": "string", "description": "Subdirectory on the WebDAV server to store the backups under; repositories end up under url/path/" }, "structured": { "type": "boolean", "description": "if set to `true`, it checks out the repos in a more structured way, like `hoster/user|organization/repository`" }, "zip": { "type": "boolean", "description": "If true, zip the entire Git repo into a single zip file and upload that instead" }, "datecreatedir": { "type": "boolean", "description": "If true, gickup will create a directory for backup with the creation date" } }, "additionalProperties": false } }, "radicle": { "type": "array", "description": "Mirror repositories into the storage of a local Radicle node. Requires the `git`, `rad` and `git-remote-rad` binaries.", "items": { "type": "object", "additionalProperties": false, "properties": { "force": { "type": "boolean", "description": "overwrite refs on the mirror that have diverged from upstream (non-fast-forward updates)" }, "prune": { "type": "boolean", "description": "delete refs on the mirror that no longer exist upstream" }, "visibility": { "type": "string", "enum": [ "public", "private", "source" ], "description": "visibility of the mirrored repository, `source` follows the source repository. default: source" }, "issues": { "type": "boolean", "description": "[COMING SOON] recreate the source repository's issues." } } } } } } }, "definitions": { "source": { "$id": "#/definitions/source", "type": "object", "properties": { "token": { "$id": "#/definitions/source/properties/token", "type": "string", "description": "The token to authenticate against the source" }, "token_file": { "$id": "#/definitions/source/properties/token_file", "type": "string", "description": "Alternatively, specify the token in a file, relative to current working directory when executed" }, "url": { "$id": "#/definitions/source/properties/url", "type": "string", "description": "The url to the source repository" }, "user": { "$id": "#/definitions/source/properties/user", "type": "string", "description": "The user you want to clone the repositories from. If you want to get everything from your user, leave out the user parameter and just use the token." }, "organization": { "$id": "#/definitions/source/properties/organization", "type": "string", "description": "The organization to clone the repositories from" }, "email": { "$id": "#/definitions/source/properties/email", "type": "string", "description": "The email address to authenticate against the source" }, "username": { "$id": "#/definitions/source/properties/username", "type": "string", "description": "The username to authenticate against the source" }, "password": { "$id": "#/definitions/source/properties/password", "type": "string", "description": "The password to authenticate against the source" }, "ssh": { "$id": "#/definitions/source/properties/ssh", "type": "boolean", "description": "Use ssh instead of https to clone the repositories" }, "sshkey": { "$id": "#/definitions/source/properties/sshkey", "type": "string", "description": "The path to the ssh key to use for cloning the repositories" }, "exclude": { "$id": "#/definitions/source/properties/exclude", "type": "array", "items": { "type": "string" }, "uniqueItems": true, "description": "A list of repositories to exclude from the backup" }, "include": { "$id": "#/definitions/source/properties/include", "type": "array", "items": { "type": "string" }, "uniqueItems": true, "description": "A list of repositories to include in the backup" }, "excludeorgs": { "$id": "#/definitions/source/properties/excludeorgs", "type": "array", "items": { "type": "string" }, "uniqueItems": true, "description": "A list of organizations to exclude from the backup" }, "includeorgs": { "$id": "#/definitions/source/properties/includeorgs", "type": "array", "items": { "type": "string" }, "uniqueItems": true, "description": "A list of organizations to include in the backup" }, "wiki": { "$id": "#/definitions/source/properties/wiki", "type": "boolean", "description": "Include the wiki in the backup" }, "starred": { "$id": "#/definitions/source/properties/starred", "type": "boolean", "description": "Include the starred repositories in the backup" }, "issues": { "$id": "#/definitions/source/properties/issues", "type": "boolean", "description": "Include the issues in the backup, only available for `local` destination" }, "gists": { "$id": "#/definitions/source/properties/gists", "type": "boolean", "description": "Include the gists in the backup" }, "contributed": { "$id": "#/definitions/source/properties/contributed", "type": "boolean", "description": "Include repositories the user contributed to" }, "app_id": { "$id": "#/definitions/source/properties/app_id", "type": "integer", "description": "GitHub App ID (numeric). Used together with app_installation_id and app_private_key_file to authenticate as a GitHub App." }, "app_installation_id": { "$id": "#/definitions/source/properties/app_installation_id", "type": "integer", "description": "Installation ID of the GitHub App on the target account or organization." }, "app_private_key_file": { "$id": "#/definitions/source/properties/app_private_key_file", "type": "string", "description": "Path to the RSA private key PEM file for the GitHub App." } }, "additionalProperties": false }, "destination": { "$id": "#/definitions/destination", "type": "object", "properties": { "token": { "$id": "#/definitions/destination/properties/token", "type": "string", "description": "The token to authenticate against the destination" }, "token_file": { "$id": "#/definitions/destination/properties/token_file", "type": "string", "description": "Alternatively, specify the token in a file, relative to current working directory when executed" }, "url": { "$id": "#/definitions/destination/properties/url", "type": "string", "description": "The url to the destination repository" }, "user": { "$id": "#/definitions/destination/properties/user", "type": "string", "description": "The user/org you want to backup the repositories to" }, "organization": { "$id": "#/definitions/destination/properties/organization", "type": "string", "description": "The organization to backup the repositories to" }, "sshkey": { "$id": "#/definitions/destination/properties/sshkey", "type": "string", "description": "The path to the ssh key to use for pushing the repositories" }, "createorg": { "$id": "#/definitions/destination/properties/createorg", "type": "boolean", "description": "Create the organization if it does not exist" }, "lfs": { "$id": "#/definitions/destination/properties/lfs", "type": "boolean", "description": "Use lfs to push the repositories" }, "force": { "$id": "#/definitions/destination/properties/force", "type": "boolean", "description": "Force push the repositories" }, "app_id": { "$id": "#/definitions/destination/properties/app_id", "type": "integer", "description": "GitHub App ID (numeric). Used together with app_installation_id and app_private_key_file to authenticate as a GitHub App." }, "app_installation_id": { "$id": "#/definitions/destination/properties/app_installation_id", "type": "integer", "description": "Installation ID of the GitHub App on the target account or organization." }, "app_private_key_file": { "$id": "#/definitions/destination/properties/app_private_key_file", "type": "string", "description": "Path to the RSA private key PEM file for the GitHub App." } }, "additionalProperties": false }, "filter": { "$id": "#/definitions/filter", "type": "object", "properties": { "lastactivity": { "$id": "#/definitions/filter/properties/lastactivity", "type": "string", "description": "Only clone repositories that have been active in the last x days. The value is a string that can be parsed by the time.ParseDuration function from the go standard library." }, "stars": { "$id": "#/definitions/filter/properties/stars", "type": "integer", "description": "Only clone repositories that have more than x stars" }, "excludearchived": { "$id": "#/definitions/filter/properties/excludearchived", "type": "boolean", "description": "Exclude archived repositories" }, "excludeforks": { "$id": "#/definitions/filter/properties/excludeforks", "type": "boolean", "description": "Exclude forked repositories" }, "languages": { "$id": "#/definitions/filter/properties/languages", "type": "array", "items": { "type": "string" }, "description": "Only clone repositories that are written in one of the specified languages" } }, "additionalProperties": false }, "visibility": { "$id": "#/definitions/visibility", "type": "object", "properties": { "repositories": { "$id": "#/definitions/visibility/properties/repositories", "type": "string", "enum": [ "public", "private" ], "description": "The visibility of the repositories to clone" }, "organizations": { "$id": "#/definitions/visibility/properties/organizations", "type": "string", "enum": [ "public", "private", "limited" ], "description": "The visibility of the organizations to clone" } }, "additionalProperties": false }, "mirror": { "$id": "#/definitions/mirror", "type": "object", "properties": { "enabled": { "$id": "#/definitions/mirror/properties/enabled", "type": "boolean", "description": "Enable mirroring of the repositories" }, "mirrorinterval": { "$id": "#/definitions/mirror/properties/mirrorinterval", "type": "string", "description": "The interval to mirror the repositories. The value is a string that can be parsed by the time.ParseDuration function from the go standard library." } }, "additionalProperties": false }, "log": { "$id": "#/definitions/log", "type": "object", "description": "Configure logging related settings (optional)", "properties": { "timeformat": { "type": "string", "description": "The time format to use in the logs, The basics for time formats can be found at https://yourbasic.org/golang/format-parse-string-time-date-example." }, "file-logging": { "type": "object", "description": "Configure file logging (optional)", "properties": { "dir": { "type": "string", "description": "The directory to store the logs in" }, "file": { "type": "string", "description": "The file to store the logs in" }, "maxage": { "type": "integer", "description": "The maximum age of the log file in days" } }, "additionalProperties": false } }, "additionalProperties": false }, "metrics": { "$id": "#/definitions/metrics", "type": "object", "description": "Configure metrics related settings (optional)", "properties": { "prometheus": { "type": "object", "description": "Configure prometheus metrics (optional)", "properties": { "endpoint": { "type": "string", "description": "The endpoint to expose the metrics on" }, "listen_addr": { "type": "string", "description": "The address to listen on" } }, "additionalProperties": false }, "heartbeat": { "type": "object", "description": "Configure heartbeat for services like https://healthchecks.io/ or https://deadmanssnitch.com/ (optional)", "properties": { "urls": { "type": "array", "items": { "type": "string" }, "description": "A list of urls to check for heartbeat" } } }, "push": { "type": "object", "description": "Configure pushgateways to get notifications on your phone or browser (optional)", "properties": { "ntfy": { "type": "array", "description": "Send notifications to ntfy.sh (optional)", "items": { "type": "object", "properties": { "url": { "type": "string", "description": "The url to your nty server" }, "token": { "type": "string", "description": "The token to authenticate against the nty server" }, "user": { "type": "string", "description": "The user to authenticate against the nty server" }, "password": { "type": "string", "description": "The password to authenticate against the nty server" }, "email": { "type": "string", "description": "Optional email address to pass as the Email header for ntfy notifications" } } } }, "gotify": { "type": "array", "description": "Send notifications to gotify.net (optional)", "items": { "type": "object", "properties": { "url": { "type": "string", "description": "The url to your gotify server" }, "token": { "type": "string", "description": "The token to authenticate against the gotify server" } } } }, "apprise": { "type": "array", "description": "Send notification to apprise (apprise)", "items": { "type": "object", "properties": { "url": { "type": "string", "description": "The url to your apprise server" }, "config": { "type": "string", "description": "The id of your configuration in apprise" }, "tags": { "type": "array", "items": { "type": "string" }, "description": "A list of tags you want to send your message to" }, "notification_urls": { "type": "array", "items": { "type": "string" }, "description": "A list of urls you want to send notifications to" } } } } }, "additionalProperties": false } }, "additionalProperties": false } } }