Skip to content

Commit 585519a

Browse files
author
Bastien Abadie
committed
bot: Update covdir_gen script
1 parent 62161a4 commit 585519a

File tree

1 file changed

+26
-78
lines changed

1 file changed

+26
-78
lines changed

bot/tools/covdir_gen.py

Lines changed: 26 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -1,85 +1,31 @@
11
# -*- coding: utf-8 -*-
22
import argparse
3+
import json
34
import os
45
from datetime import datetime
56

6-
import requests
7-
from libmozdata.vcs_map import download_mapfile
8-
from libmozdata.vcs_map import git_to_mercurial
97
from taskcluster.utils import slugId
108

119
from code_coverage_bot.secrets import secrets
12-
from code_coverage_tools.taskcluter import TaskclusterConfig
10+
from code_coverage_bot.taskcluster import taskcluster_config
1311

14-
CODECOV_URL = "https://codecov.io/api/gh/marco-c/gecko-dev/commit"
1512
MC_REPO = "https://hg.mozilla.org/mozilla-central"
16-
HOOK_GROUP = "project-releng"
17-
HOOK_ID = "services-{app_channel}-codecoverage/bot-generation"
18-
19-
taskcluster = TaskclusterConfig()
20-
taskcluster.auth(
21-
os.environ["TASKCLUSTER_CLIENT_ID"], os.environ["TASKCLUSTER_ACCESS_TOKEN"]
22-
)
23-
secrets.load(os.environ["TASKCLUSTER_SECRET"])
24-
25-
26-
def list_commits(codecov_token, maximum=None, unique=None, skip_commits=[]):
27-
"""
28-
List all the commits ingested on codecov
29-
"""
30-
assert unique in (None, "week", "day")
31-
params = {"access_token": codecov_token, "page": 1}
32-
nb = 0
33-
dates = set()
34-
while True:
35-
resp = requests.get(CODECOV_URL, params=params)
36-
resp.raise_for_status()
37-
data = resp.json()
38-
39-
if not data["commits"]:
40-
return
41-
42-
for commit in data["commits"]:
43-
44-
# Skip commit if that day or week has already been processed earlier
45-
day = datetime.strptime(commit["timestamp"], "%Y-%m-%d %H:%M:%S").date()
46-
week = day.isocalendar()[:2]
47-
if unique == "day" and day in dates:
48-
continue
49-
if unique == "week" and week in dates:
50-
continue
51-
dates.add(day)
52-
dates.add(week)
53-
54-
# Convert git to mercurial revision
55-
commit["mercurial"] = git_to_mercurial(commit["commitid"])
56-
if commit["mercurial"] in skip_commits:
57-
print(
58-
"Skipping already processed commit {}".format(commit["mercurial"])
59-
)
60-
continue
61-
62-
yield commit
63-
nb += 1
64-
65-
if maximum is not None and nb >= maximum:
66-
return
67-
68-
params["page"] += 1
13+
HOOK_GROUP = "project-relman"
14+
HOOK_ID = "code-coverage-{app_channel}"
6915

7016

7117
def trigger_task(task_group_id, commit):
7218
"""
7319
Trigger a code coverage task to build covdir at a specified revision
7420
"""
75-
assert "mercurial" in commit
76-
name = "covdir {} - {} - {}".format(
77-
secrets[secrets.APP_CHANNEL], commit["timestamp"], commit["mercurial"]
21+
date = datetime.fromtimestamp(commit["date"]).strftime("%Y-%m-%d")
22+
name = "covdir with suites on {} - {} - {}".format(
23+
secrets[secrets.APP_CHANNEL], date, commit["changeset"]
7824
)
79-
hooks = taskcluster.get_service("hooks")
25+
hooks = taskcluster_config.get_service("hooks")
8026
payload = {
8127
"REPOSITORY": MC_REPO,
82-
"REVISION": commit["mercurial"],
28+
"REVISION": commit["changeset"],
8329
"taskGroupId": task_group_id,
8430
"taskName": name,
8531
}
@@ -91,11 +37,6 @@ def main():
9137
# CLI args
9238
parser = argparse.ArgumentParser()
9339
parser.add_argument("--nb-tasks", type=int, default=5, help="NB of tasks to create")
94-
parser.add_argument(
95-
"--unique",
96-
choices=("day", "week"),
97-
help="Trigger only one task per day or week",
98-
)
9940
parser.add_argument(
10041
"--group", type=str, default=slugId(), help="Task group to create/update"
10142
)
@@ -106,20 +47,17 @@ def main():
10647
help="List actions without triggering any new task",
10748
)
10849
parser.add_argument(
109-
"--codecov-token",
110-
type=str,
111-
default=os.environ.get("CODECOV_TOKEN"),
112-
help="Codecov access token",
50+
"history", type=open, help="JSON payload of /v2/history endpoint"
11351
)
11452
args = parser.parse_args()
11553

116-
# Download revision mapper database
117-
print("Downloading revision database...")
118-
download_mapfile()
54+
# Setup Taskcluster
55+
taskcluster_config.auth()
56+
secrets.load(os.environ["TASKCLUSTER_SECRET"])
11957

12058
# List existing tags & commits
12159
print("Group", args.group)
122-
queue = taskcluster.get_service("queue")
60+
queue = taskcluster_config.get_service("queue")
12361
try:
12462
group = queue.listTaskGroup(args.group)
12563
commits = [
@@ -136,14 +74,24 @@ def main():
13674
print("Invalid task group : {}".format(e))
13775
commits = []
13876

77+
# Read the history file
78+
history = json.load(args.history)
79+
13980
# Trigger a task for each commit
140-
for commit in list_commits(args.codecov_token, args.nb_tasks, args.unique, commits):
141-
print("Triggering commit {mercurial} from {timestamp}".format(**commit))
81+
nb = 0
82+
for commit in history:
83+
if nb >= args.nb_tasks:
84+
break
85+
if commit in commits:
86+
print("Skipping {commit {changeset} from {date}".format(**commit))
87+
continue
88+
print("Triggering commit {changeset} from {date}".format(**commit))
14289
if args.dry_run:
14390
print(">>> No trigger on dry run")
14491
else:
14592
out = trigger_task(args.group, commit)
14693
print(">>>", out["status"]["taskId"])
94+
nb += 1
14795

14896

14997
if __name__ == "__main__":

0 commit comments

Comments
 (0)