Spaces:
Sleeping
Sleeping
| name: test | |
| on: | |
| push: | |
| branches: ["main"] | |
| pull_request: | |
| branches: ["main"] | |
| jobs: | |
| test-backend: | |
| runs-on: ubuntu-latest | |
| strategy: | |
| matrix: | |
| node-version: [20.x, 22.x] | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Use Node.js ${{ matrix.node-version }} | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: ${{ matrix.node-version }} | |
| - name: Backend Tests (with coverage) | |
| run: | | |
| rm package-lock.json | |
| npm install -g npm@latest | |
| npm install | |
| npm run build | |
| npm run test:backend -- --coverage | |
| - name: Upload backend coverage report | |
| if: ${{ always() && hashFiles('coverage/**/coverage-summary.json') != '' }} | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: backend-coverage-${{ matrix.node-version }} | |
| path: coverage | |
| retention-days: 5 | |
| - name: Publish backend coverage summary | |
| if: ${{ always() && matrix.node-version == '22.x' }} | |
| uses: actions/github-script@v7 | |
| with: | |
| script: | | |
| const fs = require('fs'); | |
| const path = require('path'); | |
| const globModule = require('glob'); | |
| const matches = globModule.sync('coverage/**/coverage-summary.json', { | |
| cwd: process.cwd(), | |
| ignore: ['**/node_modules/**'], | |
| }); | |
| if (!matches.length) { | |
| core.warning('Coverage summary not found (expected coverage/**/coverage-summary.json). Did Vitest run with --coverage and include the json-summary reporter?'); | |
| return; | |
| } | |
| const summaryPath = path.resolve(matches[0]); | |
| const summary = JSON.parse(fs.readFileSync(summaryPath, 'utf8')); | |
| const metrics = ['lines', 'statements', 'branches', 'functions'] | |
| .map((key) => ({ | |
| label: key.charAt(0).toUpperCase() + key.slice(1), | |
| ...summary.total[key], | |
| })); | |
| core.summary | |
| .addHeading('Backend coverage') | |
| .addTable([ | |
| ['Metric', 'Covered', 'Total', 'Pct'], | |
| ...metrics.map(({ label, covered, total, pct }) => [ | |
| label, | |
| `${covered}`, | |
| `${total}`, | |
| `${pct}%`, | |
| ]), | |
| ]) | |
| .addRaw('Full HTML report is available in the uploaded `backend-coverage-${{ matrix.node-version }}` artifact.') | |
| .write(); | |
| api-test: | |
| name: API tests (node env, api-test) | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 10 | |
| strategy: | |
| matrix: | |
| node-version: [22.x] | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Use Node.js ${{ matrix.node-version }} | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: ${{ matrix.node-version }} | |
| - name: API Test | |
| run: | | |
| pip install -r ./tests/ci/requirements.txt | |
| ./tests/ci/api-test.py | |
| - uses: actions/upload-artifact@v4 | |
| if: ${{ !cancelled() }} | |
| with: | |
| name: (api-test) server-logs | |
| path: /tmp/backend.log | |
| retention-days: 3 | |
| vitest: | |
| name: puterjs (node env, vitest) | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 10 | |
| strategy: | |
| matrix: | |
| node-version: [22.x] | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Use Node.js ${{ matrix.node-version }} | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: ${{ matrix.node-version }} | |
| - name: Vitest Test | |
| run: | | |
| pip install -r ./tests/ci/requirements.txt | |
| ./tests/ci/vitest.py | |