API Surface Comment workflow (composer/composer)
The API Surface Comment workflow from composer/composer, explained and optimized by Latchkey.
A
CI health: A - excellent
Point runs-on at Latchkey and get job timeouts, self-healing for flaky steps, and up to 58% lower cost, applied automatically.
What it does
This is the API Surface Comment workflow from the composer/composer repository, a real project running GitHub Actions. It is shown here with attribution under its MIT license.
Below, Latchkey shows a faster, safer version produced by its optimization engine.
The workflow
workflow (.yml)
name: 'API Surface Comment'
on:
workflow_run:
workflows: ['API Surface Check']
types: [completed] # zizmor: ignore[dangerous-triggers]
permissions: {}
# Cancel an in-progress comment run when a force-push or workflow_run re-run
# fires for the same PR. head_sha alone wouldn't catch force-pushes (each push
# has a different SHA); the (head repo + head branch) pair survives that and
# disambiguates forks using identical branch names.
concurrency:
group: api-surface-comment-${{ github.event.workflow_run.head_repository.full_name }}-${{ github.event.workflow_run.head_branch }}
cancel-in-progress: true
jobs:
check-api-surface:
name: "API surface comment"
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write # required to create the comment on the pull request
steps:
- uses: composer/api-surface-check@bba9f1cb940df6e02271b1b6158679ac0b3f39d3 # 1.0.1
with:
install-dependencies: true
# paths: src/**/*.php
# source-roots: src
# include-internal: false
# show-removed: true
# show-modified: true
The same workflow, on Latchkey
Removes redundant runs and caps runaway jobs. Added and changed lines are highlighted.
name: 'API Surface Comment' on: workflow_run: workflows: ['API Surface Check'] types: [completed] # zizmor: ignore[dangerous-triggers] permissions: {} # Cancel an in-progress comment run when a force-push or workflow_run re-run # fires for the same PR. head_sha alone wouldn't catch force-pushes (each push # has a different SHA); the (head repo + head branch) pair survives that and # disambiguates forks using identical branch names. concurrency: group: api-surface-comment-${{ github.event.workflow_run.head_repository.full_name }}-${{ github.event.workflow_run.head_branch }} cancel-in-progress: true jobs: check-api-surface: timeout-minutes: 30 name: "API surface comment" runs-on: latchkey-small permissions: contents: read pull-requests: write # required to create the comment on the pull request steps: - uses: composer/api-surface-check@bba9f1cb940df6e02271b1b6158679ac0b3f39d3 # 1.0.1 with: install-dependencies: true # paths: src/**/*.php # source-roots: src # include-internal: false # show-removed: true # show-modified: true
What changed
- Run on Latchkey managed runners with one line (
runs-on), which apply the fixes below automatically and self-heal transient failures. This example useslatchkey-small; pick the runner size that fits the job. - Add a job timeout so a hung step cannot burn hours of runner time.
This workflow runs 1 job per trigger. On Latchkey the same minutes cost up to 58% less than GitHub-hosted, with zero queue time.