Add publish scripts, Gitea Actions workflow, and pre-built binary downloads to README
Build AD Bulk Tool / build (ubuntu-latest, linux-x64, ) (push) Failing after 7m11s
Build AD Bulk Tool / build (ubuntu-latest, win-x64, .exe) (push) Failing after 3m13s
Build AD Bulk Tool / build (macos-latest, osx-arm64, ) (push) Canceled after 0s
Build AD Bulk Tool / build (macos-latest, osx-x64, ) (push) Canceled after 0s

This commit is contained in:
mikisoq
2026-07-29 02:16:42 -01:00
parent 67599fb1e5
commit 1fbcf4fcdd
4 changed files with 150 additions and 33 deletions
+45
View File
@@ -0,0 +1,45 @@
name: Build AD Bulk Tool
on:
push:
branches: [main, feature/**, bugfix/**]
pull_request:
jobs:
build:
strategy:
matrix:
rid: [win-x64, linux-x64, osx-x64, osx-arm64]
include:
- rid: win-x64
os: ubuntu-latest
suffix: .exe
- rid: linux-x64
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: Upload artifact
uses: actions/upload-artifact@v4
with:
name: ADBulkTool-${{ matrix.rid }}
path: publish/${{ matrix.rid }}/ADBulkTool${{ matrix.suffix }}
+38 -33
View File
@@ -11,42 +11,34 @@ Cross-platform Avalonia UI app for bulk Active Directory operations from a CSV f
- Actions: enable, disable, add/remove from group, set/force password change - Actions: enable, disable, add/remove from group, set/force password change
- LDAP 389 for normal edits; LDAPS 636 required for password resets - LDAP 389 for normal edits; LDAPS 636 required for password resets
## Prerequisites ## Download
Pre-built binaries for each platform (no .NET SDK required):
| Platform | File |
|----------|------|
| Windows x64 | `ADBulkTool-win-x64.exe` |
| Linux x64 | `ADBulkTool-linux-x64` |
| macOS x64 | `ADBulkTool-macos-x64` |
| macOS ARM | `ADBulkTool-macos-arm64` |
Grab the latest from [Releases](https://gitea.mikisoq.cc/mikisoq/ADBulk/releases/latest).
## Build from source
### Prerequisites
- [.NET 8 SDK](https://dotnet.microsoft.com/download/dotnet/8.0) - [.NET 8 SDK](https://dotnet.microsoft.com/download/dotnet/8.0)
### Windows | Platform | Install |
|----------|---------|
| Windows | `winget install Microsoft.DotNet.SDK.8` |
| Arch-based | `sudo pacman -S dotnet-sdk-8.0` |
| Ubuntu / Debian | Register Microsoft repo then `sudo apt install dotnet-sdk-8.0` |
| Fedora / RHEL | `sudo dnf install dotnet-sdk-8.0` |
| macOS | `brew install dotnet-sdk-8.0` |
```powershell ### Run directly
winget install Microsoft.DotNet.SDK.8
```
### Linux (Arch-based)
```bash
sudo pacman -S dotnet-sdk-8.0
```
### Linux (Ubuntu / Debian)
```bash
# Register Microsoft repository, then:
sudo apt install dotnet-sdk-8.0
```
### Linux (Fedora / RHEL)
```bash
sudo dnf install dotnet-sdk-8.0
```
### macOS
```bash
brew install dotnet-sdk-8.0
```
## Install & Run
```bash ```bash
git clone https://gitea.mikisoq.cc/mikisoq/ADBulk.git git clone https://gitea.mikisoq.cc/mikisoq/ADBulk.git
@@ -56,7 +48,20 @@ dotnet build
dotnet run dotnet run
``` ```
On Windows, you can also open the folder in Visual Studio and run from there. ### Build standalone executables
```bash
# All platforms at once (Linux/macOS)
./scripts/publish-all.sh
# All platforms at once (Windows PowerShell)
.\scripts\publish-all.ps1
# Single platform
dotnet publish -c Release -r win-x64 --self-contained true -p:PublishSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=true
```
Output goes to `publish/` — a single .exe/binary per platform, no runtime needed.
## Quick start ## Quick start
+35
View File
@@ -0,0 +1,35 @@
param(
[string]$Version = "1.0.0"
)
$Project = "ADBulkTool.csproj"
$Config = "Release"
function Publish {
param([string]$Rid, [string]$Suffix)
Write-Host "Publishing for $Rid..."
dotnet publish $Project `
-c $Config `
-r $Rid `
--self-contained true `
-p:PublishSingleFile=true `
-p:IncludeNativeLibrariesForSelfExtract=true `
-p:Version=$Version `
-o "publish/$Suffix"
Write-Host " -> publish/$Suffix"
}
Push-Location (Split-Path $PSScriptRoot)
Publish "win-x64" "windows-x64"
Publish "linux-x64" "linux-x64"
Publish "osx-x64" "macos-x64"
Publish "osx-arm64" "macos-arm64"
Write-Host ""
Write-Host "All builds complete. Artifacts are in ./publish/"
Get-ChildItem ./publish/*/ | Select-Object Name, Length
Pop-Location
+32
View File
@@ -0,0 +1,32 @@
#!/usr/bin/env bash
set -euo pipefail
cd "$(dirname "$0")/.."
PROJECT="ADBulkTool.csproj"
CONFIG="Release"
VERSION="${1:-1.0.0}"
publish() {
local rid="$1"
local suffix="$2"
echo "Publishing for $rid..."
dotnet publish "$PROJECT" \
-c "$CONFIG" \
-r "$rid" \
--self-contained true \
-p:PublishSingleFile=true \
-p:IncludeNativeLibrariesForSelfExtract=true \
-p:Version="$VERSION" \
-o "publish/$suffix"
echo " -> publish/$suffix"
}
publish "win-x64" "windows-x64"
publish "linux-x64" "linux-x64"
publish "osx-x64" "macos-x64"
publish "osx-arm64" "macos-arm64"
echo ""
echo "All builds complete. Artifacts are in ./publish/"
ls -lh publish/*/