# This workflow will do a clean install of node dependencies, 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 name: Node.js CI env: XAHAUD_VERSION: 2025.12.1-release+2609 on: push: branches: [main-xahau, 1.x] pull_request: workflow_dispatch: jobs: build-and-lint: runs-on: ubuntu-latest timeout-minutes: 10 strategy: matrix: node-version: [20.x, 22.x, 24.x, 26.x] steps: - uses: actions/checkout@v3 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v3 with: node-version: ${{ matrix.node-version }} - name: Setup npm version 9 run: | npm i -g npm@9 --registry=https://registry.npmjs.org - name: Cache node modules id: cache-nodemodules uses: actions/cache@v3 env: cache-name: cache-node-modules with: # caching node_modules path: | node_modules */*/node_modules key: ${{ runner.os }}-deps-${{ matrix.node-version }}-${{ hashFiles('**/package-lock.json') }} restore-keys: | ${{ runner.os }}-deps-${{ matrix.node-version }}- ${{ runner.os }}-deps- - name: Install Dependencies if: steps.cache-nodemodules.outputs.cache-hit != 'true' run: npm ci - run: npm run build - run: npm run lint unit: runs-on: ubuntu-latest timeout-minutes: 10 strategy: matrix: node-version: [20.x, 22.x, 24.x, 26.x] steps: - uses: actions/checkout@v3 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v3 with: node-version: ${{ matrix.node-version }} - name: Setup npm version 9 run: | npm i -g npm@9 --registry=https://registry.npmjs.org - name: Cache node modules id: cache-nodemodules uses: actions/cache@v3 env: cache-name: cache-node-modules with: # caching node_modules path: | node_modules */*/node_modules key: ${{ runner.os }}-deps-${{ matrix.node-version }}-${{ hashFiles('**/package-lock.json') }} restore-keys: | ${{ runner.os }}-deps-${{ matrix.node-version }}- ${{ runner.os }}-deps- - name: Install Dependencies if: steps.cache-nodemodules.outputs.cache-hit != 'true' run: npm ci - run: npm run build - run: npm test download-binary: runs-on: ubuntu-latest timeout-minutes: 10 steps: - name: cache binary id: cache-binary uses: actions/cache@v5 with: path: xahaud key: ${{ runner.os }}-xahaud-${{ env.XAHAUD_VERSION }} - name: Download binary if: steps.cache-binary.outputs.cache-hit != 'true' run: | wget https://build.xahau.tech/${{ env.XAHAUD_VERSION }} -q -O xahaud chmod +x xahaud integration: runs-on: ubuntu-latest needs: download-binary timeout-minutes: 10 strategy: matrix: node-version: [20.x, 22.x, 24.x, 26.x] steps: - uses: actions/checkout@v3 - name: Restore binary uses: actions/cache/restore@v5 with: path: xahaud key: ${{ runner.os }}-xahaud-${{ env.XAHAUD_VERSION }} - name: Run docker in background run: | docker run --detach --rm \ --name xahaud-service \ -p 6006:6006 \ --volume "${{ github.workspace }}/.ci-config/":"/opt/xahau/etc/" \ --volume "${{ github.workspace }}/xahaud":"/opt/xahau/bin/xahaud" \ --health-cmd="wget localhost:6006 || exit 1" \ --health-interval=5s \ --health-retries=10 \ --health-timeout=2s \ --env GITHUB_ACTIONS=true \ --env CI=true \ ubuntu:latest /opt/xahau/bin/xahaud -a --conf /opt/xahau/etc/xahaud.cfg - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v3 with: node-version: ${{ matrix.node-version }} - name: Setup npm version 9 run: | npm i -g npm@9 --registry=https://registry.npmjs.org - name: Cache node modules id: cache-nodemodules uses: actions/cache@v3 env: cache-name: cache-node-modules with: # caching node_modules path: | node_modules */*/node_modules key: ${{ runner.os }}-deps-${{ matrix.node-version }}-${{ hashFiles('**/package-lock.json') }} restore-keys: | ${{ runner.os }}-deps-${{ matrix.node-version }}- ${{ runner.os }}-deps- - name: Install Dependencies if: steps.cache-nodemodules.outputs.cache-hit != 'true' run: npm ci - run: npm run build - name: Run integration test run: npm run test:integration - name: Stop docker container if: always() run: docker stop xahaud-service browser: runs-on: ubuntu-latest needs: download-binary timeout-minutes: 10 strategy: matrix: node-version: [20.x, 22.x, 24.x, 26.x] steps: - uses: actions/checkout@v3 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v3 with: node-version: ${{ matrix.node-version }} - name: Restore binary uses: actions/cache/restore@v5 with: path: xahaud key: ${{ runner.os }}-xahaud-${{ env.XAHAUD_VERSION }} - name: Run docker in background run: | docker run --detach --rm \ --name xahaud-service \ -p 6006:6006 \ --volume "${{ github.workspace }}/.ci-config/":"/opt/xahau/etc/" \ --volume "${{ github.workspace }}/xahaud":"/opt/xahau/bin/xahaud" \ --health-cmd="wget localhost:6006 || exit 1" \ --health-interval=5s \ --health-retries=10 \ --health-timeout=2s \ --env GITHUB_ACTIONS=true \ --env CI=true \ ubuntu:latest /opt/xahau/bin/xahaud -a --conf /opt/xahau/etc/xahaud.cfg - name: Setup npm version 9 run: | npm i -g npm@9 --registry=https://registry.npmjs.org - name: Cache node modules id: cache-nodemodules uses: actions/cache@v3 env: cache-name: cache-node-modules with: # caching node_modules path: | node_modules */*/node_modules key: ${{ runner.os }}-deps-${{ matrix.node-version }}-${{ hashFiles('**/package-lock.json') }} restore-keys: | ${{ runner.os }}-deps-${{ matrix.node-version }}- ${{ runner.os }}-deps- - name: Install Dependencies if: steps.cache-nodemodules.outputs.cache-hit != 'true' run: npm ci - run: npm run build - name: Run integration test run: npm run test:browser - name: Stop docker container if: always() run: docker stop xahaud-service