Skip to content

...

... #5

Workflow file for this run

name: Package Manager Benchmarks
on:
push:
workflow_dispatch:
jobs:
benchmark:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v2
- name: Install Node.js
uses: actions/setup-node@v2
with:
node-version: '22'
- name: Install npm
run: npm install -g npm
- name: Install yarn
run: npm install -g yarn
- name: Install pnpm
run: npm install -g pnpm
- name: Install bun
run: curl -fsSL https://bun.sh/install | bash
- name: Install deno
run: curl -fsSL https://deno.land/x/install/install.sh | sh
- name: Install vega-cli
run: npm install -g vega-lite vega-cli
- name: Benchmark npm (cold cache)
id: npm_cold
run: |
rm -rf node_modules package-lock.json
echo "npm_cold=$(TIMEFORMAT=%R; { time npm install; } 2>&1)" >> $GITHUB_ENV
- name: Benchmark npm (warm cache)
id: npm_warm
run: echo "npm_warm=$(TIMEFORMAT=%R; { time npm install; } 2>&1)" >> $GITHUB_ENV
- name: Benchmark yarn (cold cache)
id: yarn_cold
run: |
rm -rf node_modules yarn.lock
echo "yarn_cold=$(TIMEFORMAT=%R; { time yarn install; } 2>&1)" >> $GITHUB_ENV
- name: Benchmark yarn (warm cache)
id: yarn_warm
run: echo "yarn_warm=$(TIMEFORMAT=%R; { time yarn install; } 2>&1)" >> $GITHUB_ENV
- name: Benchmark pnpm (cold cache)
id: pnpm_cold
run: |
rm -rf node_modules pnpm-lock.yaml
echo "pnpm_cold=$(TIMEFORMAT=%R; { time pnpm install; } 2>&1)" >> $GITHUB_ENV
- name: Benchmark pnpm (warm cache)
id: pnpm_warm
run: echo "pnpm_warm=$(TIMEFORMAT=%R; { time pnpm install; } 2>&1)" >> $GITHUB_ENV
- name: Benchmark bun (cold cache)
id: bun_cold
run: |
rm -rf node_modules bun.lockb
echo "bun_cold=$(TIMEFORMAT=%R; { time bun install; } 2>&1)" >> $GITHUB_ENV
- name: Benchmark bun (warm cache)
id: bun_warm
run: echo "bun_warm=$(TIMEFORMAT=%R; { time bun install; } 2>&1)" >> $GITHUB_ENV
- name: Benchmark deno (cold cache)
id: deno_cold
run: |
rm -rf deno_modules
echo "deno_cold=$(TIMEFORMAT=%R; { time deno cache; } 2>&1)" >> $GITHUB_ENV
- name: Benchmark deno (warm cache)
id: deno_warm
run: echo "deno_warm=$(TIMEFORMAT=%R; { time deno cache; } 2>&1)" >> $GITHUB_ENV
- name: Generate Vega-Lite Spec
run: |
npm_cold=${{ env.npm_cold }}
npm_warm=${{ env.npm_warm }}
yarn_cold=${{ env.yarn_cold }}
yarn_warm=${{ env.yarn_warm }}
pnpm_cold=${{ env.pnpm_cold }}
pnpm_warm=${{ env.pnpm_warm }}
bun_cold=${{ env.bun_cold }}
bun_warm=${{ env.bun_warm }}
deno_cold=${{ env.deno_cold }}
deno_warm=${{ env.deno_warm }}
cat <<EOF > benchmark.json
{
"\$schema": "https://vega.github.io/schema/vega-lite/v5.json",
"description": "Package Manager Benchmark",
"data": {
"values": [
{"manager": "npm (cold)", "time": $npm_cold},
{"manager": "npm (warm)", "time": $npm_warm},
{"manager": "yarn (cold)", "time": $yarn_cold},
{"manager": "yarn (warm)", "time": $yarn_warm},
{"manager": "pnpm (cold)", "time": $pnpm_cold},
{"manager": "pnpm (warm)", "time": $pnpm_warm},
{"manager": "bun (cold)", "time": $bun_cold},
{"manager": "bun (warm)", "time": $bun_warm},
{"manager": "deno (cold)", "time": $deno_cold},
{"manager": "deno (warm)", "time": $deno_warm}
]
},
"mark": "bar",
"encoding": {
"x": {"field": "manager", "type": "nominal", "axis": {"labelAngle": 0}},
"y": {"field": "time", "type": "quantitative"}
}
}
EOF
- name: Generate SVG Chart
run: vega benchmark.json -o benchmark.svg
- name: Upload SVG Chart
uses: actions/upload-artifact@v4
with:
name: benchmark-chart
path: benchmark.svg