tensor-eigen 0.0.29

Utility CLI for the Tensor Foundation Solana programs.
Documentation
name: Release

on:
  push:
    tags:
      - "v*"
  workflow_dispatch:

permissions:
  contents: write

env:
  CARGO_TERM_COLOR: always

jobs:
  fmt:
    name: Rustfmt
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions-rs/toolchain@v1
        with:
          profile: minimal
          toolchain: stable
          override: true
      - run: rustup component add rustfmt
      - name: Run cargo fmt
        uses: actions-rs/cargo@v1
        with:
          command: fmt
          args: --all -- --check

  clippy:
    name: Clippy
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions-rs/toolchain@v1
        with:
          profile: minimal
          toolchain: stable
          override: true
      - run: rustup component add clippy
      - name: Run cargo clippy
        uses: actions-rs/cargo@v1
        with:
          command: clippy
          args: -- -D warnings

  test:
    name: Test Suite
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions-rs/toolchain@v1
        with:
          profile: minimal
          toolchain: stable
          override: true
      - name: Run cargo test
        uses: actions-rs/cargo@v1
        with:
          command: test

  build:
    name: Build
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        include:
          - os: ubuntu-latest
            artifact_name: eigen-linux-x86_64
            asset_name: eigen-linux-x86_64
          - os: macos-latest
            artifact_name: eigen-macos-arm64
            asset_name: eigen-macos-arm64

    steps:
      - uses: actions/checkout@v4

      - name: Cache Rust dependencies and build artifacts
        uses: actions/cache@v3
        with:
          path: |
            ~/.cargo/registry
            ~/.cargo/git
            target
          key: ${{ runner.os }}-rust-${{ hashFiles('**/Cargo.lock') }}
          restore-keys: |
            ${{ runner.os }}-rust-

      - name: Build
        run: cargo build --release

      - name: Make binary executable
        run: chmod +x target/release/eigen

      - name: Upload artifact
        uses: actions/upload-artifact@v4
        with:
          name: ${{ matrix.artifact_name }}
          path: target/release/eigen

  release:
    name: Create Release
    needs: [build, fmt, clippy, test]
    runs-on: ubuntu-latest
    permissions:
      contents: write
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Download all artifacts
        uses: actions/download-artifact@v4

      - name: Display structure of downloaded files
        run: ls -R

      - name: Prepare binaries
        run: |
          mv eigen-linux-x86_64/eigen ./eigen-temp-linux
          rm -rf eigen-linux-x86_64
          mv eigen-temp-linux eigen-linux-x86_64

          mv eigen-macos-arm64/eigen ./eigen-temp-macos
          rm -rf eigen-macos-arm64
          mv eigen-temp-macos eigen-macos-arm64

          chmod +x eigen-linux-x86_64 eigen-macos-arm64

      - name: Display structure of prepared files
        run: ls -R

      - name: Create Release
        uses: softprops/action-gh-release@v1
        with:
          files: |
            eigen-linux-x86_64
            eigen-macos-arm64
          generate_release_notes: true
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}