| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| name: ci |
| env: |
| RUSTFLAGS: '-Dwarnings' |
| OPENROUTER_API_KEY: ${{secrets.OPENROUTER_API_KEY}} |
| 'on': |
| pull_request: |
| types: |
| - opened |
| - synchronize |
| - reopened |
| - labeled |
| branches: |
| - main |
| push: |
| branches: |
| - main |
| tags: |
| - v* |
| jobs: |
| build: |
| name: Build and Test |
| runs-on: ubuntu-latest |
| permissions: |
| contents: read |
| steps: |
| - name: Checkout Code |
| uses: actions/checkout@v6 |
| - name: Setup Protobuf Compiler |
| uses: arduino/setup-protoc@v3 |
| with: |
| repo-token: ${{ secrets.GITHUB_TOKEN }} |
| - name: Setup Rust Toolchain |
| uses: actions-rust-lang/setup-rust-toolchain@v1 |
| with: |
| toolchain: stable |
| - name: Install cargo-llvm-cov |
| run: cargo install cargo-llvm-cov |
| - name: Generate coverage |
| run: cargo llvm-cov --all-features --workspace --lcov --output-path lcov.info |
| zsh_rprompt_perf: |
| name: 'Performance: zsh rprompt' |
| runs-on: ubuntu-latest |
| permissions: |
| contents: read |
| steps: |
| - name: Checkout Code |
| uses: actions/checkout@v6 |
| - name: Setup Protobuf Compiler |
| uses: arduino/setup-protoc@v3 |
| with: |
| repo-token: ${{ secrets.GITHUB_TOKEN }} |
| - name: Setup Rust Toolchain |
| uses: actions-rust-lang/setup-rust-toolchain@v1 |
| with: |
| toolchain: stable |
| - name: Run performance benchmark |
| run: './scripts/benchmark.sh --threshold 60 zsh rprompt' |
| draft_release: |
| needs: |
| - build |
| if: github.event_name == 'push' && github.ref == 'refs/heads/main' |
| name: Draft Release |
| runs-on: ubuntu-latest |
| permissions: |
| contents: write |
| pull-requests: write |
| outputs: |
| crate_release_name: ${{ steps.set_output.outputs.crate_release_name }} |
| crate_release_id: ${{ steps.set_output.outputs.crate_release_id }} |
| steps: |
| - name: Checkout Code |
| uses: actions/checkout@v6 |
| - id: create_release |
| name: Draft Release |
| uses: release-drafter/release-drafter@v7 |
| with: |
| config-name: release-drafter.yml |
| env: |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
| - id: set_output |
| name: Export Outputs |
| run: echo "crate_release_id=${{ steps.create_release.outputs.id }}" >> $GITHUB_OUTPUT && echo "crate_release_name=${{ steps.create_release.outputs.tag_name }}" >> $GITHUB_OUTPUT |
| draft_release_pr: |
| if: 'github.event_name == ''pull_request'' && contains(github.event.pull_request.labels.*.name, ''ci: build all targets'')' |
| name: Draft Release for PR |
| runs-on: ubuntu-latest |
| outputs: |
| crate_release_name: ${{ steps.set_output.outputs.crate_release_name }} |
| crate_release_id: ${{ steps.set_output.outputs.crate_release_id }} |
| steps: |
| - name: Checkout Code |
| uses: actions/checkout@v6 |
| - id: set_output |
| name: Set Release Version |
| run: echo "crate_release_name=pr-build-${{ github.event.number }}" >> $GITHUB_OUTPUT && echo "crate_release_id=pr-build-${{ github.event.number }}" >> $GITHUB_OUTPUT |
| build_release: |
| needs: |
| - draft_release |
| if: github.event_name == 'push' && github.ref == 'refs/heads/main' |
| name: build-release |
| runs-on: ${{ matrix.os }} |
| permissions: |
| contents: write |
| pull-requests: write |
| strategy: |
| matrix: |
| include: |
| - binary_name: forge-x86_64-unknown-linux-musl |
| binary_path: target/x86_64-unknown-linux-musl/release/forge |
| cross: 'true' |
| os: ubuntu-latest |
| target: x86_64-unknown-linux-musl |
| - binary_name: forge-aarch64-unknown-linux-musl |
| binary_path: target/aarch64-unknown-linux-musl/release/forge |
| cross: 'true' |
| os: ubuntu-latest |
| target: aarch64-unknown-linux-musl |
| - binary_name: forge-x86_64-unknown-linux-gnu |
| binary_path: target/x86_64-unknown-linux-gnu/release/forge |
| cross: 'false' |
| os: ubuntu-latest |
| target: x86_64-unknown-linux-gnu |
| - binary_name: forge-aarch64-unknown-linux-gnu |
| binary_path: target/aarch64-unknown-linux-gnu/release/forge |
| cross: 'true' |
| os: ubuntu-latest |
| target: aarch64-unknown-linux-gnu |
| - binary_name: forge-x86_64-apple-darwin |
| binary_path: target/x86_64-apple-darwin/release/forge |
| cross: 'false' |
| os: macos-latest |
| target: x86_64-apple-darwin |
| - binary_name: forge-aarch64-apple-darwin |
| binary_path: target/aarch64-apple-darwin/release/forge |
| cross: 'false' |
| os: macos-latest |
| target: aarch64-apple-darwin |
| - binary_name: forge-x86_64-pc-windows-msvc.exe |
| binary_path: target/x86_64-pc-windows-msvc/release/forge.exe |
| cross: 'false' |
| os: windows-latest |
| target: x86_64-pc-windows-msvc |
| - binary_name: forge-aarch64-pc-windows-msvc.exe |
| binary_path: target/aarch64-pc-windows-msvc/release/forge.exe |
| cross: 'false' |
| os: windows-latest |
| target: aarch64-pc-windows-msvc |
| - binary_name: forge-aarch64-linux-android |
| binary_path: target/aarch64-linux-android/release/forge |
| cross: 'true' |
| os: ubuntu-latest |
| target: aarch64-linux-android |
| steps: |
| - name: Checkout Code |
| uses: actions/checkout@v6 |
| - name: Setup Protobuf Compiler |
| if: ${{ matrix.cross == 'false' }} |
| uses: arduino/setup-protoc@v3 |
| with: |
| repo-token: ${{ secrets.GITHUB_TOKEN }} |
| - name: Setup Cross Toolchain |
| if: ${{ matrix.cross == 'false' }} |
| uses: taiki-e/setup-cross-toolchain-action@v1 |
| with: |
| target: ${{ matrix.target }} |
| - name: Add Rust target |
| if: ${{ matrix.cross == 'false' }} |
| run: rustup target add ${{ matrix.target }} |
| - name: Set Rust Flags |
| if: '!(contains(matrix.target, ''-unknown-linux-'') || contains(matrix.target, ''-android''))' |
| run: echo "RUSTFLAGS=-C target-feature=+crt-static" >> $GITHUB_ENV |
| - name: Build Binary |
| uses: ClementTsang/cargo-action@v0.0.7 |
| with: |
| command: build --release |
| args: '--target ${{ matrix.target }}' |
| use-cross: ${{ matrix.cross }} |
| cross-version: '0.2.5' |
| env: |
| RUSTFLAGS: ${{ env.RUSTFLAGS }} |
| POSTHOG_API_SECRET: ${{secrets.POSTHOG_API_SECRET}} |
| APP_VERSION: ${{ needs.draft_release.outputs.crate_release_name }} |
| - name: Copy Binary |
| run: cp ${{ matrix.binary_path }} ${{ matrix.binary_name }} |
| - name: Upload to Release |
| uses: xresloader/upload-to-github-release@v1 |
| with: |
| release_id: ${{ needs.draft_release.outputs.crate_release_id }} |
| file: ${{ matrix.binary_name }} |
| overwrite: 'true' |
| build_release_pr: |
| needs: |
| - draft_release_pr |
| if: 'github.event_name == ''pull_request'' && contains(github.event.pull_request.labels.*.name, ''ci: build all targets'')' |
| name: build-release |
| runs-on: ${{ matrix.os }} |
| permissions: |
| contents: write |
| pull-requests: write |
| strategy: |
| matrix: |
| include: |
| - binary_name: forge-x86_64-unknown-linux-musl |
| binary_path: target/x86_64-unknown-linux-musl/release/forge |
| cross: 'true' |
| os: ubuntu-latest |
| target: x86_64-unknown-linux-musl |
| - binary_name: forge-aarch64-unknown-linux-musl |
| binary_path: target/aarch64-unknown-linux-musl/release/forge |
| cross: 'true' |
| os: ubuntu-latest |
| target: aarch64-unknown-linux-musl |
| - binary_name: forge-x86_64-unknown-linux-gnu |
| binary_path: target/x86_64-unknown-linux-gnu/release/forge |
| cross: 'false' |
| os: ubuntu-latest |
| target: x86_64-unknown-linux-gnu |
| - binary_name: forge-aarch64-unknown-linux-gnu |
| binary_path: target/aarch64-unknown-linux-gnu/release/forge |
| cross: 'true' |
| os: ubuntu-latest |
| target: aarch64-unknown-linux-gnu |
| - binary_name: forge-x86_64-apple-darwin |
| binary_path: target/x86_64-apple-darwin/release/forge |
| cross: 'false' |
| os: macos-latest |
| target: x86_64-apple-darwin |
| - binary_name: forge-aarch64-apple-darwin |
| binary_path: target/aarch64-apple-darwin/release/forge |
| cross: 'false' |
| os: macos-latest |
| target: aarch64-apple-darwin |
| - binary_name: forge-x86_64-pc-windows-msvc.exe |
| binary_path: target/x86_64-pc-windows-msvc/release/forge.exe |
| cross: 'false' |
| os: windows-latest |
| target: x86_64-pc-windows-msvc |
| - binary_name: forge-aarch64-pc-windows-msvc.exe |
| binary_path: target/aarch64-pc-windows-msvc/release/forge.exe |
| cross: 'false' |
| os: windows-latest |
| target: aarch64-pc-windows-msvc |
| - binary_name: forge-aarch64-linux-android |
| binary_path: target/aarch64-linux-android/release/forge |
| cross: 'true' |
| os: ubuntu-latest |
| target: aarch64-linux-android |
| steps: |
| - name: Checkout Code |
| uses: actions/checkout@v6 |
| - name: Setup Protobuf Compiler |
| if: ${{ matrix.cross == 'false' }} |
| uses: arduino/setup-protoc@v3 |
| with: |
| repo-token: ${{ secrets.GITHUB_TOKEN }} |
| - name: Setup Cross Toolchain |
| if: ${{ matrix.cross == 'false' }} |
| uses: taiki-e/setup-cross-toolchain-action@v1 |
| with: |
| target: ${{ matrix.target }} |
| - name: Add Rust target |
| if: ${{ matrix.cross == 'false' }} |
| run: rustup target add ${{ matrix.target }} |
| - name: Set Rust Flags |
| if: '!(contains(matrix.target, ''-unknown-linux-'') || contains(matrix.target, ''-android''))' |
| run: echo "RUSTFLAGS=-C target-feature=+crt-static" >> $GITHUB_ENV |
| - name: Build Binary |
| uses: ClementTsang/cargo-action@v0.0.7 |
| with: |
| command: build --release |
| args: '--target ${{ matrix.target }}' |
| use-cross: ${{ matrix.cross }} |
| cross-version: '0.2.5' |
| env: |
| RUSTFLAGS: ${{ env.RUSTFLAGS }} |
| POSTHOG_API_SECRET: ${{secrets.POSTHOG_API_SECRET}} |
| APP_VERSION: ${{ needs.draft_release_pr.outputs.crate_release_name }} |
| concurrency: |
| group: ${{ github.workflow }}-${{ github.ref }} |
|
|