Skip to content

Commit 1549a79

Browse files
authored
Write rerunner trigger events to the database (#31931)
### Details: Create a database record every time the rerunner script triggers a workflow rerun.
1 parent 50ac339 commit 1549a79

File tree

2 files changed

+51
-17
lines changed

2 files changed

+51
-17
lines changed

.github/scripts/workflow_rerun/rerunner.py

Lines changed: 44 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44
import os
55
import sys
66
import tempfile
7+
import psycopg2
78
from pathlib import Path
9+
from psycopg2 import sql
810

911
import requests
1012
from github import Github, Auth
@@ -13,6 +15,45 @@
1315
from workflow_rerun.log_analyzer import LogAnalyzer
1416
from workflow_rerun.log_collector import collect_logs_for_run
1517

18+
def record_rerun_to_db(repository_full_name: str, run_id: int, ticket_number: int):
19+
"""Record the rerun event to the PostgreSQL database."""
20+
21+
db_username = os.environ.get('PGUSER')
22+
db_password = os.environ.get('PGPASSWORD')
23+
db_host = os.environ.get('PGHOST')
24+
db_database = os.environ.get('PGDATABASE')
25+
db_port = os.environ.get('PGPORT')
26+
conn = psycopg2.connect(host=db_host,
27+
port=db_port,
28+
user=db_username,
29+
password=db_password,
30+
database=db_database)
31+
32+
cursor = None
33+
try:
34+
cursor = conn.cursor()
35+
36+
insert_query = sql.SQL("""
37+
INSERT INTO rerunner_stats (repository_full_name, run_id, ticket_number, rerun_at)
38+
VALUES (%s, %s, %s, NOW() AT TIME ZONE 'UTC')
39+
""")
40+
41+
cursor.execute(insert_query, (repository_full_name, run_id, ticket_number))
42+
conn.commit()
43+
44+
LOGGER.info(f'Successfully recorded rerun to database: repo={repository_full_name}, '
45+
f'run_id={run_id}, ticket={ticket_number}')
46+
47+
except psycopg2.Error as e:
48+
LOGGER.error(f'Failed to record rerun to database: {e}')
49+
conn.rollback()
50+
raise
51+
finally:
52+
if cursor:
53+
cursor.close()
54+
conn.close()
55+
56+
1657

1758
if __name__ == '__main__':
1859

@@ -60,18 +101,14 @@
60101
response = requests.post(url=f'https://api.github.com/repos/{repository_name}/actions/runs/{run_id}/rerun-failed-jobs',
61102
headers={'Authorization': f'Bearer {GITHUB_TOKEN}'})
62103
status = response.status_code == 201
63-
104+
64105
if status:
65106
LOGGER.info(f'RUN RETRIGGERED SUCCESSFULLY: {run.html_url}')
107+
record_rerun_to_db(repository_name, run_id,
108+
log_analyzer.found_error_ticket)
66109
else:
67110
LOGGER.info(f'RUN WAS NOT RETRIGGERED, SEE ABOVE')
68111

69-
# Needed to run a step after for statistics
70-
with open(file=os.environ['GITHUB_ENV'],
71-
mode='a') as fh:
72-
fh.write('PIPELINE_RETRIGGERED=true\n')
73-
fh.write(f'FOUND_ERROR_TICKET={log_analyzer.found_error_ticket}\n')
74-
75112
# "status" is True (which is 1) if everything is ok, False (which is 0) otherwise
76113
sys.exit(not status)
77114
else:

.github/workflows/workflow_rerunner.yml

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ jobs:
5252
sparse-checkout: '.github/scripts/workflow_rerun'
5353

5454
- name: Install deps
55-
run: pip3 install PyGithub==2.2.0 requests==2.31.0
55+
run: pip3 install PyGithub==2.2.0 requests==2.31.0 psycopg2-binary==2.9.9
5656

5757
- name: Dump GitHub context
5858
env:
@@ -62,20 +62,17 @@ jobs:
6262
- name: Rerun
6363
env:
6464
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
65+
PGHOST: ${{ secrets.METRICS_DATABASE_HOST }}
66+
PGUSER: ${{ secrets.METRICS_DATABASE_USERNAME }}
67+
PGPASSWORD: ${{ secrets.METRICS_DATABASE_PASSWORD }}
68+
PGDATABASE: ${{ secrets.METRICS_DATABASE_NAME }}
69+
PGPORT: 5432
6570
run: |
6671
export PYTHONPATH=${{ github.workspace }}/.github/scripts/workflow_rerun:${{ github.workspace }}/.github/scripts:$PYTHONPATH
6772
python3 ${{ github.workspace }}/.github/scripts/workflow_rerun/rerunner.py \
6873
--run-id ${{ github.event.workflow_run.id }} \
6974
--repository-name ${GITHUB_REPOSITORY}
7075
71-
- name: Rerun Retriggered (Ticket ${{ env.FOUND_ERROR_TICKET }})
72-
if: ${{ env.PIPELINE_RETRIGGERED == 'true' }}
73-
run: echo "Rerun retriggered for ${{ github.event.workflow_run.html_url }} with ticket ${{ env.FOUND_ERROR_TICKET }}"
74-
75-
- name: ${{ github.event.workflow_run.html_url }}
76-
if: ${{ env.PIPELINE_RETRIGGERED == 'true' }}
77-
run: echo "Step for statistics gathering"
78-
7976
rerunner_tests:
8077
name: Rerunner Tests
8178
if: ${{ github.event_name == 'pull_request' && github.repository_owner == 'openvinotoolkit' }}
@@ -89,7 +86,7 @@ jobs:
8986
lfs: true
9087

9188
- name: Install deps
92-
run: pip3 install PyGithub==2.2.0 requests==2.31.0
89+
run: pip3 install PyGithub==2.2.0 requests==2.31.0 psycopg2-binary==2.9.9
9390

9491
- name: Test Rerunner (Tests)
9592
env:

0 commit comments

Comments
 (0)