name: metrics on: push: branches: - master env: CARGO_INCREMENTAL: 0 CARGO_NET_RETRY: 10 RUSTFLAGS: "-D warnings -W unreachable-pub" RUSTUP_MAX_RETRIES: 10 jobs: setup_cargo: if: github.repository == 'rust-lang/rust-analyzer' runs-on: ubuntu-latest steps: - name: Install Rust toolchain run: | rustup update --no-self-update stable rustup component add rustfmt rust-src rustup default stable - 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 }} build_metrics: runs-on: ubuntu-latest needs: setup_cargo steps: - name: Checkout repository uses: actions/checkout@v4 - name: Restore cargo cache 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@v4 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: [setup_cargo, build_metrics] steps: - name: Checkout repository uses: actions/checkout@v4 - name: Restore cargo cache uses: actions/cache@v4 with: path: | ~/.cargo/bin/ ~/.cargo/registry/index/ ~/.cargo/registry/cache/ ~/.cargo/git/db/ key: ${{ runner.os }}-cargo-${{ github.sha }} - 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@v4 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@v4 - name: Download build metrics uses: actions/download-artifact@v4 with: name: build-${{ github.sha }} - name: Download self metrics uses: actions/download-artifact@v4 with: name: self-${{ github.sha }} - name: Download ripgrep-13.0.0 metrics uses: actions/download-artifact@v4 with: name: ripgrep-13.0.0-${{ github.sha }} - name: Download webrender-2022 metrics uses: actions/download-artifact@v4 with: name: webrender-2022-${{ github.sha }} - name: Download diesel-1.4.8 metrics uses: actions/download-artifact@v4 with: name: diesel-1.4.8-${{ github.sha }} - name: Download hyper-0.14.18 metrics uses: actions/download-artifact@v4 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