blob: 65e3c031e876db505162f128d2523b782eb9b6d9 [file] [log] [blame]
#!/usr/bin/env python3
"""
Set up environment variables used to generate size report artifacts.
Takes a single argument, a JSON dictionary of the `github` context.
Typically run as:
```
- name: Set up environment for size reports
if: ${{ !env.ACT }}
env:
GH_CONTEXT: ${{ toJson(github) }}
run: gh_sizes_environment.py "${GH_CONTEXT}"
```
Sets the following environment variables:
- `GH_EVENT_PR` For a pull request, the PR number; otherwise 0.
- `GH_EVENT_HASH` SHA of the commit under test.
- `GH_EVENT_PARENT` SHA of the parent commit to which the commit under
test is applied.
- `GH_EVENT_REF` The branch or tag ref that triggered the workflow run.
- `GH_EVENT_TIMESTAMP` For `push` events only, the timestamp of the commit.
"""
import json
import os
import re
import subprocess
import sys
import dateutil.parser
github = json.loads(sys.argv[1])
commit = None
timestamp = None
ref = github['ref']
if github['event_name'] == 'pull_request':
pr = github['event']['number']
commit = github['event']['pull_request']['head']['sha']
# Try to find the actual commit against which the current PR compares
# by scraping the HEAD commit message.
r = subprocess.run(['git', 'show', '--no-patch', '--format=%s', 'HEAD'],
capture_output=True, text=True, check=True)
m = re.fullmatch('Merge [0-9a-f]+ into ([0-9a-f]+)', r.stdout)
if m:
parent = m.group(1)
else:
parent = github['event']['pull_request']['base']['sha']
elif github['event_name'] == 'push':
commit = github['sha']
parent = github['event']['before']
timestamp = dateutil.parser.isoparse(
github['event']['head_commit']['timestamp']).timestamp()
# Try to find the PR being committed by scraping the commit message.
m = re.search(r'\(#(\d+)\)', github['event']['head_commit']['message'])
if m:
pr = m.group(1)
else:
pr = 0
# Environment variables for subsequent workflow steps are set by
# writing to the file named by `$GITHUB_ENV`.
if commit is not None:
env = os.environ.get('GITHUB_ENV')
assert env
with open(env, 'at') as out:
print(f'GH_EVENT_PR={pr}', file=out)
print(f'GH_EVENT_HASH={commit}', file=out)
print(f'GH_EVENT_PARENT={parent}', file=out)
print(f'GH_EVENT_REF={ref}', file=out)
if timestamp:
print(f'GH_EVENT_TIMESTAMP={timestamp}', file=out)