Skip to content

Commit

Permalink
Add check-dependent-jobs action (#16)
Browse files Browse the repository at this point in the history
* Add check-dependent-jobs action

* fix

* fix

* test

* fix

* Add debug

* test

* ok

* fix paths

* fix paths

* modify test

* fix

* Add test case

* test

* add debug step

* add path to no-test

* remove debug step; not needed

* Add expected result in name

* Update check-dependent-jobs/README.md

Co-authored-by: Victor Martinez <victormartinezrubio@gmail.com>

* Rename 'needs' input to 'jobs'

* Fix name

* Use github-script

* Update README.md

---------

Co-authored-by: Victor Martinez <victormartinezrubio@gmail.com>
  • Loading branch information
reakaleek and v1v authored Jun 4, 2024
1 parent cb358b4 commit 0a5c22a
Show file tree
Hide file tree
Showing 4 changed files with 119 additions and 0 deletions.
1 change: 1 addition & 0 deletions .github/workflows/no-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ on:
- '**'
- '!.github/workflows/test-*'
- '!buildkite/run/**'
- '!check-dependent-jobs/**'
- '!git/setup/**'
- '!google/auth/**'
- '!updatecli/run/**'
Expand Down
42 changes: 42 additions & 0 deletions .github/workflows/test-check-dependent-jobs.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
name: test-check-dependent-jobs

on:
pull_request:
branches:
- main
paths:
- '.github/workflows/test-check-dependent-jobs.yml'
- 'check-dependent-jobs/**'
push:
branches:
- main
paths:
- '.github/workflows/test-check-dependent-jobs.yml'
- 'check-dependent-jobs/**'

permissions:
contents: read

jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: ./check-dependent-jobs
id: check
with:
jobs: '{ "job-a": { "result": "success" }, "job-b": { "result": "success" } }'
- name: assert outputs.is-success==true
run: test "${{ steps.check.outputs.is-success }}" = "true"
- uses: ./check-dependent-jobs
id: check-2
with:
jobs: '{ "job-a": { "result": "success" }, "job-b": { "result": "failure" } }'
- name: assert outputs.is-success==false
run: test "${{ steps.check-2.outputs.is-success }}" = "false"
- uses: ./check-dependent-jobs
id: check-3
with:
jobs: '{ "job-a": { "result": "failure" }, "job-b": { "result": "failure" } }'
- name: assert outputs.is-success==false
run: test "${{ steps.check-3.outputs.is-success }}" = "false"
49 changes: 49 additions & 0 deletions check-dependent-jobs/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
# <!--name-->check-dependent-jobs<!--/name-->

<!--description-->
Evaluates the combined the status results of the provided needs context.
<!--/description-->

## Inputs
<!--inputs-->
| Name | Description | Required | Default |
|--------|------------------------------|----------|---------|
| `jobs` | needs context as JSON string | `true` | ` ` |
<!--/inputs-->

## Outputs

<!--outputs-->
| Name | Description |
|--------------|-----------------------------------------------------------------|
| `is-success` | The evaluated result of all provided jobs in the needs context. |
| `status` | One of success or failure. |
<!--/outputs-->

## Usage

<!--usage action="elastic/oblt-actions/check-dependent-jobs" version="env:VERSION"-->
```yaml
jobs:
job-a:
runs-on: ubuntu-latest
steps:
- run: exit 1;
job-b:
runs-on: ubuntu-latest
steps:
- run: exit 0;
job-c:
if: always()
runs-on: ubuntu-latest
needs:
- job-a
- job-b
steps:
- id: check
uses: elastic/oblt-actions/check-dependent-jobs@v1
with:
jobs: ${{ toJSON(needs) }}
- run: ${{ steps.check.outputs.is-success }} # should exit with 1 or 0.
```
<!--/usage-->
27 changes: 27 additions & 0 deletions check-dependent-jobs/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
name: check-dependent-jobs
description: |
Evaluates the combined the status results of the provided needs context.
inputs:
jobs:
required: true
description: needs context as JSON string
outputs:
is-success:
description: The evaluated result of all provided jobs in the needs context.
value: ${{ steps.test.outputs.is-success }}
status:
description: One of success or failure.
value: ${{ steps.test.outputs.status }}
runs:
using: composite
steps:
- id: test
uses: actions/github-script@v7
with:
script: |
const jobs = JSON.parse(process.env.JOBS)
const isSuccess = Object.values(jobs).every(job => job.result === 'success')
core.setOutput('is-success', isSuccess)
core.setOutput('status', isSuccess ? 'success' : 'failure')
env:
JOBS: ${{ inputs.jobs }}

0 comments on commit 0a5c22a

Please sign in to comment.