# This workflow will do an 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 on: push: branches: [ master ] pull_request: branches: [ master ] workflow_call: jobs: build: runs-on: ubuntu-latest strategy: matrix: # Testing multiple Node versions makes CI take forever, and basically # never actually finds anything we care about. Testing one is enough. # # This number should be left at the oldest Node LTS version capable of # running Node without errors (it doesn't matter if it's unsupported). # Please freely bump this version (and the check in `pokemon-showdown` # and `server/index.ts`) if you want to use features from newer versions; # this is purely for our own reference, not to constrain programmers. node-version: ['18.x'] steps: - uses: actions/checkout@v6 with: fetch-depth: 100 # assumes PR/push to master is no larger than 100 commits. Other solutions are needlessly complex. - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v6 with: node-version: ${{ matrix.node-version }} cache: 'npm' - run: npm ci - name: Determine which files to lint (if pull request) if: ${{ github.event_name == 'pull_request' }} id: changed-files uses: tj-actions/changed-files@v47 with: files: | ./config/*.ts ./data/**/*.ts ./lib/*.ts ./server/**/*.ts ./server/**/*.tsx ./sim/**/*.ts ./tools/set-import/*.ts files_ignore: | ./logs/ ./node_modules/ ./dist/ ./data/**/learnsets.ts ./tools/set-import/importer.js ./tools/set-import/sets ./tools/modlog/converter.js ./server/global-variables.d.ts - name: Determine whether test/sim or test/random-battles need to run (if pull request) if: ${{ github.event_name == 'pull_request' }} id: changed-directories uses: tj-actions/changed-files@v47 with: files: | config/formats.ts data/** sim/** - name: Run selective lint & necessary tests (if pull request) if: ${{ github.event_name == 'pull_request' }} run: npm run full-test-ci env: CI: true FILES: ${{ steps.changed-files.outputs.all_changed_and_modified_files }} SKIPSIMTESTS: ${{ steps.changed-directories.outputs.all_changed_and_modified_files == '' }} - name: Run full lint & test (if push to master) run: npm run full-test if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }} env: CI: true