Skip to content
This repository has been archived by the owner on Apr 26, 2024. It is now read-only.

Add config linting script that checks for bool casing #6203

Merged
merged 12 commits into from
Oct 23, 2019
1 change: 1 addition & 0 deletions changelog.d/6203.misc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Enforce that all boolean configuration values are lowercase in CI.
30 changes: 15 additions & 15 deletions docs/sample_config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ pid_file: DATADIR/homeserver.pid
# Whether room invites to users on this server should be blocked
# (except those sent by local server admins). The default is False.
#
#block_non_admin_invites: True
#block_non_admin_invites: true

# Room searching
#
Expand Down Expand Up @@ -239,7 +239,7 @@ listeners:

# Global blocking
#
#hs_disabled: False
#hs_disabled: false
#hs_disabled_message: 'Human readable reason for why the HS is blocked'
#hs_disabled_limit_type: 'error code(str), to help clients decode reason'

Expand All @@ -261,15 +261,15 @@ listeners:
# sign up in a short space of time never to return after their initial
# session.
#
#limit_usage_by_mau: False
#limit_usage_by_mau: false
#max_mau_value: 50
#mau_trial_days: 2

# If enabled, the metrics for the number of monthly active users will
# be populated, however no one will be limited. If limit_usage_by_mau
# is true, this is implied to be true.
#
#mau_stats_only: False
#mau_stats_only: false

# Sometimes the server admin will want to ensure certain accounts are
# never blocked by mau checking. These accounts are specified here.
Expand All @@ -294,7 +294,7 @@ listeners:
#
# Uncomment the below lines to enable:
#limit_remote_rooms:
# enabled: True
# enabled: true
# complexity: 1.0
# complexity_error: "This room is too complex."

Expand Down Expand Up @@ -411,7 +411,7 @@ acme:
# ACME support is disabled by default. Set this to `true` and uncomment
# tls_certificate_path and tls_private_key_path above to enable it.
#
enabled: False
enabled: false

# Endpoint to use to request certificates. If you only want to test,
# use Let's Encrypt's staging url:
Expand Down Expand Up @@ -786,7 +786,7 @@ uploads_path: "DATADIR/uploads"
# connect to arbitrary endpoints without having first signed up for a
# valid account (e.g. by passing a CAPTCHA).
#
#turn_allow_guests: True
#turn_allow_guests: true


## Registration ##
Expand Down Expand Up @@ -829,7 +829,7 @@ uploads_path: "DATADIR/uploads"
# where d is equal to 10% of the validity period.
#
#account_validity:
# enabled: True
# enabled: true
# period: 6w
# renew_at: 1w
# renew_email_subject: "Renew your %(app)s account"
Expand Down Expand Up @@ -971,7 +971,7 @@ account_threepid_delegates:

# Enable collection and rendering of performance metrics
#
#enable_metrics: False
#enable_metrics: false

# Enable sentry integration
# NOTE: While attempts are made to ensure that the logs don't contain
Expand Down Expand Up @@ -1023,7 +1023,7 @@ metrics_flags:
# Uncomment to enable tracking of application service IP addresses. Implicitly
# enables MAU tracking for application service users.
#
#track_appservice_user_ips: True
#track_appservice_user_ips: true


