| # This workflow will do a clean install of node dependencies, cache/restore |
| # them, build the source code and run tests across different versions of node |
| # For more information see: |
| # https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions |
| # |
| # See supported Node.js release schedule at |
| # https://nodejs.org/en/about/releases/ |
| |
| name: PouchDB CI |
| |
| on: |
| push: |
| paths-ignore: |
| - '.github/ISSUE_TEMPLATE/' |
| - '.github/PULL_REQUEST_TEMPLATE.md' |
| - 'CONTRIBUTING.md' |
| - 'DISCLAIMER' |
| - 'LICENSE' |
| - 'NOTICE' |
| - 'README.md' |
| - 'TESTING.md' |
| - 'docs/**' |
| pull_request: |
| branches: [master] |
| paths-ignore: |
| - '.github/ISSUE_TEMPLATE/' |
| - '.github/PULL_REQUEST_TEMPLATE.md' |
| - 'CONTRIBUTING.md' |
| - 'DISCLAIMER' |
| - 'LICENSE' |
| - 'NOTICE' |
| - 'README.md' |
| - 'TESTING.md' |
| - 'docs/**' |
| |
| env: |
| NODE_VERSION: 22 |
| TEST_HOST: localhost |
| |
| permissions: |
| contents: read # to fetch code (actions/checkout) |
| |
| jobs: |
| |
| # Check style compliance of JavaScript code. |
| |
| lint: |
| runs-on: ubuntu-latest |
| steps: |
| - uses: actions/checkout@v4 |
| with: |
| persist-credentials: false |
| - uses: ./.github/actions/install-node-package |
| with: |
| node-version: ${{ env.NODE_VERSION }} |
| - run: npm run eslint |
| |
| # Check shell scripts. |
| |
| shellcheck: |
| runs-on: ubuntu-latest |
| steps: |
| - uses: actions/checkout@v4 |
| with: |
| persist-credentials: false |
| - run: sudo apt-get install shellcheck |
| - run: git ls-files '*.sh' | xargs shellcheck |
| |
| # Check package-lock.json is up-to-date |
| |
| package-lock: |
| runs-on: ubuntu-latest |
| steps: |
| - uses: actions/checkout@v4 |
| with: |
| persist-credentials: false |
| - uses: ./.github/actions/install-node-package |
| with: |
| node-version: ${{ env.NODE_VERSION }} |
| - run: ./bin/verify-package-lock.sh |
| |
| # Run the integration, find and mapreduce tests against CouchDB on Node.js. |
| # This should be run against every version of CouchDB and every version of |
| # Node.js we support. |
| |
| couchdb-nodejs: |
| needs: lint |
| strategy: |
| fail-fast: false |
| matrix: |
| couchdb: ['2.3', '3.1'] |
| node: [20, 22] |
| cmd: |
| - npm test |
| - TYPE=find PLUGINS=pouchdb-find ADAPTERS=http npm test |
| - TYPE=mapreduce ADAPTERS=http npm test |
| runs-on: ubuntu-latest |
| services: |
| couchdb: |
| image: couchdb:${{ matrix.couchdb }} |
| ports: |
| - 5984:5984 |
| env: |
| COUCHDB_USER: admin |
| COUCHDB_PASSWORD: password |
| env: |
| CLIENT: node |
| SERVER: couchdb-master |
| COUCH_HOST: http://admin:password@127.0.0.1:5984 |
| SKIP_MIGRATION: 1 |
| steps: |
| - uses: actions/checkout@v4 |
| with: |
| persist-credentials: false |
| - uses: ./.github/actions/install-node-package |
| with: |
| node-version: ${{ matrix.node }} |
| - uses: ./.github/actions/build-pouchdb |
| - id: test |
| run: ${{ matrix.cmd }} |
| continue-on-error: true |
| - name: First retry |
| id: retry |
| if: steps.test.outcome == 'failure' |
| run: ${{ matrix.cmd }} |
| continue-on-error: true |
| - name: Second retry |
| if: steps.retry.outcome == 'failure' |
| run: ${{ matrix.cmd }} |
| |
| # Run the integration, find and mapreduce tests against CouchDB in the |
| # browser. This should be run against every version of CouchDB we support and |
| # every target browser. |
| |
| couchdb-browser: |
| needs: lint |
| strategy: |
| fail-fast: false |
| matrix: |
| couchdb: ['2.3','3.1'] |
| client: ['firefox', 'chromium', 'webkit'] |
| cmd: |
| - npm test |
| - TYPE=find PLUGINS=pouchdb-find ADAPTERS=http npm test |
| - TYPE=mapreduce ADAPTERS=http npm test |
| runs-on: ubuntu-latest |
| services: |
| couchdb: |
| image: couchdb:${{ matrix.couchdb }} |
| ports: |
| - 5984:5984 |
| env: |
| COUCHDB_USER: admin |
| COUCHDB_PASSWORD: password |
| env: |
| USE_MINIFIED: 1 |
| CLIENT: ${{ matrix.client }} |
| SERVER: couchdb-master |
| COUCH_HOST: http://admin:password@127.0.0.1:5984 |
| SKIP_MIGRATION: 1 |
| steps: |
| - uses: actions/checkout@v4 |
| with: |
| persist-credentials: false |
| - uses: ./.github/actions/install-node-package |
| with: |
| node-version: ${{ env.NODE_VERSION }} |
| - uses: ./.github/actions/build-pouchdb |
| - id: test |
| run: ${{ matrix.cmd }} |
| continue-on-error: true |
| - name: First retry |
| id: retry |
| if: steps.test.outcome == 'failure' |
| run: ${{ matrix.cmd }} |
| continue-on-error: true |
| - name: Second retry |
| if: steps.retry.outcome == 'failure' |
| run: ${{ matrix.cmd }} |
| |
| # Run the integration, find and mapreduce tests against all the Node.js |
| # PouchDB adapters. This should be run for every adapter on every version of |
| # Node.js we support. |
| |
| nodejs-adapter: |
| needs: lint |
| strategy: |
| fail-fast: false |
| matrix: |
| node: [20, 22] |
| adapter: ['leveldb', 'memory'] |
| cmd: |
| - npm test |
| - TYPE=find PLUGINS=pouchdb-find npm test |
| - TYPE=mapreduce npm test |
| runs-on: ubuntu-latest |
| services: |
| couchdb: |
| image: couchdb:3.1 |
| ports: |
| - 5984:5984 |
| env: |
| COUCHDB_USER: admin |
| COUCHDB_PASSWORD: password |
| env: |
| CLIENT: node |
| SERVER: couchdb-master |
| COUCH_HOST: http://admin:password@127.0.0.1:5984 |
| SKIP_MIGRATION: 1 |
| ADAPTERS: ${{ matrix.adapter }} |
| steps: |
| - uses: actions/checkout@v4 |
| with: |
| persist-credentials: false |
| - name: Wait for CouchDB |
| run: ./bin/wait-for-couch.sh 20 |
| - name: Setup CouchDB CORS |
| run: curl 'http://admin:password@127.0.0.1:5984/_node/_local/_config/cors/origins' -X PUT -d '"http://127.0.0.1:8000"' |
| - uses: ./.github/actions/install-node-package |
| with: |
| node-version: ${{ matrix.node }} |
| - uses: ./.github/actions/build-pouchdb |
| - id: test |
| run: ${{ matrix.cmd }} |
| continue-on-error: true |
| - name: First retry |
| id: retry |
| if: steps.test.outcome == 'failure' |
| run: ${{ matrix.cmd }} |
| continue-on-error: true |
| - name: Second retry |
| if: steps.retry.outcome == 'failure' |
| run: ${{ matrix.cmd }} |
| |
| # Run the integration, find and mapreduce tests against all the browser-based |
| # adapters. PouchDB adapters. This should be run for every adapter on every |
| # target browser. |
| |
| browser-adapter: |
| needs: lint |
| strategy: |
| fail-fast: false |
| matrix: |
| client: ['firefox', 'chromium', 'webkit'] |
| adapter: ['idb', 'indexeddb', 'memory'] |
| cmd: |
| - npm test |
| - TYPE=find PLUGINS=pouchdb-find npm test |
| - TYPE=mapreduce npm test |
| runs-on: ubuntu-latest |
| services: |
| couchdb: |
| image: couchdb:3.1 |
| ports: |
| - 5984:5984 |
| env: |
| COUCHDB_USER: admin |
| COUCHDB_PASSWORD: password |
| env: |
| SERVER: couchdb-master |
| COUCH_HOST: http://admin:password@127.0.0.1:5984 |
| SKIP_MIGRATION: 1 |
| USE_MINIFIED: 1 |
| CLIENT: ${{ matrix.client }} |
| ADAPTERS: ${{ matrix.adapter }} |
| steps: |
| - uses: actions/checkout@v4 |
| with: |
| persist-credentials: false |
| - name: Wait for CouchDB |
| run: ./bin/wait-for-couch.sh 20 |
| - name: Setup CouchDB CORS |
| run: curl 'http://admin:password@127.0.0.1:5984/_node/_local/_config/cors/origins' -X PUT -d '"http://127.0.0.1:8000"' |
| - uses: ./.github/actions/install-node-package |
| with: |
| node-version: ${{ env.NODE_VERSION }} |
| - uses: ./.github/actions/build-pouchdb |
| - id: test |
| run: ${{ matrix.cmd }} |
| continue-on-error: true |
| - name: First retry |
| id: retry |
| if: steps.test.outcome == 'failure' |
| run: ${{ matrix.cmd }} |
| continue-on-error: true |
| - name: Second retry |
| if: steps.retry.outcome == 'failure' |
| run: ${{ matrix.cmd }} |
| |
| # Run all the other testing tasks -- unit tests, and so on. These should be |
| # run on every version of Node.js that we support. |
| |
| nodejs: |
| needs: lint |
| strategy: |
| fail-fast: false |
| matrix: |
| node: [20, 22] |
| cmd: |
| - CLIENT=firefox npm run test-webpack |
| - AUTO_COMPACTION=true npm test |
| - npm run test-unit |
| - npm run test-component |
| - npm run test-fuzzy |
| - npm run verify-build |
| runs-on: ubuntu-latest |
| env: |
| SERVER: couchdb-master |
| COUCH_HOST: http://admin:password@127.0.0.1:5984 |
| services: |
| couchdb: |
| image: couchdb:3.1 |
| ports: |
| - 5984:5984 |
| env: |
| COUCHDB_USER: admin |
| COUCHDB_PASSWORD: password |
| steps: |
| - uses: actions/checkout@v4 |
| with: |
| persist-credentials: false |
| - name: Wait for CouchDB |
| run: ./bin/wait-for-couch.sh 20 |
| - name: Setup CouchDB CORS |
| run: curl 'http://admin:password@127.0.0.1:5984/_node/_local/_config/cors/origins' -X PUT -d '"http://127.0.0.1:8000"' |
| - uses: ./.github/actions/install-node-package |
| with: |
| node-version: ${{ matrix.node }} |
| - uses: ./.github/actions/build-pouchdb |
| - id: test |
| run: ${{ matrix.cmd }} |
| continue-on-error: true |
| - name: First retry |
| id: retry |
| if: steps.test.outcome == 'failure' |
| run: git reset --hard && ${{ matrix.cmd }} |
| continue-on-error: true |
| - name: Second retry |
| if: steps.retry.outcome == 'failure' |
| run: git reset --hard && ${{ matrix.cmd }} |
| |
| nodejs-perf: |
| needs: lint |
| strategy: |
| fail-fast: false |
| matrix: |
| node: [20, 22] |
| cmd: |
| - TYPE=performance npm test |
| runs-on: ubuntu-latest |
| steps: |
| - uses: actions/checkout@v4 |
| with: |
| persist-credentials: false |
| - uses: ./.github/actions/install-node-package |
| with: |
| node-version: ${{ matrix.node }} |
| - uses: ./.github/actions/build-pouchdb |
| - id: test |
| run: ${{ matrix.cmd }} |
| continue-on-error: true |
| - name: First retry |
| id: retry |
| if: steps.test.outcome == 'failure' |
| run: git reset --hard && ${{ matrix.cmd }} |
| continue-on-error: true |
| - name: Second retry |
| if: steps.retry.outcome == 'failure' |
| run: git reset --hard && ${{ matrix.cmd }} |
| |
| nodejs-sqlite-adapter: |
| needs: lint |
| strategy: |
| fail-fast: false |
| matrix: |
| node: [22] |
| adapter: ['nodesqlite'] |
| cmd: |
| - npm test |
| - TYPE=find PLUGINS=pouchdb-find npm test |
| - TYPE=mapreduce npm test |
| runs-on: ubuntu-latest |
| services: |
| couchdb: |
| image: couchdb:3.1 |
| ports: |
| - 5984:5984 |
| env: |
| COUCHDB_USER: admin |
| COUCHDB_PASSWORD: password |
| env: |
| CLIENT: node |
| SERVER: couchdb-master |
| COUCH_HOST: http://admin:password@127.0.0.1:5984 |
| SKIP_MIGRATION: 1 |
| ADAPTERS: ${{ matrix.adapter }} |
| VIEW_ADAPTERS: nodesqlite |
| steps: |
| - uses: actions/checkout@v6 |
| with: |
| persist-credentials: false |
| - name: Wait for CouchDB |
| run: ./bin/wait-for-couch.sh 20 |
| - name: Setup CouchDB CORS |
| run: curl 'http://admin:password@127.0.0.1:5984/_node/_local/_config/cors/origins' -X PUT -d '"http://127.0.0.1:8000"' |
| - uses: ./.github/actions/install-node-package |
| with: |
| node-version: ${{ matrix.node }} |
| - uses: ./.github/actions/build-pouchdb |
| - id: test |
| run: ${{ matrix.cmd }} |
| continue-on-error: true |
| - name: First retry |
| id: retry |
| if: steps.test.outcome == 'failure' |
| run: ${{ matrix.cmd }} |
| continue-on-error: true |
| - name: Second retry |
| if: steps.retry.outcome == 'failure' |
| run: ${{ matrix.cmd }} |