Moved validation, measure and generate jobs to Depot (#221) #74
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 }} |