v0.2.1 #4
Workflow file for this run
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: Release to crates.io | |
| on: | |
| release: | |
| types: [published] | |
| env: | |
| CARGO_TERM_COLOR: always | |
| jobs: | |
| publish: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Install Rust toolchain | |
| uses: actions-rust-lang/setup-rust-toolchain@v1 | |
| with: | |
| toolchain: stable | |
| components: rustfmt, clippy | |
| - name: Cache dependencies | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| ~/.cargo/registry | |
| ~/.cargo/git | |
| target | |
| key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} | |
| restore-keys: | | |
| ${{ runner.os }}-cargo- | |
| - name: Verify release tag matches Cargo.toml version | |
| run: | | |
| # Extract version from Cargo.toml | |
| CARGO_VERSION=$(grep '^version = ' Cargo.toml | sed 's/version = "\(.*\)"/\1/') | |
| # Extract version from GitHub release tag (remove 'v' prefix if present) | |
| RELEASE_VERSION=$(echo "${{ github.event.release.tag_name }}" | sed 's/^v//') | |
| echo "Cargo.toml version: $CARGO_VERSION" | |
| echo "Release tag version: $RELEASE_VERSION" | |
| if [ "$CARGO_VERSION" != "$RELEASE_VERSION" ]; then | |
| echo "Version mismatch! Cargo.toml version ($CARGO_VERSION) does not match release tag ($RELEASE_VERSION)" | |
| exit 1 | |
| fi | |
| echo "Version verification passed" | |
| - name: Format check | |
| run: cargo fmt --all -- --check | |
| - name: Clippy check | |
| run: cargo clippy --all-targets --all-features -- -D warnings | |
| - name: Run tests | |
| run: cargo test --all-features | |
| - name: Verify examples compile and run | |
| run: | | |
| echo "Testing examples..." | |
| for example in examples/*.rs; do | |
| example_name=$(basename "$example" .rs) | |
| echo "Building example: $example_name" | |
| cargo build --example "$example_name" | |
| done | |
| # Test a few key examples to make sure they work | |
| echo "Running basic_usage example..." | |
| timeout 30s cargo run --example basic_usage || echo "Example completed or timed out" | |
| echo "Running repository_operations example..." | |
| timeout 30s cargo run --example repository_operations || echo "Example completed or timed out" | |
| - name: Build release | |
| run: cargo build --release --all-features | |
| - name: Verify package contents | |
| run: | | |
| cargo package --list | |
| echo "Package contents verified" | |
| - name: Dry run publish | |
| run: cargo publish --dry-run --all-features | |
| - name: Publish to crates.io | |
| run: cargo publish --all-features | |
| env: | |
| CARGO_REGISTRY_TOKEN: ${{ secrets.CRATES_IO_TOKEN }} | |
| - name: Create publish summary | |
| run: | | |
| echo "## Release Summary" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo " **Published to crates.io**: \`rustic-git v${{ github.event.release.tag_name }}\`" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "### Package Details" >> $GITHUB_STEP_SUMMARY | |
| echo "- **Version**: ${{ github.event.release.tag_name }}" >> $GITHUB_STEP_SUMMARY | |
| echo "- **Registry**: [crates.io](https://crates.io/crates/rustic-git)" >> $GITHUB_STEP_SUMMARY | |
| echo "- **Documentation**: [docs.rs](https://docs.rs/rustic-git)" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "### Quality Checks Passed" >> $GITHUB_STEP_SUMMARY | |
| echo "- Code formatting (rustfmt)" >> $GITHUB_STEP_SUMMARY | |
| echo "- Linting (clippy with zero warnings)" >> $GITHUB_STEP_SUMMARY | |
| echo "- All tests passing" >> $GITHUB_STEP_SUMMARY | |
| echo "- Examples compile and run" >> $GITHUB_STEP_SUMMARY | |
| echo "- Version verification" >> $GITHUB_STEP_SUMMARY |