{"id":15747581,"url":"https://github.com/kachick/wait-other-jobs","last_synced_at":"2026-01-28T20:05:16.736Z","repository":{"id":37037245,"uuid":"496987818","full_name":"kachick/wait-other-jobs","owner":"kachick","description":"⏳ Wait other jobs/workflows☕","archived":false,"fork":false,"pushed_at":"2025-03-24T23:02:43.000Z","size":5713,"stargazers_count":9,"open_issues_count":3,"forks_count":4,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-03-25T02:51:31.691Z","etag":null,"topics":["auto-merge","dependabot","github-actions","wait"],"latest_commit_sha":null,"homepage":"https://github.com/marketplace/actions/wait-other-jobs","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kachick.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-05-27T12:27:27.000Z","updated_at":"2025-03-24T23:02:46.000Z","dependencies_parsed_at":"2023-10-02T01:07:18.402Z","dependency_job_id":"51c19d95-4f1e-448a-a746-948387c01fe4","html_url":"https://github.com/kachick/wait-other-jobs","commit_stats":{"total_commits":1187,"total_committers":7,"mean_commits":"169.57142857142858","dds":0.4372367312552654,"last_synced_commit":"e2845634b53e34aa68e2227e0aefd29db75ff962"},"previous_names":[],"tags_count":29,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kachick%2Fwait-other-jobs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kachick%2Fwait-other-jobs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kachick%2Fwait-other-jobs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kachick%2Fwait-other-jobs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kachick","download_url":"https://codeload.github.com/kachick/wait-other-jobs/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246604610,"owners_count":20804100,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["auto-merge","dependabot","github-actions","wait"],"created_at":"2024-10-04T05:20:59.153Z","updated_at":"2026-01-28T20:05:16.730Z","avatar_url":"https://github.com/kachick.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# wait-other-jobs\n\n[![Itself](https://github.com/kachick/wait-other-jobs/actions/workflows/itself.yml/badge.svg?branch=main)](https://github.com/kachick/wait-other-jobs/actions/workflows/itself.yml?query=branch%3Amain)\\\n[![gracePeriod](https://github.com/kachick/wait-other-jobs/actions/workflows/GH-820-graceperiod.yml/badge.svg?branch=main)](https://github.com/kachick/wait-other-jobs/actions/workflows/GH-820-graceperiod.yml?query=branch%3Amain)\n[![eventName](https://github.com/kachick/wait-other-jobs/actions/workflows/GH-771-eventname.yml/badge.svg?branch=main)](https://github.com/kachick/wait-other-jobs/actions/workflows/GH-771-eventname.yml?query=branch%3Amain)\n[![matrix](https://github.com/kachick/wait-other-jobs/actions/workflows/GH-761-matrix.yml/badge.svg?branch=main)](https://github.com/kachick/wait-other-jobs/actions/workflows/GH-761-matrix.yml?query=branch%3Amain)\\\n[![CI](https://github.com/kachick/wait-other-jobs/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/kachick/wait-other-jobs/actions/workflows/ci.yml?query=branch%3Amain)\n\nThis GitHub Action waits for all jobs by default even if they run in other workflows.\\\nYou can also choose to wait for specific jobs.\\\nIf any of the jobs fail, this action fails too.\n\n## Usage\n\nIt works with zero or little configuration.\n\n```yaml\njobs:\n  your_job:\n    # Enabling these permissions are required in private repositories\n    # permissions:\n    #   contents: read\n    #   checks: read\n    #   actions: read\n    runs-on: ubuntu-24.04\n    steps:\n      - uses: kachick/wait-other-jobs@v4.0.0\n        timeout-minutes: 15 # Recommended to be enabled with your appropriate value for fail-safe use\n```\n\nYou can configure the token, polling interval, allow/deny lists, and early-exit behavior as shown below.\n\n```yaml\nwith:\n  warmup-delay: 'PT30S' # default 'PT1S'\n  minimum-interval: 'PT300S' # default 'PT10S'\n  retry-method: 'exponential_backoff' # default 'equal_intervals'\n  early-exit: 'false' # default 'true'\n  skip-same-workflow: 'true' # default 'false'\n  wait-list: |\n    [\n      {\n        \"workflowFile\": \"ci.yml\",\n        \"jobName\": \"test\",\n        \"eventNames\": [ \"push\", \"pull_request\" ]\n      },\n      {\n        \"workflowFile\": \"release.yml\",\n        \"optional\": true\n      }\n    ]\n  skip-list: |\n    [\n      {\n        \"workflowFile\": \"pages.yml\"\n      }\n    ]\n```\n\nFull list of the options\n\n| NAME                 | DESCRIPTION                                                                   | TYPE     | DEFAULT                          | OPTIONS                                                         |\n| -------------------- | ----------------------------------------------------------------------------- | -------- | -------------------------------- | --------------------------------------------------------------- |\n| `github-api-url`     | The GitHub API endpoint. Override for GitHub Enterprise usage.                | `string` | `${{ github.api_url }}`          | `https://api.github.com`, `https://ghe-host.example.net/api/v3` |\n| `github-token`       | The GITHUB_TOKEN secret. You can use PAT if you want.                         | `string` | `${{ github.token }}`            |                                                                 |\n| `warmup-delay`       | Wait this interval before first polling                                       | `string` | `PT1S`                           | [ISO 8601 duration format][tc39-temporal-duration]              |\n| `minimum-interval`   | Wait for this interval or longer between each poll to reduce GitHub API calls | `string` | `PT10S`                          | [ISO 8601 duration format][tc39-temporal-duration]              |\n| `retry-method`       | How to wait for next polling                                                  | `string` | `equal_intervals`                | `exponential_backoff`, `equal_intervals`                        |\n| `early-exit`         | Stop polling as soon as one job fails                                         | `bool`   | `true`                           |                                                                 |\n| `attempt-limits`     | Stop polling if reached to this limit                                         | `number` | `1000`                           |                                                                 |\n| `event-list`         | Wait only listed events. Used as default for wait/skip lists                  | `string` | `[ \"${{ github.event_name }}\" ]` | JSON Array                                                      |\n| `wait-list`          | Wait only for these jobs                                                      | `string` | `[]`                             | JSON Array                                                      |\n| `skip-list`          | Wait for all jobs except these                                                | `string` | `[]`                             | JSON Array                                                      |\n| `skip-same-workflow` | Skip jobs defined in the same workflow which using this action                | `bool`   | `false`                          |                                                                 |\n| `dry-run`            | Avoid requests for tests                                                      | `bool`   | `false`                          |                                                                 |\n\n## Guide for option syntax and reasonable values\n\n- GitHub API Limit: We should at least consider the `GITHUB_TOKEN`, which is limited to 1,000 requests per hour per repository.\\\n  Roughly calculating for long jobs, setting the `minimum-interval` to `PT4S` or longer would be safer.\n  - [Primary Rate Limit for GITHUB_TOKEN](https://github.com/github/docs/blob/c26f36dbabb133b263c0f979f257b31d6c979341/data/reusables/rest-api/primary-rate-limit-github-token-in-actions.md)\n  - [Secondary Limit](https://github.com/github/docs/blob/c26f36dbabb133b263c0f979f257b31d6c979341/data/reusables/rest-api/secondary-rate-limit-rest-graphql.md)\n\n## Schema of wait-list and skip-list\n\nLists should be given with JSON array, do not use both wait-list and skip-list together\n\n### Common spec\n\n- Must specify `workflowFile`\n- Optionally specify `jobName`\\\n  If no `jobName` is specified, all jobs in the workflow will be targeted.\n- Optionally specify `eventNames`\\\n  If no `eventNames` is specified, the global `event-list` will be used (inherited).\\\n  If empty `[]` is specified, all events will be targeted.\n\n### `wait-list` spec\n\n- If the checkRun for the specified name is not found, this action fails by default.\\\n  You can disable this validation with `\"optional\": true` or use the [`startupGracePeriod`](#startup-grace-period).\n\n### `skip-list` spec\n\n- Subset of `wait-list`. There is no `optional` and `startupGracePeriod`\n- Global `event-list` filtering is applied BEFORE this list.\n- If you specify `eventNames` in an item, that item will only be skipped when the event matches.\n\n## Required GITHUB_TOKEN permissions\n\nIn public repositories, they are satisfied by default\n\n```yaml\npermissions:\n  contents: read # Since v2\n  checks: read\n  actions: read\n```\n\n## Support for GitHub Enterprise\n\nTo run this action in your GitHub Enterprise (GHE) instance you need to override `github-api-url`:\n\n```yaml\nwith:\n  github-api-url: 'https://ghe-host.example.net/api/v3'\n```\n\n## outputs.\u003coutput_id\u003e\n\nThese outputs are for testing and debugging only. The schema is not defined.\n\n- `parameters`\\\n  Parsed values from `with` and some context.\n\n- `dump`\\\n  A file path for collected resources which keeps fields than logged.\n\n## Deadlocks\n\nWhen using this action in multiple jobs within the same repository, be careful to avoid deadlocks.\\\nThe `skip-list`, `wait-list` and `skip-same-workflow` options cover this use case.\n\nIf you changed job name from the default, you should set `skip-list` or roughly use `skip-same-workflow`\n\n```yaml\njobs:\n  your_job: # This will be used as the default job name if you do not specify the \"name\" field below\n    name: 'Changed at here'\n    runs-on: ubuntu-24.04\n    steps:\n      - uses: kachick/wait-other-jobs@v4.0.0\n        with:\n          skip-list: |\n            [\n              {\n                \"workflowFile\": \"this_file_name.yml\",\n                \"jobName\": \"Changed at here\"\n              }\n            ]\n        timeout-minutes: 15\n```\n\nYou need to consider similar problems when using matrix, because GitHub does not provide enough context.\n\n- \u003chttps://github.com/orgs/community/discussions/8945\u003e\n- \u003chttps://github.com/orgs/community/discussions/16614\u003e\n\nHowever, you can set `jobMatchMode` to `prefix` to create a smaller skip-list and avoid this problem.\n\n```yaml\njobs:\n  your_job:\n    strategy:\n      matrix:\n        runner:\n          - ubuntu-24.04\n          - ubuntu-24.04-arm\n          - ubuntu-slim # Limited to 15 minutes by GitHub\n          - macos-26\n          - windows-2025\n    runs-on: ${{ matrix.runner }}\n    steps:\n      - uses: kachick/wait-other-jobs@v4.0.0\n        with:\n          skip-list: |\n            [\n              {\n                \"workflowFile\": \"this_file_name.yml\",\n                \"jobMatchMode\": \"prefix\",\n                \"jobName\": \"${{ github.job }}\"\n              }\n            ]\n      - run: make test\n```\n\n## Startup grace period\n\nThis action only checks the status of jobs at each polling time.\\\nUse this option when a job may start with a short delay after this action starts.\n\nExample using a `wait-list`.\n\n```yaml\nwith:\n  wait-list: |\n    [\n      {\n        \"workflowFile\": \"might_be_triggered_after_0-4_minutes.yml\",\n        \"optional\": false,\n        \"startupGracePeriod\": \"PT5M\"\n      }\n    ]\n```\n\nThis action starts immediately but ignores the job missing in the first 5 minutes.\n\n- No need to extend `warmup-delay`\n- Disable `optional`, because it is needed to check\n- Set a sufficient value for `startupGracePeriod`.\\\n  Use the [ISO 8601 duration format][tc39-temporal-duration].\n\nIf you're not using `wait-list`, you need to handle this pattern with `warmup-delay`.\n\n## Alternative candidates\n\n[gh](https://github.com/cli/cli) commands, such as `gh pr checks` and `gh run watch`, should be useful if your requirements are simple.\n\n## Limitations\n\n- If any workflow starts many jobs as 100+, this action does not support it.\\\n  Because nested paging in GraphQL is complex. See [related docs](https://github.com/octokit/plugin-paginate-graphql.js/blob/a6b12e867466b0c583b002acd1cb1ed90b11841f/README.md?plain=1#L184-L218) for further detail.\n\n## License\n\nThe scripts and documentation in this project are released under the [MIT License](LICENSE)\n\n[tc39-temporal-duration]: https://github.com/tc39/proposal-temporal/blob/0.9.0/docs/duration.md\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkachick%2Fwait-other-jobs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkachick%2Fwait-other-jobs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkachick%2Fwait-other-jobs/lists"}