Test iop validation during CI build on AOG-TaskController (#69) #8
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 }} |