Skip to content

Commit

Permalink
workflows: windows: Add chain workflow for windows unit testing (#8582)
Browse files Browse the repository at this point in the history
* workflows: windows: Translate AppVeyor's unit testing flow to GHA

Signed-off-by: Hiroshi Hatake <[email protected]>

* internal: test: file: Handle newline character difference

In Windows, the newline(\n) characters in internal test data are replaced with \r\n
by git settings: core.autocrlf true.
This settings accicdentally converting the newlines.
This commit handles the converted characters.

Signed-off-by: Hiroshi Hatake <[email protected]>

* workflows: update to split tests

Signed-off-by: Patrick Stephens <[email protected]>

* workflows: windows: Add quotes for $PWD

Signed-off-by: Hiroshi Hatake <[email protected]>

* test: internal: file: Remove needless lines

Signed-off-by: Hiroshi Hatake <[email protected]>

* workflows: windows: Display dependent DLLs by dumpbin

Signed-off-by: Hiroshi Hatake <[email protected]>

* Update .github/workflows/call-windows-unit-tests.yaml

Signed-off-by: Pat <[email protected]>
Signed-off-by: Hiroshi Hatake <[email protected]>

* workflows: windows: Specify working directory for dumpbin step

Signed-off-by: Hiroshi Hatake <[email protected]>

---------

Signed-off-by: Hiroshi Hatake <[email protected]>
Signed-off-by: Patrick Stephens <[email protected]>
Signed-off-by: Pat <[email protected]>
Co-authored-by: Patrick Stephens <[email protected]>
Co-authored-by: Pat <[email protected]>
  • Loading branch information
3 people authored Mar 27, 2024
1 parent ce7b583 commit 20c461a
Show file tree
Hide file tree
Showing 3 changed files with 181 additions and 1 deletion.
163 changes: 163 additions & 0 deletions .github/workflows/call-windows-unit-tests.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,163 @@
---
name: Reusable workflow to run unit tests on Windows packages (only for x86 and x64)

on:
workflow_call:
inputs:
version:
description: The version of Fluent Bit to create.
type: string
required: true
ref:
description: The commit, tag or branch of Fluent Bit to checkout for building that creates the version above.
type: string
required: true
environment:
description: The Github environment to run this workflow on.
type: string
required: false
unstable:
description: Optionally add metadata to build to indicate an unstable build, set to the contents you want to add.
type: string
required: false
default: ''
secrets:
token:
description: The Github token or similar to authenticate with.
required: true

jobs:
call-build-windows-unit-test:
runs-on: windows-latest
environment: ${{ inputs.environment }}
strategy:
fail-fast: false
matrix:
config:
- name: "Windows 32bit"
arch: x86
openssl_dir: C:\vcpkg\packages\openssl_x86-windows-static
cmake_additional_opt: ""
vcpkg_triplet: x86-windows-static
- name: "Windows 64bit"
arch: x64
openssl_dir: C:\vcpkg\packages\openssl_x64-windows-static
cmake_additional_opt: ""
vcpkg_triplet: x64-windows-static
permissions:
contents: read
# Default environment variables can be overridden below. To prevent library pollution - without this other random libraries may be found on the path leading to failures.
env:
PATH: C:\ProgramData\Chocolatey\bin;c:/Program Files/Git/cmd;c:/Windows/system32;C:/Windows/System32/WindowsPowerShell/v1.0;$ENV:WIX/bin;C:/Program Files/CMake/bin;C:\vcpkg;
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
ref: ${{ inputs.ref }}

- name: Get dependencies
run: |
Invoke-WebRequest -OutFile winflexbison.zip $env:WINFLEXBISON
Expand-Archive winflexbison.zip -Destination C:\WinFlexBison
Copy-Item -Path C:\WinFlexBison/win_bison.exe C:\WinFlexBison/bison.exe
Copy-Item -Path C:\WinFlexBison/win_flex.exe C:\WinFlexBison/flex.exe
echo "C:\WinFlexBison" | Out-File -FilePath $env:GITHUB_PATH -Append
env:
WINFLEXBISON: https://github.com/lexxmark/winflexbison/releases/download/v2.5.22/win_flex_bison-2.5.22.zip
shell: pwsh

- name: Set up with Developer Command Prompt for Microsoft Visual C++
uses: ilammy/msvc-dev-cmd@v1
with:
arch: ${{ matrix.config.arch }}

- name: Get gzip command w/ chocolatey
uses: crazy-max/ghaction-chocolatey@v3
with:
args: install gzip -y

# http://man7.org/linux/man-pages/man1/date.1.html
- name: Get Date
id: get-date
run: |
echo "date=$(/bin/date -u "+%Y%m%d")" >> $GITHUB_OUTPUT
shell: bash

- name: Restore cached packages of vcpkg
id: cache-unit-test-vcpkg-sources
uses: actions/cache/restore@v4
with:
path: |
C:\vcpkg\packages
key: ${{ runner.os }}-${{ matrix.config.arch }}-wintest-vcpkg-${{ steps.get-date.outputs.date }}
restore-keys: |
${{ runner.os }}-${{ matrix.config.arch }}-wintest-vcpkg-
enableCrossOsArchive: false

- name: Build openssl with vcpkg
run: |
C:\vcpkg\vcpkg install --recurse openssl --triplet ${{ matrix.config.vcpkg_triplet }}
shell: cmd

- name: Build libyaml with vcpkg
run: |
C:\vcpkg\vcpkg install --recurse libyaml --triplet ${{ matrix.config.vcpkg_triplet }}
shell: cmd

- name: Save packages of vcpkg
id: save-vcpkg-sources
uses: actions/cache/save@v4
with:
path: |
C:\vcpkg\packages
key: ${{ steps.cache-unit-test-vcpkg-sources.outputs.cache-primary-key }}
enableCrossOsArchive: false

- name: Build unit-test for Fluent Bit packages (only for x86 and x64)
run: |
cmake -G "NMake Makefiles" `
-D FLB_TESTS_INTERNAL=On `
-D FLB_NIGHTLY_BUILD='${{ inputs.unstable }}' `
-D OPENSSL_ROOT_DIR='${{ matrix.config.openssl_dir }}' `
${{ matrix.config.cmake_additional_opt }} `
-D FLB_LIBYAML_DIR=C:\vcpkg\packages\libyaml_${{ matrix.config.vcpkg_triplet }} `
-D FLB_WITHOUT_flb-rt-out_elasticsearch=On `
-D FLB_WITHOUT_flb-rt-out_td=On `
-D FLB_WITHOUT_flb-rt-out_forward=On `
-D FLB_WITHOUT_flb-rt-in_disk=On `
-D FLB_WITHOUT_flb-rt-in_proc=On `
-D FLB_WITHOUT_flb-it-parser=On `
-D FLB_WITHOUT_flb-it-unit_sizes=On `
-D FLB_WITHOUT_flb-it-network=On `
-D FLB_WITHOUT_flb-it-pack=On `
-D FLB_WITHOUT_flb-it-signv4=On `
-D FLB_WITHOUT_flb-it-aws_credentials=On `
-D FLB_WITHOUT_flb-it-aws_credentials_ec2=On `
-D FLB_WITHOUT_flb-it-aws_credentials_http=On `
-D FLB_WITHOUT_flb-it-aws_credentials_profile=On `
-D FLB_WITHOUT_flb-it-aws_credentials_sts=On `
-D FLB_WITHOUT_flb-it-aws_util=On `
-D FLB_WITHOUT_flb-it-input_chunk=On `
../
cmake --build .
shell: pwsh
working-directory: build

- name: Upload unit test binaries
uses: actions/upload-artifact@v4
with:
name: windows-unit-tests-${{ matrix.config.arch }}
path: |
build/**/*.exe
if-no-files-found: error

- name: Display dependencies w/ dumpbin
run: |
dumpbin /dependents .\bin\fluent-bit.exe
working-directory: build

- name: Build unit-test for Fluent Bit packages (only for x86 and x64)
run: |
ctest --build-run-dir "$PWD" --output-on-failure
shell: pwsh
working-directory: build
11 changes: 11 additions & 0 deletions .github/workflows/pr-windows-build.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -38,3 +38,14 @@ jobs:
environment: pr
secrets:
token: ${{ secrets.GITHUB_TOKEN }}

run-windows-unit-tests:
needs:
- pr-windows-build
uses: ./.github/workflows/call-windows-unit-tests.yaml
with:
version: ${{ github.sha }}
ref: ${{ github.sha }}
environment: pr
secrets:
token: ${{ secrets.GITHUB_TOKEN }}
8 changes: 7 additions & 1 deletion tests/internal/file.c
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,13 @@ static void check_equals(flb_sds_t result, const char *expected)
static void test_file_read_text_file()
{
flb_sds_t result = flb_file_read(TEXT_FILE);
check_equals(result, "Some text file\n\nline 3\n\nline 5\n");
/* In Windows, \n is replaced with \r\n by git settings. */
if (strstr(result, "\r\n") != NULL) {
check_equals(result, "Some text file\r\n\r\nline 3\r\n\r\nline 5\r\n");
}
else {
check_equals(result, "Some text file\n\nline 3\n\nline 5\n");
}
flb_sds_destroy(result);
}

Expand Down

0 comments on commit 20c461a

Please sign in to comment.