name: Lint and Format Check on: push: branches: [main, development] pull_request: branches: [main, development] jobs: dependencies: name: Install Dependencies runs-on: ubuntu-latest outputs: cache-hit: ${{ steps.cache-deps.outputs.cache-hit }} steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '20' - name: Cache dependencies id: cache-deps uses: actions/cache@v4 with: path: | node_modules src/webapp/node_modules src/types/node_modules key: ${{ runner.os }}-deps-${{ hashFiles('package-lock.json') }} restore-keys: | ${{ runner.os }}-deps- - name: Install dependencies if: steps.cache-deps.outputs.cache-hit != 'true' run: npm ci format-check: name: Format Check runs-on: ubuntu-latest needs: dependencies steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '20' - name: Restore dependencies uses: actions/cache@v4 with: path: | node_modules src/webapp/node_modules src/types/node_modules key: ${{ runner.os }}-deps-${{ hashFiles('package-lock.json') }} - name: Install dependencies (if cache miss) run: | if [ ! -d "node_modules" ]; then npm ci fi - name: Check formatting run: npm run format:check lint: name: Lint runs-on: ubuntu-latest needs: dependencies steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '20' - name: Restore dependencies uses: actions/cache@v4 with: path: | node_modules src/webapp/node_modules src/types/node_modules key: ${{ runner.os }}-deps-${{ hashFiles('package-lock.json') }} - name: Install dependencies (if cache miss) run: | if [ ! -d "node_modules" ]; then npm ci fi - name: Lint root run: npm run lint - name: Lint webapp run: cd src/webapp && npm run lint