Commit 1c0e0a6b authored by Diego's avatar Diego

Initial commit

parents
# ChatOps Stack with Rocket.Chat and Gitlab-CE
Fully integrated ChatOps stack, so you can have a great versioning tool working together with a great chat plataform.
Your developers will love it.
gitlab:
image: 'gitlab/gitlab-ce:latest'
restart: always
hostname: "${gitlab_hostname}"
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url '${gitlab_external_url}'
gitlab_rails['gitlab_shell_ssh_port'] = "${gitlab_ssh_port}"
gitlab_rails['lfs_enabled'] = "${gitlab_lfs_enabled}"
nginx['listen_port'] = "${gitlab_http_port}"
ports:
- "${gitlab_http_port}:${gitlab_http_port}"
- "${gitlab_ssl_port}:${gitlab_ssl_port}"
- "${gitlab_ssh_port}:${gitlab_ssh_port}"
expose:
- "${gitlab_ssh_port}"
- "${gitlab_ssl_port}"
- "${gitlab_http_port}"
volumes:
- "${gitlab_volume_path}/config:/etc/gitlab"
- "${gitlab_volume_path}/logs:/var/log/gitlab"
- "${gitlab_volume_path}/data:/var/opt/gitlab"
#TODO: Verificar a documentação para registrar o runner com essa imagem
runner:
image: djx339/gitlab-docker-runner:latest
hostname: "${runner_hostname}"
restart: "always"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
links:
- gitlab
environment:
- GITLAB_HOST="${gitlab_hostname}:${gitlab_listen_port}"
- GITLAB_RUNNER_TOKEN="${gitlab_runner_token}"
ports:
- "8000:8000"
expose:
- "8000"
mongo:
image: mongo:3.2
hostname: "${mongo_hostname}"
volumes:
- "${mongo_volume_path}/data:/data/db"
- "${mongo_volume_path}/dump:/dump"
command: mongod --smallfiles --oplogSize 128 --replSet rs0
mongo-init-replica:
image: mongo:3.2
command: 'mongo mongo/rocketchat --eval "rs.initiate({ _id: ''rs0'', members: [ { _id: 0, host: ''localhost:27017'' } ]})"'
links:
- mongo:mongo
rocketchat:
image: rocketchat/rocket.chat:latest
hostname: "${rocketchat_hostname}"
volumes:
- "${rocketchat_volume_path}/uploads:/app/uploads"
environment:
- PORT=${rocketchat_port}
- ROOT_URL=${rocketchat_url}:${rocketchat_port}
- MONGO_URL=mongodb://mongo:27017/rocketchat
- MONGO_OPLOG_URL=mongodb://mongo:27017/local
- MAIL_URL="${rocketchat_mail_url}"
links:
- mongo:mongo
- gitlab:gitlab
ports:
- ${rocketchat_port}:${rocketchat_port}
expose:
- "${rocketchat_port}"
hubot:
image: rocketchat/hubot-rocketchat:latest
hostname: "${hubot_hostname}"
environment:
- ROCKETCHAT_URL=${rocketchat_hostname}:${rocketchat_port}
- ROCKETCHAT_ROOM=${hubot_room}
- ROCKETCHAT_USER=${hubot_user}
- ROCKETCHAT_PASSWORD=${hubot_password}
- ROCKETCHAT_AUTH=password
- BOT_NAME=${hubot_name}
- LISTEN_ON_ALL_PUBLIC=true
- EXTERNAL_SCRIPTS=${hubot_scripts}
- GITLAB_URL=http://${gitlab_hostname}:${gitlab_http_port}/api/v3/
- GITLAB_TOKEN=${hubot_gitlab_token}
- GITLAB_RECORD_LIMIT=${hubot_gitlab_records}
links:
- rocketchat:rocketchat
- gitlab:gitlab
volumes:
- "${hubot_volume_path}/scripts:/home/hubot/scripts"
ports:
- 3001:3001
.catalog:
name: "Rocket.Chat.Ops"
version: 0.1.0
description: |
ChatOps Stack made in Docker with Gitlab-CE, Rocket.Chat and Hubot.
questions:
- variable: "gitlab_hostname"
type: string
required: true
label: "Gitlab service hostname"
description: "Gitlab containers hostname, used to directly communicate containers with each other"
default: "gitlab"
- variable: "gitlab_external_url"
type: string
required: true
label: "Gitlab External URL"
description: "URL used to access gitlab interface"
default: "http://git.example.com"
- variable: "gitlab_http_port"
type: string
required: true
label: "Gitlab HTTP port"
description: "The port where gitlab container will be listening"
default: "80"
- variable: "gitlab_ssl_port"
type: string
required: true
label: "Gitlab HTTPS (SSL) port"
description: "The port where gitlab container will be listening"
default: "443"
- variable: "gitlab_ssh_port"
type: string
required: false
label: "Gitlab SSH port"
description: "Port used inside container to access Gitlab repository with SSH"
default: "22"
- variable: "gitlab_lfs_enabled"
type: boolean
required: false
label: "Gitlab enable LFS"
description: "Gitlab enable Large File System feature"
default: true
- variable: "gitlab_volume_path"
type: string
required: false
label: "Gitlab Volume Path"
description: "The path in the host where gitlab will persist logs, repositories and confs"
default: "/home/gitlab"
- variable: "runner_hostname"
type: string
required: false
label: "Gitlab-CI Runner Hostname"
description: "Gitlab-CI Runner containers hostname, used to directly communicate containers with each other"
default: "runner"
- variable: "gitlab_runner_token"
type: string
required: false
label: "Gitlab-CI Runner Token"
description: "Gitlab-CI Runner token obtained from gitlabs runner page"
default: "1234567890"
- variable: "mongo_hostname"
type: string
required: false
label: "MongoDB Hostname"
description: "MongoDB containers hostname, used to directly communicate containers with each other"
default: "mongo"
- variable: "mongo_volume_path"
type: string
required: false
label: "MongoDB Volume Path"
description: "The path in the host where MongoDB will persist data"
default: "/home/mongo"
- variable: "rocketchat_hostname"
type: string
required: false
label: "Rocket.Chat Hostname"
description: "Rocket.Chat containers hostname, used to directly communicate containers with each other"
default: "rocketchat"
- variable: "rocketchat_volume_path"
type: string
required: false
label: "Rocket.Chat Volume Path"
description: "The path in the host where Rocket.Chat will persist uploaded files"
default: "/home/rocketchat"
- variable: "rocketchat_port"
type: string
required: false
label: "Rocket.Chat Port"
description: "Number of the port where Rocket.Chat application will be listening"
default: 3000
- variable: "rocketchat_url"
type: string
required: false
label: "Rocket.Chat External URL"
description: ""
default: "http://chat.domain.com"
- variable: "rocketchat_mail_url"
type: string
required: false
label: "Rocket.Chat MAIL URL"
description: "MAIL_URL environment variable where you can set your SMTP address"
default: "/bin/sendmail -f"
- variable: "hubot_hostname"
type: string
required: false
label: "Hubot Hostname"
description: "Hubot's service Hostname"
default: "hubot"
- variable: "hubot_room"
type: string
required: false
label: "Hubot Listening Channel"
description: "The room or channel where your bot will be listening."
default: "general"
- variable: "hubot_user"
type: string
required: false
label: "Hubot User"
description: "The user account in Rocket.Chat that hubot will use to listen and respond to messages. Remember creating this user inside Rocket.Chat."
default: "rocket.cat"
- variable: "hubot_password"
type: string
required: false
label: "Hubot User password"
description: "The password for the user account in Rocket.Chat that hubot will use to listen and respond to messages."
default: 1234
- variable: "hubot_name"
type: string
required: false
label: "Hubot User Name"
description: "The name of the user account in Rocket.Chat."
default: "Rocket.Cat"
- variable: "hubot_scripts"
type: string
required: true
label: "Hubot External Scripts"
description: "The npm hubot scripts that will be installed once the container load."
default: "hubot-help,hubot-seen,hubot-links,hubot-diagnostics,hubot-rocketchat-gitlab"
- variable: "hubot_gitlab_token"
type: string
required: false
label: "Hubot Gitlab API Token"
description: "API Token from Gitlab to enable bot access. Go to Gitlab, Profile Settings, create a token for hubot and paste it here. Or you can leave this blank and upgrade the container later, to set the GITLAB_TOKEN environment variable."
default: ""
- variable: "hubot_gitlab_records"
type: string
required: false
label: "Hubot max records from Gitlab"
description: "The amount of records that hubot-rocketchat-gitlab will read"
default: "100"
- variable: "hubot_volume_path"
type: string
required: false
label: "Hubot Volume Path"
description: "The volume path where Hubot will persist its scripts, in case you wanna add something else."
default: "/home/hubot"
gitlab:
scale: 1
runner:
scale: 1
mongo:
scale: 1
mongo-init-replica:
restart: no
rocketchat:
scale: 1
hubot:
scale: 1
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Camada_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 230.1 172.7" style="enable-background:new 0 0 230.1 172.7;" xml:space="preserve">
<style type="text/css">
.st0{fill:#C0282E;}
.st1{fill:#FEFEFE;}
.st2{fill:#CCCACA;}
</style>
<g>
<path class="st0" d="M230.1,8.3c-1.6,0.3-2.5,1.7-3.6,2.7c-7.1,6.7-13.4,14.1-17.7,23c-2.1,4.4-3.4,8.9-3.4,13.8
c0,2.3,0.7,4.2,2.4,6c7.9,8.2,13.6,17.6,16.4,28.7c4.1,16.4,0.9,31.6-8.2,45.6c-9.3,14.3-22.5,24.1-37.7,31.2
c-17.2,8.1-35.5,11.9-54.4,13c-20.2,1.1-40-1.1-59.2-7.7c-17.8-6.2-33.7-15.4-46-30.1C9.1,123,3.6,109.8,4.1,94.6
c0.4-13.6,5.5-25.4,13.8-36c0.9-1.1,1.7-2.4,2.8-3.2C25,52.1,24.9,47.6,24,43c-1.2-6.5-4.3-12.2-8-17.6c-4.2-6-9.2-11.3-14.5-16.2
C1,8.8,0.7,8.2,0,8.3C0,8,0,7.7,0,7.4c0.7,0.2,1.1-0.3,1.7-0.5c14.8-6.6,30.1-8.3,46.1-5.5c14.5,2.6,27,9.3,38,19.1
c0.7,0.6,1.2,1.5,2.5,1.2c4.7-0.9,9.5-1.3,14.3-1.5c12.6-0.6,25.1-0.7,37.6,1.2c2,0.3,3.3-0.1,4.8-1.4c5.6-5,11.7-9.5,18.5-12.5
c21.8-9.8,43.7-10.2,65.6-0.3c0.4,0.2,0.7,0.6,1.2,0.2C230.1,7.7,230.1,8,230.1,8.3z M35.3,129.5c0.1,0.1,0.2,0.2,0.3,0.3l0.1,0.1
c0.5,0.5,0.9,1,1.4,1.4c8.9,7.9,19.1,13.5,30.2,17.5c18.2,6.5,37,9,56.3,7.8c10.2-0.7,20.3-2.2,30.1-5c15.3-4.4,29.5-11.1,41-22.5
c11.3-11.2,17.5-24.3,14.6-40.5c-1.7-9.3-6.2-17.2-13-23.8c-0.1-0.1-0.3-0.3-0.4-0.4c0-0.3-0.2-0.5-0.5-0.5l0,0
c-0.1-0.3-0.2-0.5-0.5-0.4c-0.9-1.3-2.1-2.2-3.2-3.3c-1.2-1.2-2.9-1.8-3.6-3.5c0-1.3,0-2.7,0-4c-0.3-11.2,3.1-21.2,9.6-30.3
c1.7-2.4,3.7-4.5,5.5-6.8c0.4-0.5,1.3-1.3-0.1-1.5c-2.3-0.4-4.6-1.2-7-0.7c-5.2-0.3-10.1,0.6-15,2.3c-12.7,4.3-23,12-31.9,21.7
c-0.9,0.9-1.6,1.6-3,1.2c-7.5-1.8-15.1-2.8-22.8-3.2c-19.3-1.1-38.1,1.2-56.2,7.8C53.2,48.6,40.4,56,30.6,67.8
c-6.4,7.7-10.5,16.5-10.8,26.7c-0.4,13,4.9,23.6,13.5,32.9c0,0.3,0.2,0.4,0.4,0.5c0.1,0.1,0.3,0.3,0.4,0.4c0.2,0.2,0.4,0.4,0.6,0.7
c0,0,0.1,0.1,0.1,0.1c0.1,0.1,0.2,0.2,0.3,0.3L35.3,129.5z"/>
<path class="st1" d="M188.3,56.8c0.7,1.6,2.4,2.3,3.6,3.5c1.1,1.1,2.3,2,3.2,3.3c0.2,0.1,0.4,0.3,0.5,0.4c0,0,0,0,0,0
c0,0.3,0.2,0.5,0.5,0.5c0.1,0.1,0.3,0.3,0.4,0.4c-0.2,1.3,0.7,2.1,1.4,3c4.5,6.5,7.1,13.7,7.6,21.5c0.6,10.3-2.7,19.4-8.7,27.7
c-6.6,9.2-15.4,15.8-25.3,21.1c-16.4,8.8-34.2,12.9-52.6,13.9c-11.4,0.6-22.8,0-34.1-2.1c-17.2-3.1-33.3-9-47.4-19.6
c-0.5-0.3-0.9-0.9-1.6-0.4c0,0-0.1-0.1-0.1-0.1c0.2-0.4,0-0.5-0.3-0.3c0,0-0.1-0.1-0.1-0.1c0.1-0.4,0-0.4-0.3-0.3
c0,0-0.1-0.1-0.1-0.1c0.2-0.6-0.2-0.6-0.6-0.7c-0.1-0.1-0.3-0.3-0.4-0.4c-0.1-0.2-0.3-0.3-0.4-0.5c-8.7-9.3-14-19.9-13.5-32.9
c0.4-10.2,4.4-19,10.8-26.7C40.4,56,53.2,48.6,67.4,43.4c18.2-6.7,37-9,56.2-7.8c7.7,0.4,15.3,1.4,22.8,3.2c1.4,0.3,2.1-0.3,3-1.2
c8.9-9.8,19.2-17.5,31.9-21.7c4.9-1.6,9.8-2.6,15-2.3c-1.7,2.9-3.9,5.6-5.3,8.8c-3.6,8.3-4.6,17.1-4,26
C187.3,51.2,187.3,54.1,188.3,56.8z M158.9,77c-7.1,0-12.8,5.5-12.8,12.5c-0.1,7,5.6,12.8,12.6,12.8c7.1,0,12.7-5.5,12.8-12.6
C171.6,82.7,166,77,158.9,77z M115,124.8c7,0,12.6-5.7,12.6-12.8c-0.1-7-5.7-12.6-12.8-12.5c-7,0-12.8,5.8-12.6,12.8
C102.2,119.3,107.9,124.8,115,124.8z M58.4,89.7c0,7.2,5.5,12.6,12.6,12.6c7.1,0,12.6-5.6,12.6-12.7C83.6,82.5,78,77,70.9,77
C63.8,77,58.3,82.5,58.4,89.7z"/>
<path class="st2" d="M35.8,130c0.7-0.5,1.1,0.1,1.6,0.4C51.4,141,67.5,146.8,84.7,150c11.3,2.1,22.7,2.7,34.1,2.1
c18.4-1,36.2-5.1,52.6-13.9c9.8-5.3,18.6-11.9,25.3-21.1c6-8.2,9.3-17.4,8.7-27.7c-0.5-7.8-3.1-15-7.6-21.5c-0.6-0.9-1.6-1.7-1.4-3
c6.8,6.6,11.3,14.5,13,23.8c3,16.2-3.3,29.4-14.6,40.5c-11.5,11.4-25.6,18.1-41,22.5c-9.8,2.8-19.9,4.4-30.1,5
c-19.3,1.2-38.1-1.2-56.3-7.8c-11.1-4-21.4-9.6-30.2-17.5C36.7,131,36.3,130.4,35.8,130z"/>
<path class="st2" d="M188.3,56.8c-1-2.7-1-5.7-1.2-8.5c-0.6-8.9,0.4-17.7,4-26c1.4-3.2,3.6-5.8,5.3-8.8c2.4-0.5,4.7,0.3,7,0.7
c1.4,0.2,0.5,1,0.1,1.5c-1.8,2.3-3.8,4.4-5.5,6.8c-6.5,9-9.9,19.1-9.6,30.3C188.4,54.1,188.3,55.5,188.3,56.8z"/>
<path class="st2" d="M34.2,128.3c0.4,0,0.8,0.1,0.6,0.7C34.6,128.7,34.4,128.5,34.2,128.3z"/>
<path class="st2" d="M195.6,64c-0.2-0.1-0.4-0.3-0.5-0.4C195.4,63.5,195.5,63.7,195.6,64z"/>
<path class="st2" d="M196.1,64.5c-0.3,0-0.5-0.2-0.5-0.5C195.9,64,196,64.2,196.1,64.5z"/>
<path class="st2" d="M33.3,127.4c0.1,0.2,0.3,0.3,0.4,0.5C33.5,127.8,33.3,127.7,33.3,127.4z"/>
<path class="st2" d="M34.9,129.1c0.3-0.1,0.5,0,0.3,0.3C35.1,129.3,35,129.2,34.9,129.1z"/>
<path class="st2" d="M35.3,129.5c0.3-0.1,0.5,0,0.3,0.3C35.6,129.7,35.5,129.6,35.3,129.5z"/>
<path class="st0" d="M158.9,77c7.1,0,12.6,5.7,12.6,12.8c-0.1,7.1-5.7,12.6-12.8,12.6c-7,0-12.7-5.8-12.6-12.8
C146.2,82.5,151.8,77,158.9,77z"/>
<path class="st0" d="M115,124.8c-7.1,0-12.8-5.5-12.9-12.5c-0.1-6.9,5.6-12.7,12.6-12.8c7.1,0,12.8,5.5,12.8,12.5
C127.6,119.1,122.1,124.7,115,124.8z"/>
<path class="st0" d="M58.4,89.7c0-7.2,5.4-12.7,12.6-12.7c7.1,0,12.7,5.5,12.7,12.6c0,7.1-5.5,12.7-12.6,12.7
C63.8,102.3,58.4,96.8,58.4,89.7z"/>
</g>
</svg>
name: Rocket.Chat.Ops
description: |
ChatOps Stack made in Docker with Gitlab-CE, Rocket.Chat and Hubot.
version: 0.1.0
category: Chat, Versioning
name: WordPress Hacklab
description: |
WordPress Stack in Hacklab Style.
version: 0.1.0
category: Blogging
version: '2'
services:
mysql:
image: mariadb
environment:
MYSQL_DATABASE: ${mysql_database}
MYSQL_PASSWORD: ${mysql_password}
MYSQL_ROOT_PASSWORD: ${mysql_root_password}
MYSQL_USER: ${mysql_user}
TERM: xterm
volumes:
- ${wordpress_volume_path}/mysql:/var/lib/mysql
web:
image: hacklab/wordpress
environment:
WORDPRESS_DB_NAME: ${mysql_database}
WORDPRESS_DB_PASSWORD: ${mysql_database}
WORDPRESS_DB_USER: ${mysql_user}
WORDPRESS_TABLE_PREFIX: ${wordpress_table_prefix}
volumes:
- ${wordpress_volume_path}/wp-content/uploads:/var/www/html/wp-content/uploads
- ${wordpress_volume_path}/wp-content/plugins:/var/www/html/wp-content/plugins
- ${wordpress_volume_path}/php:/usr/local/etc/php
links:
- mysql
labels:
rap.le_email: ${le_email}
rap.le_host: ${le_host}
rap.client_max_body_size: 2048m
io.rancher.container.pull_image: always
rap.host: ${rap_host}
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="-241 323.5 122.5 122.5" enable-background="new -241 323.5 122.5 122.5" xml:space="preserve">
<g id="Layer_1_1_">
</g>
<g>
<path fill="#464342" d="M-232.3,384.7c0,20.8,12.1,38.8,29.6,47.3l-25.1-68.7C-230.7,369.9-232.3,377.1-232.3,384.7z"/>
<path fill="#464342" d="M-144.3,382.1c0-6.5-2.3-11-4.3-14.5c-2.7-4.3-5.2-8-5.2-12.3c0-4.8,3.7-9.3,8.8-9.3c0.2,0,0.5,0,0.7,0
c-9.3-8.6-21.8-13.8-35.5-13.8c-18.4,0-34.5,9.4-43.9,23.7c1.2,0,2.4,0.1,3.4,0.1c5.5,0,14-0.7,14-0.7c2.8-0.2,3.2,4,0.3,4.3
c0,0-2.8,0.3-6,0.5l19.1,56.9l11.5-34.5l-8.2-22.4c-2.8-0.2-5.5-0.5-5.5-0.5c-2.8-0.2-2.5-4.5,0.3-4.3c0,0,8.7,0.7,13.8,0.7
c5.5,0,14-0.7,14-0.7c2.8-0.2,3.2,4,0.3,4.3c0,0-2.9,0.3-6,0.5l19,56.5l5.2-17.5C-146,391.8-144.3,386.6-144.3,382.1z"/>
<path fill="#464342" d="M-178.8,389.3l-15.8,45.8c4.7,1.4,9.7,2.1,14.8,2.1c6.1,0,12-1.1,17.5-3c-0.1-0.2-0.3-0.5-0.4-0.7
L-178.8,389.3z"/>
<path fill="#464342" d="M-133.6,359.5c0.2,1.7,0.4,3.5,0.4,5.4c0,5.3-1,11.3-4,18.8l-16.1,46.4c15.6-9.1,26.1-26,26.1-45.4
C-127.2,375.6-129.5,367-133.6,359.5z"/>
<path fill="#464342" d="M-179.7,323.5c-33.8,0-61.3,27.5-61.3,61.3c0,33.8,27.5,61.3,61.3,61.3c33.8,0,61.3-27.5,61.3-61.3
C-118.5,351-146,323.5-179.7,323.5z M-179.7,443.2c-32.2,0-58.5-26.2-58.5-58.5c0-32.2,26.2-58.5,58.5-58.5
c32.2,0,58.5,26.2,58.5,58.5C-121.3,417-147.5,443.2-179.7,443.2z"/>
</g>
</svg>
version: '2'
catalog:
name: "Hacklab WordPress Single"
version: 0.1
description: |
WordPress Stack predefined to run behind RancherActiveProxy with Hacklab's Docker image.
questions:
- variable: "mysql_database"
type: string
required: true
label: "MySql Database Name"
description: "The WordPress Database name in MySql server"
default: "wordpress"
- variable: "mysql_user"
type: string
required: true
label: "MySql Username"
description: "The wordpress user"
default: "wordpress"
- variable: "mysql_password"
type: password
required: true
label: "MySql username password"
description: "The password of wordpress user"
default: "wordpress"
- variable: "mysql_root_password"
type: password
required: true
label: "MySql ROOT password"
description: "The password of ROOT user"
default: "WordP4ess@2k17"
- variable: "wordpress_table_prefix"
type: string
required: true
label: "WordPress Table Prefix"
description: "For security reasons change the wp_ prefix"
default: "hack_"
- variable: "wordpress_volume_path"
type: string
required: true
label: "Volume Path"
description: "The path where files will be stored in server"
default: "/home/wordpress/"
- variable: "le_email"
type: string
required: false
label: "LetsEncrypt E-mail"
description: "E-mail to be used in LetsEncrypt"
default: "sysadmin@hacklab.com.br"
- variable: "le_host"
type: boolean
required: false
label: "LetsEncrypt Hosts"
description: "Write your hosts for SSL certificates separated by comma. Ex: example.com,www.example.com"
default: ""
- variable: "rap_host"
type: string
required: false
label: "RAP Host"
description: "Write your hosts separated by comma. Ex: example.com,www.example.com"
default: ""
web:
scale: 1
mysql:
scale: 1
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment