# SPDX-FileCopyrightText: 2025 William Bell # # SPDX-License-Identifier: GPL-3.0-or-later name: Build and Release on: push: tags: - '*' # Trigger on any tag push jobs: build_and_release: strategy: matrix: os: [ubuntu-latest, macos-latest, windows-latest] runs-on: ${{ matrix.os }} steps: - name: Checkout code uses: actions/checkout@v3 with: submodules: recursive - name: Setup Python (needed for Conan) uses: actions/setup-python@v4 with: python-version: '3.x' - name: Install Conan run: | python -m pip install --upgrade pip pip install conan shell: ${{ matrix.os == 'windows-latest' && 'pwsh' || 'bash' }} - name: Configure Conan run: conan profile detect shell: ${{ matrix.os == 'windows-latest' && 'pwsh' || 'bash' }} - name: Install dependencies and build with Conan run: | conan install . --build=missing conan build . shell: ${{ matrix.os == 'windows-latest' && 'pwsh' || 'bash' }} - name: Determine if prerelease id: prerelease_check run: | TAG=${GITHUB_REF##refs/tags/} if [[ "$TAG" == prerelease-* ]]; then echo "true" > prerelease.txt else echo "false" > prerelease.txt fi echo "prerelease=$(cat prerelease.txt)" >> $GITHUB_OUTPUT shell: ${{ matrix.os == 'windows-latest' && 'pwsh' || 'bash' }} - name: Archive build folder run: | TAG=${GITHUB_REF##refs/tags/} if [[ "$RUNNER_OS" == "Linux" ]]; then OS=linux ARCH=$(uname -m) FOLDER_NAME="chloride-$TAG-$OS-$ARCH" TAR_NAME="$FOLDER_NAME.tar.gz" mv build/bin "$FOLDER_NAME" cp LICENSE "$FOLDER_NAME" tar -czf "$TAR_NAME" "$FOLDER_NAME" elif [[ "$RUNNER_OS" == "macOS" ]]; then OS=macos ARCH=$(uname -m) FOLDER_NAME="chloride-$TAG-$OS-$ARCH" TAR_NAME="$FOLDER_NAME.tar.gz" mv build/bin "$FOLDER_NAME" cp LICENSE "$FOLDER_NAME" tar -czf "$TAR_NAME" "$FOLDER_NAME" else # Windows $TAG = $env:GITHUB_REF -replace 'refs/tags/', '' $ARCH = if ([Environment]::Is64BitOperatingSystem) { 'x64' } else { 'x86' } $FOLDER_NAME = "chloride-$TAG-windows-$ARCH" $TAR_NAME = "$FOLDER_NAME.zip" Rename-Item build\bin $FOLDER_NAME Copy-Item LICENSE $FOLDER_NAME Compress-Archive -Path $FOLDER_NAME -DestinationPath $TAR_NAME fi echo "TAR_NAME=$TAR_NAME" >> $GITHUB_ENV shell: ${{ matrix.os == 'windows-latest' && 'pwsh' || 'bash' }} - name: Create GitHub Release id: create_release uses: ncipollo/release-action@v1 with: tag: ${{ github.ref_name }} name: Release ${{ github.ref_name }} body: | Automated release based on tag ${{ github.ref_name }} draft: false prerelease: ${{ steps.prerelease_check.outputs.prerelease }} artifacts: ${{ env.TAR_NAME }}