use intersection of changes per commit and merge ref
This commit is contained in:
parent
b6a7613350
commit
a6400fb08a
|
@ -80,16 +80,11 @@ jobs:
|
||||||
run: git cat-file -e $SHA && echo "BASE_SHA=$SHA" >> $GITHUB_ENV || true
|
run: git cat-file -e $SHA && echo "BASE_SHA=$SHA" >> $GITHUB_ENV || true
|
||||||
env:
|
env:
|
||||||
SHA: ${{ github.event.before }}
|
SHA: ${{ github.event.before }}
|
||||||
- name: Get changes
|
|
||||||
id: get-changes
|
|
||||||
if: env.BASE_SHA && env.HEAD_SHA
|
|
||||||
run: echo $(git diff $BASE_SHA...$HEAD_SHA --name-only) | echo "changed_files=[\"$(sed "s/ /\", \"/g")\"]" >> $GITHUB_OUTPUT
|
|
||||||
- name: Set matrix
|
- name: Set matrix
|
||||||
id: set-matrix
|
id: set-matrix
|
||||||
run: python3 -u ci_set_matrix.py
|
run: python3 -u ci_set_matrix.py
|
||||||
working-directory: tools
|
working-directory: tools
|
||||||
env:
|
env:
|
||||||
CHANGED_FILES: ${{ steps.get-changes.outputs.changed_files }}
|
|
||||||
LAST_FAILED_JOBS: ${{ steps.get-last-commit-with-checks.outputs.check_runs }}
|
LAST_FAILED_JOBS: ${{ steps.get-last-commit-with-checks.outputs.check_runs }}
|
||||||
|
|
||||||
tests:
|
tests:
|
||||||
|
|
|
@ -68,25 +68,43 @@ PATTERN_WINDOWS = [
|
||||||
"tools/",
|
"tools/",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def git_diff(pattern: str):
|
||||||
|
return (
|
||||||
|
subprocess.run(
|
||||||
|
f"git diff {pattern} --name-only",
|
||||||
|
capture_output=True,
|
||||||
|
shell=True,
|
||||||
|
)
|
||||||
|
.stdout.decode("utf-8")
|
||||||
|
.split("\n")[:-1]
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
if len(sys.argv) > 1:
|
if len(sys.argv) > 1:
|
||||||
print("Using files list on commandline")
|
print("Using files list on commandline")
|
||||||
changed_files = sys.argv[1:]
|
changed_files = sys.argv[1:]
|
||||||
last_failed_jobs = {}
|
elif os.environ.get("BASE_SHA") and os.environ.get("HEAD_SHA"):
|
||||||
|
print("Using files list by computing diff")
|
||||||
|
changed_files = git_diff("$BASE_SHA...$HEAD_SHA")
|
||||||
|
if os.environ.get("GITHUB_EVENT_NAME") == "pull_request":
|
||||||
|
changed_files = list(set(changed_files).intersection(git_diff("$HEAD_SHA~...$HEAD_SHA")))
|
||||||
else:
|
else:
|
||||||
c = os.environ["CHANGED_FILES"]
|
|
||||||
if c == "":
|
|
||||||
print("CHANGED_FILES is in environment, but value is empty")
|
|
||||||
changed_files = []
|
|
||||||
else:
|
|
||||||
print("Using files list in CHANGED_FILES")
|
print("Using files list in CHANGED_FILES")
|
||||||
changed_files = json.loads(c.replace("\\", ""))
|
changed_files = json.loads(os.environ.get("CHANGED_FILES") or "[]")
|
||||||
|
|
||||||
j = os.environ["LAST_FAILED_JOBS"]
|
print("Using jobs list in LAST_FAILED_JOBS")
|
||||||
if j == "":
|
last_failed_jobs = json.loads(os.environ.get("LAST_FAILED_JOBS") or "{}")
|
||||||
print("LAST_FAILED_JOBS is in environment, but value is empty")
|
|
||||||
last_failed_jobs = {}
|
|
||||||
else:
|
def print_enclosed(title, content):
|
||||||
last_failed_jobs = json.loads(j)
|
print("::group::" + title)
|
||||||
|
print(content)
|
||||||
|
print("::endgroup::")
|
||||||
|
|
||||||
|
|
||||||
|
print_enclosed("LOG: changed_files", changed_files)
|
||||||
|
print_enclosed("LOG: last_failed_jobs", last_failed_jobs)
|
||||||
|
|
||||||
|
|
||||||
def set_output(name: str, value):
|
def set_output(name: str, value):
|
||||||
|
|
Loading…
Reference in New Issue