name: ๐Ÿ” PR Checks on: pull_request: branches: [ main, master ] paths: - 'server/**' - '.github/workflows/**' jobs: # ========================================== # Lint and Test # ========================================== lint-and-test: runs-on: ubuntu-latest steps: - name: ๐Ÿ“ฅ Checkout repository uses: actions/checkout@v4 - name: โฌข Setup Node.js uses: actions/setup-node@v4 with: node-version: '20' cache: 'npm' cache-dependency-path: server/api/package-lock.json - name: ๐Ÿ“ฆ Install dependencies working-directory: ./server/api run: | npm ci - name: ๐Ÿ” Lint code working-directory: ./server/api run: | npm run lint || echo "No lint script, skipping" - name: ๐Ÿงช Run tests working-directory: ./server/api run: | npm test || echo "No test script, skipping" # ========================================== # Build Test # ========================================== build-test: runs-on: ubuntu-latest steps: - name: ๐Ÿ“ฅ Checkout repository uses: actions/checkout@v4 - name: ๐Ÿณ Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: ๐Ÿ”จ Build Docker image (test only) uses: docker/build-push-action@v5 with: context: ./server/api push: false load: true tags: nanaxe-api:test cache-from: type=gha - name: ๐Ÿงช Test Docker image run: | docker run --rm nanaxe-api:test node --version docker run --rm nanaxe-api:test npm --version - name: ๐Ÿ” Scan for vulnerabilities uses: aquasecurity/trivy-action@master with: image-ref: nanaxe-api:test format: 'table' exit-code: '0' ignore-unfixed: true vuln-type: 'os,library' severity: 'CRITICAL,HIGH' # ========================================== # Docker Compose Validation # ========================================== compose-validation: runs-on: ubuntu-latest steps: - name: ๐Ÿ“ฅ Checkout repository uses: actions/checkout@v4 - name: ๐Ÿณ Validate Docker Compose working-directory: ./server run: | docker compose config - name: ๐Ÿ” Check for secrets uses: trufflesecurity/trufflehog@main with: path: ./ base: main head: HEAD extra_args: --debug --only-verified