name: Rust -> Build & Test & Release on: push: branches: [ "main" ] pull_request: branches: [ "main" ] env: CARGO_TERM_COLOR: always jobs: build_linux: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Build run: cargo build --release --verbose - name: Run tests run: cargo test --verbose - name: Upload Linux Binary uses: actions/upload-artifact@v3 with: name: rust_tcp_file_transfer_linux_x64_86 path: target/release/*transfer build_windows: runs-on: windows-latest steps: - uses: actions/checkout@v3 - name: Build run: cargo build --release --verbose - name: Run tests run: cargo test --verbose - name: Upload Windows Binary uses: actions/upload-artifact@v3 with: name: rust_tcp_file_transfer_windows_x64_86 path: target/release/*transfer.exe build_macos: runs-on: macos-latest steps: - uses: actions/checkout@v3 - name: Build run: cargo build --release --verbose - name: Run tests run: cargo test --verbose - name: Upload MacOS Binary uses: actions/upload-artifact@v3 with: name: rust_tcp_file_transfer_macos_x64_86 path: target/release/*transfer release: needs: [build_linux, build_windows, build_macos] runs-on: ubuntu-latest permissions: contents: write steps: - uses: actions/checkout@v3 - name: Forge a Folder run: mkdir Downloads working-directory: /home/runner/work/rust-tcp-file-transfer/rust-tcp-file-transfer/ - uses: actions/download-artifact@v3 name: Download with: path: Downloads/ - name: Git Commit SHA id: vars run: | calculatedSha=$(git rev-parse --short ${{ github.sha }}) echo "short_sha=$calculatedSha" >> $GITHUB_OUTPUT - name: Release uses: softprops/action-gh-release@v0.1.15 with: tag_name: ${{ steps.vars.outputs.short_sha }} generate_release_notes: true files: | /home/runner/work/rust-tcp-file-transfer/rust-tcp-file-transfer/Downloads/*linux*/*linux* /home/runner/work/rust-tcp-file-transfer/rust-tcp-file-transfer/Downloads/*windows*/*windows* /home/runner/work/rust-tcp-file-transfer/rust-tcp-file-transfer/Downloads/*macos*/*macos*