diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..f6be4411 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,206 @@ +name: CI +on: + push: + branches: + - master + tags: + - "v*" + pull_request: +jobs: + linux: + runs-on: ubuntu-22.04 + strategy: + fail-fast: false + matrix: + arch: [x86_64] + include: + - arch: x86_64 + suffix: amd64 + 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 + env: + CC: clang -arch ${{ matrix.arch }} + run: | + autoreconf -fi + ./configure --disable-dependency-tracking \ + --disable-silent-rules \ + --disable-maintainer-mode \ + --disable-valgrind \ + --with-oniguruma=builtin \ + YACC="$(which bison) -y" + make + make dist + cp jq jq-linux-${{ matrix.suffix }} + - name: Test + env: + CC: clang -arch ${{ matrix.arch }} + run: | + make check + - name: Upload Test Logs + if: ${{ failure() }} + uses: actions/upload-artifact@v3 + with: + name: test-logs-linux-${{ matrix.arch }} + retention-days: 7 + path: | + test-suite.log + tests/*.log + - name: Upload Artifacts + uses: actions/upload-artifact@v3 + with: + name: jq-linux-${{ matrix.suffix }} + if-no-files-found: error + retention-days: 7 + path: | + jq-linux-${{ matrix.suffix }} + macos: + runs-on: macos-13 + strategy: + fail-fast: false + matrix: + arch: [x86_64] + include: + - arch: x86_64 + suffix: amd64 + 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: clang -arch ${{ matrix.arch }} + run: | + autoreconf -fi + ./configure --disable-dependency-tracking \ + --disable-silent-rules \ + --disable-maintainer-mode \ + --disable-valgrind \ + --with-oniguruma=builtin \ + YACC="$(brew --prefix)/opt/bison/bin/bison -y" + make + make dist + cp jq jq-macos-${{ matrix.suffix }} + - name: Test + env: + CC: clang -arch ${{ matrix.arch }} + run: | + make check + - name: Upload Test Logs + if: ${{ failure() }} + uses: actions/upload-artifact@v3 + with: + name: test-logs-macos-${{ matrix.arch }} + retention-days: 7 + path: | + test-suite.log + tests/*.log + - name: Upload Artifacts + uses: actions/upload-artifact@v3 + with: + name: jq-macos-${{ matrix.suffix }} + if-no-files-found: error + retention-days: 7 + path: | + jq-macos-${{ matrix.suffix }} + windows: + runs-on: windows-latest + strategy: + fail-fast: false + matrix: + arch: [x86_64] + include: + - arch: x86_64 + suffix: win64 + 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 + - 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 + make + make dist + cp jq.exe jq-windows-${{ matrix.suffix }}.exe + - name: Test + shell: msys2 {0} + run: | + 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-windows-${{ matrix.arch }} + retention-days: 7 + path: | + test-suite.log + tests/*.log + - name: Upload Artifacts + uses: actions/upload-artifact@v3 + with: + name: jq-windows-${{ matrix.suffix }} + if-no-files-found: error + retention-days: 7 + path: | + jq-windows-${{ matrix.suffix }}.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: | + gh release create $TAG_NAME --draft --title "jq ${TAG_NAME#v}" --generate-notes + gh release upload $TAG_NAME --clobber artifacts/jq-*/* diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml deleted file mode 100644 index 8c38da91..00000000 --- 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 dcbbdb2f..00000000 --- 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 04e0c8ec..00000000 --- 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