Skip to content

Commit 20b1f07

Browse files
authored
Create a new command to trigger missing revisions to be run in a separate cron hook that runs more frequently (#827)
Fixes #718
1 parent 939f3a6 commit 20b1f07

File tree

5 files changed

+60
-7
lines changed

5 files changed

+60
-7
lines changed

bot/code_coverage_bot/hooks/cron.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77

88
from code_coverage_bot import commit_coverage
99
from code_coverage_bot import config
10-
from code_coverage_bot import trigger_missing
1110
from code_coverage_bot import uploader
1211
from code_coverage_bot.cli import setup_cli
1312
from code_coverage_bot.hooks.base import Hook
@@ -34,8 +33,6 @@ def __init__(self, *args, **kwargs):
3433
super().__init__(config.MOZILLA_CENTRAL_REPOSITORY, revision, *args, **kwargs)
3534

3635
def run(self) -> None:
37-
trigger_missing.trigger_missing(config.MOZILLA_CENTRAL_REPOSITORY)
38-
3936
self.retrieve_source_and_artifacts()
4037

4138
commit_coverage.generate(self.repository, self.repo_dir)
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
# -*- coding: utf-8 -*-
2+
# This Source Code Form is subject to the terms of the Mozilla Public
3+
# License, v. 2.0. If a copy of the MPL was not distributed with this
4+
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
5+
6+
import structlog
7+
8+
from code_coverage_bot import config
9+
from code_coverage_bot import trigger_missing
10+
from code_coverage_bot import uploader
11+
from code_coverage_bot.cli import setup_cli
12+
from code_coverage_bot.hooks.base import Hook
13+
from code_coverage_bot.secrets import secrets
14+
15+
logger = structlog.get_logger(__name__)
16+
17+
18+
class CronTriggerHook(Hook):
19+
"""
20+
This function is executed when the bot is triggered via cron.
21+
"""
22+
23+
def __init__(self, *args, **kwargs):
24+
# Retrieve latest ingested revision
25+
try:
26+
revision = uploader.gcp_latest("mozilla-central")[0]["revision"]
27+
except Exception as e:
28+
logger.warn("Failed to retrieve the latest reports ingested: {}".format(e))
29+
raise
30+
31+
super().__init__(config.MOZILLA_CENTRAL_REPOSITORY, revision, *args, **kwargs)
32+
33+
def run(self) -> None:
34+
trigger_missing.trigger_missing(config.MOZILLA_CENTRAL_REPOSITORY)
35+
36+
# Index the task in the TaskCluster index at the given revision and as "latest".
37+
# Given that all tasks have the same rank, the latest task that finishes will
38+
# overwrite the "latest" entry.
39+
self.index_task(
40+
[
41+
"project.relman.code-coverage.{}.crontrigger.{}".format(
42+
secrets[secrets.APP_CHANNEL], self.revision
43+
),
44+
"project.relman.code-coverage.{}.crontrigger.latest".format(
45+
secrets[secrets.APP_CHANNEL]
46+
),
47+
]
48+
)
49+
50+
51+
def main() -> None:
52+
logger.info("Starting code coverage bot for crontrigger")
53+
args = setup_cli(ask_revision=False, ask_repository=False)
54+
hook = CronTriggerHook(args.task_name_filter, args.cache_root, args.working_dir)
55+
hook.run()

bot/code_coverage_bot/trigger_missing.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ def trigger_task(task_group_id: str, revision: str) -> None:
4848
def trigger_missing(server_address: str, out_dir: str = ".") -> None:
4949
triggered_revisions_path = os.path.join(out_dir, "triggered_revisions.zst")
5050

51-
url = f"https://firefox-ci-tc.services.mozilla.com/api/index/v1/task/project.relman.code-coverage.{secrets[secrets.APP_CHANNEL]}.cron.latest/artifacts/public/triggered_revisions.zst"
51+
url = f"https://firefox-ci-tc.services.mozilla.com/api/index/v1/task/project.relman.code-coverage.{secrets[secrets.APP_CHANNEL]}.crontrigger.latest/artifacts/public/triggered_revisions.zst"
5252
r = requests.head(url, allow_redirects=True)
5353
if r.status_code != 404:
5454
utils.download_file(url, triggered_revisions_path)

bot/setup.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ def read_requirements(file_):
4747
license="MPL2",
4848
entry_points={
4949
"console_scripts": [
50+
"code-coverage-crontrigger = code_coverage_bot.hooks.crontrigger:main",
5051
"code-coverage-cron = code_coverage_bot.hooks.cron:main",
5152
"code-coverage-repo = code_coverage_bot.hooks.repo:main",
5253
]

bot/tests/test_trigger_missing.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ def test_trigger_from_scratch(
2222

2323
responses.add(
2424
responses.HEAD,
25-
"https://firefox-ci-tc.services.mozilla.com/api/index/v1/task/project.relman.code-coverage.production.cron.latest/artifacts/public/triggered_revisions.zst",
25+
"https://firefox-ci-tc.services.mozilla.com/api/index/v1/task/project.relman.code-coverage.production.crontrigger.latest/artifacts/public/triggered_revisions.zst",
2626
status=404,
2727
)
2828

@@ -233,13 +233,13 @@ def test_trigger_from_preexisting(
233233

234234
responses.add(
235235
responses.HEAD,
236-
"https://firefox-ci-tc.services.mozilla.com/api/index/v1/task/project.relman.code-coverage.production.cron.latest/artifacts/public/triggered_revisions.zst",
236+
"https://firefox-ci-tc.services.mozilla.com/api/index/v1/task/project.relman.code-coverage.production.crontrigger.latest/artifacts/public/triggered_revisions.zst",
237237
status=200,
238238
)
239239

240240
responses.add(
241241
responses.GET,
242-
"https://firefox-ci-tc.services.mozilla.com/api/index/v1/task/project.relman.code-coverage.production.cron.latest/artifacts/public/triggered_revisions.zst",
242+
"https://firefox-ci-tc.services.mozilla.com/api/index/v1/task/project.relman.code-coverage.production.crontrigger.latest/artifacts/public/triggered_revisions.zst",
243243
status=200,
244244
body=zstandard.ZstdCompressor().compress(
245245
f"{revision2}\n{revision3}".encode("ascii")

0 commit comments

Comments
 (0)