diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000000..b682b11bbd --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,224 @@ +name: CI +on: + push: + branches: + - master + tags: + - "v*" + pull_request: +jobs: + linux: + strategy: + fail-fast: false + matrix: + compiler: [gcc, clang] + image: [ubuntu-20.04, ubuntu-22.04] + include: + - compiler: gcc + image: ubuntu-20.04 + configure_flag: '' + - compiler: gcc + image: ubuntu-22.04 + configure_flag: --enable-static --enable-all-static + - compiler: clang + image: ubuntu-20.04 + configure_flag: '' + - compiler: clang + image: ubuntu-22.04 + configure_flag: --enable-static --enable-all-static + runs-on: ${{ matrix.image }} + env: + CC: ${{ matrix.compiler }} + SUFFIX: linux-${{ matrix.image}}-${{ matrix.compiler }} + 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 + - name: Build + run: | + autoreconf -fi + ./configure --disable-dependency-tracking \ + --disable-silent-rules \ + --disable-maintainer-mode \ + --disable-valgrind \ + --with-oniguruma=builtin \ + ${{ matrix.configure_flag }} \ + YACC="$(which bison) -y" + make + - name: Test + run: | + make check + - name: Upload Test Logs + if: ${{ failure() }} + uses: actions/upload-artifact@v3 + with: + name: test-logs-${{ env.SUFFIX }} + retention-days: 7 + path: | + test-suite.log + tests/*.log + - name: Upload Artifacts + uses: actions/upload-artifact@v3 + with: + name: jq-${{ env.SUFFIX }} + if-no-files-found: error + retention-days: 7 + path: | + jq + macos: + strategy: + fail-fast: false + matrix: + compiler: [gcc, clang] + image: [macos-11, macos-12, macos-13] + runs-on: ${{ matrix.image }} + env: + CC: ${{ matrix.compiler }} + SUFFIX: macos-${{ matrix.image}}-${{ matrix.compiler }} + steps: + - name: Clone repository + uses: actions/checkout@v3 + with: + submodules: true + - name: Install packages + run: | + # brew update sometimes fails with "Fetching /usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask failed!" + brew update || brew update-reset + brew install \ + autoconf \ + automake \ + libtool \ + flex \ + bison + - name: Build + run: | + autoreconf -fi + ./configure --disable-dependency-tracking \ + --disable-silent-rules \ + --disable-maintainer-mode \ + --disable-valgrind \ + --with-oniguruma=builtin \ + --enable-static \ + --enable-all-static \ + YACC="$(brew --prefix)/opt/bison/bin/bison -y" + make + - name: Test + run: | + make check + - name: Upload Test Logs + if: ${{ failure() }} + uses: actions/upload-artifact@v3 + with: + name: test-logs-${{ env.SUFFIX }} + retention-days: 7 + path: | + test-suite.log + tests/*.log + - name: Upload Artifacts + uses: actions/upload-artifact@v3 + with: + name: jq-${{ env.SUFFIX }} + if-no-files-found: error + retention-days: 7 + path: | + jq + windows: + strategy: + fail-fast: false + matrix: + compiler: [gcc] + image: [windows-2019, windows-2022] + runs-on: ${{ matrix.image }} + env: + CC: ${{ matrix.compiler }} + SUFFIX: windows-${{ matrix.image}}-${{ matrix.compiler }} + 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 + bison + flex + - name: Build + shell: msys2 {0} + run: | + autoreconf -fi + ./configure --disable-dependency-tracking \ + --disable-silent-rules \ + --disable-maintainer-mode \ + --disable-valgrind \ + --with-oniguruma=builtin \ + --disable-shared \ + --enable-static \ + --enable-all-static \ + YACC="$(which bison) -y" + make + - name: Test + shell: msys2 {0} + run: | + make check + - name: Upload Test Logs + if: ${{ failure() }} + uses: actions/upload-artifact@v3 + with: + name: test-logs-${{ env.SUFFIX }} + retention-days: 7 + path: | + test-suite.log + tests/*.log + - name: Upload Artifacts + uses: actions/upload-artifact@v3 + with: + name: jq-${{ env.SUFFIX }} + if-no-files-found: error + retention-days: 7 + path: | + jq.exe + release: + runs-on: ubuntu-latest + permissions: + contents: write + needs: [linux, macos, windows] + if: startsWith(github.event.ref, 'refs/tags/v') + steps: + - name: Clone repository + uses: actions/checkout@v3 + with: + submodules: true + - name: Merge built artifacts + uses: actions/download-artifact@v3 + with: + path: artifacts + - name: Upload release + env: + TAG_NAME: ${{ github.ref_name }} + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + mkdir release + cp artifacts/jq-linux-ubuntu-22.04-gcc/jq release/jq-linux-amd64 + cp artifacts/jq-macos-macos-13-gcc/jq release/jq-macos-amd64 + cp artifacts/jq-windows-windows-2022-gcc/jq.exe release/jq-windows-amd64.exe + + gh release create $TAG_NAME --draft --title "jq ${TAG_NAME#v}" --generate-notes + gh release upload $TAG_NAME --clobber release/jq-* diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml deleted file mode 100644 index 8c38da917f..0000000000 --- a/.github/workflows/linux.yml +++ /dev/null @@ -1,70 +0,0 @@ -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 deleted file mode 100644 index dcbbdb2f7f..0000000000 --- a/.github/workflows/macos.yml +++ /dev/null @@ -1,62 +0,0 @@ -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 - 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/windows.yml b/.github/workflows/windows.yml deleted file mode 100644 index 04e0c8ecb6..0000000000 --- a/.github/workflows/windows.yml +++ /dev/null @@ -1,45 +0,0 @@ -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