Skip to content

Package Manager Benchmarks #220

Package Manager Benchmarks

Package Manager Benchmarks #220

Workflow file for this run

name: Package Manager Benchmarks
on:
push:
workflow_dispatch:
schedule:
- cron: "0 0 * * *"
# Prevent multiple runs from interfering with each other
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
setup:
name: 'Setup'
runs-on: blacksmith-4vcpu-ubuntu-2404
timeout-minutes: 10
steps:
- uses: actions/checkout@v4
- name: Cache Bins
uses: useblacksmith/cache@v5
with:
path: bins
key: bins
- name: Install Node
uses: useblacksmith/setup-node@v5
with:
node-version: '22'
- name: Install & Setup Tools
run: |
bash ./scripts/setup.sh
benchmark:
name: 'Run Benchmarks'
runs-on: blacksmith-4vcpu-ubuntu-2404
needs: [setup]
timeout-minutes: 30
strategy:
matrix:
project: [next, astro, svelte, vue]
cache: [cold, warm]
include:
- project: next
cache: cold
- project: astro
cache: cold
- project: svelte
cache: cold
- project: vue
cache: cold
- project: next
cache: warm
- project: astro
cache: warm
- project: svelte
cache: warm
- project: vue
cache: warm
steps:
- uses: actions/checkout@v4
- name: Install Node
uses: useblacksmith/setup-node@v5
with:
node-version: '22'
- name: Install System Dependencies
run: |
sudo apt-get update
sudo apt-get install -y jq hyperfine
- name: Restore Bins
uses: useblacksmith/cache/restore@v5
with:
path: bins
key: bins
- name: Run Project Benchmarks
run: |
if [ "${{ matrix.cache }}" = "warm" ]; then
bash ./scripts/install-warm.sh ${{ matrix.project }}
else
bash ./scripts/install.sh ${{ matrix.project }}
fi
- name: Upload Benchmark Results
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.project }}-${{ matrix.cache }}-results
path: ./results/${{ matrix.project }}/
retention-days: 7
task:
name: 'Benchmark Running Tasks'
runs-on: blacksmith-4vcpu-ubuntu-2404
needs: [setup]
timeout-minutes: 15
steps:
- uses: actions/checkout@v4
- name: Install Node
uses: useblacksmith/setup-node@v5
with:
node-version: '22'
- name: Install System Dependencies
run: |
sudo apt-get update
sudo apt-get install -y jq hyperfine
- name: Restore Bins
uses: useblacksmith/cache/restore@v5
with:
path: bins
key: bins
- name: Run Task Execution Benchmarks
run: |
bash ./scripts/run.sh
- name: Upload Benchmark Results
uses: actions/upload-artifact@v4
with:
name: task-benchmark-results
path: ./results/run.json
retention-days: 7
process:
name: 'Process Results'
runs-on: blacksmith-4vcpu-ubuntu-2404
needs: [benchmark, task]
timeout-minutes: 5
steps:
- uses: actions/checkout@v4
- name: Install Node
uses: useblacksmith/setup-node@v5
with:
node-version: '22'
- name: Download Results
uses: actions/download-artifact@v4
with:
path: results
merge-multiple: true
- name: Process Results
run: |
bash ./scripts/process-results.sh
- name: Upload Processed Results
uses: actions/upload-artifact@v4
with:
name: processed-results
path: chart/results/
retention-days: 7
deploy:
name: 'Deploy Results'
runs-on: blacksmith-4vcpu-ubuntu-2404
needs: [process]
if: github.ref == 'refs/heads/main'
steps:
- uses: actions/checkout@v4
- name: Download Results
uses: actions/download-artifact@v4
with:
name: processed-results
path: chart/results/
- name: Deploy to GitHub Pages
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: chart/results
force_orphan: true
cleanup:
name: 'Cleanup'
needs: [deploy]
runs-on: blacksmith-4vcpu-ubuntu-2404
if: always()
steps:
- name: Delete old artifacts
run: |
gh api repos/${{ github.repository }}/actions/artifacts --paginate | jq -r '.artifacts[] | select(.expired) | .id' | xargs -I {} gh api repos/${{ github.repository }}/actions/artifacts/{} -X DELETE