diff --git a/.github/actions/framework-download/action.yml b/.github/actions/framework-download/action.yml deleted file mode 100644 index 6d34b86..0000000 --- a/.github/actions/framework-download/action.yml +++ /dev/null @@ -1,50 +0,0 @@ -name: Download openDAQ framework package -description: "Download a package from S3 for Linux or Windows" - -inputs: - src-opendaq-framework-dev: - required: true - description: "S3 path to the package" - dst-opendaq-framework-dev: - required: false - default: ${{ runner.temp }} - description: "Destination path for downloaded package" - - aws_access_key_id: - required: true - description: "AWS Access Key ID" - aws_secret_access_key: - required: true - description: "AWS Secret Access Key" - aws_region: - required: true - description: "AWS Region" - -runs: - using: composite - steps: - - name: Configure AWS - uses: aws-actions/configure-aws-credentials@v4 - with: - aws-access-key-id: ${{ inputs.aws_access_key_id }} - aws-secret-access-key: ${{ inputs.aws_secret_access_key }} - aws-region: ${{ inputs.aws_region }} - - - name: Download package from S3 (Linux/macOS) - if: runner.os != 'Windows' - shell: bash - run: | - set -e - DST="${{ inputs.dst-opendaq-framework-dev }}" - SRC="${{ inputs.src-opendaq-framework-dev }}" - echo "Downloading $SRC to $DST" - aws s3 cp "$SRC" "$DST" - - - name: Download package from S3 (Windows) - if: runner.os == 'Windows' - shell: pwsh - run: | - $dst = "${{ inputs.dst-opendaq-framework-dev }}" - $src = "${{ inputs.src-opendaq-framework-dev }}" - Write-Host "Downloading $src to $dst" - aws s3 cp "$src" "$dst" diff --git a/.github/actions/framework-install/action.yml b/.github/actions/framework-install/action.yml deleted file mode 100644 index 6e3e6de..0000000 --- a/.github/actions/framework-install/action.yml +++ /dev/null @@ -1,42 +0,0 @@ -name: Install openDAQ framework package - -inputs: - opendaq-framework-package-filename: - required: true - - opendaq-framework-package-path: - required: false - default: ${{ runner.temp }} - -runs: - using: composite - - steps: - - name: Install openDAQ framework package (Windows) - if: runner.os == 'Windows' - shell: pwsh - run: | - $packagePath = Join-Path "${{ inputs.opendaq-framework-package-path }}" "${{ inputs.opendaq-framework-package-filename }}" - $process = Start-Process -FilePath $packagePath -ArgumentList "/S" -Wait -NoNewWindow -PassThru - if ($process.ExitCode -eq 0) { - Write-Host "OpenDAQ installed successfully, updating PATH..." - $openDAQBin = "C:\Program Files\openDAQ\bin" - Add-Content -Path $env:GITHUB_ENV -Value "PATH=$openDAQBin`;$env:PATH" - Write-Host $env:PATH - } - else { - Write-Host "OpenDAQ installation failed with exit code $($process.ExitCode)" - exit $process.ExitCode - } - - - name: Install openDAQ framework package (Linux) - if: runner.os == 'Linux' - shell: bash - run: sudo dpkg -i "${{ inputs.opendaq-framework-package-path }}/${{ inputs.opendaq-framework-package-filename }}" - - - name: Unsupported runner OS - if: runner.os != 'Windows' && runner.os != 'Linux' - shell: bash - run: | - echo "Install openDAQ is not supported for ${{ runner.os }}" - exit 1 diff --git a/.github/actions/framework-latest-release/action.yml b/.github/actions/framework-latest-release/action.yml deleted file mode 100644 index c2750b5..0000000 --- a/.github/actions/framework-latest-release/action.yml +++ /dev/null @@ -1,111 +0,0 @@ -name: Determine latest openDAQ framework artefact - -inputs: - - opendaq-framework-release-version: - required: false - default: latest - - win32-force: - required: false - default: false - -outputs: - - version: - description: "Latest openDAQ release version" - value: ${{ steps.determine-latest-package.outputs.version }} - - platform: - description: "Detected platform" - value: ${{ steps.determine-latest-package.outputs.platform }} - - packaging: - description: "Package type (deb/exe)" - value: ${{ steps.determine-latest-package.outputs.packaging }} - - artefact: - description: "Artefact filename" - value: ${{ steps.determine-latest-package.outputs.artefact }} - - uri: - description: "Full URI to artefact" - value: ${{ steps.determine-latest-package.outputs.uri }} - - scheme: - description: "Scheme (s3)" - value: ${{ steps.determine-latest-package.outputs.scheme }} - - authority: - description: "Authority (bucket)" - value: ${{ steps.determine-latest-package.outputs.authority }} - - path: - description: "Path inside bucket" - value: ${{ steps.determine-latest-package.outputs.path }} - -runs: - using: composite - steps: - - name: Determine latest openDAQ package - id: determine-latest-package - shell: bash - run: | - set -e - - input_version="${{ inputs.opendaq-framework-release-version }}" - - if [[ -z "$input_version" || "$input_version" == "latest" ]]; then - version=$(gh api repos/openDAQ/openDAQ/releases/latest --jq '.tag_name') - if [[ -z "$version" || "$version" == "null" ]]; then - echo "::error::Failed to determine latest openDAQ release version" - exit 1 - fi - - version=${version#v} - else - version="$input_version" - fi - - platform="" - packaging="" - - if [[ "$RUNNER_OS" == "Linux" ]]; then - arch=$(uname -m) - if [[ "$arch" == "x86_64" ]]; then - platform="ubuntu22.04-x86_64" - elif [[ "$arch" == "aarch64" ]]; then - platform="ubuntu22.04-arm64" - else - echo "::error::Unsupported Linux arch: $arch" - exit 1 - fi - packaging="deb" - - elif [[ "$RUNNER_OS" == "Windows" ]]; then - WIN32_FORCE="${{ inputs.win32-force }}" - if [[ "$WIN32_FORCE" == "true" ]]; then - platform="win32" - else - platform="win64" - fi - packaging="exe" - - else - echo "::error::Unsupported runner OS $RUNNER_OS" - exit 1 - fi - - artefact="opendaq-${version}-${platform}.${packaging}" - scheme="s3" - authority="bb-blueberry-sdk-releases" - sdk="releases/v${version}/SDK" - - echo "version=$version" >> $GITHUB_OUTPUT - echo "platform=$platform" >> $GITHUB_OUTPUT - echo "packaging=$packaging" >> $GITHUB_OUTPUT - echo "artefact=$artefact" >> $GITHUB_OUTPUT - echo "scheme=$scheme" >> $GITHUB_OUTPUT - echo "authority=$authority" >> $GITHUB_OUTPUT - echo "path=$sdk" >> $GITHUB_OUTPUT - echo "uri=${scheme}://${authority}/${sdk}/${artefact}" >> $GITHUB_OUTPUT diff --git a/.github/actions/module-build-test/action.yml b/.github/actions/module-build-test/action.yml new file mode 100644 index 0000000..58e5bf4 --- /dev/null +++ b/.github/actions/module-build-test/action.yml @@ -0,0 +1,52 @@ +name: Build and test simple device module +description: Configure, build and test simple device module with CMake + +inputs: + enable-32bit: + description: 'Enable 32-bit build for Windows' + required: false + default: 'false' + +runs: + using: composite + steps: + - name: Set CMake generator and architecture + id: cmake-config + shell: bash + run: | + if [[ "${{ runner.os }}" == "Windows" ]]; then + echo "cmake-generator=-G \"Visual Studio 17 2022\"" >> $GITHUB_OUTPUT + if [[ "${{ inputs.enable-32bit }}" == "true" ]]; then + echo "cmake-arch=-A Win32" >> $GITHUB_OUTPUT + else + echo "cmake-arch=" >> $GITHUB_OUTPUT + fi + else + echo "cmake-generator=-G Ninja" >> $GITHUB_OUTPUT + echo "cmake-arch=" >> $GITHUB_OUTPUT + fi + echo "cmake-build-dir=build" >> $GITHUB_OUTPUT + echo "cmake-config-name=Release" >> $GITHUB_OUTPUT + + - name: Configure simple device module with CMake + shell: bash + run: | + cmake -B ${{ steps.cmake-config.outputs.cmake-build-dir }} -S . \ + ${{ steps.cmake-config.outputs.cmake-generator }} \ + ${{ steps.cmake-config.outputs.cmake-arch }} \ + -DCMAKE_BUILD_TYPE=${{ steps.cmake-config.outputs.cmake-config-name }} \ + -DEXAMPLE_MODULE_ENABLE_TESTS=ON + + - name: Build simple device module with CMake + shell: bash + run: | + cmake --build ${{ steps.cmake-config.outputs.cmake-build-dir }} \ + --config ${{ steps.cmake-config.outputs.cmake-config-name }} + + - name: Run simple device module tests with CMake + shell: bash + run: | + ctest --test-dir ${{ steps.cmake-config.outputs.cmake-build-dir }} \ + --output-on-failure \ + -C ${{ steps.cmake-config.outputs.cmake-config-name }} \ + -V diff --git a/.github/workflows/ci-framework.yml b/.github/workflows/ci-framework.yml new file mode 100644 index 0000000..45f2df7 --- /dev/null +++ b/.github/workflows/ci-framework.yml @@ -0,0 +1,84 @@ +name: Build simple device module with openDAQ framework and run tests + +on: + workflow_dispatch: + inputs: + runner: + description: "Runner label" + required: true + type: string + + branch: + description: "Branch to checkout" + required: false + type: string + default: "" + + artifact-run-id: + required: true + type: string + + artifact-name: + required: true + type: string + + file-name: + required: true + type: string + + workflow_call: + inputs: + runner: + description: "Runner label" + required: true + type: string + + branch: + description: "Branch to checkout" + required: false + type: string + default: "" + + artifact-run-id: + required: true + type: string + + artifact-name: + required: true + type: string + + file-name: + required: true + type: string + +env: + GH_TOKEN: ${{ github.token }} + +jobs: + test-artifact: + runs-on: ${{ inputs.runner }} + + steps: + - name: Checkout openDAQ module repository + uses: actions/checkout@v4 + with: + repository: openDAQ/SimpleDeviceModule + ref: ${{ inputs.branch }} + + - name: Download openDAQ framework artifact + id: download + uses: actions/download-artifact@v5 + with: + repository: openDAQ/openDAQ + github-token: ${{ github.token }} + run-id: ${{ inputs.artifact-run-id }} + name: ${{ inputs.artifact-name }} + path: ${{ runner.temp }}/artifacts + + - name: Install openDAQ framework artifact + uses: openDAQ/actions/framework-install@jira/TBBAS-2680-opendaq-gh-actions-github-api-wrapper-unit-tests + with: + framework-filename: ${{ steps.download.outputs.download-path }}/${{ inputs.file-name }} + + - name: Build and test simple device module + uses: ./.github/actions/module-build-test diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d0dce16..50d89cd 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -2,74 +2,41 @@ name: Build and Test simple device module with latest openDAQ release on: push: - branches: - - main - + branches: [main] pull_request: - branches: - - main - - jira/* - - workflow_dispatch: - inputs: - - branch: - required: false - default: "main" - - opendaq-framework-version: - required: false - type: string - default: latest env: GH_TOKEN: ${{ github.token }} jobs: - build-and-test: - + test-asset: + permissions: + contents: read + actions: read + strategy: + fail-fast: false matrix: include: - os: ubuntu-latest - generator: Ninja - + enable-32bit: false + - os: windows-latest + enable-32bit: false - os: windows-latest - generator: "Visual Studio 17 2022" + enable-32bit: true runs-on: ${{ matrix.os }} - + steps: - name: Checkout simple device module repo uses: actions/checkout@v4 - with: - ref: ${{ github.event.inputs.branch || github.event.client_payload.branch || github.ref }} - - - name: Determine openDAQ framework package - id: opendaq-framework - uses: ./.github/actions/framework-latest-release - with: - opendaq-framework-release-version: ${{ github.event.inputs.opendaq-framework-version || 'latest' }} - - name: Download openDAQ framework - uses: ./.github/actions/framework-download + - name: Install openDAQ framework + uses: openDAQ/actions/install-framework@jira/TBBAS-2871-download-and-install-sdk with: - src-opendaq-framework-dev: ${{ steps.opendaq-framework.outputs.uri }} - dst-opendaq-framework-dev: ${{ runner.temp }}/${{ steps.opendaq-framework.outputs.artefact }} - aws_access_key_id: ${{ secrets.AWS_ACCESS_KEY_ID }} - aws_secret_access_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - aws_region: ${{ secrets.AWS_REGION }} + enable-32bit: ${{ matrix.enable-32bit }} - - name: Install openDAQ framework package - uses: ./.github/actions/framework-install + - name: Build and test simple device module + uses: ./.github/actions/module-build-test with: - opendaq-framework-package-filename: ${{ steps.opendaq-framework.outputs.artefact }} - - - name: Configure simple device module with CMake - run: cmake -B build/output -S . -G "${{ matrix.generator }}" -DEXAMPLE_MODULE_ENABLE_TESTS=ON -DCMAKE_BUILD_TYPE=Release - - - name: Build simple device module with CMake - run: cmake --build build/output --config Release - - - name: Run simple device module tests with CMake - run: ctest --test-dir build/output --output-on-failure -C Release -V + enable-32bit: ${{ matrix.enable-32bit }} diff --git a/.gitignore b/.gitignore index 295355a..72017e9 100644 --- a/.gitignore +++ b/.gitignore @@ -43,4 +43,9 @@ bckp # cmake CMakeUserPresets.json -CMakeSettings.json \ No newline at end of file +CMakeSettings.json + +# Secrets +.secrets +# Local configs +.actrc