# a secret which is used to sign access tokens. If none is specified,
Expand Down Expand Up @@ -1149,7 +1149,7 @@ saml2_config:
# - url: https://our_idp/metadata.xml
#
# # By default, the user has to go to our login page first. If you'd like
# # to allow IdP-initiated login, set 'allow_unsolicited: True' in a
# # to allow IdP-initiated login, set 'allow_unsolicited: true' in a
# # 'service.sp' section:
# #
# #service:
Expand Down Expand Up @@ -1262,13 +1262,13 @@ password_config:
# smtp_port: 25 # SSL: 465, STARTTLS: 587
# smtp_user: "exampleusername"
# smtp_pass: "examplepassword"
# require_transport_security: False
# require_transport_security: false
# notif_from: "Your Friendly %(app)s Home Server <[email protected]>"
# app_name: Matrix
#
# # Enable email notifications by default
# #
# notif_for_new_users: True
# notif_for_new_users: true
#
# # Defining a custom URL for Riot is only needed if email notifications
# # should contain links to a self-hosted installation of Riot; when set
Expand Down Expand Up @@ -1446,11 +1446,11 @@ password_config:
# body: >-
# To continue using this homeserver you must review and agree to the
# terms and conditions at %(consent_uri)s
# send_server_notice_to_guests: True
# send_server_notice_to_guests: true
# block_events_error: >-
# To continue using this homeserver you must review and agree to the
# terms and conditions at %(consent_uri)s
# require_at_registration: False
# require_at_registration: false
# policy_name: Privacy Policy
#

Expand Down
9 changes: 9 additions & 0 deletions scripts-dev/config-lint.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#!/bin/bash
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it might be simpler just to grep for the incorrect formats, rather than try to correct them?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I considered this at first, but I wanted to be able to add this to scripts-dev/lint.sh which could get run in a pre-commit hook for instance.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not quite sure that follows... lint.sh doesn't correct for incorrect imports or pep8 failures, it just complains if they are wrong.

There might be value in having a script to correct the problems, but given how often it's likely to be a problem versus the added complexity of this script, I don't think it's worthwhile?

# Find linting errors in Synapse's default config file.
# Exits with 0 if there are no problems, or another code otherwise.

# Fix non-lowercase true/false values
sed -i -E "s/: +True/: true/g; s/: +False/: false/g;" docs/sample_config.yaml

# Check if anything changed
git diff --exit-code docs/sample_config.yaml
1 change: 1 addition & 0 deletions scripts-dev/lint.sh
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,4 @@ set -e
isort -y -rc synapse tests scripts-dev scripts
flake8 synapse tests
python3 -m black synapse tests scripts-dev scripts
./scripts-dev/config-lint.sh
2 changes: 1 addition & 1 deletion synapse/config/appservice.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ def generate_config_section(cls, **kwargs):
# Uncomment to enable tracking of application service IP addresses. Implicitly
# enables MAU tracking for application service users.
#
#track_appservice_user_ips: True
#track_appservice_user_ips: true
"""


Expand Down
4 changes: 2 additions & 2 deletions synapse/config/consent_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,11 +62,11 @@
# body: >-
# To continue using this homeserver you must review and agree to the
# terms and conditions at %(consent_uri)s
# send_server_notice_to_guests: True
# send_server_notice_to_guests: true
# block_events_error: >-
# To continue using this homeserver you must review and agree to the
# terms and conditions at %(consent_uri)s
# require_at_registration: False
# require_at_registration: false
# policy_name: Privacy Policy
#
"""
Expand Down
4 changes: 2 additions & 2 deletions synapse/config/emailconfig.py
Original file line number Diff line number Diff line change
Expand Up @@ -302,13 +302,13 @@ def generate_config_section(self, config_dir_path, server_name, **kwargs):
# smtp_port: 25 # SSL: 465, STARTTLS: 587
# smtp_user: "exampleusername"
# smtp_pass: "examplepassword"
# require_transport_security: False
# require_transport_security: false
# notif_from: "Your Friendly %(app)s Home Server <[email protected]>"
# app_name: Matrix
#
# # Enable email notifications by default
# #
# notif_for_new_users: True
# notif_for_new_users: true
#
# # Defining a custom URL for Riot is only needed if email notifications
# # should contain links to a self-hosted installation of Riot; when set
Expand Down
2 changes: 1 addition & 1 deletion synapse/config/metrics.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ def generate_config_section(self, report_stats=None, **kwargs):

# Enable collection and rendering of performance metrics
#
#enable_metrics: False
#enable_metrics: false

