Skip to content
Latchkey

test workflow (didi/mpx)

The test workflow from didi/mpx, explained and optimized by Latchkey.

C

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.

Grade your own workflow free or run it on Latchkey →
Source: didi/mpx.github/workflows/test.ymlLicense Apache-2.0View source

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

workflow (.yml)
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

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:

This workflow runs 3 jobs per trigger. On Latchkey the same minutes cost up to 58% less than GitHub-hosted, with zero queue time.

Actions used in this workflow