Skip to content

Create a new command to trigger missing revisions to be run in a separate cron hook that runs more frequently #827

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Mar 12, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 0 additions & 3 deletions bot/code_coverage_bot/hooks/cron.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@

from code_coverage_bot import commit_coverage
from code_coverage_bot import config
from code_coverage_bot import trigger_missing
from code_coverage_bot import uploader
from code_coverage_bot.cli import setup_cli
from code_coverage_bot.hooks.base import Hook
Expand All @@ -34,8 +33,6 @@ def __init__(self, *args, **kwargs):
super().__init__(config.MOZILLA_CENTRAL_REPOSITORY, revision, *args, **kwargs)

def run(self) -> None:
trigger_missing.trigger_missing(config.MOZILLA_CENTRAL_REPOSITORY)

self.retrieve_source_and_artifacts()

commit_coverage.generate(self.repository, self.repo_dir)
Expand Down
55 changes: 55 additions & 0 deletions bot/code_coverage_bot/hooks/crontrigger.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
# -*- coding: utf-8 -*-
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.

import structlog

from code_coverage_bot import config
from code_coverage_bot import trigger_missing
from code_coverage_bot import uploader
from code_coverage_bot.cli import setup_cli
from code_coverage_bot.hooks.base import Hook
from code_coverage_bot.secrets import secrets

logger = structlog.get_logger(__name__)


class CronTriggerHook(Hook):
"""
This function is executed when the bot is triggered via cron.
"""

def __init__(self, *args, **kwargs):
# Retrieve latest ingested revision
try:
revision = uploader.gcp_latest("mozilla-central")[0]["revision"]
except Exception as e:
logger.warn("Failed to retrieve the latest reports ingested: {}".format(e))
raise

super().__init__(config.MOZILLA_CENTRAL_REPOSITORY, revision, *args, **kwargs)

def run(self) -> None:
trigger_missing.trigger_missing(config.MOZILLA_CENTRAL_REPOSITORY)

# Index the task in the TaskCluster index at the given revision and as "latest".
# Given that all tasks have the same rank, the latest task that finishes will
# overwrite the "latest" entry.
self.index_task(
[
"project.relman.code-coverage.{}.crontrigger.{}".format(
secrets[secrets.APP_CHANNEL], self.revision
),
"project.relman.code-coverage.{}.crontrigger.latest".format(
secrets[secrets.APP_CHANNEL]
),
]
)


def main() -> None:
logger.info("Starting code coverage bot for crontrigger")
args = setup_cli(ask_revision=False, ask_repository=False)
hook = CronTriggerHook(args.task_name_filter, args.cache_root, args.working_dir)
hook.run()
2 changes: 1 addition & 1 deletion bot/code_coverage_bot/trigger_missing.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ def trigger_task(task_group_id: str, revision: str) -> None:
def trigger_missing(server_address: str, out_dir: str = ".") -> None:
triggered_revisions_path = os.path.join(out_dir, "triggered_revisions.zst")

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"
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"
r = requests.head(url, allow_redirects=True)
if r.status_code != 404:
utils.download_file(url, triggered_revisions_path)
Expand Down
1 change: 1 addition & 0 deletions bot/setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ def read_requirements(file_):
license="MPL2",
entry_points={
"console_scripts": [
"code-coverage-crontrigger = code_coverage_bot.hooks.crontrigger:main",
"code-coverage-cron = code_coverage_bot.hooks.cron:main",
"code-coverage-repo = code_coverage_bot.hooks.repo:main",
]
Expand Down
6 changes: 3 additions & 3 deletions bot/tests/test_trigger_missing.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ def test_trigger_from_scratch(

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

Expand Down Expand Up @@ -233,13 +233,13 @@ def test_trigger_from_preexisting(

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

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