Add a CI job to check that schema deltas are in the correct folder. (#13063)
This commit is contained in:
parent
97e9fbe1b2
commit
de334ac183
|
@ -19,6 +19,14 @@ jobs:
|
||||||
- run: scripts-dev/generate_sample_config.sh --check
|
- run: scripts-dev/generate_sample_config.sh --check
|
||||||
- run: scripts-dev/config-lint.sh
|
- run: scripts-dev/config-lint.sh
|
||||||
|
|
||||||
|
check-schema-delta:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- uses: actions/setup-python@v2
|
||||||
|
- run: "pip install 'click==8.1.1' 'GitPython>=3.1.20'"
|
||||||
|
- run: scripts-dev/check_schema_delta.py --force-colors
|
||||||
|
|
||||||
lint:
|
lint:
|
||||||
uses: "matrix-org/backend-meta/.github/workflows/python-poetry-ci.yml@v1"
|
uses: "matrix-org/backend-meta/.github/workflows/python-poetry-ci.yml@v1"
|
||||||
with:
|
with:
|
||||||
|
@ -48,7 +56,7 @@ jobs:
|
||||||
# Dummy step to gate other tests on without repeating the whole list
|
# Dummy step to gate other tests on without repeating the whole list
|
||||||
linting-done:
|
linting-done:
|
||||||
if: ${{ !cancelled() }} # Run this even if prior jobs were skipped
|
if: ${{ !cancelled() }} # Run this even if prior jobs were skipped
|
||||||
needs: [lint, lint-crlf, lint-newsfile, check-sampleconfig]
|
needs: [lint, lint-crlf, lint-newsfile, check-sampleconfig, check-schema-delta]
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- run: "true"
|
- run: "true"
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Add a CI job to check that schema deltas are in the correct folder.
|
|
@ -139,7 +139,7 @@ unicode_backport = ["unicodedata2"]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "click"
|
name = "click"
|
||||||
version = "8.1.0"
|
version = "8.1.1"
|
||||||
description = "Composable command line interface toolkit"
|
description = "Composable command line interface toolkit"
|
||||||
category = "dev"
|
category = "dev"
|
||||||
optional = false
|
optional = false
|
||||||
|
@ -1563,7 +1563,7 @@ url_preview = ["lxml"]
|
||||||
[metadata]
|
[metadata]
|
||||||
lock-version = "1.1"
|
lock-version = "1.1"
|
||||||
python-versions = "^3.7.1"
|
python-versions = "^3.7.1"
|
||||||
content-hash = "c1bb4dabba1e87517e25ca7bf778e8082fbc960a51d83819aec3a154110a374f"
|
content-hash = "37bd4bccfdb5a869635f2135a85bea4a0729af7375a27de153b4fd9a4aebc195"
|
||||||
|
|
||||||
[metadata.files]
|
[metadata.files]
|
||||||
attrs = [
|
attrs = [
|
||||||
|
@ -1684,8 +1684,8 @@ charset-normalizer = [
|
||||||
{file = "charset_normalizer-2.0.12-py3-none-any.whl", hash = "sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df"},
|
{file = "charset_normalizer-2.0.12-py3-none-any.whl", hash = "sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df"},
|
||||||
]
|
]
|
||||||
click = [
|
click = [
|
||||||
{file = "click-8.1.0-py3-none-any.whl", hash = "sha256:19a4baa64da924c5e0cd889aba8e947f280309f1a2ce0947a3e3a7bcb7cc72d6"},
|
{file = "click-8.1.1-py3-none-any.whl", hash = "sha256:5e0d195c2067da3136efb897449ec1e9e6c98282fbf30d7f9e164af9be901a6b"},
|
||||||
{file = "click-8.1.0.tar.gz", hash = "sha256:977c213473c7665d3aa092b41ff12063227751c41d7b17165013e10069cc5cd2"},
|
{file = "click-8.1.1.tar.gz", hash = "sha256:7ab900e38149c9872376e8f9b5986ddcaf68c0f413cf73678a0bca5547e6f976"},
|
||||||
]
|
]
|
||||||
click-default-group = [
|
click-default-group = [
|
||||||
{file = "click-default-group-1.2.2.tar.gz", hash = "sha256:d9560e8e8dfa44b3562fbc9425042a0fd6d21956fcc2db0077f63f34253ab904"},
|
{file = "click-default-group-1.2.2.tar.gz", hash = "sha256:d9560e8e8dfa44b3562fbc9425042a0fd6d21956fcc2db0077f63f34253ab904"},
|
||||||
|
|
|
@ -272,7 +272,7 @@ parameterized = ">=0.7.4"
|
||||||
idna = ">=2.5"
|
idna = ">=2.5"
|
||||||
|
|
||||||
# The following are used by the release script
|
# The following are used by the release script
|
||||||
click = "==8.1.0"
|
click = "==8.1.1"
|
||||||
# GitPython was == 3.1.14; bumped to 3.1.20, the first release with type hints.
|
# GitPython was == 3.1.14; bumped to 3.1.20, the first release with type hints.
|
||||||
GitPython = ">=3.1.20"
|
GitPython = ">=3.1.20"
|
||||||
commonmark = "==0.9.1"
|
commonmark = "==0.9.1"
|
||||||
|
|
|
@ -0,0 +1,111 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
# Check that no schema deltas have been added to the wrong version.
|
||||||
|
|
||||||
|
import re
|
||||||
|
from typing import Any, Dict, List
|
||||||
|
|
||||||
|
import click
|
||||||
|
import git
|
||||||
|
|
||||||
|
SCHEMA_FILE_REGEX = re.compile(r"^synapse/storage/schema/(.*)/delta/(.*)/(.*)$")
|
||||||
|
|
||||||
|
|
||||||
|
@click.command()
|
||||||
|
@click.option(
|
||||||
|
"--force-colors",
|
||||||
|
is_flag=True,
|
||||||
|
flag_value=True,
|
||||||
|
default=None,
|
||||||
|
help="Always output ANSI colours",
|
||||||
|
)
|
||||||
|
def main(force_colors: bool) -> None:
|
||||||
|
click.secho(
|
||||||
|
"+++ Checking schema deltas are in the right folder",
|
||||||
|
fg="green",
|
||||||
|
bold=True,
|
||||||
|
color=force_colors,
|
||||||
|
)
|
||||||
|
|
||||||
|
click.secho("Updating repo...")
|
||||||
|
|
||||||
|
repo = git.Repo()
|
||||||
|
repo.remote().fetch()
|
||||||
|
|
||||||
|
click.secho("Getting current schema version...")
|
||||||
|
|
||||||
|
r = repo.git.show("origin/develop:synapse/storage/schema/__init__.py")
|
||||||
|
|
||||||
|
locals: Dict[str, Any] = {}
|
||||||
|
exec(r, locals)
|
||||||
|
current_schema_version = locals["SCHEMA_VERSION"]
|
||||||
|
|
||||||
|
click.secho(f"Current schema version: {current_schema_version}")
|
||||||
|
|
||||||
|
diffs: List[git.Diff] = repo.remote().refs.develop.commit.diff(None)
|
||||||
|
|
||||||
|
seen_deltas = False
|
||||||
|
bad_files = []
|
||||||
|
for diff in diffs:
|
||||||
|
if not diff.new_file or diff.b_path is None:
|
||||||
|
continue
|
||||||
|
|
||||||
|
match = SCHEMA_FILE_REGEX.match(diff.b_path)
|
||||||
|
if not match:
|
||||||
|
continue
|
||||||
|
|
||||||
|
seen_deltas = True
|
||||||
|
|
||||||
|
_, delta_version, _ = match.groups()
|
||||||
|
|
||||||
|
if delta_version != str(current_schema_version):
|
||||||
|
bad_files.append(diff.b_path)
|
||||||
|
|
||||||
|
if not seen_deltas:
|
||||||
|
click.secho(
|
||||||
|
"No deltas found.",
|
||||||
|
fg="green",
|
||||||
|
bold=True,
|
||||||
|
color=force_colors,
|
||||||
|
)
|
||||||
|
return
|
||||||
|
|
||||||
|
if not bad_files:
|
||||||
|
click.secho(
|
||||||
|
f"All deltas are in the correct folder: {current_schema_version}!",
|
||||||
|
fg="green",
|
||||||
|
bold=True,
|
||||||
|
color=force_colors,
|
||||||
|
)
|
||||||
|
return
|
||||||
|
|
||||||
|
bad_files.sort()
|
||||||
|
|
||||||
|
click.secho(
|
||||||
|
"Found deltas in the wrong folder!",
|
||||||
|
fg="red",
|
||||||
|
bold=True,
|
||||||
|
color=force_colors,
|
||||||
|
)
|
||||||
|
|
||||||
|
for f in bad_files:
|
||||||
|
click.secho(
|
||||||
|
f"\t{f}",
|
||||||
|
fg="red",
|
||||||
|
bold=True,
|
||||||
|
color=force_colors,
|
||||||
|
)
|
||||||
|
|
||||||
|
click.secho()
|
||||||
|
click.secho(
|
||||||
|
f"Please move these files to delta/{current_schema_version}/",
|
||||||
|
fg="red",
|
||||||
|
bold=True,
|
||||||
|
color=force_colors,
|
||||||
|
)
|
||||||
|
|
||||||
|
click.get_current_context().exit(1)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
Loading…
Reference in New Issue