# Enable sentry integration
# NOTE: While attempts are made to ensure that the logs don't contain
Expand Down
2 changes: 1 addition & 1 deletion synapse/config/registration.py
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,7 @@ def generate_config_section(self, generate_secrets=False, **kwargs):
# where d is equal to 10%% of the validity period.
#
#account_validity:
# enabled: True
# enabled: true
# period: 6w
# renew_at: 1w
# renew_email_subject: "Renew your %%(app)s account"
Expand Down
2 changes: 1 addition & 1 deletion synapse/config/saml2_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -174,7 +174,7 @@ def generate_config_section(self, config_dir_path, server_name, **kwargs):
# - url: https://our_idp/metadata.xml
#
# # By default, the user has to go to our login page first. If you'd like
# # to allow IdP-initiated login, set 'allow_unsolicited: True' in a
# # to allow IdP-initiated login, set 'allow_unsolicited: true' in a
# # 'service.sp' section:
# #
# #service:
Expand Down
10 changes: 5 additions & 5 deletions synapse/config/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -526,7 +526,7 @@ def generate_config_section(
# Whether room invites to users on this server should be blocked
# (except those sent by local server admins). The default is False.
#
#block_non_admin_invites: True
#block_non_admin_invites: true

# Room searching
#
Expand Down Expand Up @@ -667,7 +667,7 @@ def generate_config_section(

# Global blocking
#
#hs_disabled: False
#hs_disabled: false
#hs_disabled_message: 'Human readable reason for why the HS is blocked'
#hs_disabled_limit_type: 'error code(str), to help clients decode reason'

Expand All @@ -689,15 +689,15 @@ def generate_config_section(
# sign up in a short space of time never to return after their initial
# session.
#
#limit_usage_by_mau: False
#limit_usage_by_mau: false
#max_mau_value: 50
#mau_trial_days: 2

# If enabled, the metrics for the number of monthly active users will
# be populated, however no one will be limited. If limit_usage_by_mau
# is true, this is implied to be true.
#
#mau_stats_only: False
#mau_stats_only: false

# Sometimes the server admin will want to ensure certain accounts are
# never blocked by mau checking. These accounts are specified here.
Expand All @@ -722,7 +722,7 @@ def generate_config_section(
#
# Uncomment the below lines to enable:
#limit_remote_rooms:
# enabled: True
# enabled: true
# complexity: 1.0
# complexity_error: "This room is too complex."

Expand Down
9 changes: 8 additions & 1 deletion synapse/config/tls.py
Original file line number Diff line number Diff line change
Expand Up @@ -286,6 +286,9 @@ def generate_config_section(
"http://localhost:8009/.well-known/acme-challenge"
)

# flake8 doesn't recognise that variables are used in the below string
_ = tls_enabled, proxypassline, acme_enabled, default_acme_account_file

return (
"""\
## TLS ##
Expand Down Expand Up @@ -448,7 +451,11 @@ def generate_config_section(
#tls_fingerprints: [{"sha256": "<base64_encoded_sha256_fingerprint>"}]

"""
% locals()
# Lowercase the string representation of boolean values
% {
x[0]: str(x[1]).lower() if isinstance(x[1], bool) else x[1]
for x in locals().items()
}
)

def read_tls_certificate(self):
Expand Down
2 changes: 1 addition & 1 deletion synapse/config/voip.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,5 +54,5 @@ def generate_config_section(self, **kwargs):
# connect to arbitrary endpoints without having first signed up for a
# valid account (e.g. by passing a CAPTCHA).
#
#turn_allow_guests: True
#turn_allow_guests: true
"""
1 change: 1 addition & 0 deletions tox.ini
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,7 @@ deps =
commands =
python -m black --check --diff .
/bin/sh -c "flake8 synapse tests scripts scripts-dev scripts/hash_password scripts/register_new_matrix_user scripts/synapse_port_db synctl {env:PEP8SUFFIX:}"
{toxinidir}/scripts-dev/config-lint.sh

[testenv:check_isort]
skip_install = True
Expand Down