Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
Next Next commit
Support Depends-On
  • Loading branch information
abikouo authored and Qalthos committed Apr 5, 2023
commit c48c1ed5aa3434eea078d2003b4c50058be2a895
53 changes: 53 additions & 0 deletions .github/actions/checkout_repository/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
name: "Checkout Repository"
description: |
checkout repository and override commit based on keyword 'depends-on' from pull request message
inputs:
repository:
description: |
Repository to checkout, repository is defined by organisation and repository name
e.g: ansible-collections/kubernetes.core
required: true
ref:
description: |
The default branch, tag or SHA to checkout.
required: true
destination_directory:
description: |
Path where repositories will be checkout
required: true
pull_request_body:
description: "Pull request body used to override version to checkout"
required: false
default: ${{ github.event.pull_request.body }}
runs:
using: composite
steps:
- name: Set up Python '3.9'
uses: actions/setup-python@v4
with:
python-version: "3.9"

- name: install PyGithub
run: |
pip install -U PyGithub
shell: bash

- id: dependency-resolution
shell: bash
run: |
python ${{ github.action_path }}/resolve_dependency.py
env:
RESOLVE_REF_PR_BODY: ${{ inputs.pull_request_body }}
RESOLVE_REF_REPOSITORY: ${{ inputs.repository }}

- name: display merge commit sha from dependency resolution
run: echo "[checkout ${{ inputs.repository }}] merge commit sha from dependency resolution => '${{ steps.dependency-resolution.outputs.merge_commit_sha }}'"
shell: bash

- name: checkout repository
uses: actions/checkout@v3
with:
repository: ${{ inputs.repository }}
path: ${{ inputs.destination_directory }}
ref: ${{ steps.dependency-resolution.outputs.merge_commit_sha || inputs.ref }}
fetch-depth: "0"
64 changes: 64 additions & 0 deletions .github/actions/checkout_repository/resolve_dependency.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
#!/usr/bin/python

import logging
import os
import re
import sys
from typing import Any

from github import Github

FORMAT = "[%(asctime)s] - %(message)s"
logging.basicConfig(format=FORMAT)
logger = logging.getLogger("resolve_dependency")
logger.setLevel(logging.DEBUG)


def get_pr_merge_commit_sha(repository: str, pr_number: int) -> Any:
access_token = os.environ.get("GITHUB_TOKEN")
gh_obj = Github(access_token)
repo = gh_obj.get_repo(repository)

pr_obj = repo.get_pull(pr_number)
if not pr_obj.mergeable:
# raise an error when the pull request is not mergeable
sys.tracebacklimit = -1
raise ValueError(f"Pull request {pr_number} from {repository} is not mergeable")

return pr_obj.merge_commit_sha


def resolve_ref(pr_body: str, repository: str) -> int:
pr_regx = re.compile(
rf"^Depends-On:[ ]*https://github.com/{repository}/pull/(\d+)\s*$",
re.MULTILINE | re.IGNORECASE,
)
# Search for expression starting with depends-on not case-sensitive
match = pr_regx.findall(pr_body)
return int(match[0]) if match else 0


def main() -> None:
pr_body = os.environ.get("RESOLVE_REF_PR_BODY") or ""
repository = os.environ.get("RESOLVE_REF_REPOSITORY") or ""

if not repository:
return

pr_number = resolve_ref(pr_body, repository)
if not pr_number:
return
logger.info("Override checkout with pr number: %d", pr_number)

# get pull request merge commit sha
merge_commit_sha = get_pr_merge_commit_sha(repository, pr_number)
logger.info(
"merge commit sha for pull request %d => '%s'", pr_number, merge_commit_sha
)
gh_output = str(os.environ.get("GITHUB_OUTPUT"))
with open(gh_output, "a", encoding="utf-8") as file_handler:
file_handler.write(f"merge_commit_sha={merge_commit_sha}\n")


if __name__ == "__main__":
main()
1 change: 1 addition & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -69,3 +69,4 @@ repos:
- id: pylint
additional_dependencies:
- PyYAML
- pygithub