Update backend.yml #22
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: Rust Backend CI | |
| on: | |
| push: | |
| branches: ["dev"] | |
| pull_request: | |
| branches: ["dev"] | |
| release: | |
| types: [published] | |
| env: | |
| CARGO_TERM_COLOR: always | |
| BINARY_NAME: backend | |
| DATABASE_URL: ${{ secrets.DATABASE_URL }} | |
| SQLX_OFFLINE: true | |
| jobs: | |
| test: | |
| name: Run Tests | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Setup Rust | |
| uses: actions-rs/toolchain@v1 | |
| with: | |
| profile: minimal | |
| toolchain: stable | |
| override: true | |
| - name: Cache Dependencies | |
| uses: actions/cache@v3 | |
| with: | |
| path: | | |
| ~/.cargo/registry | |
| ~/.cargo/git | |
| backend/target | |
| key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} | |
| - name: Cache SQLx Data | |
| uses: actions/cache@v3 | |
| with: | |
| path: backend/.sqlx | |
| key: ${{ runner.os }}-sqlx-${{ hashFiles('**/*.rs', '**/migrations/**') }} | |
| - name: Install SQLx CLI | |
| run: cargo install sqlx-cli --no-default-features --features postgres | |
| - name: Prepare SQLx | |
| run: cd backend && cargo sqlx prepare -- --tests | |
| env: | |
| DATABASE_URL: ${{ secrets.DATABASE_URL }} | |
| SQLX_OFFLINE: true | |
| - name: Execute Tests | |
| run: cd backend && cargo test --verbose | |
| build: | |
| name: Build (${{ matrix.target.name }}) | |
| needs: test | |
| runs-on: ${{ matrix.target.os }} | |
| strategy: | |
| matrix: | |
| target: | |
| - name: Linux x86_64 | |
| os: ubuntu-latest | |
| target: x86_64-unknown-linux-gnu | |
| bin: backend | |
| asset_name: backend-linux-amd64 | |
| - name: Linux ARM64 | |
| os: ubuntu-latest | |
| target: aarch64-unknown-linux-gnu | |
| bin: backend | |
| asset_name: backend-linux-arm64 | |
| - name: Windows | |
| os: windows-latest | |
| target: x86_64-pc-windows-msvc | |
| bin: backend.exe | |
| asset_name: backend-windows-amd64.exe | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Setup ARM Toolchain | |
| if: matrix.target.target == 'aarch64-unknown-linux-gnu' | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y gcc-aarch64-linux-gnu | |
| - name: Configure Rust | |
| uses: actions-rs/toolchain@v1 | |
| with: | |
| profile: minimal | |
| toolchain: stable | |
| target: ${{ matrix.target.target }} | |
| override: true | |
| - name: Cache Build | |
| uses: actions/cache@v3 | |
| with: | |
| path: | | |
| ~/.cargo/registry | |
| ~/.cargo/git | |
| backend/target | |
| key: ${{ runner.os }}-${{ matrix.target.target }}-cargo-${{ hashFiles('**/Cargo.lock') }} | |
| - name: Compile Release | |
| run: cd backend && cargo build --release --target ${{ matrix.target.target }} | |
| - name: Package Artifact | |
| run: | | |
| mkdir -p release | |
| cp backend/target/${{ matrix.target.target }}/release/${{ matrix.target.bin }} release/${{ matrix.target.asset_name }} | |
| - name: Upload Artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: ${{ matrix.target.asset_name }} | |
| path: release/${{ matrix.target.asset_name }} | |
| release: | |
| name: Publish Release | |
| needs: build | |
| permissions: | |
| contents: write | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Download Artifacts | |
| uses: actions/download-artifact@v4 | |
| with: | |
| path: artifacts | |
| - name: Generate Version | |
| id: version | |
| run: | | |
| if [ "$GITHUB_EVENT_NAME" = "release" ]; then | |
| echo "version=$(jq -r .release.tag_name $GITHUB_EVENT_PATH)" >> $GITHUB_OUTPUT | |
| else | |
| echo "version=dev-$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT | |
| fi | |
| - name: Calculate Checksums | |
| id: checksums | |
| run: | | |
| echo "HASHES=| File | SHA256 |" >> $GITHUB_OUTPUT | |
| echo "HASHES+=| ---- | ------ |" >> $GITHUB_OUTPUT | |
| cd artifacts | |
| for file in *; do | |
| if [ -f "$file" ]; then | |
| sha=$(sha256sum "$file" | awk '{print $1}') | |
| echo "HASHES+=| $file | $sha |" >> $GITHUB_OUTPUT | |
| fi | |
| done | |
| - name: Create Release | |
| uses: softprops/action-gh-release@v2 | |
| with: | |
| tag_name: ${{ steps.version.outputs.version }} | |
| name: ${{ steps.version.outputs.version }} | |
| body: | | |
| ${{ github.event.release.body }} | |
| ## Checksums | |
| ${{ steps.checksums.outputs.HASHES }} | |
| files: artifacts/* | |
| generate_release_notes: false # 添加了这一行 | |
| if: ${{ github.event_name == 'release' }} |