quickraw 0.1.6

A pure rust library to handle camera raw files
Documentation
name: Build Release

on:
  push:
    branches: [ main ]
    
  workflow_dispatch:

env:
  EXE_NAME: quickraw

jobs:
  Build_Win:
    runs-on: windows-2019
    steps:
      - name: Check out repo
        uses: actions/checkout@v3
        with:
          fetch-depth: 0

      - name: Compile
        run: cargo build -r --all-features --bin quickraw

      - name: Upload traget bin
        uses: actions/upload-artifact@v3
        with:
          name: win.build
          path: target/release/${{ env.EXE_NAME }}.exe


  Build_MacOS:
    runs-on: macos-11
    steps:
      - name: Check out repo
        uses: actions/checkout@v3
        with:
          fetch-depth: 0

      - name: Compile
        run: |

          rustup target add aarch64-apple-darwin
          cargo build -r --all-features --bin quickraw
          cargo build -r --all-features --bin quickraw --target aarch64-apple-darwin
          lipo -create -output ./${{ env.EXE_NAME }} ./target/release/${{ env.EXE_NAME }} ./target/aarch64-apple-darwin/release/${{ env.EXE_NAME }}
          strip ./${{ env.EXE_NAME }}
          zip -9 ${{ env.EXE_NAME }}.zip ./${{ env.EXE_NAME }}
      
      - name: Codesign for macos build
        # GAS = Github Actions Secret
        # 0. create a new cert at https://developer.apple.com/account/resources/certificates/list.
        # 1. download cert.
        # 2. use keychain app to import the .cer cert in the `login` chains and to export it as a .p12 cert
        # 3. use `base64 the_dev_cert.p12 | pbcopy` to copy cert to clipboard and set to `GAS.MACOS_CERT`, 
        #    the password should be set to `GAS.MACOS_CERT_PWD`.
        # 4. Set the 10 chars in the parenthesis at the suffix of the cert id to `GAS.WWDRTEAMID`.
        # 5. Set the developer's apple id to `GAS.APPLE_ID`.
        # 6. Create an app specific password at https://appleid.apple.com/account/manage and set it to `GAS.APPLEID_APP_PWD`.

        env: 
          MACOS_CERT: ${{ secrets.MACOS_CERT }}
          MACOS_CERT_PWD: ${{ secrets.MACOS_CERT_PWD }}
          KEY_PWD: ${{ secrets.APPLEID_APP_PWD }}
          APPLEID_APP_PWD: ${{ secrets.APPLEID_APP_PWD }}
          WWDRTEAMID: ${{ secrets.WWDRTEAMID }}
          APPLE_ID: ${{ secrets.APPLE_ID }}
        if: ${{ env.APPLE_ID != '' }}
        run: |

          echo "$MACOS_CERT" | base64 -d > certificate.p12
          security create-keychain -p "$KEY_PWD" build.keychain 
          security default-keychain -s build.keychain
          security unlock-keychain -p "$KEY_PWD" build.keychain
          security import certificate.p12 -k build.keychain -P "$MACOS_CERT_PWD" -T /usr/bin/codesign
          security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k "$KEY_PWD" build.keychain
          codesign --options runtime --force --deep --sign "$WWDRTEAMID" ./${{ env.EXE_NAME }}

          zip -9 ${{ env.EXE_NAME }}.zip ./${{ env.EXE_NAME }}
          
          xcrun notarytool store-credentials "OLG" --apple-id "$APPLE_ID" --team-id "$WWDRTEAMID" --password "$APPLEID_APP_PWD"
          xcrun notarytool submit ${{ env.EXE_NAME }}.zip --keychain-profile "OLG" --wait

      - name: Upload traget bin
        uses: actions/upload-artifact@v3
        with:
          name: macos.build
          path: ./${{ env.EXE_NAME }}.zip


  Build_Linux:
    runs-on: ubuntu-20.04
    steps:
      - name: Check out repo
        uses: actions/checkout@v3
        with:
          fetch-depth: 0

      - name: Compile
        run: |

          cargo build -r --all-features --bin quickraw
          cd target/release
          strip ./${{ env.EXE_NAME }}
          zip -9 ${{ env.EXE_NAME }}.zip ./${{ env.EXE_NAME }}

      - name: Upload traget bin
        uses: actions/upload-artifact@v3
        with:
          name: linux.build
          path: target/release/${{ env.EXE_NAME }}.zip

  Release:
    needs: [Build_Win, Build_MacOS, Build_Linux]
    runs-on: ubuntu-20.04
    permissions: write-all
    steps:
      - name: Check out repo
        uses: actions/checkout@v3
        with:
          fetch-depth: 0

      - name: Remove local nightly tag
        run: git tag -d nightly || true

      - name: Set variables
        id: vars
        run: |

          echo "::set-output name=sha_short::$(git rev-parse --short HEAD)"
          echo "::set-output name=tag::$(git describe --tags HEAD)"

      - name: Download previous builds
        uses: actions/download-artifact@v2

      - name: Extract artifacts
        run: |

          7z x *.build
          mv win.build/* ./${{ env.EXE_NAME }}-win.exe
          mv macos.build/* ./${{ env.EXE_NAME }}-macos.zip
          mv linux.build/* ./${{ env.EXE_NAME }}-linux.zip

      - name: Get packages file name
        id: names
        run: |

          echo "::set-output name=win_build::${{ env.EXE_NAME }}-win.exe"
          echo "::set-output name=macos_build::${{ env.EXE_NAME }}-macos.zip"
          echo "::set-output name=linux_build::${{ env.EXE_NAME }}-linux.zip"

      # Publish builds
      - name: Remove nightly tag 
        uses: dev-drprasad/delete-tag-and-release@v0.2.0
        with:
          delete_release: true
          tag_name: nightly
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 

      # Create nightly release as prerelease
      - name: Create nightly prerelease
        id: nightly_prerelease
        uses: actions/create-release@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          tag_name: nightly
          release_name: Nightly builds - ${{ steps.vars.outputs.sha_short }}
          prerelease: true
          draft: false
          body: Automated builds for nightly prerelease via Github Actions

      - name: Upload linux nightly build
        uses: actions/upload-release-asset@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          upload_url: ${{ steps.nightly_prerelease.outputs.upload_url }}
          asset_path: ${{ steps.names.outputs.linux_build }}
          asset_name: ${{ steps.names.outputs.linux_build }}
          asset_content_type: application/zip

      - name: Upload win nightly build
        uses: actions/upload-release-asset@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          upload_url: ${{ steps.nightly_prerelease.outputs.upload_url }}
          asset_path: ${{ steps.names.outputs.win_build }}
          asset_name: ${{ steps.names.outputs.win_build }}
          asset_content_type: application/octet-stream

      - name: Upload macos nightly build
        uses: actions/upload-release-asset@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          upload_url: ${{ steps.nightly_prerelease.outputs.upload_url }}
          asset_path: ${{ steps.names.outputs.macos_build }}
          asset_name: ${{ steps.names.outputs.macos_build }}
          asset_content_type: application/zip