fabric8io/docker-gerrit

语言: Shell

git: https://github.com/fabric8io/docker-gerrit

gerrit的码头图片
a docker image for gerrit
README.md (中文)

Docker Gerrit Server

支持Gerrit版本:2.11

创建容器时,我们将host / home / gerrit-site的卷挂载/映射到docker container / home / gerrit / site的这个卷,以便恢复以前配置的配置(数据库等文件,... )。 docker container volume的名称无法更改...

功能

这是一个Gerrit docker镜像,可用于促进使用Git版本控制系统的项目的在线代码审查。

该项目改进了现有的Gerrit Docker映像,因为它允许您控制身份验证选项(默认为OpenID)以及启用git托管站点(如Github,GitLab或Gogs)的复制。此外,您可以使用此图像自动创建用户并分配公钥,并传入环境变量

以下gerrit插件与此图像一起打包:

  • download-commands(gerrit项目)
  • 删除项目(gerrit项目)
  • 复制(gerrit项目)
  • add-user-plugin(自定义)
  • change-project-config(自定义)

复制到权威的Git仓库

默认情况下,此插件允许您将gerrit更改(已经过代码审查和批准的更改)复制到权威git存储库。一个示例用例是使用[Gogs}(http://gogs.io)或Github来托管您的项目,但强制对项目进行任何更改以通过Gerrit进行代码审查。 Gerrit在内部维护自己的git repo以进行变更审核,但像Gogs或Github这样的东西在管理项目方面要好得多。当批准更改时,我们可以将更改复制到权威git repo(Gogs / Github)中的相应分支。如果指定这些环境变量,则会自动完成此复制:

  • 用于复制git项目的Git服务器(gogs,gitlab)的GIT_SERVER_IP主机名
  • http Git服务器的GIT_SERVER_PORT端口(gogs,gitlab)
  • GIT_SERVER_USER用于在进行复制时使用Git Http Server进行身份验证的用户名
  • GIT_SERVER_USER的GIT_SERVER_PASSWORD密码
  • GIT_SERVER_PROJ_ROOT托管git存储库的Web项目的根目录(默认值:root)

要创建的管理员用户和帐户

add-user-plugin是一个自定义插件,用于自动创建Admin用户,以便您可以在自动持续集成/持续交付平台中使用此Docker镜像(就像我们在fabric8.io中使用的那样。它还可以自动添加用户(如用于自动代码检查的用户,例如jenkins或sonaqube用户)。

要启用这些功能,必须设置GERRIT_ADMIN_FULLNAME环境变量,然后填写任何其他环境变量(如下所列)。

  • GERRIT_ADMIN_USER - 要创建的管理员用户的名称(如果不存在)或要更新的现有管理员用户的名称
  • GERRIT_ADMIN_EMAIL - 用于创建/更新管理员用户的电子邮件
  • GERRIT_ADMIN_FULLNAME - 要显示的管理员用户的全名,即Administrator或John Doe
  • GERRIT_ADMIN_PWD - 分配给admin用户的HTTP密码;可以用于git http访问
  • GERRIT_ACCOUNTS - a;第一次启动时自动创建的分隔用户帐户字符串。例: 'jenkins,jenkins,jenkins @ fabric8.io,secret,非交互式用户:管理员;声纳,声纳,声纳@ fabric8.io,秘密,非交互式用户'     字符串的格式为<user_id> <full_name> <email> <password> <roles / groups>
  • GERRIT_PUBLIC_KEYS_PATH - 磁盘上的位置/路径,其中应找到管理员和任何用户(如果适用,如上所述传递为GERRIT_ACCOUNTS)公钥。默认情况下,公钥将与此约定id_user_id_rsa.pub匹配
  • GERRIT_USER_PUBLIC_KEY_PREFIX - 您可以更改id_的公钥的默认前缀
  • GERRIT_USER_PUBLIC_KEY_SUFFIX - 您可以更改_rsa.pub公钥的默认后缀

您还可以使用此环境变量GERRIT_ACCOUNTS并使用以下约定自动添加用户(jenkins,sonarqube等):

GERRIT_ACCOUNTS='user1,fullname1,email1,pwd1,group1:group2:...;user2,fullname2,email2,pwd2,group1:group2:...;...'

Example : -e GERRIT_ACCOUNTS='jenkins,jenkins,jenkins@fabric8.io,secret,Non-Interactive Users:Administrators;sonar,sonar,sonar@fabric8.io,secret,Non-Interactive Users'

您可以使用的Gerrit组是:“非交互式用户”,“管理员”

要正确设置用户的公钥,您应该通过环境变量GERRIT_PUBLIC_KEYS_PATH传递密钥的位置。 admin和所有其他用户(作为GERRIT_ACCOUNTS的一部分传递)的公钥应该驻留在此位置,并且应遵循约定userid,其中前缀和后缀分别默认为id_和_rsa.pub。您可以通过将环境变量传递给GERRIT_USER_PUBLIC_KEY_PREFIX和GERRIT_USER_PUBLIC_KEY_SUFFIX来更改这些默认值。

密钥如何进入容器取决于您,尽管通常绑定作为docker卷安装。这也可以使用秘密卷在Kubernetes中完成。

必须装入包含用户公钥的文件夹的卷,并将作为env变量传递的卷的值传递给docker容器(“GERRIT_PUBLIC_KEYS_PATH”)。

最后一部分是您需要更新Gerrit的项目权限。如果你有GERRIT_ADMIN_FULLNAME并且设置了admin用户的私钥,这将自动发生。

  • GERRIT_ADMIN_PRIVATE_KEY - 用于以管理员用户身份连接到gerrit配置库的管理私钥的位置和名称,例如/ path / to / file / id_rsa
  • GERRIT_ADMIN_PRIVATE_KEY_PASSWORD - 使用私钥的密码(如果适用)。如果没有密码,请将其留空

这些是可选的,如果您不指定它们,则使用默认值(推荐)。可用于进一步调整。

  • GERRIT_GIT_LOCALPATH - 磁盘上的位置,gerrit插件将用于检出任何特定于gerrit的配置文件(默认值:/ home / gerrit / git)
  • GERRIT_GIT_REMOTEPATH - 配置项目所在的运行gerrit实例中的位置(默认值:ssh:// admin @ localhost:29418 / All-Projects)
  • GERRIT_GIT_PROJECT_CONFIG - 更新gerrit配置时要使用(替换)的配置文件(默认值:/home/gerrit/config/project.config)

验证模式

  • AUTH_TYPE:用于对传入用户进行身份验证的身份验证模式(默认值:OpenID,值:OpenID,DEVELOPMENT_BECOME_ANY_ACCOUNT,HTTP,LDAP,OAUTH,...) - 有关详细信息,请参阅doc

此图像要求我们传递不同的卷:

  • 主机SSH公钥卷:容器SSH公共卷(例如:-v /user/home/.ssh/id_rsa.pub:/root/.ssh/id_rsa.pub)
  • 主机SSH私钥卷:容器SSH私有卷(例如:-v /user/home/.ssh/id_rsa:/root/.ssh/id_rsa)

Java作业将使用这些键来使用gerrit的SSHD克隆项目。公钥也将作为管理员用户密钥导入

  • 主机Gerrit站点生成卷(备份):容器Gerrit站点卷(例如:-v / home / gerrit-site:/ home / gerrit / site)
  • 主机用户/帐户公共卷:容器Gerrit SSh-帐户的密钥(例如:-v / home / accounts / ssh-keys /:/ home / gerrit / ssh-keys)

运行此容器

您可以在启用添加功能的情况下运行此容器,也可以按如下方式禁用:

没有任何附加功能运行

docker run -it -p 0.0.0.0:8080:8080 -p 127.0.0.1:29418:29418 --rm \ 
        --name gerrit docker.io/fabric8/gerrit:latest  

以允许您自动登录的模式运行(仅限演示)

docker run -it -p 0.0.0.0:8080:8080 -p 127.0.0.1:29418:29418 --rm \
        -e AUTH_TYPE='DEVELOPMENT_BECOME_ANY_ACCOUNT' \
        --name gerrit docker.io/fabric8/gerrit:latest

运行复制已打开

docker run -it -p 0.0.0.0:8080:8080 -p 127.0.0.1:29418:29418 --rm \
        -e AUTH_TYPE='DEVELOPMENT_BECOME_ANY_ACCOUNT' \
        -e GIT_SERVER_IP='gogs-http-service.default.local' \
        -e GIT_SERVER_PORT='80' \
        -e GIT_SERVER_USER=root \
        -e GIT_SERVER_PASSWORD=fabric01 \
        -e GIT_SERVER_PROJ_ROOT=root \        
        --name gerrit docker.io/fabric8/gerrit:latest

使用复制运行并自动设置管理员用户

docker run -it -p 0.0.0.0:8080:8080 -p 127.0.0.1:29418:29418 --rm \
        -e AUTH_TYPE='DEVELOPMENT_BECOME_ANY_ACCOUNT' \
        -e GIT_SERVER_IP='gogs-http-service.default.local' \
        -e GIT_SERVER_PORT='80' \
        -e GIT_SERVER_USER=root \
        -e GIT_SERVER_PASSWORD=fabric01 \
        -e GIT_SERVER_PROJ_ROOT=root \      
        -e GERRIT_ADMIN_USER='admin' \
        -e GERRIT_ADMIN_EMAIL='admin@fabric8.io' \
        -e GERRIT_ADMIN_FULLNAME='Administrator' \
        -e GERRIT_ADMIN_PWD='mysecret' \          
        -e GERRIT_ADMIN_PRIVATE_KEY='/home/gerrit/ssh-keys/id_admin_rsa' \
        -e GERRIT_PUBLIC_KEYS_PATH='/home/gerrit/ssh-keys' \
        -v /path/to/keys:/home/gerrit/ssh-keys \
        --name gerrit docker.io/fabric8/gerrit:latest

使用复制运行,设置管理员用户,并添加其他用户

docker run -it -p 0.0.0.0:8080:8080 -p 127.0.0.1:29418:29418 --rm \
        -e AUTH_TYPE='DEVELOPMENT_BECOME_ANY_ACCOUNT' \
        -e GIT_SERVER_IP='gogs-http-service.default.local' \
        -e GIT_SERVER_PORT='80' \
        -e GIT_SERVER_USER=root \
        -e GIT_SERVER_PASSWORD=fabric01 \
        -e GIT_SERVER_PROJ_ROOT=root \      
        -e GERRIT_ADMIN_USER='admin' \
        -e GERRIT_ADMIN_EMAIL='admin@fabric8.io' \
        -e GERRIT_ADMIN_FULLNAME='Administrator' \
        -e GERRIT_ADMIN_PWD='mysecret' \          
        -e GERRIT_ADMIN_PRIVATE_KEY='/home/gerrit/ssh-keys/id_admin_rsa' \    
        -e GERRIT_ACCOUNTS='jenkins,jenkins,jenkins@fabric8.io,secret,Non-Interactive Users:Administrators;sonar,sonar,sonar@fabric8.io,secret,Non-Interactive Users' \
        -e GERRIT_PUBLIC_KEYS_PATH='/home/gerrit/ssh-keys' \
        -v /path/to/keys:/home/gerrit/ssh-keys \
        --name gerrit docker.io/fabric8/gerrit:latest

与Kubernetes秘密卷一起运行

最后要指出的一点是;使用Kubernetes,我们可以使用秘密卷来传递gerrit使用的SSH密钥类型,以获得一些额外的功能。有一点需要注意,键名不能包含下划线。因此,您可以选择使用可使用这些环境变量配置的前缀/后缀以不同方式命名密钥:

  • GERRIT_USER_PUBLIC_KEY_PREFIX - 您可以更改id_的公钥的默认前缀
  • GERRIT_USER_PUBLIC_KEY_SUFFIX - 您可以更改_rsa.pub公钥的默认后缀

说明

要构建映像并对其进行测试,请在克隆的项目下打开一个终端,或者从github repo下载表单并运行此脚本命令 该脚本接受2个参数:用户名,本地计算机上gerrit_site的localation和IP地址:Docker主机的PORT

./scripts/generate-keys.sh
./scripts/daemon-gerrit.sh HOSTNAME_IPADDRESS_DOCKER:PORT cmoulliard /home/temp/gerrit-site

启动服务器后,您可以使用http服务器http:// http://192.168.99.100/:8080或使用ssh测试连接

ssh -i /Users/chmoulli/Fuse/Fuse-projects/fabric8/docker-gerrit/ssh-keys/id-admin-rsa -p 29418 admin@192.168.99.100

根据docker服务器的运行位置,IP地址可能会有所不同(boot2docker,...)

使用REST API进行测试

http --auth admin:secret http://192.168.59.103:8080/projects/
http --auth-type digest -a admin:secret PUT http://192.168.59.103:8080/a/projects/MyProject < my-project.json

where my-project.json is 

{
  "description": "This is a demo project.",
  "submit_type": "CHERRY_PICK"
}

本文使用googletrans自动翻译,仅供参考, 原文来自github.com

en_README.md

Docker Gerrit Server

Gerrit version supported: 2.11

When the container is created, we mount/map the volume of the host /home/gerrit-site to this volume of the docker container /home/gerrit/site in order to restore previously configured configurations (database, etc files, ...). The name of the docker container volume can't be changed...

Functionality

This is a Gerrit docker image which can be used to facilitate online code reviews for projects using the Git version control system.

This project improves the existing available Gerrit Docker images as it allows you to control the authentication options (default is OpenID) as well as enable replication to git hosting sites like Github, GitLab, or Gogs. Additionally, you can automatically create users and assign public keys using this image and passing in environment variables

The following gerrit plugins are packaged with this image :

  • download-commands (gerrit project)
  • delete-project (gerrit project)
  • replication (gerrit project)
  • add-user-plugin (custom)
  • change-project-config (custom)

Replication to authoritative Git repo

By default, this plugin will allow you to replicate gerrit changes (those changes that have been code reviewed and approved) to authoritative git repos. An example use case would be to use [Gogs}(http://gogs.io) or Github to host your projects, but force any changes to your project to go through Gerrit for code review. Gerrit maintains its own git repo internally for change reviews, but something like Gogs or Github are much better at managing a project. When changes are approved, we can have our changes replicated to the appropriate branch in the authoritative git repo (Gogs/Github). This replication is done automatically if you specify these environment variables:

  • GIT_SERVER_IP hostname of the Git Server (gogs, gitlab) used to replicate the git project
  • GIT_SERVER_PORT port of the http Git Server (gogs, gitlab)
  • GIT_SERVER_USER user name to be used to be authenticated with the Git Http Server when replication will take place
  • GIT_SERVER_PASSWORD password of the GIT_SERVER_USER
  • GIT_SERVER_PROJ_ROOT root of the web project hosting the git repositories (Default : root)

Admin user and accounts to be created

The add-user-plugin is a custom plugin to automate creation of an Admin user so that you can use this Docker image in an automated Continuous Integration/Continuous Delivery platform (like the one we use in fabric8.io. It can also automate adding users (like those used for automatic code checking, e.g., jenkins or sonaqube users).

To enable these features, you must set the GERRIT_ADMIN_FULLNAME environment variable, and then fill in any of the other environment variables (listed below).

  • GERRIT_ADMIN_USER - the name of the admin user to create if one does not exist, or of an existing admin user to update
  • GERRIT_ADMIN_EMAIL - the email to use for creating/updating the admin user
  • GERRIT_ADMIN_FULLNAME - the admin user's full name to be displayed, ie, Administrator or John Doe
  • GERRIT_ADMIN_PWD - the HTTP password to assign to the admin user; can be used for git http access
  • GERRIT_ACCOUNTS - a ; delimited string of user accounts to automatically create when first starting up. example:
    'jenkins,jenkins,jenkins@fabric8.io,secret,Non-Interactive Users:Administrators;sonar,sonar,sonar@fabric8.io,secret,Non-Interactive Users'
    the format of the string is <user_id><full_name><email><password><roles/groups>
  • GERRIT_PUBLIC_KEYS_PATH - the location/path on disk for where the admin and any users (if applicable, pass as GERRIT_ACCOUNTS described above) public keys should be found. By default, public keys will be matched by this convention id_user_id_rsa.pub
  • GERRIT_USER_PUBLIC_KEY_PREFIX - you can change the default prefix of the public keys which is id_
  • GERRIT_USER_PUBLIC_KEY_SUFFIX - you can change the default suffix of the public keys which is _rsa.pub

You can also automate adding users (jenkins, sonarqube, etc) using this environment variable GERRIT_ACCOUNTS and using this convention :

GERRIT_ACCOUNTS='user1,fullname1,email1,pwd1,group1:group2:...;user2,fullname2,email2,pwd2,group1:group2:...;...'

Example : -e GERRIT_ACCOUNTS='jenkins,jenkins,jenkins@fabric8.io,secret,Non-Interactive Users:Administrators;sonar,sonar,sonar@fabric8.io,secret,Non-Interactive Users'

The Gerrit groups that you can use are : 'Non-Interactive Users','Administrators'

To properly set up the Public keys for the users, you should pass the location of the keys via an environment variable GERRIT_PUBLIC_KEYS_PATH. The public keys for both admin and all of the other users (passed as part of the GERRIT_ACCOUNTS) should reside in this location and should follow the convention userid where prefix and suffix are by default id_ and _rsa.pub respectively. You can change these defaults by passing in environment variables to GERRIT_USER_PUBLIC_KEY_PREFIX and GERRIT_USER_PUBLIC_KEY_SUFFIX.

How the keys get into the container is up to you, though typically bind mounted in as a docker volume. This could also be done in Kubernetes using secret volumes.

The volume of the folder containing the public keys of the users must be mounted and the value of the volume passed as an env variable to the docker container ("GERRIT_PUBLIC_KEYS_PATH").

The last part is you need to update the project permissions for Gerrit. This will happen automatically for you if you have GERRIT_ADMIN_FULLNAME for you AND set the admin users's private key.

  • GERRIT_ADMIN_PRIVATE_KEY - the location and name of the admin private key to use to connect to the gerrit config repo as admin user eg, /path/to/file/id_rsa
  • GERRIT_ADMIN_PRIVATE_KEY_PASSWORD - the password to use the private key, if applicable. if there is no password, just leave it blank

These are optional and use default values if you don't specify them (recommended). Can be used for further tuning.

  • GERRIT_GIT_LOCALPATH - location on disk that the gerrit plugin will use to checkout any gerrit-specific config files (default: /home/gerrit/git)
  • GERRIT_GIT_REMOTEPATH - the location in a running gerrit instance where the config project resides (default: ssh://admin@localhost:29418/All-Projects)
  • GERRIT_GIT_PROJECT_CONFIG - the config file to use (replace) when updating the gerrit config (default: /home/gerrit/config/project.config)

Authentication mode

  • AUTH_TYPE : the authentication mode to use to authenticate the incoming user (Default : OpenID, Values : OpenID, DEVELOPMENT_BECOME_ANY_ACCOUNT, HTTP, LDAP, OAUTH, ...) - See doc for more info

Volumes

This image requires that we pass mount different volumes :

  • Host SSH Public Key Volume : Container SSH Public Volume (Example : -v /user/home/.ssh/id_rsa.pub:/root/.ssh/id_rsa.pub)
  • Host SSH Private Key Volume : Container SSH Private Volume (Example : -v /user/home/.ssh/id_rsa:/root/.ssh/id_rsa)

Those keys will be used by the Java Job to git clone the project using the SSHD of gerrit. The public key will also be imported as the admin user key

  • Host Gerrit Site generated Volume (backup) : Container Gerrit Site Volume (Example : -v /home/gerrit-site:/home/gerrit/site)
  • Host Users/Accounts Public Volume : Container Gerrit SSh-Keys of the accounts (Example : -v /home/accounts/ssh-keys/:/home/gerrit/ssh-keys)

Running this container

You can run this container with the additive functionality enabled, or disabled as follows:

Running without any additional features

docker run -it -p 0.0.0.0:8080:8080 -p 127.0.0.1:29418:29418 --rm \ 
        --name gerrit docker.io/fabric8/gerrit:latest  

Running in a mode that allows you to automatically login (demos only)

docker run -it -p 0.0.0.0:8080:8080 -p 127.0.0.1:29418:29418 --rm \
        -e AUTH_TYPE='DEVELOPMENT_BECOME_ANY_ACCOUNT' \
        --name gerrit docker.io/fabric8/gerrit:latest

Running with replication turned on

docker run -it -p 0.0.0.0:8080:8080 -p 127.0.0.1:29418:29418 --rm \
        -e AUTH_TYPE='DEVELOPMENT_BECOME_ANY_ACCOUNT' \
        -e GIT_SERVER_IP='gogs-http-service.default.local' \
        -e GIT_SERVER_PORT='80' \
        -e GIT_SERVER_USER=root \
        -e GIT_SERVER_PASSWORD=fabric01 \
        -e GIT_SERVER_PROJ_ROOT=root \        
        --name gerrit docker.io/fabric8/gerrit:latest

Running with replication and automatically set up Admin user

docker run -it -p 0.0.0.0:8080:8080 -p 127.0.0.1:29418:29418 --rm \
        -e AUTH_TYPE='DEVELOPMENT_BECOME_ANY_ACCOUNT' \
        -e GIT_SERVER_IP='gogs-http-service.default.local' \
        -e GIT_SERVER_PORT='80' \
        -e GIT_SERVER_USER=root \
        -e GIT_SERVER_PASSWORD=fabric01 \
        -e GIT_SERVER_PROJ_ROOT=root \      
        -e GERRIT_ADMIN_USER='admin' \
        -e GERRIT_ADMIN_EMAIL='admin@fabric8.io' \
        -e GERRIT_ADMIN_FULLNAME='Administrator' \
        -e GERRIT_ADMIN_PWD='mysecret' \          
        -e GERRIT_ADMIN_PRIVATE_KEY='/home/gerrit/ssh-keys/id_admin_rsa' \
        -e GERRIT_PUBLIC_KEYS_PATH='/home/gerrit/ssh-keys' \
        -v /path/to/keys:/home/gerrit/ssh-keys \
        --name gerrit docker.io/fabric8/gerrit:latest

Running with replication, set up Admin user, and add additional users

docker run -it -p 0.0.0.0:8080:8080 -p 127.0.0.1:29418:29418 --rm \
        -e AUTH_TYPE='DEVELOPMENT_BECOME_ANY_ACCOUNT' \
        -e GIT_SERVER_IP='gogs-http-service.default.local' \
        -e GIT_SERVER_PORT='80' \
        -e GIT_SERVER_USER=root \
        -e GIT_SERVER_PASSWORD=fabric01 \
        -e GIT_SERVER_PROJ_ROOT=root \      
        -e GERRIT_ADMIN_USER='admin' \
        -e GERRIT_ADMIN_EMAIL='admin@fabric8.io' \
        -e GERRIT_ADMIN_FULLNAME='Administrator' \
        -e GERRIT_ADMIN_PWD='mysecret' \          
        -e GERRIT_ADMIN_PRIVATE_KEY='/home/gerrit/ssh-keys/id_admin_rsa' \    
        -e GERRIT_ACCOUNTS='jenkins,jenkins,jenkins@fabric8.io,secret,Non-Interactive Users:Administrators;sonar,sonar,sonar@fabric8.io,secret,Non-Interactive Users' \
        -e GERRIT_PUBLIC_KEYS_PATH='/home/gerrit/ssh-keys' \
        -v /path/to/keys:/home/gerrit/ssh-keys \
        --name gerrit docker.io/fabric8/gerrit:latest

Running with Kubernetes secret volumes

One last thing to point out; with Kubernetes we can use secret volumes to pass in the type of SSH keys used by gerrit for some of this additional functionality. One thing to note, the key names cannot have underscores in them. So you can opt to name your keys differently using prefix/suffix that is configurable with these environment variables:

  • GERRIT_USER_PUBLIC_KEY_PREFIX - you can change the default prefix of the public keys which is id_
  • GERRIT_USER_PUBLIC_KEY_SUFFIX - you can change the default suffix of the public keys which is _rsa.pub

Instructions

To build the image and test it, open a terminal under the project cloned or download form the github repo and run this script command
The script accepts 2 parameters : username, localation of the gerrit_site on your local machine and the IP Address:PORT of the Docker Host

./scripts/generate-keys.sh
./scripts/daemon-gerrit.sh HOSTNAME_IPADDRESS_DOCKER:PORT cmoulliard /home/temp/gerrit-site

When the server is started, you can test the connection with the http server http://http://192.168.99.100/:8080 or using ssh

ssh -i /Users/chmoulli/Fuse/Fuse-projects/fabric8/docker-gerrit/ssh-keys/id-admin-rsa -p 29418 admin@192.168.99.100

The IP address could be different depending where your docker server is running (boot2docker, ...)

Test with REST API

http --auth admin:secret http://192.168.59.103:8080/projects/
http --auth-type digest -a admin:secret PUT http://192.168.59.103:8080/a/projects/MyProject < my-project.json

where my-project.json is 

{
  "description": "This is a demo project.",
  "submit_type": "CHERRY_PICK"
}