test workflow (didi/mpx)
The test workflow from didi/mpx, explained and optimized by Latchkey.
CI health: C - fair
Point runs-on at Latchkey and get run de-duplication, job timeouts, self-healing for flaky steps, and up to 58% lower cost, applied automatically.
What it does
This is the test workflow from the didi/mpx repository, a real project running GitHub Actions. It is shown here with attribution under its Apache-2.0 license.
Below, Latchkey shows a faster, safer version produced by its optimization engine.
The workflow
name: test
on: [push, pull_request]
jobs:
tsc:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: npm i && npm run build:tsc
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: npm i && npm run lint
unit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Cache node modules
id: cache
uses: actions/cache@v4
env:
cache-name: cache-node-modules
with:
path: |
~/.npm
node_modules
test/e2e/miniprogram-project/node_modules
test/e2e/plugin-project/node_modules
packages/webpack-plugin/node_modules
packages/core/node_modules
packages/api-proxy/node_modules
packages/perf/node_modules
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package.json') }}
restore-keys: |
${{ runner.os }}-build-${{ env.cache-name }}-
${{ runner.os }}-build-
${{ runner.os }}-
- name: install deps
if: steps.cache.outputs.cache-hit != 'true'
run: npm i && npm i --prefix test/e2e/miniprogram-project && npm i --prefix test/e2e/plugin-project
- name: copy-webpack-plugin
run: npm run copyPlugin --prefix test/e2e/miniprogram-project && npm run copyPlugin --prefix test/e2e/plugin-project
- name: build-miniprogram
run: npm run build:cross --prefix test/e2e/miniprogram-project
- name: build-plugin
run: npm run build --prefix test/e2e/plugin-project
- name: build-perf
run: npm run build -w @mpxjs/perf
- name: exec unit test
run: npm t && npm t --prefix test/e2e/miniprogram-project && npm t --prefix test/e2e/plugin-project
The same workflow, on Latchkey
Removes redundant runs and caps runaway jobs. Added and changed lines are highlighted.
name: test on: [push, pull_request] concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: tsc: timeout-minutes: 30 runs-on: latchkey-small steps: - uses: actions/checkout@v4 - run: npm i && npm run build:tsc lint: timeout-minutes: 30 runs-on: latchkey-small steps: - uses: actions/checkout@v4 - run: npm i && npm run lint unit: timeout-minutes: 30 runs-on: latchkey-small steps: - uses: actions/checkout@v4 - name: Cache node modules id: cache uses: actions/cache@v4 env: cache-name: cache-node-modules with: path: | ~/.npm node_modules test/e2e/miniprogram-project/node_modules test/e2e/plugin-project/node_modules packages/webpack-plugin/node_modules packages/core/node_modules packages/api-proxy/node_modules packages/perf/node_modules key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package.json') }} restore-keys: | ${{ runner.os }}-build-${{ env.cache-name }}- ${{ runner.os }}-build- ${{ runner.os }}- - name: install deps if: steps.cache.outputs.cache-hit != 'true' run: npm i && npm i --prefix test/e2e/miniprogram-project && npm i --prefix test/e2e/plugin-project - name: copy-webpack-plugin run: npm run copyPlugin --prefix test/e2e/miniprogram-project && npm run copyPlugin --prefix test/e2e/plugin-project - name: build-miniprogram run: npm run build:cross --prefix test/e2e/miniprogram-project - name: build-plugin run: npm run build --prefix test/e2e/plugin-project - name: build-perf run: npm run build -w @mpxjs/perf - name: exec unit test run: npm t && npm t --prefix test/e2e/miniprogram-project && npm t --prefix test/e2e/plugin-project
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. - Cancel superseded runs when a branch or PR gets a newer push.
- Add a job timeout so a hung step cannot burn hours of runner time.
What Latchkey heals here
This workflow has steps that commonly fail on transient issues (network, registries, flaky browsers). On Latchkey managed runners they are detected, retried, and self-healed instead of failing your build:
- End-to-end and browser tests
This workflow runs 3 jobs per trigger. On Latchkey the same minutes cost up to 58% less than GitHub-hosted, with zero queue time.