docs workflow (didi/mpx)
The docs 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, SHA-pinned actions, self-healing for flaky steps, and up to 58% lower cost, applied automatically.
What it does
This is the docs 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: docs
on:
push:
branches:
- master
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: technote-space/get-diff-action@v4
with:
PATTERNS: |
+(docs|docs-vitepress)/**/*
+(docs|docs-vitepress)/.*/**/*
# vuepress生成最终文档
- name: generate docs file
if: env.GIT_DIFF
run: |
npm i
npm run docs:build
# 使用 https://github.com/appleboy/scp-action 进行部署,注意 strip_components 用于控制层级
- name: Deploy to self-host server
if: env.GIT_DIFF
uses: appleboy/scp-action@master
with:
host: ${{ secrets.DOCS_SERVER_HOST }}
username: ${{ secrets.DOCS_SERVER_USER }}
key: ${{ secrets.DOCS_SERVER_KEY }}
command_timeout: "20m"
source: "./docs-vitepress/.vitepress/dist/"
strip_components: 4
target: "${{ secrets.DOCS_SERVER_DIR }}"
The same workflow, on Latchkey
Removes redundant runs and caps runaway jobs. Added and changed lines are highlighted.
name: docs on: push: branches: - master concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: deploy: timeout-minutes: 30 runs-on: latchkey-small steps: - uses: actions/checkout@v4 - uses: technote-space/get-diff-action@v4 with: PATTERNS: | +(docs|docs-vitepress)/**/* +(docs|docs-vitepress)/.*/**/* # vuepress生成最终文档 - name: generate docs file if: env.GIT_DIFF run: | npm i npm run docs:build # 使用 https://github.com/appleboy/scp-action 进行部署,注意 strip_components 用于控制层级 - name: Deploy to self-host server if: env.GIT_DIFF uses: appleboy/scp-action@master with: host: ${{ secrets.DOCS_SERVER_HOST }} username: ${{ secrets.DOCS_SERVER_USER }} key: ${{ secrets.DOCS_SERVER_KEY }} command_timeout: "20m" source: "./docs-vitepress/.vitepress/dist/" strip_components: 4 target: "${{ secrets.DOCS_SERVER_DIR }}"
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.
2 third-party actions are referenced by a movable tag. Pin them to the commit SHA (Latchkey resolves and applies this automatically) so a repointed tag cannot change what runs.
This workflow runs 1 job per trigger. On Latchkey the same minutes cost up to 58% less than GitHub-hosted, with zero queue time.