diff --git a/.github/workflows/windows-ci.yml b/.github/workflows/windows-ci.yml new file mode 100644 index 00000000..a8805dc5 --- /dev/null +++ b/.github/workflows/windows-ci.yml @@ -0,0 +1,119 @@ +############################################################################# +# +# Author: Jia Tan +# +# This file has been put into the public domain. +# You can do whatever you want with this file. +# +############################################################################# + +name: Windows-CI + +# Only run the Windows CI manually since it takes much longer than the others. +on: workflow_dispatch + +jobs: + POSIX: + strategy: + matrix: + # Test different environments since the code may change between + # them and we want to ensure that we support all potential users. + # clang64 currently fails due to a warning, so support will be + # added later. + system: + - mingw64 + - mingw32 + - ucrt64 + - msys + + # Set the shell to be msys2 as a default to avoid setting it for + # every individual run command. + defaults: + run: + shell: msys2 {0} + + runs-on: windows-latest + + steps: + ##################### + # Setup Environment # + ##################### + + # Rely on the msys2 GitHub Action to set up the msys2 environment. + - name: Setup MSYS2 + uses: msys2/setup-msys2@v2 + with: + msystem: ${{ matrix.system }} + update: true + install: pactoys + + - name: Checkout code + # Need to explicitly set the shell here since we set the default + # shell as msys2 earlier. This avoids an extra msys2 dependency on + # git. + shell: powershell + # Avoid Windows line endings. Otherwise test_scripts.sh will fail + # because the expected output is stored in the test framework as a + # text file and will not match the output from xzgrep. + run: git config --global core.autocrlf false + + - uses: actions/checkout@v3 + + + ######################## + # Install Dependencies # + ######################## + + # The pacman repository has a different naming scheme for default + # msys packages than the others. The pacboy tool allows installing + # the packages possible in matrix setup without a burdensome amount + # of ifs. + - name: Install Dependencies + if: ${{ matrix.system == 'msys' }} + run: pacman --noconfirm -S --needed autotools base-devel doxygen gettext-devel gcc + + - name: Install Dependencies + if: ${{ matrix.system != 'msys' }} + run: pacboy --noconfirm -S --needed autotools:p gcc:p clang:p make:p doxygen:p + + + ################## + # Build and Test # + ################## + + - name: Build with full features + run: ./build-aux/ci_build.sh -a "--no-po4a" -b autotools -p build + - name: Test with full features + run: ./build-aux/ci_build.sh -a "--no-po4a" -b autotools -p test -n full_features + + - name: Build without threads + run: ./build-aux/ci_build.sh -a "--no-po4a" -b autotools -d threads,shared -p build + - name: Test without threads + run: ./build-aux/ci_build.sh -a "--no-po4a" -b autotools -d threads,shared -p test -n no_threads + + - name: Build without encoders + run: ./build-aux/ci_build.sh -a "--no-po4a" -b autotools -d encoders,shared -p build + - name: Test without encoders + run: ./build-aux/ci_build.sh -a "--no-po4a" -b autotools -d encoders,shared -p test -n no_encoders + + - name: Build without decoders + run: ./build-aux/ci_build.sh -a "--no-po4a" -b autotools -d decoders,shared -p build + - name: Test without decoders + run: ./build-aux/ci_build.sh -a "--no-po4a" -b autotools -d decoders,shared -p test -n no_decoders + + - name: Build with only crc32 check + run: ./build-aux/ci_build.sh -a "--no-po4a" -b autotools -c crc32 -d shared,nls -p build + - name: Test with only crc32 check + run: ./build-aux/ci_build.sh -a "--no-po4a" -b autotools -c crc32 -d shared,nls -p test -n crc32_only + + + ############### + # Upload Logs # + ############### + + # Upload the test logs as artifacts if any step has failed. + - uses: actions/upload-artifact@v3 + if: ${{ failure() }} + with: + name: ${{ matrix.os }} ${{ matrix.build_system }} Test Logs + path: build-aux/artifacts