name: Run tests on: pull_request jobs: unit-test: name: Run unit tests and linting runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v3 - name: Set up Node.js uses: actions/setup-node@v3 with: node-version: "lts/*" - name: Setup safe-chain run: | npm i -g @aikidosec/safe-chain safe-chain setup-ci - name: Install dependencies run: npm ci - name: Run unit tests run: npm test - name: Run ESLint run: npm run lint - name: Create package tarball run: npm pack --workspace=packages/safe-chain - name: Upload package tarball uses: actions/upload-artifact@v4 with: name: safe-chain-package path: aikidosec-safe-chain-*.tgz e2e-tests: name: Run E2E tests runs-on: ubuntu-latest strategy: fail-fast: false matrix: include: # Common production setup - node_version: "20" npm_version: "10.2.0" yarn_version: "4.0.0" pnpm_version: "9.0.0" # Current Active LTS with latest tools - node_version: "22" npm_version: "latest" yarn_version: "latest" pnpm_version: "latest" # Legacy support (EOL April 2025) - node_version: "18" npm_version: "9.0.0" yarn_version: "3.6.0" pnpm_version: "8.0.0" # Mixed versions (old npm, new package managers) - node_version: "20" npm_version: "9.0.0" yarn_version: "latest" pnpm_version: "latest" # Version pinning scenario - node_version: "22" npm_version: "10.2.0" yarn_version: "4.0.0" pnpm_version: "9.0.0" # Backward compatibility testing - node_version: "18" npm_version: "latest" yarn_version: "latest" pnpm_version: "latest" # Future compatibility (becomes LTS October 2025) - node_version: "24" npm_version: "latest" yarn_version: "latest" pnpm_version: "latest" # EOL compatibility testing - Node 16 (EOL Sept 2023) - node_version: "16" npm_version: "8.0.0" yarn_version: "1.22.0" pnpm_version: "8.0.0" steps: - name: Checkout code uses: actions/checkout@v4 - name: Set up Node.js uses: actions/setup-node@v4 with: node-version: "lts/*" - name: Setup safe-chain run: | npm i -g @aikidosec/safe-chain safe-chain setup-ci - name: Install dependencies (root) run: npm ci - name: Run E2E tests env: NODE_VERSION: ${{ matrix.node_version }} NPM_VERSION: ${{ matrix.npm_version }} YARN_VERSION: ${{ matrix.yarn_version }} PNPM_VERSION: ${{ matrix.pnpm_version }} run: npm run test:e2e - name: Clean up Docker resources if: always() run: | # Clean up any remaining containers and images docker ps -aq --filter "name=safe-chain-e2e-test" | xargs -r docker rm -f docker images -q safe-chain-e2e-test | xargs -r docker rmi -f