Skip to content

chore(release): 0.3.3 #20

chore(release): 0.3.3

chore(release): 0.3.3 #20

Workflow file for this run

# BLite Server — Release Pipeline
# Copyright (C) 2026 Luca Fabbri — AGPL-3.0
#
# Triggered by version tags (v*.*.*).
# Produces:
# • Docker image pushed to ghcr.io/entgldb/blite-server
# • Docker image pushed to docker.io/mrdevrobotentgldb/blite-server
# • NuGet package BLite.Client published to nuget.org
# • Windows installer (.exe) built with Inno Setup 6
# • Linux tarball (.tar.gz) with self-contained binary + install.sh
# • GitHub Release with all artifacts attached
name: Release
on:
push:
tags:
- "v*.*.*"
permissions:
contents: write # create GitHub Release + upload assets
packages: write # push to ghcr.io
jobs:
# ── NuGet packages ──────────────────────────────────────────────────────────
nuget-client:
name: Pack & Publish BLite.Client + BLite.Proto
runs-on: ubuntu-latest
steps:
- name: Checkout BLite.Server
uses: actions/checkout@v4
with:
path: BLite.Server
- name: Extract version
id: version
run: echo "version=${GITHUB_REF_NAME#v}" >> "$GITHUB_OUTPUT"
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: "10.0.x"
- name: Pack BLite.Proto
run: >
dotnet pack BLite.Server/src/BLite.Proto/BLite.Proto.csproj
--configuration Release
--output artifacts/nuget
-p:Version=${{ steps.version.outputs.version }}
--nologo
- name: Pack BLite.Client
run: >
dotnet pack BLite.Server/src/BLite.Client/BLite.Client.csproj
--configuration Release
--output artifacts/nuget
-p:Version=${{ steps.version.outputs.version }}
--nologo
- name: Publish BLite.Proto to NuGet.org
run: >
dotnet nuget push "artifacts/nuget/BLite.Proto.${{ steps.version.outputs.version }}.nupkg"
--source https://api.nuget.org/v3/index.json
--api-key ${{ secrets.NUGET_API_KEY }}
--skip-duplicate
- name: Publish BLite.Client to NuGet.org
run: >
dotnet nuget push "artifacts/nuget/BLite.Client.${{ steps.version.outputs.version }}.nupkg"
--source https://api.nuget.org/v3/index.json
--api-key ${{ secrets.NUGET_API_KEY }}
--skip-duplicate
# ── Docker image ─────────────────────────────────────────────────────────────
docker:
name: Build & Push Docker Image
runs-on: ubuntu-latest
steps:
- name: Checkout BLite.Server
uses: actions/checkout@v4
with:
path: BLite.Server
- name: Checkout BLite engine (sibling repo)
uses: actions/checkout@v4
with:
repository: EntglDb/BLite
path: BLite
- name: Extract version
id: version
run: echo "version=${GITHUB_REF_NAME#v}" >> "$GITHUB_OUTPUT"
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Log in to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Log in to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and push image
uses: docker/build-push-action@v6
with:
# Build context is the workspace root so that both BLite.Server/ and
# BLite/ are visible to the Dockerfile COPY instructions.
context: ${{ github.workspace }}
file: BLite.Server/Dockerfile
push: true
platforms: linux/amd64
tags: |
ghcr.io/entgldb/blite-server:${{ steps.version.outputs.version }}
ghcr.io/entgldb/blite-server:latest
mrdevrobotentgldb/blite-server:${{ steps.version.outputs.version }}
mrdevrobotentgldb/blite-server:latest
cache-from: type=gha
cache-to: type=gha,mode=max
build-args: |
VERSION=${{ steps.version.outputs.version }}
# ── Windows installer ─────────────────────────────────────────────────────────
windows-installer:
name: Build Windows Installer
runs-on: windows-latest
steps:
- name: Checkout BLite.Server
uses: actions/checkout@v4
with:
path: BLite.Server
- name: Checkout BLite engine (sibling repo)
uses: actions/checkout@v4
with:
repository: EntglDb/BLite
path: BLite
- name: Extract version
id: version
shell: bash
run: echo "version=${GITHUB_REF_NAME#v}" >> "$GITHUB_OUTPUT"
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: "10.0.x"
- name: Publish self-contained win-x64
run: >
dotnet publish BLite.Server/src/BLite.Server/BLite.Server.csproj
--configuration Release
--runtime win-x64
--self-contained true
--output artifacts/win-x64
-p:Version=${{ steps.version.outputs.version }}
- name: Install Inno Setup 6
run: choco install innosetup --no-progress --yes
- name: Build Windows installer
shell: cmd
run: >
"C:\Program Files (x86)\Inno Setup 6\ISCC.exe"
/DSourceDir="%GITHUB_WORKSPACE%\artifacts\win-x64"
/DAppVersion="${{ steps.version.outputs.version }}"
"%GITHUB_WORKSPACE%\BLite.Server\deploy\windows\blite-server.iss"
- name: Upload Windows installer artifact
uses: actions/upload-artifact@v4
with:
name: windows-installer
path: BLite.Server/deploy/windows/Output/*.exe
if-no-files-found: error
# ── Linux installer ───────────────────────────────────────────────────────────
linux-installer:
name: Build Linux Installer
runs-on: ubuntu-latest
steps:
- name: Checkout BLite.Server
uses: actions/checkout@v4
with:
path: BLite.Server
- name: Checkout BLite engine (sibling repo)
uses: actions/checkout@v4
with:
repository: EntglDb/BLite
path: BLite
- name: Extract version
id: version
run: echo "version=${GITHUB_REF_NAME#v}" >> "$GITHUB_OUTPUT"
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: "10.0.x"
- name: Publish self-contained linux-x64
run: >
dotnet publish BLite.Server/src/BLite.Server/BLite.Server.csproj
--configuration Release
--runtime linux-x64
--self-contained true
--output artifacts/linux-x64
-p:Version=${{ steps.version.outputs.version }}
- name: Assemble tarball
run: |
BUNDLE_DIR="blite-server-${{ steps.version.outputs.version }}-linux-x64"
mkdir -p "$BUNDLE_DIR/bin"
# Published binary + all runtime files
cp -r artifacts/linux-x64/. "$BUNDLE_DIR/bin/"
# Installer script and systemd unit
cp BLite.Server/deploy/linux/install.sh "$BUNDLE_DIR/"
cp BLite.Server/deploy/linux/blite-server.service "$BUNDLE_DIR/"
chmod +x "$BUNDLE_DIR/install.sh"
chmod +x "$BUNDLE_DIR/bin/BLite.Server"
tar -czf "${BUNDLE_DIR}.tar.gz" "$BUNDLE_DIR"
- name: Upload Linux installer artifact
uses: actions/upload-artifact@v4
with:
name: linux-installer
path: "blite-server-${{ steps.version.outputs.version }}-linux-x64.tar.gz"
if-no-files-found: error
# ── npm package (TypeScript client) ─────────────────────────────────────────
npm-client:
name: Pack & Publish blite-client (npm)
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Extract version
id: version
run: echo "version=${GITHUB_REF_NAME#v}" >> "$GITHUB_OUTPUT"
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "22"
registry-url: "https://registry.npmjs.org"
- name: Install dependencies
working-directory: src/BLite.Client.TypeScript
run: npm install
- name: Set version
working-directory: src/BLite.Client.TypeScript
run: npm pkg set version=${{ steps.version.outputs.version }}
- name: Build
working-directory: src/BLite.Client.TypeScript
run: npm run build
- name: Publish to npm
working-directory: src/BLite.Client.TypeScript
run: npm publish --access public
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
# ── Maven Central (Java client) ──────────────────────────────────────────────
maven-central-client:
name: Publish BLite.Client.Java to Maven Central
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Extract version
id: version
run: echo "version=${GITHUB_REF_NAME#v}" >> "$GITHUB_OUTPUT"
- name: Setup Java 17
uses: actions/setup-java@v4
with:
java-version: "17"
distribution: "temurin"
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4
- name: Decode GPG signing key
run: |
{
echo 'ORG_GRADLE_PROJECT_signingInMemoryKey<<EOF'
echo "${{ secrets.GPG_SIGNING_KEY }}" | base64 --decode
echo 'EOF'
} >> "$GITHUB_ENV"
- name: Publish to Maven Central
working-directory: src/BLite.Client.Java
run: gradle publish -Pversion=${{ steps.version.outputs.version }}
env:
ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.MAVEN_CENTRAL_USERNAME }}
ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ secrets.MAVEN_CENTRAL_PASSWORD }}
ORG_GRADLE_PROJECT_signingInMemoryKeyPassword: ${{ secrets.GPG_SIGNING_PASSWORD }}
# signingInMemoryKey is injected from the decode step via $GITHUB_ENV
# ── GitHub Release ────────────────────────────────────────────────────────────
release:
name: Create GitHub Release
runs-on: ubuntu-latest
needs: [nuget-client, npm-client, maven-central-client, docker, windows-installer, linux-installer]
steps:
- name: Download Windows installer
uses: actions/download-artifact@v4
with:
name: windows-installer
path: release-assets/
- name: Download Linux installer
uses: actions/download-artifact@v4
with:
name: linux-installer
path: release-assets/
- name: Create GitHub Release
uses: softprops/action-gh-release@v2
with:
files: release-assets/*
generate_release_notes: true
body: |
## Docker
```bash
docker pull ghcr.io/entgldb/blite-server:${{ github.ref_name }}
# or
docker pull mrdevrobotentgldb/blite-server:${{ github.ref_name }}
docker run -d \
-e Auth__RootKey=<your-secret-key> \
-p 2626:2626 \
-p 2627:2627 \
-v blite-data:/data \
ghcr.io/entgldb/blite-server:${{ github.ref_name }}
```
## Windows
Run the `.exe` installer as Administrator. The wizard will ask for ports,
a root API key, and the source URL (required for AGPLv3 §13 compliance).
BLite Server is registered as a Windows Service and starts automatically.
## Linux
```bash
tar -xzf blite-server-*-linux-x64.tar.gz
cd blite-server-*-linux-x64
sudo ./install.sh
```
The installer creates a `blite` system user, installs the binary to
`/opt/blite-server`, and registers a systemd service.
> **AGPLv3 notice** — source code is available at
> https://github.com/EntglDb/BLite.Server