# build-linux.yml # Reusable workflow that builds the Linux and MacOS (x64 and xmd64) versions of Libation. --- name: build on: workflow_call: inputs: version_override: type: string description: 'Version number override' required: false run_unit_tests: type: boolean description: 'Skip running unit tests' required: false default: true env: DOTNET_CONFIGURATION: 'Release' DOTNET_VERSION: '7.0.x' RELEASE_NAME: 'chardonnay' jobs: build: runs-on: ubuntu-latest strategy: matrix: os: [Linux, MacOS] arch: [x64, arm64] steps: - uses: actions/checkout@v3 - name: Setup .NET uses: actions/setup-dotnet@v3 with: dotnet-version: ${{ env.DOTNET_VERSION }} env: NUGET_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Get version id: get_version run: | inputVersion="${{ inputs.version_override }}" if [[ "${#inputVersion}" -gt 0 ]] then version="${inputVersion}" else version="$(grep -oP '(?<=).*(?=> "${GITHUB_OUTPUT}" - name: Unit test if: ${{ inputs.run_unit_tests }} working-directory: ./Source run: dotnet test - name: Publish working-directory: ./Source run: | os=${{ matrix.os }} RUNTIME_IDENTIFIER="$(echo ${os,} | sed 's/macOS/osx/')-${{ matrix.arch }}" echo "$RUNTIME_IDENTIFIER" dotnet publish \ --runtime "$RUNTIME_IDENTIFIER" \ --configuration ${{ env.DOTNET_CONFIGURATION }} \ --output bin/Publish/${{ matrix.os }}-${{ matrix.arch }}-${{ env.RELEASE_NAME }} \ LibationAvalonia/LibationAvalonia.csproj \ -p:PublishProfile=LibationAvalonia/Properties/PublishProfiles/${{ matrix.os }}Profile.pubxml dotnet publish \ --runtime "$RUNTIME_IDENTIFIER" \ --configuration ${{ env.DOTNET_CONFIGURATION }} \ --output bin/Publish/${{ matrix.os }}-${{ matrix.arch }}-${{ env.RELEASE_NAME }} \ LoadByOS/${{ matrix.os }}ConfigApp/${{ matrix.os }}ConfigApp.csproj \ -p:PublishProfile=LoadByOS/Properties/${{ matrix.os }}ConfigApp/PublishProfiles/${{ matrix.os }}Profile.pubxml dotnet publish \ --runtime "$RUNTIME_IDENTIFIER" \ --configuration ${{ env.DOTNET_CONFIGURATION }} \ --output bin/Publish/${{ matrix.os }}-${{ matrix.arch }}-${{ env.RELEASE_NAME }} \ LibationCli/LibationCli.csproj \ -p:PublishProfile=LibationCli/Properties/PublishProfiles/${{ matrix.os }}Profile.pubxml dotnet publish \ --runtime "$RUNTIME_IDENTIFIER" \ --configuration ${{ env.DOTNET_CONFIGURATION }} \ --output bin/Publish/${{ matrix.os }}-${{ matrix.arch }}-${{ env.RELEASE_NAME }} \ HangoverAvalonia/HangoverAvalonia.csproj \ -p:PublishProfile=HangoverAvalonia/Properties/PublishProfiles/${{ matrix.os }}Profile.pubxml - name: Build bundle id: bundle working-directory: ./Source/bin/Publish/${{ matrix.os }}-${{ matrix.arch }}-${{ env.RELEASE_NAME }} run: | BUNDLE_DIR=$(pwd) echo "Bundle dir: ${BUNDLE_DIR}" cd .. SCRIPT=../../../Scripts/Bundle_${{ matrix.os }}.sh chmod +rx ${SCRIPT} ${SCRIPT} "${BUNDLE_DIR}" "${{ steps.get_version.outputs.version }}" "${{ matrix.arch }}" artifact=$(ls ./bundle) echo "artifact=${artifact}" >> "${GITHUB_OUTPUT}" - name: Publish bundle uses: actions/upload-artifact@v3 with: name: ${{ steps.bundle.outputs.artifact }} path: ./Source/bin/Publish/bundle/${{ steps.bundle.outputs.artifact }} if-no-files-found: error