Skip to content
This repository has been archived by the owner. It is now read-only.
Permalink
Browse files
Adds pullRequestLabels output
  • Loading branch information
potiuk committed Oct 24, 2020
1 parent c657bb3 commit ae55e40e2356a057dd482be44b205db8e4126658
Showing 3 changed files with 96 additions and 24 deletions.
108 README.md
@@ -13,20 +13,30 @@
- [Inputs and outputs](#inputs-and-outputs)
- [Inputs](#inputs)
- [Outputs](#outputs)
- [Examples](#examples)
- [Workflow Run event](#workflow-run-event)
- [Workflow Run event](#workflow-run-event-1)
- [Development environment](#development-environment)
- [License](#license)

<!-- END doctoc generated TOC please keep comment here to allow auto update -->

# Context and motivation

Get Workflow Origin is an action that provides missing information for `workflow_run` events
Often in the `workflow_run` event you want to get more information about the source run than the
one provided directly via GitHub context. For example you would like to know what is the merge
commit generated by pull request in case the workflow was triggered by a pull request.
Get Workflow Origin is an action that provides information about the pull requests that triggered the
workflow for the `workflow_run` and `pull_request` events.

This action provides outputs that give the missing information. You should add this action as first
one in the "workflow_run" event and then you will be able to use those outputs.
Often in those events you want to get more information about the source run than the
one provided directly via GitHub context.

For example, you would like to know what is the merge commit generated by pull request in case
the workflow is triggered by a pull request, or labels associated with the Pull Request.

This action provides outputs that give that information. You should add this action as first
one in your workflow and then you will be able to use those outputs using 'needs' dependency.

The `sourceRunId` input should not be specified in case of the `pull_request` event, but it should
be set to `${{ github.event.workflow_run.id }}` in case of the `workflow_run` event.

# Inputs and outputs

@@ -35,19 +45,85 @@ one in the "workflow_run" event and then you will be able to use those outputs.
| Input | Required | Default | Comment |
|-------------------------|----------|--------------|-----------------------------------------------------------------------------------------------------|
| `token` | yes | | The github token passed from `${{ secrets.GITHUB_TOKEN }}` |
| `sourceRunId` | yes | | It should be set to the id of the workflow triggering the run `${{ github.event.workflow_run.id }}` |
| `sourceRunId` | no | | In case of 'workflow_run' event it should be set to `${{ github.event.workflow_run.id }}` |

## Outputs

| Output | No `sourceRunId` specified | The `sourceRunId` set to `${{ github.event.workflow_run.id }}` |
|---------------------|---------------------------------------------------------|------------------------------------------------------------------------------------------------------|
| `sourceHeadRepo` | Current repository. Format: `owner/repo` | Repository of the run that triggered this `workflow_run`. Format: `owner/repo` |
| `sourceHeadBranch` | Current branch. | Branch of the run that triggered this `workflow_run`. Might be forked repo, if it is a pull_request. |
| `sourceHeadSha` | Current commit SHA: `{{ github.sha }}` | Commit sha of the run that triggered this `workflow_run`. |
| `mergeCommitSha` | Merge commit SHA if PR-triggered event. | Merge commit SHA if PR-triggered event. |
| `targetCommitSha` | Target commit SHA (merge if present, otherwise source). | Target commit SHA (merge if present, otherwise source). |
| `pullRequestNumber` | Number of the associated Pull Request (if PR triggered) | Number of the associated Pull Request (if PR triggered) |
| `sourceEvent` | Current event: ``${{ github.event }}`` | Event of the run that triggered this `workflow_run` |
| Output | No `sourceRunId` specified | The `sourceRunId` set to `${{ github.event.workflow_run.id }}` |
|---------------------|-----------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------|
| `sourceHeadRepo` | Current repository. Format: `owner/repo` | Repository of the run that triggered this `workflow_run`. Format: `owner/repo` |
| `sourceHeadBranch` | Current branch. | Branch of the run that triggered this `workflow_run`. Might be forked repo, if it is a pull_request. |
| `sourceHeadSha` | Current commit SHA: `{{ github.sha }}` | Commit sha of the run that triggered this `workflow_run`. |
| `mergeCommitSha` | Merge commit SHA if PR-triggered event. | Merge commit SHA if PR-triggered event. |
| `targetCommitSha` | Target commit SHA (merge if present, otherwise source). | Target commit SHA (merge if present, otherwise source). |
| `pullRequestNumber` | Number of the associated Pull Request (if PR triggered) | Number of the associated Pull Request (if PR triggered) |
| `pullRequestLabels` | Stringified JSON array of Labels of the associated Pull Request (if PR triggered) | Stringified JSON array of Labels of the associated Pull Request (if PR triggered) |
| `sourceEvent` | Current event: ``${{ github.event }}`` | Event of the run that triggered this `workflow_run` |

# Examples

### Workflow Run event

```yaml
name: Get information
on:
pull_request:
branches: ['main']
jobs:
get-info:
name: "Get information about the source run"
runs-on: ubuntu-latest
outputs:
sourceHeadRepo: ${{ steps.workflow-run-info.outputs.sourceHeadRepo }}
sourceHeadBranch: ${{ steps.workflow-run-info.outputs.sourceHeadBranch }}
sourceHeadSha: ${{ steps.workflow-run-info.outputs.sourceHeadSha }}
mergeCommitSha: ${{ steps.workflow-run-info.outputs.mergeCommitSha }}
targetCommitSha: ${{ steps.workflow-run-info.outputs.targetCommitSha }}
pullRequestNumber: ${{ steps.workflow-run-info.outputs.pullRequestNumber }}
pullRequestLabels: ${{ steps.workflow-run-info.outputs.pullRequestLabels }}
sourceEvent: ${{ steps.workflow-run-info.outputs.sourceEvent }}
steps:
- name: "Get information about the current run"
uses: potiuk/get-workflow-origin@v1_1
id: workflow-run-info
with:
token: ${{ secrets.GITHUB_TOKEN }}
```


### Workflow Run event

```yaml
name: Build
on:
workflow_run:
workflows: ['CI']
types: ['requested']
jobs:
get-info:
name: "Get information about the source run"
runs-on: ubuntu-latest
outputs:
sourceHeadRepo: ${{ steps.source-run-info.outputs.sourceHeadRepo }}
sourceHeadBranch: ${{ steps.source-run-info.outputs.sourceHeadBranch }}
sourceHeadSha: ${{ steps.source-run-info.outputs.sourceHeadSha }}
mergeCommitSha: ${{ steps.source-run-info.outputs.mergeCommitSha }}
targetCommitSha: ${{ steps.source-run-info.outputs.targetCommitSha }}
pullRequestNumber: ${{ steps.source-run-info.outputs.pullRequestNumber }}
pullRequestLabels: ${{ steps.source-run-info.outputs.pullRequestLabels }}
sourceEvent: ${{ steps.source-run-info.outputs.sourceEvent }}
steps:
- name: "Get information about the origin 'CI' run"
uses: potiuk/get-workflow-origin@v1_1
id: source-run-info
with:
token: ${{ secrets.GITHUB_TOKEN }}
sourceRunId: ${{ github.event.workflow_run.id }}```
```


## Development environment

@@ -1546,15 +1546,14 @@ function run() {
core.info(`Repository: ${repository}, Owner: ${owner}, Repo: ${repo}, ` +
`Event name: ${eventName},` +
`sourceWorkflowId: ${sourceWorkflowId}, sourceRunId: ${sourceRunId}, selfRunId: ${selfRunId}, `);
if (eventName !== 'workflow_run') {
throw Error(`This action is only useful in "workflow_run" triggered runs and you used it in ${eventName}`);
}
const [headRepo, headBranch, sourceEventName, headSha, mergeCommitSha, pullRequest] = yield getOrigin(octokit, sourceRunId, owner, repo);
verboseOutput('sourceHeadRepo', headRepo);
verboseOutput('sourceHeadBranch', headBranch);
verboseOutput('sourceHeadSha', headSha);
verboseOutput('sourceEvent', sourceEventName);
verboseOutput('pullRequestNumber', pullRequest ? pullRequest.number.toString() : '');
const labelNames = pullRequest ? pullRequest.labels.map(x => x.name) : [];
verboseOutput('pullRequestLabels', JSON.stringify(labelNames));
verboseOutput('mergeCommitSha', mergeCommitSha);
verboseOutput('targetCommitSha', pullRequest ? mergeCommitSha : headSha);
});
@@ -132,11 +132,6 @@ async function run(): Promise<void> {
`sourceWorkflowId: ${sourceWorkflowId}, sourceRunId: ${sourceRunId}, selfRunId: ${selfRunId}, `
)

if (eventName !== 'workflow_run') {
throw Error(
`This action is only useful in "workflow_run" triggered runs and you used it in ${eventName}`
)
}
const [
headRepo,
headBranch,
@@ -154,6 +149,8 @@ async function run(): Promise<void> {
'pullRequestNumber',
pullRequest ? pullRequest.number.toString() : ''
)
const labelNames = pullRequest ? pullRequest.labels.map(x => x.name) : []
verboseOutput('pullRequestLabels', JSON.stringify(labelNames))
verboseOutput('mergeCommitSha', mergeCommitSha)
verboseOutput('targetCommitSha', pullRequest ? mergeCommitSha : headSha)
}

0 comments on commit ae55e40

Please sign in to comment.