Skip to content

docs(en): apply factual corrections matching the Russian README #19

docs(en): apply factual corrections matching the Russian README

docs(en): apply factual corrections matching the Russian README #19

Workflow file for this run

name: CI
on:
push:
branches: ["**"]
tags: ["v*"]
pull_request:
branches: ["**"]
jobs:
# ----------------------------------------------------------------------------
# Plain build + tests on every push and PR.
# ----------------------------------------------------------------------------
build-test:
name: build & test (debian 13)
runs-on: ubuntu-latest
container: debian:13
steps:
- name: install deps
run: |
apt-get update
apt-get install -y --no-install-recommends \
build-essential cmake pkg-config git ca-certificates \
libsqlite3-dev libsodium-dev libmbedtls-dev libasio-dev \
nodejs npm python3
- uses: actions/checkout@v4
- name: build web bundle
working-directory: web
run: |
npm ci
npm run build
bash embed.sh
- run: cmake -B build -DCMAKE_BUILD_TYPE=Release
- run: cmake --build build -j
- run: ctest --test-dir build --output-on-failure
- working-directory: web
run: node --test tests/
# ----------------------------------------------------------------------------
# Server .deb packages (one per Debian release). Built via cpack -G DEB
# inside the matching distro container so dependency soname pinning matches
# the distro's libsodium / libmbedtls / libsqlite3 of that release.
# CLI is excluded from the .deb (BUILD_CLI=OFF) — distributed separately as
# a musl-static binary by `release-linux-cli`.
# ----------------------------------------------------------------------------
release-linux-deb:
name: release server .deb (debian ${{ matrix.debian }})
if: startsWith(github.ref, 'refs/tags/v')
needs: build-test
runs-on: ubuntu-latest
container: debian:${{ matrix.debian }}
strategy:
fail-fast: false
matrix:
debian: ["12", "13"]
env:
APP_VERSION: ${{ github.ref_name }}
steps:
- name: install deps
run: |
apt-get update
apt-get install -y --no-install-recommends \
build-essential cmake pkg-config git ca-certificates \
dpkg-dev file \
libsqlite3-dev libsodium-dev libmbedtls-dev libasio-dev \
nodejs npm python3
- uses: actions/checkout@v4
- name: build web bundle
working-directory: web
env:
APP_VERSION: ${{ github.ref_name }}
run: |
npm ci
npm run build
bash embed.sh
- name: configure & build (server only)
run: |
cmake -B build -DCMAKE_BUILD_TYPE=Release \
-DBUILD_SERVER=ON -DBUILD_CLI=OFF
cmake --build build -j
- name: cpack -> .deb
working-directory: build
run: |
cpack -G DEB
# Tag the file with the distro release for clarity in the GH release.
for f in *.deb; do
mv "$f" "${f%.deb}-debian${{ matrix.debian }}.deb"
done
ls -la *.deb
- uses: actions/upload-artifact@v4
with:
name: server-deb-debian${{ matrix.debian }}
path: build/*-debian${{ matrix.debian }}.deb
# ----------------------------------------------------------------------------
# Standalone musl-static `blin` for Linux. Built in Alpine so the result is
# a single self-contained binary that runs on any glibc/musl distro.
# ----------------------------------------------------------------------------
release-linux-cli:
name: release blin (linux musl static)
if: startsWith(github.ref, 'refs/tags/v')
needs: build-test
runs-on: ubuntu-latest
container: alpine:latest
env:
APP_VERSION: ${{ github.ref_name }}
steps:
- name: install deps
run: |
apk add --no-cache \
build-base cmake pkgconfig git linux-headers \
libsodium-dev libsodium-static \
mbedtls-dev mbedtls-static
- uses: actions/checkout@v4
- name: configure & build
run: |
cmake -B build -DCMAKE_BUILD_TYPE=Release \
-DBUILD_SERVER=OFF -DBUILD_CLI=ON -DBLIN_STATIC=ON
cmake --build build -j
file build/cli/blin || true
ldd build/cli/blin || true
- name: stage release
run: |
STAGE="blin-${GITHUB_REF_NAME}-linux-x86_64-static"
mkdir -p "$STAGE"
cp build/cli/blin "$STAGE/"
cp LICENSE README.md README_ru.md "$STAGE/" 2>/dev/null || true
tar czf "${STAGE}.tar.gz" "$STAGE"
- uses: actions/upload-artifact@v4
with:
name: blin-linux-static
path: blin-*-linux-x86_64-static.tar.gz
# ----------------------------------------------------------------------------
# Windows CLI build via vcpkg. Server is not built on Windows — only blin.exe.
# ----------------------------------------------------------------------------
release-windows:
name: release blin (windows)
if: startsWith(github.ref, 'refs/tags/v')
needs: build-test
runs-on: windows-latest
env:
APP_VERSION: ${{ github.ref_name }}
steps:
- uses: actions/checkout@v4
- name: vcpkg deps
run: |
vcpkg install libsodium:x64-windows-static-md mbedtls:x64-windows-static-md
shell: pwsh
- name: configure
run: |
cmake -B build -DCMAKE_BUILD_TYPE=Release `
-DBUILD_SERVER=OFF -DBUILD_CLI=ON `
-DCMAKE_TOOLCHAIN_FILE="$env:VCPKG_INSTALLATION_ROOT/scripts/buildsystems/vcpkg.cmake" `
-DVCPKG_TARGET_TRIPLET=x64-windows-static-md
shell: pwsh
- name: build
run: cmake --build build --config Release -j
- name: stage release
run: |
$stage = "blin-$($env:GITHUB_REF_NAME)-windows-x86_64"
New-Item -ItemType Directory -Path $stage | Out-Null
Copy-Item build\cli\Release\blin.exe -Destination $stage\
if (Test-Path LICENSE) { Copy-Item LICENSE $stage\ }
if (Test-Path README.md) { Copy-Item README.md $stage\ }
if (Test-Path README_ru.md) { Copy-Item README_ru.md $stage\ }
Compress-Archive -Path $stage -DestinationPath "$stage.zip"
shell: pwsh
- uses: actions/upload-artifact@v4
with:
name: blin-windows
path: blin-*-windows-*.zip
# ----------------------------------------------------------------------------
# Gather all artifacts and attach them to the GitHub Release for the tag.
# ----------------------------------------------------------------------------
publish-release:
name: publish github release
if: startsWith(github.ref, 'refs/tags/v')
needs: [release-linux-deb, release-linux-cli, release-windows]
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: actions/download-artifact@v4
with:
path: dist
- name: flatten
run: |
mkdir -p out
find dist -type f \
\( -name '*.deb' -o -name '*.tar.gz' -o -name '*.zip' \) \
-exec cp {} out/ \;
ls -la out
- uses: softprops/action-gh-release@v2
with:
files: out/*
generate_release_notes: true