From 4975b01a213164a534f16ee0669ee187fc52cfdb Mon Sep 17 00:00:00 2001 From: Owen Ou <169064+owenthereal@users.noreply.github.com> Date: Thu, 1 Jun 2023 10:09:39 -0700 Subject: [PATCH] Merge old jqlang/jq master to the latest (#2596) * Try making some GitHub Actions * GHA: Add OS X, Windows, and Linux w/ scan-build builds * Add link to discord server Add link to discord server * Update Ubuntu to 22.04 for GitHub Actions * Remove if condition for Ubuntu build * Fix MacOS OS on GitHub Actions * Fix python3 package on GitHub Actions * Disalbe valgrind Getting failed tests: https://github.com/jqlang/jq/actions/runs/5113866588/jobs/9193542140#step:9:341 * Format file * Fix macos build * Fix syntax errors of windows build https://github.com/jqlang/jq/actions/runs/5114162556/workflow * Install windows package with choco * Pin oniguruma to 5a24a49d710a9e3bb8ff11d12e1eae5a9f9df40c MacOS build [fails](https://github.com/jqlang/jq/actions/runs/5114162555/jobs/9194126677#step:6:3160) due to ``` posix.c:94:3: error: implicit declaration of function 'onig_end' is invalid in C99 [-Werror,-Wimplicit-function-declaration] onig_end(); ``` The current `oniguruma` revision 6fa38f4084b448592888ed9ee43c6e90a46b5f5c (15 Mar 2017) lacks the following explicit declaration in src/onigposix.h: ``` ONIG_EXTERN int onig_end P_((void)); ``` This was added to oniguruma in revision 5a24a49d710a9e3bb8ff11d12e1eae5a9f9df40c (8 Sep 2017). Ref: https://github.com/jqlang/jq/issues/2381 * Revert windows build to use pacman * Don't zip jq.exe * Fixing windows build * Update .gitattriutes for eol on Windows * Skip workflow_dispatch for windows build * Clean up builds * Use LF line endings for all text Ref: https://github.com/actions/checkout/issues/135 * Fix test that has rounding error https://github.com/jqlang/jq/pull/2596#issuecomment-1568498993 * Enable CI for all --------- Co-authored-by: Nicolas Williams --- .gitattributes | 1 + .github/workflows/linux.yml | 70 ++++++++++++++++++++++++++++++ .github/workflows/macos.yml | 62 ++++++++++++++++++++++++++ .github/workflows/scanbuild.yml | 77 +++++++++++++++++++++++++++++++++ .github/workflows/windows.yml | 45 +++++++++++++++++++ README.md | 6 ++- modules/oniguruma | 2 +- tests/jq.test | 2 +- 8 files changed, 262 insertions(+), 3 deletions(-) create mode 100644 .github/workflows/linux.yml create mode 100644 .github/workflows/macos.yml create mode 100644 .github/workflows/scanbuild.yml create mode 100644 .github/workflows/windows.yml diff --git a/.gitattributes b/.gitattributes index 59661532..366d3c2b 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,2 +1,3 @@ .gitattributes export-ignore .gitignore export-ignore +* text=auto eol=lf diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml new file mode 100644 index 00000000..8c38da91 --- /dev/null +++ b/.github/workflows/linux.yml @@ -0,0 +1,70 @@ +name: Linux Build +on: + push: + branches: + - master + pull_request: +jobs: + linux: + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + name: [linux-clang, linux-gcc] + include: + - name: linux-clang + os: ubuntu-22.04 + compiler: clang + cflags: '' + - name: linux-gcc + os: ubuntu-22.04 + compiler: gcc + cflags: '-Wnonnull' + steps: + - name: Clone repository + uses: actions/checkout@v3 + with: + submodules: true + - name: Install packages + run: | + sudo apt-get update -qq + sudo apt-get install -y \ + automake \ + autoconf \ + bison \ + flex \ + gdb \ + python3 \ + valgrind + - name: Build + env: + CC: ${{ matrix.compiler }} + MAKEVARS: ${{ matrix.makevars }} + run: | + autoreconf -fi + rm src/lexer.c src/lexer.h + rm src/parser.c src/parser.h + ./configure --disable-valgrind --with-oniguruma=builtin YACC="$(which bison) -y" $COVERAGE + make -j4 + make dist + - name: Test + env: + CC: ${{ matrix.compiler }} + MAKEVARS: ${{ matrix.makevars }} + run: | + ulimit -c unlimited + make -j4 check + - name: Upload Test Logs + if: ${{ failure() }} + uses: actions/upload-artifact@v3 + with: + name: test-logs + path: | + test-suite.log + tests/*.log + - name: Upload Artifacts + uses: actions/upload-artifact@v3 + with: + name: jq-${{ matrix.name }} + path: | + jq diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml new file mode 100644 index 00000000..aa2c1847 --- /dev/null +++ b/.github/workflows/macos.yml @@ -0,0 +1,62 @@ +name: MacOS Build +on: + push: + branches: + - master + pull_request: +jobs: + macos: + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + name: [macos-12-clang, macos-13-clang] + include: + - name: macos-12-clang + os: macos-12 + compiler: clang + - name: macos-13-clang + os: macos-13 + compiler: clang + steps: + - name: Clone repository + uses: actions/checkout@v3 + with: + submodules: true + - name: Install packages + run: | + brew update + brew install autoconf automake libtool flex bison python3 + sed -i.bak '/^AM_INIT_AUTOMAKE(\[-Wno-portability 1\.14\])$/s/14/11/' modules/oniguruma/configure.ac + - name: Build + env: + CC: ${{ matrix.compiler }} + MAKEVARS: ${{ matrix.makevars }} + run: | + autoreconf -fi + rm src/lexer.c src/lexer.h + rm src/parser.c src/parser.h + ./configure --disable-valgrind --with-oniguruma=builtin YACC="$(brew --prefix)/opt/bison/bin/bison -y" $COVERAGE + make -j4 + make dist + - name: Test + env: + CC: ${{ matrix.compiler }} + MAKEVARS: ${{ matrix.makevars }} + run: | + ulimit -c unlimited + make -j4 check + - name: Upload Test Logs + if: ${{ failure() }} + uses: actions/upload-artifact@v3 + with: + name: test-logs + path: | + test-suite.log + tests/*.log + - name: Upload Artifacts + uses: actions/upload-artifact@v3 + with: + name: jq-${{ matrix.name }} + path: | + jq diff --git a/.github/workflows/scanbuild.yml b/.github/workflows/scanbuild.yml new file mode 100644 index 00000000..6247a7da --- /dev/null +++ b/.github/workflows/scanbuild.yml @@ -0,0 +1,77 @@ +name: Linux Clang scan-build Static Analyzer Build + +on: + # Don't do this for PRs. It eats up minutes. + push: + branches: + - 'master' + - 'scan-build' + paths: + - '.github/workflows/scanbuild.yml' + +jobs: + unix: + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + name: [linux-clang] + include: + - name: linux-clang + os: ubuntu-18.04 + compiler: clang + cflags: '' + steps: + - name: Clone repository + uses: actions/checkout@v1 + - name: Open Submodule(s) + run: | + git submodule update --init --recursive + - name: Install packages + if: startsWith(matrix.os, 'ubuntu') + run: | + sudo apt-get update -qq + sudo apt-get install -y automake autoconf bison flex gdb python valgrind clang-tools + - name: Prep + run: | + #pyenv global 3.6.7 + #pip3 install pipenv + #(cd docs && pipenv sync) + #if [ -n "$COVERAGE" ]; then pip install --user cpp-coveralls; fi + echo SHELL=$SHELL + echo PATH=$PATH + which bison + bison --version + + - name: Build + env: + CC: ${{ matrix.compiler }} + MAKEVARS: ${{ matrix.makevars }} + run: | + autoreconf -fi + rm src/lexer.c src/lexer.h + rm src/parser.c src/parser.h + ./configure --with-oniguruma=builtin YACC="$(which bison) -y" $COVERAGE + scan-build --keep-going make -j4 + - name: Test + env: + CC: ${{ matrix.compiler }} + MAKEVARS: ${{ matrix.makevars }} + run: | + ulimit -c unlimited + scan-build --keep-going make -j4 check + - name: Core dump stacks + run: | + echo "thread apply all bt" > /tmp/x + find . -name core -print | while read core; do gdb -batch -x x `file "$core"|sed -e "s/^[^']*'//" -e "s/[ '].*$//"` "$core"; done + if [ "$(find . -name core -print | wc -l)" -gt 0 ]; then false; fi + - name: Test logs + if: ${{ failure() }} + run: | + cat test-suite.log + cat tests/*.log + - name: Upload Logs + uses: actions/upload-artifact@v2 + with: + name: Scan-Build Reports + path: '/tmp/scan-build*/' diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml new file mode 100644 index 00000000..04e0c8ec --- /dev/null +++ b/.github/workflows/windows.yml @@ -0,0 +1,45 @@ +name: Windows Build +on: + push: + branches: + - master + pull_request: +jobs: + windows: + runs-on: windows-latest + steps: + - name: Clone repository + uses: actions/checkout@v3 + with: + submodules: true + - uses: msys2/setup-msys2@v2 + with: + update: true + install: >- + base-devel + git + clang + autoconf + automake + libtool + p7zip + - shell: msys2 {0} + run: | + autoreconf -fiv + ./configure --disable-valgrind --with-oniguruma=builtin --disable-shared --enable-static --enable-all-static + make -j4 + make SUBDIRS= "TESTS=tests/mantest tests/jqtest tests/onigtest tests/base64test" check + - name: Upload Test Logs + if: ${{ failure() }} + uses: actions/upload-artifact@v3 + with: + name: test-logs + path: | + test-suite.log + tests/*.log + - name: Upload Artifacts + uses: actions/upload-artifact@v3 + with: + name: jq-windows + path: | + jq.exe diff --git a/README.md b/README.md index 44acd13b..2388e318 100644 --- a/README.md +++ b/README.md @@ -72,4 +72,8 @@ cross-compilation environment. See also ["Cross compilation"](https://github.com/jqlang/jq/wiki/Cross-compilation) on the wiki. -Send questions to https://stackoverflow.com/questions/tagged/jq or to the #jq channel (https://web.libera.chat/#jq) on Libera.Chat (https://libera.chat/). + +# Community + +* Send questions to https://stackoverflow.com/questions/tagged/jq. +* Join our [Discord server](https://discord.gg/yg6yjNmgAC). diff --git a/modules/oniguruma b/modules/oniguruma index 6fa38f40..5a24a49d 160000 --- a/modules/oniguruma +++ b/modules/oniguruma @@ -1 +1 @@ -Subproject commit 6fa38f4084b448592888ed9ee43c6e90a46b5f5c +Subproject commit 5a24a49d710a9e3bb8ff11d12e1eae5a9f9df40c diff --git a/tests/jq.test b/tests/jq.test index 2d5c36b8..9aa435a2 100644 --- a/tests/jq.test +++ b/tests/jq.test @@ -1565,7 +1565,7 @@ try (1%.) catch . jq: error: Division by zero? at , line 1: # Basic numbers tests: integers, powers of two -[range(-52;52;1)] as $powers | [$powers[]|pow(2;.)|log2] == $powers +[range(-52;52;1)] as $powers | [$powers[]|pow(2;.)|log2|round] == $powers null true