name: Build

on:
  push:
    branches: [ "master" ]
    tags:
      - 'v*'
  pull_request:
    branches: [ "master" ]

env:
  CARGO_TERM_COLOR: always
  CARGO_TERM_PROGRESS_WHEN: never

jobs:
  build:
    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-latest, windows-latest]
    runs-on: ${{ matrix.os }}
    steps:
    - uses: actions/checkout@v3
    - uses: rui314/setup-mold@v1
      if: runner.os == 'Linux'
    - uses: awalsh128/cache-apt-pkgs-action@v1.3.0
      if: runner.os == 'Linux'
      with:
        packages: libudev-dev
        version: 1.0
    - uses: Swatinem/rust-cache@v2.3.0
    - name: Build
      run: cargo build
        --release
        --bin kubi
        --bin kubi-server
    - name: Create artifact
      shell: bash
      run: |
        mkdir artifact;
        cp ./target/release/kubi ./artifact;
        cp ./target/release/kubi-server ./artifact;
        cp -r ./assets ./artifact;
        cp ./Server.toml ./artifact;
    - uses: actions/upload-artifact@v3
      with:
        name: ${{ runner.os }}_${{ runner.arch }}
        path: ./artifact/*
        if-no-files-found: error
  
  publish-nightly:
    needs: build
    permissions: write-all
    if: (github.event_name == 'push') && (github.ref == 'refs/heads/master')
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions/download-artifact@v3
        with:
          path: ./artifacts
      - name: Delete existing tag
        continue-on-error: true
        run: |
          git push --delete origin refs/tags/nightly;
      - name: Create nightly tag
        continue-on-error: true
        run: |
          git tag nightly;
          git push origin nightly;
      - name: Create zip files
        run: |
          cd ./artifacts;
          for folder in */; do
            zip -r "${folder%/}.zip" "$folder"*;
            rm -rf "$folder";
          done;
          cd ..;
      - uses: ncipollo/release-action@v1
        with:
          name: nightly
          tag: nightly
          allowUpdates: true
          removeArtifacts: true
          replacesArtifacts: true
          prerelease: true
          generateReleaseNotes: true
          updateOnlyUnreleased: true
          artifacts: ./artifacts/*

  publish-release:
    needs: build
    permissions: write-all
    if: (github.event_name == 'push') && startsWith(github.ref, 'refs/tags/v')
    runs-on: ubuntu-latest
    steps:
    - uses: actions/download-artifact@v3
      with:
        path: ./artifacts
    - name: Create zip files
      run: |
        cd ./artifacts;
        for folder in */; do
        zip -r "${folder%/}.zip" "$folder"*;
        rm -rf "$folder";
        done;
        cd ..;
    - uses: rlespinasse/github-slug-action@v4.4.1
    - uses: ncipollo/release-action@v1
      with:
        tag: ${{ env.GITHUB_REF_SLUG_URL }}
        generateReleaseNotes: true
        makeLatest: true
        artifacts: ./artifacts/*