Skip to content

Commit

Permalink
Merge pull request #6 from Candinya/master
Browse files Browse the repository at this point in the history
feat(ci): 跨平台自动构建流水线
  • Loading branch information
LiuYunPlayer authored May 14, 2024
2 parents 6426cd2 + e089449 commit 88f4c9c
Showing 1 changed file with 131 additions and 40 deletions.
171 changes: 131 additions & 40 deletions .github/workflows/build-artifacts.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,10 @@ on:
jobs:

build-windows:
name: Build windows version
name: Build Windows version

strategy:
matrix:
configuration: [ "Release" ] # [Debug, Release]
runtime: [ "win-x64" ]

runs-on: windows-latest
Expand All @@ -28,27 +27,13 @@ jobs:
with:
fetch-depth: 0

# Install the .NET Core workload
- name: Install .NET Core
uses: actions/setup-dotnet@v4
with:
dotnet-version: 8.0.x

# Add MSBuild to the PATH: https://github.com/microsoft/setup-msbuild
- name: Setup MSBuild
uses: microsoft/setup-msbuild@v2

# Restore the application to populate the obj folder with RuntimeIdentifiers
- name: Restore the application
run: msbuild TuneLab.sln /t:Restore /p:Configuration=$env:Configuration
env:
Configuration: ${{ matrix.configuration }}

# Create the app package by building and packaging the Windows Application Packaging project
- name: Create the app package
run: msbuild TuneLab\TuneLab.csproj /p:Configuration=$env:Configuration
env:
Configuration: ${{ matrix.configuration }}
- name: Build the application
run: dotnet publish --configuration Release -r ${{ matrix.runtime }}

- name: Set short SHA as package name
if: "!startsWith(github.event.ref, 'refs/tags/')"
Expand All @@ -62,45 +47,151 @@ jobs:
if: startsWith(github.event.ref, 'refs/tags/')
run: echo "ARCHIVE_NAME=TuneLab-${{ matrix.runtime }}-${env:TAG_NAME}" >> $env:GITHUB_ENV

- name: Split runtimes
shell: pwsh
run: |
Move-Item -Path TuneLab\bin\${{ matrix.configuration }}\net8.0\runtimes -Destination runtimes
- name: Move artifacts
shell: pwsh
run: |
Move-Item -Path TuneLab\bin\${{ matrix.configuration }}\net8.0 -Destination workspace
run: Move-Item -Path TuneLab\bin\Release\net8.0\${{ matrix.runtime }}\publish -Destination workspace

- name: Prepare runtime directory
- name: Pack artifacts
shell: pwsh
run: |
# Prepare workspace dir
New-Item -ItemType Directory workspace\runtimes
run: Compress-Archive -Path workspace\* -DestinationPath ${env:ARCHIVE_NAME}'.zip'

- name: Copy specific runtime only
shell: pwsh
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: ${{ env.ARCHIVE_NAME }}
path: workspace

- name: Upload release artifacts
if: startsWith(github.event.ref, 'refs/tags/')
uses: actions/upload-artifact@v4
with:
name: ${{ env.ARCHIVE_NAME }}.zip
path: ${{ env.ARCHIVE_NAME }}.zip
retention-days: 1


build-macos:
name: Build macOS version

strategy:
matrix:
runtime: [ "osx-arm64" ]

runs-on: macos-latest

steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Install .NET Core
uses: actions/setup-dotnet@v4
with:
dotnet-version: 8.0.x

- name: Build the application
run: dotnet publish --configuration Release -r ${{ matrix.runtime }}

- name: Set short SHA as package name
if: "!startsWith(github.event.ref, 'refs/tags/')"
run: echo "ARCHIVE_NAME=TuneLab-${{ matrix.runtime }}-$(git rev-parse --short HEAD)" >> $GITHUB_ENV

- name: Set tag version into env
if: startsWith(github.event.ref, 'refs/tags/')
run: echo "TAG_NAME=$GITHUB_REF_NAME" >> $GITHUB_ENV

- name: Set tag version as package name
if: startsWith(github.event.ref, 'refs/tags/')
run: echo "ARCHIVE_NAME=TuneLab-${{ matrix.runtime }}-$TAG_NAME" >> $GITHUB_ENV

- name: Move artifacts
run: mv TuneLab/bin/Release/net8.0/${{ matrix.runtime }}/publish workspace

- name: Pack artifacts
run: |
Move-Item -Path runtimes\${{ matrix.runtime }} -Destination workspace\runtimes\${{ matrix.runtime }}
cd workspace
tar -zcvf ../$ARCHIVE_NAME.tar.gz .
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: ${{ env.ARCHIVE_NAME }}.tar.gz
path: ${{ env.ARCHIVE_NAME }}.tar.gz


build-linux:
name: Build Linux version

strategy:
matrix:
runtime: [ "linux-x64" ]

runs-on: ubuntu-latest

steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Install .NET Core
uses: actions/setup-dotnet@v4
with:
dotnet-version: 8.0.x

- name: Build the application
run: dotnet publish --configuration Release -r ${{ matrix.runtime }}

- name: Set short SHA as package name
if: "!startsWith(github.event.ref, 'refs/tags/')"
run: echo "ARCHIVE_NAME=TuneLab-${{ matrix.runtime }}-$(git rev-parse --short HEAD)" >> $GITHUB_ENV

- name: Set tag version into env
if: startsWith(github.event.ref, 'refs/tags/')
run: echo "TAG_NAME=$GITHUB_REF_NAME" >> $GITHUB_ENV

- name: Set tag version as package name
if: startsWith(github.event.ref, 'refs/tags/')
run: echo "ARCHIVE_NAME=TuneLab-${{ matrix.runtime }}-$TAG_NAME" >> $GITHUB_ENV

- name: Move artifacts
run: mv TuneLab/bin/Release/net8.0/${{ matrix.runtime }}/publish workspace

- name: Pack artifacts
shell: pwsh
run: |
Compress-Archive -Path workspace\* -DestinationPath ${env:ARCHIVE_NAME}'.zip'
cd workspace
tar -zcvf ../$ARCHIVE_NAME.tar.gz .
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: ${{ env.ARCHIVE_NAME }}
path: workspace
name: ${{ env.ARCHIVE_NAME }}.tar.gz
path: ${{ env.ARCHIVE_NAME }}.tar.gz


prepare-release:
name: Prepare release
if: startsWith(github.event.ref, 'refs/tags/')
needs:
- build-windows
- build-macos
- build-linux

runs-on: ubuntu-latest
steps:

- name: Download artifacts
uses: actions/download-artifact@v4
with:
merge-multiple: true

- name: Create release (draft)
if: startsWith(github.event.ref, 'refs/tags/')
uses: softprops/action-gh-release@v2
with:
name: TuneLab - ${{ env.TAG_NAME }}
tag_name: ${{ env.TAG_NAME }}
name: TuneLab - ${{ github.ref_name }}
generate_release_notes: true
draft: true
files: |
${{ env.ARCHIVE_NAME }}.zip
TuneLab-*.zip
# TuneLab-*.tar.gz # 因为还没有解决跨平台的问题所以这个先注释掉,等跨平台完成了就可以去掉这个注释一并发布 linux 和 osx 的版本了

0 comments on commit 88f4c9c

Please sign in to comment.