| name: metrics | |
| on: | |
| push: | |
| branches: | |
| - master | |
| env: | |
| CARGO_INCREMENTAL: 0 | |
| CARGO_NET_RETRY: 10 | |
| RUSTFLAGS: "-D warnings -W unreachable-pub --cfg no_salsa_async_drops" | |
| RUSTUP_MAX_RETRIES: 10 | |
| jobs: | |
| build_metrics: | |
| if: github.repository == 'rust-lang/rust-analyzer' | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Install Rust toolchain | |
| run: | | |
| rustup update --no-self-update beta | |
| rustup default beta | |
| rustup component add --toolchain beta rust-src | |
| - name: Checkout repository | |
| uses: actions/checkout@v6 | |
| - name: Cache cargo | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| ~/.cargo/bin/ | |
| ~/.cargo/registry/index/ | |
| ~/.cargo/registry/cache/ | |
| ~/.cargo/git/db/ | |
| key: ${{ runner.os }}-cargo-${{ github.sha }} | |
| - name: Collect build metrics | |
| run: cargo xtask metrics build | |
| - name: Cache target | |
| uses: actions/cache@v4 | |
| with: | |
| path: target/ | |
| key: ${{ runner.os }}-target-${{ github.sha }} | |
| - name: Upload build metrics | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: build-${{ github.sha }} | |
| path: target/build.json | |
| if-no-files-found: error | |
| other_metrics: | |
| strategy: | |
| matrix: | |
| names: [self, ripgrep-13.0.0, webrender-2022, diesel-1.4.8, hyper-0.14.18] | |
| runs-on: ubuntu-latest | |
| needs: build_metrics | |
| steps: | |
| - name: Install Rust toolchain | |
| run: | | |
| rustup update --no-self-update beta | |
| rustup default beta | |
| rustup component add --toolchain beta rust-src | |
| - name: Checkout repository | |
| uses: actions/checkout@v6 | |
| - name: Restore target cache | |
| uses: actions/cache@v4 | |
| with: | |
| path: target/ | |
| key: ${{ runner.os }}-target-${{ github.sha }} | |
| - name: Collect metrics | |
| run: cargo xtask metrics "${{ matrix.names }}" | |
| - name: Upload metrics | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: ${{ matrix.names }}-${{ github.sha }} | |
| path: target/${{ matrix.names }}.json | |
| if-no-files-found: error | |
| generate_final_metrics: | |
| runs-on: ubuntu-latest | |
| needs: [build_metrics, other_metrics] | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v6 | |
| - name: Download build metrics | |
| uses: actions/download-artifact@v8 | |
| with: | |
| name: build-${{ github.sha }} | |
| - name: Download self metrics | |
| uses: actions/download-artifact@v8 | |
| with: | |
| name: self-${{ github.sha }} | |
| - name: Download ripgrep-13.0.0 metrics | |
| uses: actions/download-artifact@v8 | |
| with: | |
| name: ripgrep-13.0.0-${{ github.sha }} | |
| - name: Download webrender-2022 metrics | |
| uses: actions/download-artifact@v8 | |
| with: | |
| name: webrender-2022-${{ github.sha }} | |
| - name: Download diesel-1.4.8 metrics | |
| uses: actions/download-artifact@v8 | |
| with: | |
| name: diesel-1.4.8-${{ github.sha }} | |
| - name: Download hyper-0.14.18 metrics | |
| uses: actions/download-artifact@v8 | |
| with: | |
| name: hyper-0.14.18-${{ github.sha }} | |
| - name: Combine json | |
| run: | | |
| mkdir ~/.ssh | |
| echo "${{ secrets.METRICS_DEPLOY_KEY }}" > ~/.ssh/id_ed25519 | |
| chmod 600 ~/.ssh/id_ed25519 | |
| chmod 700 ~/.ssh | |
| git clone --depth 1 git@github.com:rust-analyzer/metrics.git | |
| jq -s ".[0] * .[1] * .[2] * .[3] * .[4] * .[5]" build.json self.json ripgrep-13.0.0.json webrender-2022.json diesel-1.4.8.json hyper-0.14.18.json -c >> metrics/metrics.json | |
| cd metrics | |
| git add . | |
| git -c user.name=Bot -c user.email=dummy@example.com commit --message 📈 | |
| git push origin master |