Skip to content

Update backend.yml

Update backend.yml #22

Workflow file for this run

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' }}