aftman 0.2.8

Aftman is a command line toolchain manager
name: Release

on:
  push:
    tags: ["v*"]

jobs:
  create-release:
    name: Create Release
    runs-on: ubuntu-latest
    outputs:
      upload_url: ${{ steps.create_release.outputs.upload_url }}
    steps:
      - name: Create Release
        id: create_release
        uses: actions/create-release@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          tag_name: ${{ github.ref }}
          release_name: ${{ github.ref }}
          draft: true
          prerelease: false

  build:
    needs: ["create-release"]
    strategy:
      fail-fast: false
      matrix:
        # https://doc.rust-lang.org/rustc/platform-support.html
        include:
          - host: linux
            os: ubuntu-18.04
            target: x86_64-unknown-linux-gnu
            label: linux-x86_64

          - host: windows
            os: windows-latest
            target: x86_64-pc-windows-msvc
            label: windows-x86_64

          - host: macos
            os: macos-latest
            target: x86_64-apple-darwin
            label: macos-x86_64

          - host: macos
            os: macos-latest
            target: aarch64-apple-darwin
            label: macos-aarch64

    name: Build (${{ matrix.target }})
    runs-on: ${{ matrix.os }}
    env:
      BIN: aftman
    steps:
      - uses: actions/checkout@v3

      - name: Get Version from Tag
        shell: bash
        # https://github.community/t/how-to-get-just-the-tag-name/16241/7#M1027
        run: |
          echo "PROJECT_VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_ENV
          echo "Version is: ${{ env.PROJECT_VERSION }}"

      - name: Install Rust
        uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
          target: ${{ matrix.target }}
          override: true
          profile: minimal

      - name: Build Release
        run: cargo build --release --locked --verbose --target ${{ matrix.target }}
        env:
          # Build into a known directory so we can find our build artifact more
          # easily.
          CARGO_TARGET_DIR: output

          # On platforms that use OpenSSL, ensure it is statically linked to
          # make binaries more portable.
          OPENSSL_STATIC: 1

      - name: Create Release Archive
        shell: bash
        run: |
          mkdir staging

          if [ "${{ matrix.host }}" = "windows" ]; then
            cp "output/${{ matrix.target }}/release/$BIN.exe" staging/
            cd staging
            7z a ../release.zip *
          else
            cp "output/${{ matrix.target }}/release/$BIN" staging/
            cd staging
            zip ../release.zip *
          fi

      - name: Upload Archive to Release
        uses: actions/upload-release-asset@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          upload_url: ${{ needs.create-release.outputs.upload_url }}
          asset_path: release.zip
          asset_name: ${{ env.BIN }}-${{ env.PROJECT_VERSION }}-${{ matrix.label }}.zip
          asset_content_type: application/octet-stream

      - name: Upload Archive to Artifacts
        uses: actions/upload-artifact@v3
        with:
          name: ${{ env.BIN }}-${{ env.PROJECT_VERSION }}-${{ matrix.label }}.zip
          path: release.zip