* pr * pr * pr * pr * pr * pr * pr * pr * pr --------- Co-authored-by: ydshieh <ydshieh@users.noreply.github.com>
158 lines
7.3 KiB
YAML
158 lines
7.3 KiB
YAML
name: Get PR commit SHA
|
|
on:
|
|
workflow_call:
|
|
inputs:
|
|
pr_number:
|
|
required: true
|
|
type: string
|
|
outputs:
|
|
PR_HEAD_REPO_FULL_NAME:
|
|
description: "The full name of the repository from which the pull request is created"
|
|
value: ${{ jobs.get-pr-info.outputs.PR_HEAD_REPO_FULL_NAME }}
|
|
PR_BASE_REPO_FULL_NAME:
|
|
description: "The full name of the repository to which the pull request is created"
|
|
value: ${{ jobs.get-pr-info.outputs.PR_BASE_REPO_FULL_NAME }}
|
|
PR_HEAD_REPO_OWNER:
|
|
description: "The owner of the repository from which the pull request is created"
|
|
value: ${{ jobs.get-pr-info.outputs.PR_HEAD_REPO_OWNER }}
|
|
PR_BASE_REPO_OWNER:
|
|
description: "The owner of the repository to which the pull request is created"
|
|
value: ${{ jobs.get-pr-info.outputs.PR_BASE_REPO_OWNER }}
|
|
PR_HEAD_REPO_NAME:
|
|
description: "The name of the repository from which the pull request is created"
|
|
value: ${{ jobs.get-pr-info.outputs.PR_HEAD_REPO_NAME }}
|
|
PR_BASE_REPO_NAME:
|
|
description: "The name of the repository to which the pull request is created"
|
|
value: ${{ jobs.get-pr-info.outputs.PR_BASE_REPO_NAME }}
|
|
PR_HEAD_REF:
|
|
description: "The branch name of the pull request in the head repository"
|
|
value: ${{ jobs.get-pr-info.outputs.PR_HEAD_REF }}
|
|
PR_BASE_REF:
|
|
description: "The branch name in the base repository (to merge into)"
|
|
value: ${{ jobs.get-pr-info.outputs.PR_BASE_REF }}
|
|
PR_HEAD_SHA:
|
|
description: "The head sha of the pull request branch in the head repository"
|
|
value: ${{ jobs.get-pr-info.outputs.PR_HEAD_SHA }}
|
|
PR_BASE_SHA:
|
|
description: "The head sha of the target branch in the base repository"
|
|
value: ${{ jobs.get-pr-info.outputs.PR_BASE_SHA }}
|
|
PR_MERGE_COMMIT_SHA:
|
|
description: "The sha of the merge commit for the pull request (created by GitHub) in the base repository"
|
|
value: ${{ jobs.get-pr-info.outputs.PR_MERGE_COMMIT_SHA }}
|
|
PR_HEAD_COMMIT_DATE:
|
|
description: "The date of the head sha of the pull request branch in the head repository"
|
|
value: ${{ jobs.get-pr-info.outputs.PR_HEAD_COMMIT_DATE }}
|
|
PR_MERGE_COMMIT_DATE:
|
|
description: "The date of the merge commit for the pull request (created by GitHub) in the base repository"
|
|
value: ${{ jobs.get-pr-info.outputs.PR_MERGE_COMMIT_DATE }}
|
|
PR_HEAD_COMMIT_TIMESTAMP:
|
|
description: "The timestamp of the head sha of the pull request branch in the head repository"
|
|
value: ${{ jobs.get-pr-info.outputs.PR_HEAD_COMMIT_TIMESTAMP }}
|
|
PR_MERGE_COMMIT_TIMESTAMP:
|
|
description: "The timestamp of the merge commit for the pull request (created by GitHub) in the base repository"
|
|
value: ${{ jobs.get-pr-info.outputs.PR_MERGE_COMMIT_TIMESTAMP }}
|
|
PR:
|
|
description: "The PR"
|
|
value: ${{ jobs.get-pr-info.outputs.PR }}
|
|
PR_FILES:
|
|
description: "The files touched in the PR"
|
|
value: ${{ jobs.get-pr-info.outputs.PR_FILES }}
|
|
|
|
|
|
jobs:
|
|
get-pr-info:
|
|
runs-on: ubuntu-22.04
|
|
name: Get PR commit SHA better
|
|
outputs:
|
|
PR_HEAD_REPO_FULL_NAME: ${{ steps.pr_info.outputs.head_repo_full_name }}
|
|
PR_BASE_REPO_FULL_NAME: ${{ steps.pr_info.outputs.base_repo_full_name }}
|
|
PR_HEAD_REPO_OWNER: ${{ steps.pr_info.outputs.head_repo_owner }}
|
|
PR_BASE_REPO_OWNER: ${{ steps.pr_info.outputs.base_repo_owner }}
|
|
PR_HEAD_REPO_NAME: ${{ steps.pr_info.outputs.head_repo_name }}
|
|
PR_BASE_REPO_NAME: ${{ steps.pr_info.outputs.base_repo_name }}
|
|
PR_HEAD_REF: ${{ steps.pr_info.outputs.head_ref }}
|
|
PR_BASE_REF: ${{ steps.pr_info.outputs.base_ref }}
|
|
PR_HEAD_SHA: ${{ steps.pr_info.outputs.head_sha }}
|
|
PR_BASE_SHA: ${{ steps.pr_info.outputs.base_sha }}
|
|
PR_MERGE_COMMIT_SHA: ${{ steps.pr_info.outputs.merge_commit_sha }}
|
|
PR_HEAD_COMMIT_DATE: ${{ steps.pr_info.outputs.head_commit_date }}
|
|
PR_MERGE_COMMIT_DATE: ${{ steps.pr_info.outputs.merge_commit_date }}
|
|
PR_HEAD_COMMIT_TIMESTAMP: ${{ steps.get_timestamps.outputs.head_commit_timestamp }}
|
|
PR_MERGE_COMMIT_TIMESTAMP: ${{ steps.get_timestamps.outputs.merge_commit_timestamp }}
|
|
PR: ${{ steps.pr_info.outputs.pr }}
|
|
PR_FILES: ${{ steps.pr_info.outputs.files }}
|
|
if: ${{ inputs.pr_number != '' }}
|
|
steps:
|
|
- name: Extract PR details
|
|
id: pr_info
|
|
uses: actions/github-script@v6
|
|
with:
|
|
script: |
|
|
const { data: pr } = await github.rest.pulls.get({
|
|
owner: context.repo.owner,
|
|
repo: context.repo.repo,
|
|
pull_number: ${{ inputs.pr_number }}
|
|
});
|
|
|
|
const { data: head_commit } = await github.rest.repos.getCommit({
|
|
owner: pr.head.repo.owner.login,
|
|
repo: pr.head.repo.name,
|
|
ref: pr.head.ref
|
|
});
|
|
|
|
const { data: merge_commit } = await github.rest.repos.getCommit({
|
|
owner: pr.base.repo.owner.login,
|
|
repo: pr.base.repo.name,
|
|
ref: pr.merge_commit_sha,
|
|
});
|
|
|
|
const { data: files } = await github.rest.pulls.listFiles({
|
|
owner: context.repo.owner,
|
|
repo: context.repo.repo,
|
|
pull_number: ${{ inputs.pr_number }}
|
|
});
|
|
|
|
core.setOutput('head_repo_full_name', pr.head.repo.full_name);
|
|
core.setOutput('base_repo_full_name', pr.base.repo.full_name);
|
|
core.setOutput('head_repo_owner', pr.head.repo.owner.login);
|
|
core.setOutput('base_repo_owner', pr.base.repo.owner.login);
|
|
core.setOutput('head_repo_name', pr.head.repo.name);
|
|
core.setOutput('base_repo_name', pr.base.repo.name);
|
|
core.setOutput('head_ref', pr.head.ref);
|
|
core.setOutput('base_ref', pr.base.ref);
|
|
core.setOutput('head_sha', pr.head.sha);
|
|
core.setOutput('base_sha', pr.base.sha);
|
|
core.setOutput('merge_commit_sha', pr.merge_commit_sha);
|
|
core.setOutput('pr', pr);
|
|
|
|
core.setOutput('head_commit_date', head_commit.commit.committer.date);
|
|
core.setOutput('merge_commit_date', merge_commit.commit.committer.date);
|
|
|
|
core.setOutput('files', files);
|
|
|
|
console.log('PR head commit:', {
|
|
head_commit: head_commit,
|
|
commit: head_commit.commit,
|
|
date: head_commit.commit.committer.date
|
|
});
|
|
|
|
console.log('PR merge commit:', {
|
|
merge_commit: merge_commit,
|
|
commit: merge_commit.commit,
|
|
date: merge_commit.commit.committer.date
|
|
});
|
|
|
|
- name: Convert dates to timestamps
|
|
id: get_timestamps
|
|
run: |
|
|
head_commit_date=${{ steps.pr_info.outputs.head_commit_date }}
|
|
merge_commit_date=${{ steps.pr_info.outputs.merge_commit_date }}
|
|
echo $head_commit_date
|
|
echo $merge_commit_date
|
|
head_commit_timestamp=$(date -d "$head_commit_date" +%s)
|
|
merge_commit_timestamp=$(date -d "$merge_commit_date" +%s)
|
|
echo $head_commit_timestamp
|
|
echo $merge_commit_timestamp
|
|
echo "head_commit_timestamp=$head_commit_timestamp" >> $GITHUB_OUTPUT
|
|
echo "merge_commit_timestamp=$merge_commit_timestamp" >> $GITHUB_OUTPUT
|