rrcm 0.4.3

Rust RC file Management commands
Documentation
name: Release

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

jobs:
  build:
    permissions:
      contents: write
    name: test ${{ matrix.job.target }}
    runs-on: ${{ matrix.job.os }}
    strategy:
      matrix:
        job:
          - { os: ubuntu-latest  , target: x86_64-unknown-linux-gnu       , extension: ""     , archive: tar ,archive_extension: .tar.gz }
          - { os: ubuntu-latest  , target: x86_64-unknown-linux-musl      , extension: ""     , archive: tar ,archive_extension: .tar.gz }
          - { os: ubuntu-latest  , target: armv7-unknown-linux-gnueabihf  , extension: ""     , archive: tar ,archive_extension: .tar.gz }
          - { os: ubuntu-latest  , target: armv7-unknown-linux-musleabihf , extension: ""     , archive: tar ,archive_extension: .tar.gz }
          - { os: ubuntu-latest  , target: aarch64-unknown-linux-gnu      , extension: ""     , archive: tar ,archive_extension: .tar.gz }
          - { os: ubuntu-latest  , target: aarch64-unknown-linux-musl     , extension: ""     , archive: tar ,archive_extension: .tar.gz }
          - { os: macos-latest   , target: x86_64-apple-darwin            , extension: ""     , archive: tar ,archive_extension: .tar.gz }
          - { os: windows-latest , target: x86_64-pc-windows-msvc         , extension: ".exe" , archive: zip ,archive_extension: .zip    }
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Set Toolchain
        uses: dtolnay/rust-toolchain@stable
        with:
          toolchain: stable
          
      - name: Rust Cache 
        uses: Swatinem/rust-cache@v2

      - name: Install cross
        uses: taiki-e/install-action@cross

      - name: Install cargo-make
        uses: taiki-e/install-action@cargo-make

      - name: Build
        run: cargo make build --release --target ${{ matrix.job.target }}

      # Rustのpackage名を取得して環境変数に入れておく。(後のステップで使用)
      - name: Extract crate information
        shell: bash
        run: |
          echo "PROJECT_NAME=$(sed -n 's/^name = "\(.*\)"/\1/p' Cargo.toml | head -n1)" >> $GITHUB_ENV

      - name: rename binary
        shell: bash
        run: |
          mv target/${{ matrix.job.target }}/release/${{ env.PROJECT_NAME }}{,-${{ matrix.job.target }}${{ matrix.job.extension }}}

      - name: archive binary
        uses: thedoctor0/zip-release@0.7.5
        with:
          type: ${{ matrix.job.archive }}
          directory: target/${{ matrix.job.target }}/release
          path: ${{ env.PROJECT_NAME }}-${{ matrix.job.target }}${{ matrix.job.extension }}
          filename: ${{ env.PROJECT_NAME }}-${{ matrix.job.target }}${{ matrix.job.archive_extension }}

      - name: Upload binaries to release
        uses: svenstaro/upload-release-action@v2
        with:
          repo_token: ${{ secrets.GITHUB_TOKEN }}
          file: target/${{ matrix.job.target }}/release/${{ env.PROJECT_NAME }}-${{ matrix.job.target }}${{ matrix.job.archive_extension }}
          asset_name: ${{ env.PROJECT_NAME }}-${{ github.ref_name }}-${{ matrix.job.target }}${{ matrix.job.archive_extension }}
          tag: ${{ github.ref }}
          overwrite: true

  publish:
    needs: [build]
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Set Toolchain
        uses: dtolnay/rust-toolchain@stable
        with:
          toolchain: stable

      - name: Rust Cache 
        uses: Swatinem/rust-cache@v2

      - run: cargo publish
        env:
          CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}