Skip to content

Test iop validation during CI build on AOG-TaskController (#69) #8

Test iop validation during CI build on AOG-TaskController (#69)

Test iop validation during CI build on AOG-TaskController (#69) #8

Workflow file for this run

name: Release
on:
push:
tags:
- "v*"
permissions:
contents: write
jobs:
windows_release:
name: Windows Release (NSIS)
runs-on: windows-latest
steps:
- name: Checkout (full history)
uses: actions/checkout@v4
with:
submodules: recursive
fetch-depth: 0
- name: Ensure tag commit is on develop
shell: bash
run: |
set -euo pipefail
git fetch origin develop:refs/remotes/origin/develop
TAG_SHA="$(git rev-list -n 1 "$GITHUB_REF")"
echo "Tag ref: $GITHUB_REF"
echo "Tag SHA: $TAG_SHA"
if git merge-base --is-ancestor "$TAG_SHA" "origin/develop"; then
echo "OK: Tag commit is reachable from origin/develop"
else
echo "::error::Tag commit is NOT on develop. Refusing to release."
exit 1
fi
- name: Decide prerelease flag
shell: bash
# Pattern must match vMAJOR.MINOR.PATCH-beta.N; keep in sync with the
# regex used in CMakeLists.txt for git-tag-based version extraction.
run: |
set -euo pipefail
TAG="${GITHUB_REF_NAME}"
if [[ "$TAG" =~ ^v[0-9]+\.[0-9]+\.[0-9]+-beta\.[0-9]+$ ]]; then
IS_PRERELEASE=true
else
IS_PRERELEASE=false
fi
echo "PRERELEASE=${IS_PRERELEASE}" >> "$GITHUB_ENV"
echo "Tag: ${TAG}, Prerelease: ${IS_PRERELEASE}"
- name: Install NSIS
run: choco install nsis -y
- name: Configure (CMake)
run: cmake -S . -B build -DBUILD_EXAMPLES=OFF -DBUILD_TESTING=OFF -Wno-dev
- name: Build + Package (CPack/NSIS)
run: cmake --build build --config Release --target package
- name: Find installer
# CPack places the generated installer under this fixed directory when
# targeting the NSIS generator on Windows (win64). The same path is
# used in build.yml's upload-artifact step.
shell: pwsh
run: |
$installer = Get-ChildItem -Path "build/_CPack_Packages/win64/NSIS" -Filter *.exe -Recurse | Select-Object -First 1
if (-not $installer) { throw "Installer .exe not found" }
"INSTALLER_PATH=$($installer.FullName)" | Out-File -FilePath $env:GITHUB_ENV -Append
Write-Host "Found installer: $($installer.FullName)"
- name: Create GitHub Release and upload NSIS installer
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ github.ref_name }}
name: ${{ github.ref_name }}
generate_release_notes: true
prerelease: ${{ env.PRERELEASE }}
files: ${{ env.INSTALLER_PATH }}
linux_release:
name: Linux Release (${{ matrix.arch }})
runs-on: ${{ matrix.runner }}
strategy:
fail-fast: false
matrix:
include:
- arch: x86_64
runner: ubuntu-latest
- arch: aarch64
runner: ubuntu-24.04-arm
steps:
- name: Checkout (full history)
uses: actions/checkout@v4
with:
submodules: recursive
fetch-depth: 0
- name: Ensure tag commit is on develop
shell: bash
run: |
set -euo pipefail
git fetch origin develop:refs/remotes/origin/develop
TAG_SHA="$(git rev-list -n 1 "$GITHUB_REF")"
if git merge-base --is-ancestor "$TAG_SHA" "origin/develop"; then
echo "OK: Tag commit is reachable from origin/develop"
else
echo "::error::Tag commit is NOT on develop. Refusing to release."
exit 1
fi
- name: Decide prerelease flag
shell: bash
run: |
set -euo pipefail
TAG="${GITHUB_REF_NAME}"
if [[ "$TAG" =~ ^v[0-9]+\.[0-9]+\.[0-9]+-beta\.[0-9]+$ ]]; then
IS_PRERELEASE=true
else
IS_PRERELEASE=false
fi
echo "PRERELEASE=${IS_PRERELEASE}" >> "$GITHUB_ENV"
- name: Install build deps
run: |
sudo apt-get update
sudo apt-get install -y --no-install-recommends build-essential cmake ninja-build
- name: Configure (CMake)
run: cmake -S . -B build -G Ninja -DBUILD_EXAMPLES=OFF -DBUILD_TESTING=OFF -DCMAKE_BUILD_TYPE=Release -Wno-dev
- name: Build
run: cmake --build build --config Release
- name: Stage tarball
run: |
set -euo pipefail
STAGE="${{ github.workspace }}/stage/AOG-TaskController-${{ github.ref_name }}-linux-${{ matrix.arch }}"
mkdir -p "$STAGE/bin" "$STAGE/share/AOG-TaskController" "$STAGE/lib/systemd/system"
install -m 0755 build/AOG-TaskController "$STAGE/bin/AOG-TaskController"
install -m 0644 resources/linux/settings.sample.json "$STAGE/share/AOG-TaskController/settings.sample.json"
install -m 0644 resources/linux/aog-taskcontroller.service "$STAGE/lib/systemd/system/aog-taskcontroller.service"
cp LICENSE "$STAGE/LICENSE"
TARBALL="AOG-TaskController-${{ github.ref_name }}-linux-${{ matrix.arch }}.tar.gz"
tar -C "${{ github.workspace }}/stage" -czf "$TARBALL" "AOG-TaskController-${{ github.ref_name }}-linux-${{ matrix.arch }}"
echo "TARBALL_PATH=$TARBALL" >> "$GITHUB_ENV"
- name: Attach Linux tarball to release
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ github.ref_name }}
name: ${{ github.ref_name }}
generate_release_notes: true
prerelease: ${{ env.PRERELEASE }}
files: ${{ env.TARBALL_PATH }}