Skip to content

Build All Platforms #52

Build All Platforms

Build All Platforms #52

Workflow file for this run

name: Build All Platforms
on:
workflow_dispatch:
jobs:
build-windows:
runs-on: windows-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Setup .NET
uses: actions/setup-dotnet@v3
with:
dotnet-version: '9.0.x'
- name: Restore dependencies
run: dotnet restore
working-directory: ./YALCY
- name: Build
run: dotnet build --configuration Release
working-directory: ./YALCY
- name: Publish
run: dotnet publish -c Release -r win-x64 --self-contained=true --output ./publish
working-directory: ./YALCY
- name: Upload Windows Binaries
uses: actions/upload-artifact@v4
with:
name: windows-binaries
path: ./YALCY/publish
build-linux:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Setup .NET
uses: actions/setup-dotnet@v3
with:
dotnet-version: '9.0.x'
- name: Restore dependencies
run: dotnet restore
working-directory: ./YALCY
- name: Build
run: dotnet build --configuration Release
working-directory: ./YALCY
- name: Publish
run: dotnet publish -c Release -r linux-x64 --self-contained=true --output ./publish
working-directory: ./YALCY
- name: Upload Linux Binaries
uses: actions/upload-artifact@v4
with:
name: linux-binaries
path: ./YALCY/publish
build-macos:
runs-on: macos-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Setup .NET
uses: actions/setup-dotnet@v3
with:
dotnet-version: '9.0.x'
- name: Restore dependencies
run: dotnet restore
working-directory: ./YALCY
- name: Build
run: dotnet build --configuration Release
working-directory: ./YALCY
- name: Publish
run: dotnet publish -c Release -r osx-x64 --self-contained=true --output ./publish
working-directory: ./YALCY
- name: Upload macOS Binaries
uses: actions/upload-artifact@v4
with:
name: macos-binaries
path: ./YALCY/publish
release:
runs-on: ubuntu-latest
needs: [build-windows, build-linux, build-macos]
steps:
- name: Checkout code
uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Fetch all tags
run: git fetch --tags
- name: Determine next version
id: next_version
run: |
latest_tag=$(git describe --tags --abbrev=0 || echo "v0.0.0")
IFS='.' read -r major minor patch <<<"${latest_tag//v/}"
new_patch=$((patch + 1))
next_version="v$major.$minor.$new_patch"
echo "next_version=$next_version" >> $GITHUB_ENV
- name: Create Release
id: create_release
uses: actions/create-release@v1
with:
tag_name: ${{ env.next_version }}
release_name: "YALCY ${{ env.next_version }}"
body: |
Automatically generated release.
Includes:
- Windows x64 binaries
- Linux x64 binaries
- macOS x64 binaries
draft: false
prerelease: false
env:
GITHUB_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
- name: Debug Print upload URL from create-release
run: echo "Upload URL ${{ steps.create_release.outputs.upload_url }}"
- name: Save upload URL for macOS release
run: echo "${{ steps.create_release.outputs.upload_url }}" > upload_url.txt
- name: Debug Print upload_url.txt contents
run: cat upload_url.txt || echo "upload_url.txt is missing or empty!"
- name: Upload upload URL
uses: actions/upload-artifact@v4
with:
name: upload-url
path: upload_url.txt
- name: Download Windows Binaries
uses: actions/download-artifact@v4
with:
name: windows-binaries
path: ./windows
- name: Download Linux Binaries
uses: actions/download-artifact@v4
with:
name: linux-binaries
path: ./linux
- name: Zip Windows Binaries
run: |
cd ./windows
zip -r ../windows-x64-binaries.zip .
- name: Create Tarball for Linux Binaries
run: |
cd ./linux
tar -czvf ../linux-x64-binaries.tar.gz .
- name: Upload Windows Binaries to Release
uses: actions/upload-release-asset@v1
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ./windows-x64-binaries.zip
asset_name: windows-x64-binaries.zip
asset_content_type: application/zip
env:
GITHUB_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
- name: Upload Linux Binaries to Release
uses: actions/upload-release-asset@v1
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ./linux-x64-binaries.tar.gz
asset_name: linux-x64-binaries.tar.gz
asset_content_type: application/gzip
env:
GITHUB_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
create-dmg:
runs-on: macos-latest
needs: release
steps:
- name: Download macOS Binaries
uses: actions/download-artifact@v4
with:
name: macos-binaries
path: ./macos
- name: Download upload URL
uses: actions/download-artifact@v4
with:
name: upload-url
path: .
- name: Debug List files in workspace
run: ls -la
- name: Debug Print upload_url.txt
run: cat upload_url.txt || echo "upload_url.txt is missing or empty"
- name: Read upload URL
run: echo "UPLOAD_URL=$(cat upload_url.txt)" >> $GITHUB_ENV
- name: Debug Show stored UPLOAD_URL
run: echo "UPLOAD_URL=${{ env.UPLOAD_URL }}"
- name: Create DMG for macOS Binaries
run: |
hdiutil create -volname YALCY -srcfolder ./macos -ov -format UDZO ./macos-x64-binaries.dmg
- name: Upload macOS DMG to Release
uses: actions/upload-release-asset@v1
with:
upload_url: ${{ env.UPLOAD_URL }}
asset_path: ./macos-x64-binaries.dmg
asset_name: macos-x64-binaries.dmg
asset_content_type: application/x-apple-diskimage
env:
GITHUB_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }}