name: Build AD Bulk Tool on: push: branches: [main, feature/**, bugfix/**] pull_request: jobs: build: strategy: matrix: rid: [win-x64, linux-x64, linux-arm64, osx-x64, osx-arm64] include: - rid: win-x64 os: ubuntu-latest suffix: .exe - rid: linux-x64 os: ubuntu-latest suffix: '' - rid: linux-arm64 os: ubuntu-latest suffix: '' - rid: osx-x64 os: macos-latest suffix: '' - rid: osx-arm64 os: macos-latest suffix: '' runs-on: ${{ matrix.os }} steps: - name: Checkout uses: actions/checkout@v4 - name: Setup .NET uses: actions/setup-dotnet@v4 with: dotnet-version: '8.0.x' - name: Publish (${{ matrix.rid }}) run: dotnet publish ADBulkTool.csproj -c Release -r ${{ matrix.rid }} --self-contained true -p:PublishSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=true -o publish/${{ matrix.rid }} - name: Build .deb (linux-x64 only) if: matrix.rid == 'linux-x64' run: | chmod +x packaging/build-deb.sh packaging/build-deb.sh publish/linux-x64/ADBulkTool "${GITHUB_REF_NAME:-1.0.0}" - name: Upload binary uses: actions/upload-artifact@v4 with: name: ADBulkTool-${{ matrix.rid }} path: publish/${{ matrix.rid }}/ADBulkTool${{ matrix.suffix }} packaging: needs: [build] runs-on: ubuntu-latest if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v') steps: - name: Checkout uses: actions/checkout@v4 - name: Download all binaries uses: actions/download-artifact@v4 - name: Create release run: | set -x # Build .deb from the linux-x64 binary mkdir -p deb_root/DEBIAN deb_root/usr/bin cp ADBulkTool-linux-x64/ADBulkTool deb_root/usr/bin/adbulktool chmod 755 deb_root/usr/bin/adbulktool VERSION="${GITHUB_REF_NAME#v}" sed "s/Version: 1.0.0/Version: $VERSION/" packaging/debian/DEBIAN/control > deb_root/DEBIAN/control dpkg-deb --root-owner-group --build deb_root "ADBulkTool-linux-x64/adbulktool_${VERSION}_amd64.deb" # Copy PKGBUILD for Arch cp packaging/arch/PKGBUILD packaging/arch/.INSTALL ADBulkTool-linux-x64/ # Upload all as release assets for dir in ADBulkTool-*/; do for file in "$dir"*; do if [ -f "$file" ]; then echo "Uploading: $file" fi done done