Skip to content

Moved validation, measure and generate jobs to Depot (#221) #74

Moved validation, measure and generate jobs to Depot (#221)

Moved validation, measure and generate jobs to Depot (#221) #74

name: Generate Stats
on:
push:
branches: [main]
paths:
- 'packages/starter-*/**'
- '!packages/starter-*/ci-stats.json'
- '!packages/starter-*/stats/**'
- '!packages/starter-*/install-stats.json'
- '!packages/starter-*/build-stats.json'
- 'packages/app-*/**'
- '!packages/app-*/ci-stats.json'
- '!packages/app-*/stats/**'
- 'packages/stats-generator/**'
- '.github/workflows/generate-stats.yml'
- '.github/workflows/measure-framework.yml'
- '.github/frameworks.json'
- 'package.json'
jobs:
setup:
runs-on: depot-ubuntu-24.04
outputs:
install-matrix: ${{ steps.set-matrix.outputs.install }}
build-matrix: ${{ steps.set-matrix.outputs.build }}
ssr-matrix: ${{ steps.set-matrix.outputs.ssr }}
deps-matrix: ${{ steps.set-matrix.outputs.deps }}
spa-matrix: ${{ steps.set-matrix.outputs.spa }}
mpa-matrix: ${{ steps.set-matrix.outputs.mpa }}
steps:
- name: Checkout code
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Set matrices from frameworks.json
id: set-matrix
run: |
FRAMEWORKS=$(cat .github/frameworks.json)
echo "install=$(echo "$FRAMEWORKS" | jq -c '[.[] | select(.starter) | select(.starter.measurements | map(.type) | contains(["install"])) | {name, displayName, package: .starter.package, buildScript: .starter.buildScript, buildOutputDir: .starter.buildOutputDir, measurements: .starter.measurements}]')" >> $GITHUB_OUTPUT
echo "build=$(echo "$FRAMEWORKS" | jq -c '[.[] | select(.starter) | select(.starter.measurements | map(.type) | contains(["build"])) | {name, displayName, package: .starter.package, buildScript: .starter.buildScript, buildOutputDir: .starter.buildOutputDir, measurements: .starter.measurements}]')" >> $GITHUB_OUTPUT
echo "ssr=$(echo "$FRAMEWORKS" | jq -c '[.[] | select(.app) | select(.app.measurements | map(.type) | contains(["ssr"])) | {name, displayName, package: .app.package, buildScript: .app.buildScript, buildOutputDir: .app.buildOutputDir, measurements: .app.measurements}]')" >> $GITHUB_OUTPUT
echo "deps=$(echo "$FRAMEWORKS" | jq -c '[.[] | select(.starter) | select(.starter.measurements | map(.type) | contains(["dependencies"])) | {name, displayName, package: .starter.package}]')" >> $GITHUB_OUTPUT
echo "spa=$(echo "$FRAMEWORKS" | jq -c '[.[] | select(.app) | select(.app.measurements | map(.type) | contains(["spa"])) | {name, displayName, package: .app.package, buildScript: .app.buildScript, buildOutputDir: .app.buildOutputDir, measurements: .app.measurements}]')" >> $GITHUB_OUTPUT
echo "mpa=$(echo "$FRAMEWORKS" | jq -c '[.[] | select(.app) | select(.app.measurements | map(.type) | contains(["mpa"])) | {name, displayName, package: .app.package, buildScript: .app.buildScript, buildOutputDir: .app.buildOutputDir, measurements: .app.measurements}]')" >> $GITHUB_OUTPUT
measure:
needs: setup
uses: ./.github/workflows/measure-framework.yml
with:
install-matrix: ${{ needs.setup.outputs.install-matrix }}
build-matrix: ${{ needs.setup.outputs.build-matrix }}
ssr-matrix: ${{ needs.setup.outputs.ssr-matrix }}
deps-matrix: ${{ needs.setup.outputs.deps-matrix }}
spa-matrix: ${{ needs.setup.outputs.spa-matrix }}
mpa-matrix: ${{ needs.setup.outputs.mpa-matrix }}
generate-stats:
needs: [setup, measure]
if: always() && needs.setup.result == 'success' && needs.measure.result == 'success'
runs-on: depot-ubuntu-24.04
permissions:
contents: write
pull-requests: write
steps:
- name: Checkout code
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Setup pnpm
uses: pnpm/action-setup@8912a9102ac27614460f54aedde9e1e7f9aec20d # v6.0.5
- name: Setup Node.js
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version: '24'
cache: 'pnpm'
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Download artifacts
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
with:
path: artifacts
- name: List downloaded artifacts
run: find artifacts -type f -name "*.json" 2>/dev/null || echo "No artifacts found"
- name: Save CI stats
run: pnpm --filter @framework-tracker/stats-generator save:ci-stats $GITHUB_WORKSPACE/artifacts
env:
RUNNER_LABEL: ubuntu-latest
- name: Collect stats for docs
run: pnpm collect:stats
- name: Format
run: pnpm format
- name: Create Pull Request
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
if [[ -z $(git status -s) ]]; then
echo "No changes to commit"
exit 0
fi
git checkout -B automated-stats-update
git add packages/
git commit -m "Update CI stats and generated stats after starter changes"
git push --force-with-lease origin automated-stats-update
if ! gh pr list --head automated-stats-update --state open | grep -q .; then
gh pr create \
--title "Update CI stats and generated stats after starter changes" \
--body "Automated stats update triggered by changes to starter packages.
Includes:
- CI build time measurements (ci-stats.json)
- Versioned stats history (stats/<version>.json)
- Generated framework comparison stats
This PR was automatically created and will auto-merge if all checks pass." \
--base main \
--head automated-stats-update
else
echo "PR already exists, updated with new commits"
fi
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}