github-device-flow 0.2.1

Binary and library for performing the GitHub Device Flow
Documentation
name: Rust

on:
  push:
    branches: [ "main" ]
  pull_request:
    branches: [ "main" ]
    paths:
      - Cargo.*
      - .github/*
      - .github/workflows/build.yml
      - src/*

permissions:
  contents: read

env:
  CARGO_TERM_COLOR: always

jobs:
  build_x86_64:
    runs-on: ubuntu-latest
    steps:
    - name: Cache
      uses: actions/cache@v5
      with:
        path: |
          ~/.cargo/registry
          ~/.cargo/git
          target
        key: ${{ runner.os }}-1-cargo-${{ hashFiles('**/Cargo.lock') }}-${{ hashFiles('src/**.rs') }}
    - uses: actions/checkout@v5
    - name: Build x86_64 releases
      run: script/build-x86_64
    - name: Compress release assets
      run: |
          sudo chown -R runner:docker ./target
          pushd ./target/x86_64-unknown-linux-musl/release/
          zip -9 gh-device-flow.x86_64-linux.zip ./github-device-flow
          popd
          mv ./target/x86_64-unknown-linux-musl/release//gh-device-flow.x86_64-linux.zip .
    - name: Upload compiled artifact
      uses: actions/upload-artifact@v6
      with:
        name: gh-device-flow.x86_64-linux.zip
        path: gh-device-flow.x86_64-linux.zip

  build_arm:
    runs-on: ubuntu-latest
    steps:
    - name: Cache
      uses: actions/cache@v5
      with:
        path: |
          ~/.cargo/registry
          ~/.cargo/git
          target
        key: ${{ runner.os }}-1-cargo-${{ hashFiles('**/Cargo.lock') }}-${{ hashFiles('src/**.rs') }}
    - uses: actions/checkout@v5
    - name: Build ARM releases
      run: script/build-arm
    - name: Compress release assets
      run: |
          sudo chown -R runner:docker ./target
          pushd ./target/arm-unknown-linux-musleabihf/release/
          zip -9 gh-device-flow.arm-linux.zip ./github-device-flow
          popd
          mv ./target/arm-unknown-linux-musleabihf/release/gh-device-flow.arm-linux.zip .
    - name: Upload compiled artifact
      uses: actions/upload-artifact@v6
      with:
        name: gh-device-flow.arm-linux.zip
        path: gh-device-flow.arm-linux.zip

  build_armv7:
    runs-on: ubuntu-latest
    steps:
    - name: Cache
      uses: actions/cache@v5
      with:
        path: |
          ~/.cargo/registry
          ~/.cargo/git
          target
        key: ${{ runner.os }}-1-cargo-${{ hashFiles('**/Cargo.lock') }}-${{ hashFiles('src/**.rs') }}
    - uses: actions/checkout@v5
    - name: Build ARM releases
      run: script/build-armv7
    - name: Compress release assets
      run: |
          sudo chown -R runner:docker ./target
          pushd ./target/armv7-unknown-linux-musleabihf/release/
          zip -9 gh-device-flow.armv7-linux.zip ./github-device-flow
          popd
          mv ./target/armv7-unknown-linux-musleabihf/release/gh-device-flow.armv7-linux.zip .
    - name: Upload compiled artifact
      uses: actions/upload-artifact@v6
      with:
        name: gh-device-flow.armv7-linux.zip
        path: gh-device-flow.armv7-linux.zip

  build_macos:
    name: Build macos release
    runs-on: macos-latest
    steps:
      - uses: actions/checkout@v5
      - uses: actions/cache@v5
        id: cache-build
        with:
          path: |
            ~/.cargo/registry
            ~/.cargo/git
            target
          key: ${{ runner.os }}-macos-1-cargo-${{ hashFiles('**/Cargo.lock') }}-${{ hashFiles('src/**.rs') }}
      - name: Import Code-Signing Certificates
        uses: Apple-Actions/import-codesign-certs@v7
        with:
          # The certificates in a PKCS12 file encoded as a base64 string
          p12-file-base64: ${{ secrets.MACOS_CERTIFICATE }}
          # The password used to import the PKCS12 file.
          p12-password: ${{ secrets.MACOS_CERTIFICATE_PW }}
      - uses: actions-rust-lang/setup-rust-toolchain@v1
      - name: Build and sign release
        env:
          AC_USERNAME: ${{ secrets.AC_USERNAME }}
          AC_PASSWORD: ${{ secrets.AC_PASSWORD }}
          AC_PROVIDER: ${{ secrets.AC_PROVIDER }}
        run: |
          script/build-macos actions
      - name: Upload compiled artifact
        uses: actions/upload-artifact@v6
        with:
          name: github-device-flow.macos.zip
          path: github-device-flow.macos.zip

  create_release:
    permissions:
      contents: write
    runs-on: ubuntu-latest
    needs: [build_arm, build_armv7, build_macos, build_x86_64]
    if: github.ref == 'refs/heads/main'
    steps:
    - name: Create release
      id: create_release
      uses: actions/create-release@v1
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # This token is provided by Actions, you do not need to create your own token
      with:
          tag_name: release-${{ github.sha }}
          release_name: Release ${{ github.sha }}
          body: |
            Changes in this Release - Things.
          draft: false
          prerelease: false
    - name: Download all workflow run artifacts
      uses: actions/download-artifact@v5
    - name: Upload Release Asset x86_64
      uses: actions/upload-release-asset@v1
      env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      with:
          upload_url: ${{ steps.create_release.outputs.upload_url }}
          asset_path: ./gh-device-flow.x86_64-linux.zip/gh-device-flow.x86_64-linux.zip
          asset_name: gh-device-flow.x86_64-linux.zip
          asset_content_type: application/zip
    - name: Upload Release Asset ARM
      uses: actions/upload-release-asset@v1
      env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      with:
          upload_url: ${{ steps.create_release.outputs.upload_url }}
          asset_path: ./gh-device-flow.arm-linux.zip/gh-device-flow.arm-linux.zip
          asset_name: gh-device-flow.arm-linux.zip
          asset_content_type: application/zip
    - name: Upload Release Asset ARMv7
      uses: actions/upload-release-asset@v1
      env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      with:
          upload_url: ${{ steps.create_release.outputs.upload_url }}
          asset_path: ./gh-device-flow.armv7-linux.zip/gh-device-flow.armv7-linux.zip
          asset_name: gh-device-flow.armv7-linux.zip
          asset_content_type: application/zip
    - name: Upload Release Asset macos
      uses: actions/upload-release-asset@v1
      env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      with:
          upload_url: ${{ steps.create_release.outputs.upload_url }}
          asset_path: ./github-device-flow.macos.zip/github-device-flow.macos.zip
          asset_name: github-device-flow.macos.zip
          asset_content_type: application/zip